diff --git a/distrib/speech.sdk.bundle.js b/distrib/speech.sdk.bundle.js new file mode 100644 index 0000000..fdab139 --- /dev/null +++ b/distrib/speech.sdk.bundle.js @@ -0,0 +1,4570 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 17); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", { value: true }); +__export(__webpack_require__(20)); +__export(__webpack_require__(21)); +__export(__webpack_require__(8)); +__export(__webpack_require__(22)); +__export(__webpack_require__(1)); +__export(__webpack_require__(23)); +__export(__webpack_require__(9)); +__export(__webpack_require__(2)); +__export(__webpack_require__(24)); +__export(__webpack_require__(10)); +__export(__webpack_require__(11)); +__export(__webpack_require__(4)); +__export(__webpack_require__(12)); +__export(__webpack_require__(13)); +__export(__webpack_require__(25)); +__export(__webpack_require__(26)); +__export(__webpack_require__(27)); +__export(__webpack_require__(28)); + + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * The error that is thrown when an argument passed in is null. + * + * @export + * @class ArgumentNullError + * @extends {Error} + */ +var ArgumentNullError = /** @class */ (function (_super) { + __extends(ArgumentNullError, _super); + /** + * Creates an instance of ArgumentNullError. + * + * @param {string} argumentName Name of the argument that is null + * + * @memberOf ArgumentNullError + */ + function ArgumentNullError(argumentName) { + var _this = _super.call(this, argumentName) || this; + _this.name = "ArgumentNull"; + _this.message = argumentName; + return _this; + } + return ArgumentNullError; +}(Error)); +exports.ArgumentNullError = ArgumentNullError; +/** + * The error that is thrown when an invalid operation is performed in the code. + * + * @export + * @class InvalidOperationError + * @extends {Error} + */ +// tslint:disable-next-line:max-classes-per-file +var InvalidOperationError = /** @class */ (function (_super) { + __extends(InvalidOperationError, _super); + /** + * Creates an instance of InvalidOperationError. + * + * @param {string} error The error + * + * @memberOf InvalidOperationError + */ + function InvalidOperationError(error) { + var _this = _super.call(this, error) || this; + _this.name = "InvalidOperation"; + _this.message = error; + return _this; + } + return InvalidOperationError; +}(Error)); +exports.InvalidOperationError = InvalidOperationError; +/** + * The error that is thrown when an object is disposed. + * + * @export + * @class ObjectDisposedError + * @extends {Error} + */ +// tslint:disable-next-line:max-classes-per-file +var ObjectDisposedError = /** @class */ (function (_super) { + __extends(ObjectDisposedError, _super); + /** + * Creates an instance of ObjectDisposedError. + * + * @param {string} objectName The object that is disposed + * @param {string} error The error + * + * @memberOf ObjectDisposedError + */ + function ObjectDisposedError(objectName, error) { + var _this = _super.call(this, error) || this; + _this.name = objectName + "ObjectDisposed"; + _this.message = error; + return _this; + } + return ObjectDisposedError; +}(Error)); +exports.ObjectDisposedError = ObjectDisposedError; + + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var CreateGuid = function () { + var d = new Date().getTime(); + var guid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { + var r = (d + Math.random() * 16) % 16 | 0; + d = Math.floor(d / 16); + return (c === "x" ? r : (r & 0x3 | 0x8)).toString(16); + }); + return guid; +}; +exports.CreateGuid = CreateGuid; +var CreateNoDashGuid = function () { + return CreateGuid().replace(new RegExp("-", "g"), "").toUpperCase(); +}; +exports.CreateNoDashGuid = CreateNoDashGuid; + + + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", { value: true }); +__export(__webpack_require__(19)); +__export(__webpack_require__(29)); +__export(__webpack_require__(30)); +__export(__webpack_require__(31)); +__export(__webpack_require__(32)); +__export(__webpack_require__(33)); +__export(__webpack_require__(34)); +__export(__webpack_require__(35)); +__export(__webpack_require__(36)); +__export(__webpack_require__(14)); + + + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Guid_1 = __webpack_require__(2); +var EventType; +(function (EventType) { + EventType[EventType["Debug"] = 0] = "Debug"; + EventType[EventType["Info"] = 1] = "Info"; + EventType[EventType["Warning"] = 2] = "Warning"; + EventType[EventType["Error"] = 3] = "Error"; +})(EventType = exports.EventType || (exports.EventType = {})); +var PlatformEvent = /** @class */ (function () { + function PlatformEvent(eventName, eventType) { + this.name = eventName; + this.eventId = Guid_1.CreateNoDashGuid(); + this.eventTime = new Date().toISOString(); + this.eventType = eventType; + this.metadata = {}; + } + Object.defineProperty(PlatformEvent.prototype, "Name", { + get: function () { + return this.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PlatformEvent.prototype, "EventId", { + get: function () { + return this.eventId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PlatformEvent.prototype, "EventTime", { + get: function () { + return this.eventTime; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PlatformEvent.prototype, "EventType", { + get: function () { + return this.eventType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PlatformEvent.prototype, "Metadata", { + get: function () { + return this.metadata; + }, + enumerable: true, + configurable: true + }); + return PlatformEvent; +}()); +exports.PlatformEvent = PlatformEvent; + + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// IMPORTANT - Dont publish internal modules. +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", { value: true }); +__export(__webpack_require__(37)); +__export(__webpack_require__(38)); +__export(__webpack_require__(6)); +__export(__webpack_require__(7)); +__export(__webpack_require__(39)); +__export(__webpack_require__(15)); +__export(__webpack_require__(42)); +__export(__webpack_require__(43)); + + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var AuthInfo = /** @class */ (function () { + function AuthInfo(headerName, token) { + this.headerName = headerName; + this.token = token; + } + Object.defineProperty(AuthInfo.prototype, "HeaderName", { + get: function () { + return this.headerName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AuthInfo.prototype, "Token", { + get: function () { + return this.token; + }, + enumerable: true, + configurable: true + }); + return AuthInfo; +}()); +exports.AuthInfo = AuthInfo; + + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var SpeechRecognitionEvent = /** @class */ (function (_super) { + __extends(SpeechRecognitionEvent, _super); + function SpeechRecognitionEvent(eventName, requestId, eventType) { + if (eventType === void 0) { eventType = Exports_1.EventType.Info; } + var _this = _super.call(this, eventName, eventType) || this; + _this.requestId = requestId; + return _this; + } + Object.defineProperty(SpeechRecognitionEvent.prototype, "RequestId", { + get: function () { + return this.requestId; + }, + enumerable: true, + configurable: true + }); + return SpeechRecognitionEvent; +}(Exports_1.PlatformEvent)); +exports.SpeechRecognitionEvent = SpeechRecognitionEvent; +// tslint:disable-next-line:max-classes-per-file +var SpeechRecognitionResultEvent = /** @class */ (function (_super) { + __extends(SpeechRecognitionResultEvent, _super); + function SpeechRecognitionResultEvent(eventName, requestId, result) { + var _this = _super.call(this, eventName, requestId) || this; + _this.result = result; + return _this; + } + Object.defineProperty(SpeechRecognitionResultEvent.prototype, "Result", { + get: function () { + return this.result; + }, + enumerable: true, + configurable: true + }); + return SpeechRecognitionResultEvent; +}(SpeechRecognitionEvent)); +exports.SpeechRecognitionResultEvent = SpeechRecognitionResultEvent; +// tslint:disable-next-line:max-classes-per-file +var RecognitionTriggeredEvent = /** @class */ (function (_super) { + __extends(RecognitionTriggeredEvent, _super); + function RecognitionTriggeredEvent(requestId, audioSourceId, audioNodeId) { + var _this = _super.call(this, "RecognitionTriggeredEvent", requestId) || this; + _this.audioSourceId = audioSourceId; + _this.audioNodeId = audioNodeId; + return _this; + } + Object.defineProperty(RecognitionTriggeredEvent.prototype, "AudioSourceId", { + get: function () { + return this.audioSourceId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognitionTriggeredEvent.prototype, "AudioNodeId", { + get: function () { + return this.audioNodeId; + }, + enumerable: true, + configurable: true + }); + return RecognitionTriggeredEvent; +}(SpeechRecognitionEvent)); +exports.RecognitionTriggeredEvent = RecognitionTriggeredEvent; +// tslint:disable-next-line:max-classes-per-file +var ListeningStartedEvent = /** @class */ (function (_super) { + __extends(ListeningStartedEvent, _super); + function ListeningStartedEvent(requestId, audioSourceId, audioNodeId) { + var _this = _super.call(this, "ListeningStartedEvent", requestId) || this; + _this.audioSourceId = audioSourceId; + _this.audioNodeId = audioNodeId; + return _this; + } + Object.defineProperty(ListeningStartedEvent.prototype, "AudioSourceId", { + get: function () { + return this.audioSourceId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ListeningStartedEvent.prototype, "AudioNodeId", { + get: function () { + return this.audioNodeId; + }, + enumerable: true, + configurable: true + }); + return ListeningStartedEvent; +}(SpeechRecognitionEvent)); +exports.ListeningStartedEvent = ListeningStartedEvent; +// tslint:disable-next-line:max-classes-per-file +var ConnectingToServiceEvent = /** @class */ (function (_super) { + __extends(ConnectingToServiceEvent, _super); + function ConnectingToServiceEvent(requestId, authFetchEventid, connectionId) { + var _this = _super.call(this, "ConnectingToServiceEvent", requestId) || this; + _this.authFetchEventid = authFetchEventid; + _this.connectionId = connectionId; + return _this; + } + Object.defineProperty(ConnectingToServiceEvent.prototype, "AuthFetchEventid", { + get: function () { + return this.authFetchEventid; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectingToServiceEvent.prototype, "ConnectionId", { + get: function () { + return this.connectionId; + }, + enumerable: true, + configurable: true + }); + return ConnectingToServiceEvent; +}(SpeechRecognitionEvent)); +exports.ConnectingToServiceEvent = ConnectingToServiceEvent; +// tslint:disable-next-line:max-classes-per-file +var RecognitionStartedEvent = /** @class */ (function (_super) { + __extends(RecognitionStartedEvent, _super); + function RecognitionStartedEvent(requestId, audioSourceId, audioNodeId, authFetchEventId, connectionId) { + var _this = _super.call(this, "RecognitionStartedEvent", requestId) || this; + _this.audioSourceId = audioSourceId; + _this.audioNodeId = audioNodeId; + _this.authFetchEventId = authFetchEventId; + _this.connectionId = connectionId; + return _this; + } + Object.defineProperty(RecognitionStartedEvent.prototype, "AudioSourceId", { + get: function () { + return this.audioSourceId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognitionStartedEvent.prototype, "AudioNodeId", { + get: function () { + return this.audioNodeId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognitionStartedEvent.prototype, "AuthFetchEventId", { + get: function () { + return this.authFetchEventId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognitionStartedEvent.prototype, "ConnectionId", { + get: function () { + return this.connectionId; + }, + enumerable: true, + configurable: true + }); + return RecognitionStartedEvent; +}(SpeechRecognitionEvent)); +exports.RecognitionStartedEvent = RecognitionStartedEvent; +// tslint:disable-next-line:max-classes-per-file +var SpeechStartDetectedEvent = /** @class */ (function (_super) { + __extends(SpeechStartDetectedEvent, _super); + function SpeechStartDetectedEvent(requestId, result) { + return _super.call(this, "SpeechStartDetectedEvent", requestId, result) || this; + } + return SpeechStartDetectedEvent; +}(SpeechRecognitionResultEvent)); +exports.SpeechStartDetectedEvent = SpeechStartDetectedEvent; +// tslint:disable-next-line:max-classes-per-file +var SpeechHypothesisEvent = /** @class */ (function (_super) { + __extends(SpeechHypothesisEvent, _super); + function SpeechHypothesisEvent(requestId, result) { + return _super.call(this, "SpeechHypothesisEvent", requestId, result) || this; + } + return SpeechHypothesisEvent; +}(SpeechRecognitionResultEvent)); +exports.SpeechHypothesisEvent = SpeechHypothesisEvent; +// tslint:disable-next-line:max-classes-per-file +var SpeechFragmentEvent = /** @class */ (function (_super) { + __extends(SpeechFragmentEvent, _super); + function SpeechFragmentEvent(requestId, result) { + return _super.call(this, "SpeechFragmentEvent", requestId, result) || this; + } + return SpeechFragmentEvent; +}(SpeechRecognitionResultEvent)); +exports.SpeechFragmentEvent = SpeechFragmentEvent; +// tslint:disable-next-line:max-classes-per-file +var SpeechEndDetectedEvent = /** @class */ (function (_super) { + __extends(SpeechEndDetectedEvent, _super); + function SpeechEndDetectedEvent(requestId, result) { + return _super.call(this, "SpeechEndDetectedEvent", requestId, result) || this; + } + return SpeechEndDetectedEvent; +}(SpeechRecognitionResultEvent)); +exports.SpeechEndDetectedEvent = SpeechEndDetectedEvent; +// tslint:disable-next-line:max-classes-per-file +var SpeechSimplePhraseEvent = /** @class */ (function (_super) { + __extends(SpeechSimplePhraseEvent, _super); + function SpeechSimplePhraseEvent(requestId, result) { + return _super.call(this, "SpeechSimplePhraseEvent", requestId, result) || this; + } + return SpeechSimplePhraseEvent; +}(SpeechRecognitionResultEvent)); +exports.SpeechSimplePhraseEvent = SpeechSimplePhraseEvent; +// tslint:disable-next-line:max-classes-per-file +var SpeechDetailedPhraseEvent = /** @class */ (function (_super) { + __extends(SpeechDetailedPhraseEvent, _super); + function SpeechDetailedPhraseEvent(requestId, result) { + return _super.call(this, "SpeechDetailedPhraseEvent", requestId, result) || this; + } + return SpeechDetailedPhraseEvent; +}(SpeechRecognitionResultEvent)); +exports.SpeechDetailedPhraseEvent = SpeechDetailedPhraseEvent; +var RecognitionCompletionStatus; +(function (RecognitionCompletionStatus) { + RecognitionCompletionStatus[RecognitionCompletionStatus["Success"] = 0] = "Success"; + RecognitionCompletionStatus[RecognitionCompletionStatus["AudioSourceError"] = 1] = "AudioSourceError"; + RecognitionCompletionStatus[RecognitionCompletionStatus["AudioSourceTimeout"] = 2] = "AudioSourceTimeout"; + RecognitionCompletionStatus[RecognitionCompletionStatus["AuthTokenFetchError"] = 3] = "AuthTokenFetchError"; + RecognitionCompletionStatus[RecognitionCompletionStatus["AuthTokenFetchTimeout"] = 4] = "AuthTokenFetchTimeout"; + RecognitionCompletionStatus[RecognitionCompletionStatus["UnAuthorized"] = 5] = "UnAuthorized"; + RecognitionCompletionStatus[RecognitionCompletionStatus["ConnectTimeout"] = 6] = "ConnectTimeout"; + RecognitionCompletionStatus[RecognitionCompletionStatus["ConnectError"] = 7] = "ConnectError"; + RecognitionCompletionStatus[RecognitionCompletionStatus["ClientRecognitionActivityTimeout"] = 8] = "ClientRecognitionActivityTimeout"; + RecognitionCompletionStatus[RecognitionCompletionStatus["UnknownError"] = 9] = "UnknownError"; +})(RecognitionCompletionStatus = exports.RecognitionCompletionStatus || (exports.RecognitionCompletionStatus = {})); +// tslint:disable-next-line:max-classes-per-file +var RecognitionEndedEvent = /** @class */ (function (_super) { + __extends(RecognitionEndedEvent, _super); + function RecognitionEndedEvent(requestId, audioSourceId, audioNodeId, authFetchEventId, connectionId, serviceTag, status, error) { + var _this = _super.call(this, "RecognitionEndedEvent", requestId, status === RecognitionCompletionStatus.Success ? Exports_1.EventType.Info : Exports_1.EventType.Error) || this; + _this.audioSourceId = audioSourceId; + _this.audioNodeId = audioNodeId; + _this.connectionId = connectionId; + _this.authFetchEventId = authFetchEventId; + _this.status = status; + _this.error = error; + _this.serviceTag = serviceTag; + return _this; + } + Object.defineProperty(RecognitionEndedEvent.prototype, "AudioSourceId", { + get: function () { + return this.audioSourceId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognitionEndedEvent.prototype, "AudioNodeId", { + get: function () { + return this.audioNodeId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognitionEndedEvent.prototype, "AuthFetchEventId", { + get: function () { + return this.authFetchEventId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognitionEndedEvent.prototype, "ConnectionId", { + get: function () { + return this.connectionId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognitionEndedEvent.prototype, "ServiceTag", { + get: function () { + return this.serviceTag; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognitionEndedEvent.prototype, "Status", { + get: function () { + return this.status; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognitionEndedEvent.prototype, "Error", { + get: function () { + return this.error; + }, + enumerable: true, + configurable: true + }); + return RecognitionEndedEvent; +}(SpeechRecognitionEvent)); +exports.RecognitionEndedEvent = RecognitionEndedEvent; + + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Error_1 = __webpack_require__(1); +var Guid_1 = __webpack_require__(2); +var MessageType; +(function (MessageType) { + MessageType[MessageType["Text"] = 0] = "Text"; + MessageType[MessageType["Binary"] = 1] = "Binary"; +})(MessageType = exports.MessageType || (exports.MessageType = {})); +var ConnectionMessage = /** @class */ (function () { + function ConnectionMessage(messageType, body, headers, id) { + this.body = null; + if (messageType === MessageType.Text && body && !(typeof (body) === "string")) { + throw new Error_1.InvalidOperationError("Payload must be a string"); + } + if (messageType === MessageType.Binary && body && !(body instanceof ArrayBuffer)) { + throw new Error_1.InvalidOperationError("Payload must be ArrayBuffer"); + } + this.messageType = messageType; + this.body = body; + this.headers = headers ? headers : {}; + this.id = id ? id : Guid_1.CreateNoDashGuid(); + } + Object.defineProperty(ConnectionMessage.prototype, "MessageType", { + get: function () { + return this.messageType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionMessage.prototype, "Headers", { + get: function () { + return this.headers; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionMessage.prototype, "Body", { + get: function () { + return this.body; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionMessage.prototype, "TextBody", { + get: function () { + if (this.messageType === MessageType.Binary) { + throw new Error_1.InvalidOperationError("Not supported for binary message"); + } + return this.body; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionMessage.prototype, "BinaryBody", { + get: function () { + if (this.messageType === MessageType.Text) { + throw new Error_1.InvalidOperationError("Not supported for text message"); + } + return this.body; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionMessage.prototype, "Id", { + get: function () { + return this.id; + }, + enumerable: true, + configurable: true + }); + return ConnectionMessage; +}()); +exports.ConnectionMessage = ConnectionMessage; + + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Error_1 = __webpack_require__(1); +var Guid_1 = __webpack_require__(2); +var EventSource = /** @class */ (function () { + function EventSource(metadata) { + var _this = this; + this.eventListeners = {}; + this.isDisposed = false; + this.OnEvent = function (event) { + if (_this.IsDisposed()) { + throw (new Error_1.ObjectDisposedError("EventSource")); + } + if (_this.Metadata) { + for (var paramName in _this.Metadata) { + if (paramName) { + if (event.Metadata) { + if (!event.Metadata[paramName]) { + event.Metadata[paramName] = _this.Metadata[paramName]; + } + } + } + } + } + for (var eventId in _this.eventListeners) { + if (eventId && _this.eventListeners[eventId]) { + _this.eventListeners[eventId](event); + } + } + }; + this.Attach = function (onEventCallback) { + var id = Guid_1.CreateNoDashGuid(); + _this.eventListeners[id] = onEventCallback; + return { + Detach: function () { + delete _this.eventListeners[id]; + }, + }; + }; + this.AttachListener = function (listener) { + return _this.Attach(listener.OnEvent); + }; + this.IsDisposed = function () { + return _this.isDisposed; + }; + this.Dispose = function () { + _this.eventListeners = null; + _this.isDisposed = true; + }; + this.metadata = metadata; + } + Object.defineProperty(EventSource.prototype, "Metadata", { + get: function () { + return this.metadata; + }, + enumerable: true, + configurable: true + }); + return EventSource; +}()); +exports.EventSource = EventSource; + + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Error_1 = __webpack_require__(1); +var InMemoryStorage = /** @class */ (function () { + function InMemoryStorage() { + var _this = this; + this.store = {}; + this.Get = function (key) { + if (!key) { + throw new Error_1.ArgumentNullError("key"); + } + return _this.store[key]; + }; + this.GetOrAdd = function (key, valueToAdd) { + if (!key) { + throw new Error_1.ArgumentNullError("key"); + } + if (_this.store[key] === undefined) { + _this.store[key] = valueToAdd; + } + return _this.store[key]; + }; + this.Set = function (key, value) { + if (!key) { + throw new Error_1.ArgumentNullError("key"); + } + _this.store[key] = value; + }; + this.Remove = function (key) { + if (!key) { + throw new Error_1.ArgumentNullError("key"); + } + if (_this.store[key] !== undefined) { + delete _this.store[key]; + } + }; + } + return InMemoryStorage; +}()); +exports.InMemoryStorage = InMemoryStorage; + + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Error_1 = __webpack_require__(1); +var List = /** @class */ (function () { + function List(list) { + var _this = this; + this.subscriptionIdCounter = 0; + this.addSubscriptions = {}; + this.removeSubscriptions = {}; + this.disposedSubscriptions = {}; + this.disposeReason = null; + this.Get = function (itemIndex) { + _this.ThrowIfDisposed(); + return _this.list[itemIndex]; + }; + this.First = function () { + return _this.Get(0); + }; + this.Last = function () { + return _this.Get(_this.Length() - 1); + }; + this.Add = function (item) { + _this.ThrowIfDisposed(); + _this.InsertAt(_this.list.length, item); + }; + this.InsertAt = function (index, item) { + _this.ThrowIfDisposed(); + if (index === 0) { + _this.list.unshift(item); + } + else if (index === _this.list.length) { + _this.list.push(item); + } + else { + _this.list.splice(index, 0, item); + } + _this.TriggerSubscriptions(_this.addSubscriptions); + }; + this.RemoveFirst = function () { + _this.ThrowIfDisposed(); + return _this.RemoveAt(0); + }; + this.RemoveLast = function () { + _this.ThrowIfDisposed(); + return _this.RemoveAt(_this.Length() - 1); + }; + this.RemoveAt = function (index) { + _this.ThrowIfDisposed(); + return _this.Remove(index, 1)[0]; + }; + this.Remove = function (index, count) { + _this.ThrowIfDisposed(); + var removedElements = _this.list.splice(index, count); + _this.TriggerSubscriptions(_this.removeSubscriptions); + return removedElements; + }; + this.Clear = function () { + _this.ThrowIfDisposed(); + _this.Remove(0, _this.Length()); + }; + this.Length = function () { + _this.ThrowIfDisposed(); + return _this.list.length; + }; + this.OnAdded = function (addedCallback) { + _this.ThrowIfDisposed(); + var subscriptionId = _this.subscriptionIdCounter++; + _this.addSubscriptions[subscriptionId] = addedCallback; + return { + Detach: function () { + delete _this.addSubscriptions[subscriptionId]; + }, + }; + }; + this.OnRemoved = function (removedCallback) { + _this.ThrowIfDisposed(); + var subscriptionId = _this.subscriptionIdCounter++; + _this.removeSubscriptions[subscriptionId] = removedCallback; + return { + Detach: function () { + delete _this.removeSubscriptions[subscriptionId]; + }, + }; + }; + this.OnDisposed = function (disposedCallback) { + _this.ThrowIfDisposed(); + var subscriptionId = _this.subscriptionIdCounter++; + _this.disposedSubscriptions[subscriptionId] = disposedCallback; + return { + Detach: function () { + delete _this.disposedSubscriptions[subscriptionId]; + }, + }; + }; + this.Join = function (seperator) { + _this.ThrowIfDisposed(); + return _this.list.join(seperator); + }; + this.ToArray = function () { + var cloneCopy = Array(); + _this.list.forEach(function (val) { + cloneCopy.push(val); + }); + return cloneCopy; + }; + this.Any = function (callback) { + _this.ThrowIfDisposed(); + if (callback) { + return _this.Where(callback).Length() > 0; + } + else { + return _this.Length() > 0; + } + }; + this.All = function (callback) { + _this.ThrowIfDisposed(); + return _this.Where(callback).Length() === _this.Length(); + }; + this.ForEach = function (callback) { + _this.ThrowIfDisposed(); + for (var i = 0; i < _this.Length(); i++) { + callback(_this.list[i], i); + } + }; + this.Select = function (callback) { + _this.ThrowIfDisposed(); + var selectList = []; + for (var i = 0; i < _this.list.length; i++) { + selectList.push(callback(_this.list[i], i)); + } + return new List(selectList); + }; + this.Where = function (callback) { + _this.ThrowIfDisposed(); + var filteredList = new List(); + for (var i = 0; i < _this.list.length; i++) { + if (callback(_this.list[i], i)) { + filteredList.Add(_this.list[i]); + } + } + return filteredList; + }; + this.OrderBy = function (compareFn) { + _this.ThrowIfDisposed(); + var clonedArray = _this.ToArray(); + var orderedArray = clonedArray.sort(compareFn); + return new List(orderedArray); + }; + this.OrderByDesc = function (compareFn) { + _this.ThrowIfDisposed(); + return _this.OrderBy(function (a, b) { return compareFn(b, a); }); + }; + this.Clone = function () { + _this.ThrowIfDisposed(); + return new List(_this.ToArray()); + }; + this.Concat = function (list) { + _this.ThrowIfDisposed(); + return new List(_this.list.concat(list.ToArray())); + }; + this.ConcatArray = function (array) { + _this.ThrowIfDisposed(); + return new List(_this.list.concat(array)); + }; + this.IsDisposed = function () { + return _this.list == null; + }; + this.Dispose = function (reason) { + if (!_this.IsDisposed()) { + _this.disposeReason = reason; + _this.list = null; + _this.addSubscriptions = null; + _this.removeSubscriptions = null; + _this.TriggerSubscriptions(_this.disposedSubscriptions); + } + }; + this.ThrowIfDisposed = function () { + if (_this.IsDisposed()) { + throw new Error_1.ObjectDisposedError("List", _this.disposeReason); + } + }; + this.TriggerSubscriptions = function (subscriptions) { + if (subscriptions) { + for (var subscriptionId in subscriptions) { + if (subscriptionId) { + subscriptions[subscriptionId](); + } + } + } + }; + this.list = []; + // copy the list rather than taking as is. + if (list) { + for (var _i = 0, list_1 = list; _i < list_1.length; _i++) { + var item = list_1[_i]; + this.list.push(item); + } + } + } + return List; +}()); +exports.List = List; + + + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Error_1 = __webpack_require__(1); +var PromiseState; +(function (PromiseState) { + PromiseState[PromiseState["None"] = 0] = "None"; + PromiseState[PromiseState["Resolved"] = 1] = "Resolved"; + PromiseState[PromiseState["Rejected"] = 2] = "Rejected"; +})(PromiseState = exports.PromiseState || (exports.PromiseState = {})); +var PromiseResult = /** @class */ (function () { + function PromiseResult(promiseResultEventSource) { + var _this = this; + this.ThrowIfError = function () { + if (_this.IsError) { + throw _this.Error; + } + }; + promiseResultEventSource.On(function (result) { + if (!_this.isCompleted) { + _this.isCompleted = true; + _this.isError = false; + _this.result = result; + } + }, function (error) { + if (!_this.isCompleted) { + _this.isCompleted = true; + _this.isError = true; + _this.error = error; + } + }); + } + Object.defineProperty(PromiseResult.prototype, "IsCompleted", { + get: function () { + return this.isCompleted; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PromiseResult.prototype, "IsError", { + get: function () { + return this.isError; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PromiseResult.prototype, "Error", { + get: function () { + return this.error; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PromiseResult.prototype, "Result", { + get: function () { + return this.result; + }, + enumerable: true, + configurable: true + }); + return PromiseResult; +}()); +exports.PromiseResult = PromiseResult; +// tslint:disable-next-line:max-classes-per-file +var PromiseResultEventSource = /** @class */ (function () { + function PromiseResultEventSource() { + var _this = this; + this.SetResult = function (result) { + _this.onSetResult(result); + }; + this.SetError = function (error) { + _this.onSetError(error); + }; + this.On = function (onSetResult, onSetError) { + _this.onSetResult = onSetResult; + _this.onSetError = onSetError; + }; + } + return PromiseResultEventSource; +}()); +exports.PromiseResultEventSource = PromiseResultEventSource; +// tslint:disable-next-line:max-classes-per-file +var PromiseHelper = /** @class */ (function () { + function PromiseHelper() { + } + PromiseHelper.WhenAll = function (promises) { + if (!promises || promises.length === 0) { + throw new Error_1.ArgumentNullError("promises"); + } + var deferred = new Deferred(); + var errors = []; + var completedPromises = 0; + var checkForCompletion = function () { + completedPromises++; + if (completedPromises === promises.length) { + if (errors.length === 0) { + deferred.Resolve(true); + } + else { + deferred.Reject(errors.join(", ")); + } + } + }; + for (var _i = 0, promises_1 = promises; _i < promises_1.length; _i++) { + var promise = promises_1[_i]; + promise.On(function (r) { + checkForCompletion(); + }, function (e) { + errors.push(e); + checkForCompletion(); + }); + } + return deferred.Promise(); + }; + PromiseHelper.FromResult = function (result) { + var deferred = new Deferred(); + deferred.Resolve(result); + return deferred.Promise(); + }; + PromiseHelper.FromError = function (error) { + var deferred = new Deferred(); + deferred.Reject(error); + return deferred.Promise(); + }; + return PromiseHelper; +}()); +exports.PromiseHelper = PromiseHelper; +// TODO: replace with ES6 promises +// tslint:disable-next-line:max-classes-per-file +var Promise = /** @class */ (function () { + function Promise(sink) { + var _this = this; + this.Result = function () { + return _this.sink.Result; + }; + this.ContinueWith = function (continuationCallback) { + if (!continuationCallback) { + throw new Error_1.ArgumentNullError("continuationCallback"); + } + var continuationDeferral = new Deferred(); + _this.sink.on(function (r) { + try { + var continuationResult = continuationCallback(_this.sink.Result); + continuationDeferral.Resolve(continuationResult); + } + catch (e) { + continuationDeferral.Reject("'Unhandled callback error: " + e + "'"); + } + }, function (error) { + try { + var continuationResult = continuationCallback(_this.sink.Result); + continuationDeferral.Resolve(continuationResult); + } + catch (e) { + continuationDeferral.Reject("'Unhandled callback error: " + e + ". InnerError: " + error + "'"); + } + }); + return continuationDeferral.Promise(); + }; + this.OnSuccessContinueWith = function (continuationCallback) { + if (!continuationCallback) { + throw new Error_1.ArgumentNullError("continuationCallback"); + } + var continuationDeferral = new Deferred(); + _this.sink.on(function (r) { + try { + var continuationResult = continuationCallback(r); + continuationDeferral.Resolve(continuationResult); + } + catch (e) { + continuationDeferral.Reject("'Unhandled callback error: " + e + "'"); + } + }, function (error) { + continuationDeferral.Reject("'Unhandled callback error: " + error + "'"); + }); + return continuationDeferral.Promise(); + }; + this.ContinueWithPromise = function (continuationCallback) { + if (!continuationCallback) { + throw new Error_1.ArgumentNullError("continuationCallback"); + } + var continuationDeferral = new Deferred(); + _this.sink.on(function (r) { + try { + var continuationPromise = continuationCallback(_this.sink.Result); + if (!continuationPromise) { + throw new Error("'Continuation callback did not return promise'"); + } + continuationPromise.On(function (continuationResult) { + continuationDeferral.Resolve(continuationResult); + }, function (e) { + continuationDeferral.Reject(e); + }); + } + catch (e) { + continuationDeferral.Reject("'Unhandled callback error: " + e + "'"); + } + }, function (error) { + try { + var continuationPromise = continuationCallback(_this.sink.Result); + if (!continuationPromise) { + throw new Error("Continuation callback did not return promise"); + } + continuationPromise.On(function (continuationResult) { + continuationDeferral.Resolve(continuationResult); + }, function (e) { + continuationDeferral.Reject(e); + }); + } + catch (e) { + continuationDeferral.Reject("'Unhandled callback error: " + e + ". InnerError: " + error + "'"); + } + }); + return continuationDeferral.Promise(); + }; + this.OnSuccessContinueWithPromise = function (continuationCallback) { + if (!continuationCallback) { + throw new Error_1.ArgumentNullError("continuationCallback"); + } + var continuationDeferral = new Deferred(); + _this.sink.on(function (r) { + try { + var continuationPromise = continuationCallback(r); + if (!continuationPromise) { + throw new Error("Continuation callback did not return promise"); + } + continuationPromise.On(function (continuationResult) { + continuationDeferral.Resolve(continuationResult); + }, function (e) { + continuationDeferral.Reject(e); + }); + } + catch (e) { + continuationDeferral.Reject("'Unhandled callback error: " + e + "'"); + } + }, function (error) { + continuationDeferral.Reject("'Unhandled callback error: " + error + ".'"); + }); + return continuationDeferral.Promise(); + }; + this.On = function (successCallback, errorCallback) { + if (!successCallback) { + throw new Error_1.ArgumentNullError("successCallback"); + } + if (!errorCallback) { + throw new Error_1.ArgumentNullError("errorCallback"); + } + _this.sink.on(successCallback, errorCallback); + return _this; + }; + this.Finally = function (callback) { + if (!callback) { + throw new Error_1.ArgumentNullError("callback"); + } + var callbackWrapper = function (_) { + callback(); + }; + return _this.On(callbackWrapper, callbackWrapper); + }; + this.sink = sink; + } + return Promise; +}()); +exports.Promise = Promise; +// tslint:disable-next-line:max-classes-per-file +var Deferred = /** @class */ (function () { + function Deferred() { + var _this = this; + this.State = function () { + return _this.sink.State; + }; + this.Promise = function () { + return _this.promise; + }; + this.Resolve = function (result) { + _this.sink.Resolve(result); + return _this; + }; + this.Reject = function (error) { + _this.sink.Reject(error); + return _this; + }; + this.sink = new Sink(); + this.promise = new Promise(this.sink); + } + return Deferred; +}()); +exports.Deferred = Deferred; +// tslint:disable-next-line:max-classes-per-file +var Sink = /** @class */ (function () { + function Sink() { + var _this = this; + this.state = PromiseState.None; + this.promiseResult = null; + this.promiseResultEvents = null; + this.successHandlers = []; + this.errorHandlers = []; + this.Resolve = function (result) { + if (_this.state !== PromiseState.None) { + throw new Error("'Cannot resolve a completed promise'"); + } + _this.state = PromiseState.Resolved; + _this.promiseResultEvents.SetResult(result); + for (var i = 0; i < _this.successHandlers.length; i++) { + _this.ExecuteSuccessCallback(result, _this.successHandlers[i], _this.errorHandlers[i]); + } + _this.DetachHandlers(); + }; + this.Reject = function (error) { + if (_this.state !== PromiseState.None) { + throw new Error("'Cannot reject a completed promise'"); + } + _this.state = PromiseState.Rejected; + _this.promiseResultEvents.SetError(error); + for (var _i = 0, _a = _this.errorHandlers; _i < _a.length; _i++) { + var errorHandler = _a[_i]; + _this.ExecuteErrorCallback(error, errorHandler); + } + _this.DetachHandlers(); + }; + this.on = function (successCallback, errorCallback) { + if (successCallback == null) { + successCallback = function (r) { return; }; + } + if (_this.state === PromiseState.None) { + _this.successHandlers.push(successCallback); + _this.errorHandlers.push(errorCallback); + } + else { + if (_this.state === PromiseState.Resolved) { + _this.ExecuteSuccessCallback(_this.promiseResult.Result, successCallback, errorCallback); + } + else if (_this.state === PromiseState.Rejected) { + _this.ExecuteErrorCallback(_this.promiseResult.Error, errorCallback); + } + _this.DetachHandlers(); + } + }; + this.ExecuteSuccessCallback = function (result, successCallback, errorCallback) { + try { + successCallback(result); + } + catch (e) { + _this.ExecuteErrorCallback("'Unhandled callback error: " + e + "'", errorCallback); + } + }; + this.ExecuteErrorCallback = function (error, errorCallback) { + if (errorCallback) { + try { + errorCallback(error); + } + catch (e) { + throw new Error("'Unhandled callback error: " + e + ". InnerError: " + error + "'"); + } + } + else { + throw new Error("'Unhandled error: " + error + "'"); + } + }; + this.DetachHandlers = function () { + _this.errorHandlers = []; + _this.successHandlers = []; + }; + this.promiseResultEvents = new PromiseResultEventSource(); + this.promiseResult = new PromiseResult(this.promiseResultEvents); + } + Object.defineProperty(Sink.prototype, "State", { + get: function () { + return this.state; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Sink.prototype, "Result", { + get: function () { + return this.promiseResult; + }, + enumerable: true, + configurable: true + }); + return Sink; +}()); +exports.Sink = Sink; + + + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Error_1 = __webpack_require__(1); +var List_1 = __webpack_require__(11); +var Promise_1 = __webpack_require__(12); +var SubscriberType; +(function (SubscriberType) { + SubscriberType[SubscriberType["Dequeue"] = 0] = "Dequeue"; + SubscriberType[SubscriberType["Peek"] = 1] = "Peek"; +})(SubscriberType || (SubscriberType = {})); +var Queue = /** @class */ (function () { + function Queue(list) { + var _this = this; + this.promiseStore = new List_1.List(); + this.isDrainInProgress = false; + this.isDisposing = false; + this.disposeReason = null; + this.Enqueue = function (item) { + _this.ThrowIfDispose(); + _this.EnqueueFromPromise(Promise_1.PromiseHelper.FromResult(item)); + }; + this.EnqueueFromPromise = function (promise) { + _this.ThrowIfDispose(); + _this.promiseStore.Add(promise); + promise.Finally(function () { + while (_this.promiseStore.Length() > 0) { + if (!_this.promiseStore.First().Result().IsCompleted) { + break; + } + else { + var p = _this.promiseStore.RemoveFirst(); + if (!p.Result().IsError) { + _this.list.Add(p.Result().Result); + } + else { + // TODO: Log as warning. + } + } + } + }); + }; + this.Dequeue = function () { + _this.ThrowIfDispose(); + var deferredSubscriber = new Promise_1.Deferred(); + _this.subscribers.Add({ deferral: deferredSubscriber, type: SubscriberType.Dequeue }); + _this.Drain(); + return deferredSubscriber.Promise(); + }; + this.Peek = function () { + _this.ThrowIfDispose(); + var deferredSubscriber = new Promise_1.Deferred(); + _this.subscribers.Add({ deferral: deferredSubscriber, type: SubscriberType.Peek }); + _this.Drain(); + return deferredSubscriber.Promise(); + }; + this.Length = function () { + _this.ThrowIfDispose(); + return _this.list.Length(); + }; + this.IsDisposed = function () { + return _this.subscribers == null; + }; + this.DrainAndDispose = function (pendingItemProcessor, reason) { + if (!_this.IsDisposed() && !_this.isDisposing) { + _this.disposeReason = reason; + _this.isDisposing = true; + while (_this.subscribers.Length() > 0) { + var subscriber = _this.subscribers.RemoveFirst(); + // TODO: this needs work (Resolve(null) instead?). + subscriber.deferral.Reject("Disposed"); + } + for (var _i = 0, _a = _this.detachables; _i < _a.length; _i++) { + var detachable = _a[_i]; + detachable.Detach(); + } + if (_this.promiseStore.Length() > 0 && pendingItemProcessor) { + return Promise_1.PromiseHelper + .WhenAll(_this.promiseStore.ToArray()) + .ContinueWith(function () { + _this.subscribers = null; + _this.list.ForEach(function (item, index) { + pendingItemProcessor(item); + }); + _this.list = null; + return true; + }); + } + else { + _this.subscribers = null; + _this.list = null; + } + } + return Promise_1.PromiseHelper.FromResult(true); + }; + this.Dispose = function (reason) { + _this.DrainAndDispose(null, reason); + }; + this.Drain = function () { + if (!_this.isDrainInProgress && !_this.isDisposing) { + _this.isDrainInProgress = true; + while (_this.list.Length() > 0 && _this.subscribers.Length() > 0 && !_this.isDisposing) { + var subscriber = _this.subscribers.RemoveFirst(); + if (subscriber.type === SubscriberType.Peek) { + subscriber.deferral.Resolve(_this.list.First()); + } + else { + var dequeuedItem = _this.list.RemoveFirst(); + subscriber.deferral.Resolve(dequeuedItem); + } + } + _this.isDrainInProgress = false; + } + }; + this.ThrowIfDispose = function () { + if (_this.IsDisposed()) { + if (_this.disposeReason) { + throw new Error_1.InvalidOperationError(_this.disposeReason); + } + throw new Error_1.ObjectDisposedError("Queue"); + } + else if (_this.isDisposing) { + throw new Error_1.InvalidOperationError("Queue disposing"); + } + }; + this.list = list ? list : new List_1.List(); + this.detachables = []; + this.subscribers = new List_1.List(); + this.detachables.push(this.list.OnAdded(this.Drain)); + } + return Queue; +}()); +exports.Queue = Queue; + + + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var WebsocketMessageAdapter = /** @class */ (function () { + function WebsocketMessageAdapter(uri, connectionId, messageFormatter) { + var _this = this; + this.Open = function () { + if (_this.connectionState === Exports_1.ConnectionState.Disconnected) { + return Exports_1.PromiseHelper.FromError("Cannot open a connection that is in " + _this.connectionState + " state"); + } + if (_this.connectionEstablishDeferral) { + return _this.connectionEstablishDeferral.Promise(); + } + _this.connectionEstablishDeferral = new Exports_1.Deferred(); + _this.connectionState = Exports_1.ConnectionState.Connecting; + _this.websocketClient = new WebSocket(_this.uri); + _this.websocketClient.binaryType = "arraybuffer"; + _this.receivingMessageQueue = new Exports_1.Queue(); + _this.disconnectDeferral = new Exports_1.Deferred(); + _this.sendMessageQueue = new Exports_1.Queue(); + _this.ProcessSendQueue(); + _this.OnEvent(new Exports_1.ConnectionStartEvent(_this.connectionId, _this.uri)); + _this.websocketClient.onopen = function (e) { + _this.connectionState = Exports_1.ConnectionState.Connected; + _this.OnEvent(new Exports_1.ConnectionEstablishedEvent(_this.connectionId)); + _this.connectionEstablishDeferral.Resolve(new Exports_1.ConnectionOpenResponse(200, "")); + }; + _this.websocketClient.onerror = function (e) { + // TODO: Understand what this is error is. Will we still get onClose ? + if (_this.connectionState !== Exports_1.ConnectionState.Connecting) { + // TODO: Is this required ? + // this.OnEvent(new ConnectionErrorEvent(errorMsg, connectionId)); + } + }; + _this.websocketClient.onclose = function (e) { + if (_this.connectionState === Exports_1.ConnectionState.Connecting) { + _this.connectionState = Exports_1.ConnectionState.Disconnected; + _this.OnEvent(new Exports_1.ConnectionEstablishErrorEvent(_this.connectionId, e.code, e.reason)); + _this.connectionEstablishDeferral.Resolve(new Exports_1.ConnectionOpenResponse(e.code, e.reason)); + } + else { + _this.OnEvent(new Exports_1.ConnectionClosedEvent(_this.connectionId, e.code, e.reason)); + } + _this.OnClose(e.code, e.reason); + }; + _this.websocketClient.onmessage = function (e) { + var networkReceivedTime = new Date().toISOString(); + if (_this.connectionState === Exports_1.ConnectionState.Connected) { + var deferred_1 = new Exports_1.Deferred(); + // let id = ++this.idCounter; + _this.receivingMessageQueue.EnqueueFromPromise(deferred_1.Promise()); + if (e.data instanceof ArrayBuffer) { + var rawMessage = new Exports_1.RawWebsocketMessage(Exports_1.MessageType.Binary, e.data); + _this.messageFormatter + .ToConnectionMessage(rawMessage) + .On(function (connectionMessage) { + _this.OnEvent(new Exports_1.ConnectionMessageReceivedEvent(_this.connectionId, networkReceivedTime, connectionMessage)); + deferred_1.Resolve(connectionMessage); + }, function (error) { + // TODO: Events for these ? + deferred_1.Reject("Invalid binary message format. Error: " + error); + }); + } + else { + var rawMessage = new Exports_1.RawWebsocketMessage(Exports_1.MessageType.Text, e.data); + _this.messageFormatter + .ToConnectionMessage(rawMessage) + .On(function (connectionMessage) { + _this.OnEvent(new Exports_1.ConnectionMessageReceivedEvent(_this.connectionId, networkReceivedTime, connectionMessage)); + deferred_1.Resolve(connectionMessage); + }, function (error) { + // TODO: Events for these ? + deferred_1.Reject("Invalid text message format. Error: " + error); + }); + } + } + }; + return _this.connectionEstablishDeferral.Promise(); + }; + this.Send = function (message) { + if (_this.connectionState !== Exports_1.ConnectionState.Connected) { + return Exports_1.PromiseHelper.FromError("Cannot send on connection that is in " + _this.connectionState + " state"); + } + var messageSendStatusDeferral = new Exports_1.Deferred(); + var messageSendDeferral = new Exports_1.Deferred(); + _this.sendMessageQueue.EnqueueFromPromise(messageSendDeferral.Promise()); + _this.messageFormatter + .FromConnectionMessage(message) + .On(function (rawMessage) { + messageSendDeferral.Resolve({ + Message: message, + RawWebsocketMessage: rawMessage, + SendStatusDeferral: messageSendStatusDeferral, + }); + }, function (error) { + messageSendDeferral.Reject("Error formatting the message. " + error); + }); + return messageSendStatusDeferral.Promise(); + }; + this.Read = function () { + if (_this.connectionState !== Exports_1.ConnectionState.Connected) { + return Exports_1.PromiseHelper.FromError("Cannot read on connection that is in " + _this.connectionState + " state"); + } + return _this.receivingMessageQueue.Dequeue(); + }; + this.Close = function (reason) { + if (_this.websocketClient) { + if (_this.connectionState !== Exports_1.ConnectionState.Connected) { + _this.websocketClient.close(1000, reason ? reason : "Normal closure by client"); + } + } + else { + var deferral = new Exports_1.Deferred(); + deferral.Resolve(true); + return deferral.Promise(); + } + return _this.disconnectDeferral.Promise(); + }; + this.SendRawMessage = function (sendItem) { + try { + _this.OnEvent(new Exports_1.ConnectionMessageSentEvent(_this.connectionId, new Date().toISOString(), sendItem.Message)); + _this.websocketClient.send(sendItem.RawWebsocketMessage.Payload); + return Exports_1.PromiseHelper.FromResult(true); + } + catch (e) { + return Exports_1.PromiseHelper.FromError("websocket send error: " + e); + } + }; + this.OnClose = function (code, reason) { + var closeReason = "Connection closed. " + code + ": " + reason; + _this.connectionState = Exports_1.ConnectionState.Disconnected; + _this.disconnectDeferral.Resolve(true); + _this.receivingMessageQueue.Dispose(reason); + _this.receivingMessageQueue.DrainAndDispose(function (pendingReceiveItem) { + // TODO: Events for these ? + // Logger.Instance.OnEvent(new LoggingEvent(LogType.Warning, null, `Failed to process received message. Reason: ${closeReason}, Message: ${JSON.stringify(pendingReceiveItem)}`)); + }, closeReason); + _this.sendMessageQueue.DrainAndDispose(function (pendingSendItem) { + pendingSendItem.SendStatusDeferral.Reject(closeReason); + }, closeReason); + }; + this.ProcessSendQueue = function () { + _this.sendMessageQueue + .Dequeue() + .On(function (sendItem) { + _this.SendRawMessage(sendItem) + .On(function (result) { + sendItem.SendStatusDeferral.Resolve(result); + _this.ProcessSendQueue(); + }, function (sendError) { + sendItem.SendStatusDeferral.Reject(sendError); + _this.ProcessSendQueue(); + }); + }, function (error) { + // do nothing + }); + }; + this.OnEvent = function (event) { + _this.connectionEvents.OnEvent(event); + Exports_1.Events.Instance.OnEvent(event); + }; + if (!uri) { + throw new Exports_1.ArgumentNullError("uri"); + } + if (!messageFormatter) { + throw new Exports_1.ArgumentNullError("messageFormatter"); + } + this.connectionEvents = new Exports_1.EventSource(); + this.connectionId = connectionId; + this.messageFormatter = messageFormatter; + this.connectionState = Exports_1.ConnectionState.None; + this.uri = uri; + } + Object.defineProperty(WebsocketMessageAdapter.prototype, "State", { + get: function () { + return this.connectionState; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(WebsocketMessageAdapter.prototype, "Events", { + get: function () { + return this.connectionEvents; + }, + enumerable: true, + configurable: true + }); + return WebsocketMessageAdapter; +}()); +exports.WebsocketMessageAdapter = WebsocketMessageAdapter; + + + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var RecognitionMode; +(function (RecognitionMode) { + RecognitionMode[RecognitionMode["Interactive"] = 0] = "Interactive"; + RecognitionMode[RecognitionMode["Conversation"] = 1] = "Conversation"; + RecognitionMode[RecognitionMode["Dictation"] = 2] = "Dictation"; +})(RecognitionMode = exports.RecognitionMode || (exports.RecognitionMode = {})); +var SpeechResultFormat; +(function (SpeechResultFormat) { + SpeechResultFormat[SpeechResultFormat["Simple"] = 0] = "Simple"; + SpeechResultFormat[SpeechResultFormat["Detailed"] = 1] = "Detailed"; +})(SpeechResultFormat = exports.SpeechResultFormat || (exports.SpeechResultFormat = {})); +var RecognizerConfig = /** @class */ (function () { + function RecognizerConfig(platformConfig, recognitionMode, language, format) { + if (recognitionMode === void 0) { recognitionMode = RecognitionMode.Interactive; } + if (language === void 0) { language = "en-us"; } + if (format === void 0) { format = SpeechResultFormat.Simple; } + this.recognitionMode = RecognitionMode.Interactive; + this.speechConfig = platformConfig ? platformConfig : new SpeechConfig(new Context(null, null)); + this.recognitionMode = recognitionMode; + this.language = language; + this.format = format; + this.recognitionActivityTimeout = recognitionMode === RecognitionMode.Interactive ? 8000 : 25000; + } + Object.defineProperty(RecognizerConfig.prototype, "RecognitionMode", { + get: function () { + return this.recognitionMode; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognizerConfig.prototype, "Language", { + get: function () { + return this.language; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognizerConfig.prototype, "Format", { + get: function () { + return this.format; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognizerConfig.prototype, "SpeechConfig", { + get: function () { + return this.speechConfig; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognizerConfig.prototype, "RecognitionActivityTimeout", { + get: function () { + return this.recognitionActivityTimeout; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RecognizerConfig.prototype, "IsContinuousRecognition", { + get: function () { + return this.recognitionMode !== RecognitionMode.Interactive; + }, + enumerable: true, + configurable: true + }); + return RecognizerConfig; +}()); +exports.RecognizerConfig = RecognizerConfig; +// tslint:disable-next-line:max-classes-per-file +var SpeechConfig = /** @class */ (function () { + function SpeechConfig(context) { + var _this = this; + this.Serialize = function () { + return JSON.stringify(_this, function (key, value) { + if (value && typeof value === "object") { + var replacement = {}; + for (var k in value) { + if (Object.hasOwnProperty.call(value, k)) { + replacement[k && k.charAt(0).toLowerCase() + k.substring(1)] = value[k]; + } + } + return replacement; + } + return value; + }); + }; + this.context = context; + } + Object.defineProperty(SpeechConfig.prototype, "Context", { + get: function () { + return this.context; + }, + enumerable: true, + configurable: true + }); + return SpeechConfig; +}()); +exports.SpeechConfig = SpeechConfig; +// tslint:disable-next-line:max-classes-per-file +var Context = /** @class */ (function () { + function Context(os, device) { + this.system = new System(); + this.os = os; + this.device = device; + } + Object.defineProperty(Context.prototype, "System", { + get: function () { + return this.system; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Context.prototype, "OS", { + get: function () { + return this.os; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Context.prototype, "Device", { + get: function () { + return this.device; + }, + enumerable: true, + configurable: true + }); + return Context; +}()); +exports.Context = Context; +// tslint:disable-next-line:max-classes-per-file +var System = /** @class */ (function () { + function System() { + // TODO: Tie this with the sdk Version somehow + this.version = "1.0.00000"; + } + Object.defineProperty(System.prototype, "Version", { + get: function () { + // Controlled by sdk + return this.version; + }, + enumerable: true, + configurable: true + }); + return System; +}()); +exports.System = System; +// tslint:disable-next-line:max-classes-per-file +var OS = /** @class */ (function () { + function OS(platform, name, version) { + this.platform = platform; + this.name = name; + this.version = version; + } + Object.defineProperty(OS.prototype, "Platform", { + get: function () { + return this.platform; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(OS.prototype, "Name", { + get: function () { + return this.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(OS.prototype, "Version", { + get: function () { + return this.version; + }, + enumerable: true, + configurable: true + }); + return OS; +}()); +exports.OS = OS; +// tslint:disable-next-line:max-classes-per-file +var Device = /** @class */ (function () { + function Device(manufacturer, model, version) { + this.manufacturer = manufacturer; + this.model = model; + this.version = version; + } + Object.defineProperty(Device.prototype, "Manufacturer", { + get: function () { + return this.manufacturer; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Device.prototype, "Model", { + get: function () { + return this.model; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Device.prototype, "Version", { + get: function () { + return this.version; + }, + enumerable: true, + configurable: true + }); + return Device; +}()); +exports.Device = Device; + + + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(3); +var Exports_2 = __webpack_require__(0); +var Exports_3 = __webpack_require__(5); +var TestHooksParamName = "testhooks"; +var ConnectionIdHeader = "X-ConnectionId"; +var SpeechConnectionFactory = /** @class */ (function () { + function SpeechConnectionFactory() { + var _this = this; + this.Create = function (config, authInfo, connectionId) { + var endpoint = ""; + switch (config.RecognitionMode) { + case Exports_3.RecognitionMode.Conversation: + endpoint = _this.Host + _this.ConversationRelativeUri; + break; + case Exports_3.RecognitionMode.Dictation: + endpoint = _this.Host + _this.DictationRelativeUri; + break; + default: + endpoint = _this.Host + _this.InteractiveRelativeUri; // default is interactive + break; + } + var queryParams = { + format: Exports_3.SpeechResultFormat[config.Format].toString().toLowerCase(), + language: config.Language, + }; + if (_this.IsDebugModeEnabled) { + queryParams[TestHooksParamName] = "1"; + } + var headers = {}; + headers[authInfo.HeaderName] = authInfo.Token; + headers[ConnectionIdHeader] = connectionId; + return new Exports_1.WebsocketConnection(endpoint, queryParams, headers, new Exports_3.WebsocketMessageFormatter(), connectionId); + }; + } + Object.defineProperty(SpeechConnectionFactory.prototype, "Host", { + get: function () { + return Exports_2.Storage.Local.GetOrAdd("Host", "wss://speech.platform.bing.com"); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SpeechConnectionFactory.prototype, "InteractiveRelativeUri", { + get: function () { + return Exports_2.Storage.Local.GetOrAdd("InteractiveRelativeUri", "/speech/recognition/interactive/cognitiveservices/v1"); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SpeechConnectionFactory.prototype, "ConversationRelativeUri", { + get: function () { + return Exports_2.Storage.Local.GetOrAdd("ConversationRelativeUri", "/speech/recognition/conversation/cognitiveservices/v1"); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SpeechConnectionFactory.prototype, "DictationRelativeUri", { + get: function () { + return Exports_2.Storage.Local.GetOrAdd("DictationRelativeUri", "/speech/recognition/dictation/cognitiveservices/v1"); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SpeechConnectionFactory.prototype, "IsDebugModeEnabled", { + get: function () { + var value = Exports_2.Storage.Local.GetOrAdd("IsDebugModeEnabled", "false"); + return value.toLowerCase() === "true"; + }, + enumerable: true, + configurable: true + }); + return SpeechConnectionFactory; +}()); +exports.SpeechConnectionFactory = SpeechConnectionFactory; + + + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + +window.SDK = __webpack_require__(18) + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(3); +var Exports_2 = __webpack_require__(0); +// Common.Storage.SetLocalStorage(new Common.Browser.LocalStorage()); +// Common.Storage.SetSessionStorage(new Common.Browser.SessionStorage()); +Exports_2.Events.Instance.AttachListener(new Exports_1.ConsoleLoggingListener()); +__export(__webpack_require__(0)); +__export(__webpack_require__(3)); +__export(__webpack_require__(5)); +__export(__webpack_require__(44)); + + + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var ConsoleLoggingListener = /** @class */ (function () { + function ConsoleLoggingListener(logLevelFilter) { + if (logLevelFilter === void 0) { logLevelFilter = Exports_1.EventType.Warning; } + var _this = this; + this.OnEvent = function (event) { + if (event.EventType >= _this.logLevelFilter) { + var log = _this.ToString(event); + switch (event.EventType) { + case Exports_1.EventType.Debug: + // tslint:disable-next-line:no-console + console.debug(log); + break; + case Exports_1.EventType.Info: + // tslint:disable-next-line:no-console + console.info(log); + break; + case Exports_1.EventType.Warning: + // tslint:disable-next-line:no-console + console.warn(log); + break; + case Exports_1.EventType.Error: + // tslint:disable-next-line:no-console + console.error(log); + break; + default: + // tslint:disable-next-line:no-console + console.log(log); + break; + } + } + }; + this.ToString = function (event) { + var logFragments = [ + "" + event.EventTime, + "" + event.Name, + ]; + for (var prop in event) { + if (prop && event.hasOwnProperty(prop) && prop !== "eventTime" && prop !== "eventType" && prop !== "eventId" && prop !== "name" && prop !== "constructor") { + var value = event[prop]; + var valueToLog = ""; + if (value !== undefined && value !== null) { + if (typeof (value) === "number" || typeof (value) === "string") { + valueToLog = value.toString(); + } + else { + valueToLog = JSON.stringify(value); + } + } + logFragments.push(prop + ": " + valueToLog); + } + } + return logFragments.join(" | "); + }; + this.logLevelFilter = logLevelFilter; + } + return ConsoleLoggingListener; +}()); +exports.ConsoleLoggingListener = ConsoleLoggingListener; + + + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var PlatformEvent_1 = __webpack_require__(4); +var AudioSourceEvent = /** @class */ (function (_super) { + __extends(AudioSourceEvent, _super); + function AudioSourceEvent(eventName, audioSourceId, eventType) { + if (eventType === void 0) { eventType = PlatformEvent_1.EventType.Info; } + var _this = _super.call(this, eventName, eventType) || this; + _this.audioSourceId = audioSourceId; + return _this; + } + Object.defineProperty(AudioSourceEvent.prototype, "AudioSourceId", { + get: function () { + return this.audioSourceId; + }, + enumerable: true, + configurable: true + }); + return AudioSourceEvent; +}(PlatformEvent_1.PlatformEvent)); +exports.AudioSourceEvent = AudioSourceEvent; +// tslint:disable-next-line:max-classes-per-file +var AudioSourceInitializingEvent = /** @class */ (function (_super) { + __extends(AudioSourceInitializingEvent, _super); + function AudioSourceInitializingEvent(audioSourceId) { + return _super.call(this, "AudioSourceInitializingEvent", audioSourceId) || this; + } + return AudioSourceInitializingEvent; +}(AudioSourceEvent)); +exports.AudioSourceInitializingEvent = AudioSourceInitializingEvent; +// tslint:disable-next-line:max-classes-per-file +var AudioSourceReadyEvent = /** @class */ (function (_super) { + __extends(AudioSourceReadyEvent, _super); + function AudioSourceReadyEvent(audioSourceId) { + return _super.call(this, "AudioSourceReadyEvent", audioSourceId) || this; + } + return AudioSourceReadyEvent; +}(AudioSourceEvent)); +exports.AudioSourceReadyEvent = AudioSourceReadyEvent; +// tslint:disable-next-line:max-classes-per-file +var AudioSourceOffEvent = /** @class */ (function (_super) { + __extends(AudioSourceOffEvent, _super); + function AudioSourceOffEvent(audioSourceId) { + return _super.call(this, "AudioSourceOffEvent", audioSourceId) || this; + } + return AudioSourceOffEvent; +}(AudioSourceEvent)); +exports.AudioSourceOffEvent = AudioSourceOffEvent; +// tslint:disable-next-line:max-classes-per-file +var AudioSourceErrorEvent = /** @class */ (function (_super) { + __extends(AudioSourceErrorEvent, _super); + function AudioSourceErrorEvent(audioSourceId, error) { + var _this = _super.call(this, "AudioSourceErrorEvent", audioSourceId, PlatformEvent_1.EventType.Error) || this; + _this.error = error; + return _this; + } + Object.defineProperty(AudioSourceErrorEvent.prototype, "Error", { + get: function () { + return this.error; + }, + enumerable: true, + configurable: true + }); + return AudioSourceErrorEvent; +}(AudioSourceEvent)); +exports.AudioSourceErrorEvent = AudioSourceErrorEvent; +// tslint:disable-next-line:max-classes-per-file +var AudioStreamNodeEvent = /** @class */ (function (_super) { + __extends(AudioStreamNodeEvent, _super); + function AudioStreamNodeEvent(eventName, audioSourceId, audioNodeId) { + var _this = _super.call(this, eventName, audioSourceId) || this; + _this.audioNodeId = audioNodeId; + return _this; + } + Object.defineProperty(AudioStreamNodeEvent.prototype, "AudioNodeId", { + get: function () { + return this.audioNodeId; + }, + enumerable: true, + configurable: true + }); + return AudioStreamNodeEvent; +}(AudioSourceEvent)); +exports.AudioStreamNodeEvent = AudioStreamNodeEvent; +// tslint:disable-next-line:max-classes-per-file +var AudioStreamNodeAttachingEvent = /** @class */ (function (_super) { + __extends(AudioStreamNodeAttachingEvent, _super); + function AudioStreamNodeAttachingEvent(audioSourceId, audioNodeId) { + return _super.call(this, "AudioStreamNodeAttachingEvent", audioSourceId, audioNodeId) || this; + } + return AudioStreamNodeAttachingEvent; +}(AudioStreamNodeEvent)); +exports.AudioStreamNodeAttachingEvent = AudioStreamNodeAttachingEvent; +// tslint:disable-next-line:max-classes-per-file +var AudioStreamNodeAttachedEvent = /** @class */ (function (_super) { + __extends(AudioStreamNodeAttachedEvent, _super); + function AudioStreamNodeAttachedEvent(audioSourceId, audioNodeId) { + return _super.call(this, "AudioStreamNodeAttachedEvent", audioSourceId, audioNodeId) || this; + } + return AudioStreamNodeAttachedEvent; +}(AudioStreamNodeEvent)); +exports.AudioStreamNodeAttachedEvent = AudioStreamNodeAttachedEvent; +// tslint:disable-next-line:max-classes-per-file +var AudioStreamNodeDetachedEvent = /** @class */ (function (_super) { + __extends(AudioStreamNodeDetachedEvent, _super); + function AudioStreamNodeDetachedEvent(audioSourceId, audioNodeId) { + return _super.call(this, "AudioStreamNodeDetachedEvent", audioSourceId, audioNodeId) || this; + } + return AudioStreamNodeDetachedEvent; +}(AudioStreamNodeEvent)); +exports.AudioStreamNodeDetachedEvent = AudioStreamNodeDetachedEvent; +// tslint:disable-next-line:max-classes-per-file +var AudioStreamNodeErrorEvent = /** @class */ (function (_super) { + __extends(AudioStreamNodeErrorEvent, _super); + function AudioStreamNodeErrorEvent(audioSourceId, audioNodeId, error) { + var _this = _super.call(this, "AudioStreamNodeErrorEvent", audioSourceId, audioNodeId) || this; + _this.error = error; + return _this; + } + Object.defineProperty(AudioStreamNodeErrorEvent.prototype, "Error", { + get: function () { + return this.error; + }, + enumerable: true, + configurable: true + }); + return AudioStreamNodeErrorEvent; +}(AudioStreamNodeEvent)); +exports.AudioStreamNodeErrorEvent = AudioStreamNodeErrorEvent; + + + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var PlatformEvent_1 = __webpack_require__(4); +var ConnectionEvent = /** @class */ (function (_super) { + __extends(ConnectionEvent, _super); + function ConnectionEvent(eventName, connectionId, eventType) { + if (eventType === void 0) { eventType = PlatformEvent_1.EventType.Info; } + var _this = _super.call(this, eventName, eventType) || this; + _this.connectionId = connectionId; + return _this; + } + Object.defineProperty(ConnectionEvent.prototype, "ConnectionId", { + get: function () { + return this.connectionId; + }, + enumerable: true, + configurable: true + }); + return ConnectionEvent; +}(PlatformEvent_1.PlatformEvent)); +exports.ConnectionEvent = ConnectionEvent; +// tslint:disable-next-line:max-classes-per-file +var ConnectionStartEvent = /** @class */ (function (_super) { + __extends(ConnectionStartEvent, _super); + function ConnectionStartEvent(connectionId, uri, headers) { + var _this = _super.call(this, "ConnectionStartEvent", connectionId) || this; + _this.uri = uri; + _this.headers = headers; + return _this; + } + Object.defineProperty(ConnectionStartEvent.prototype, "Uri", { + get: function () { + return this.uri; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionStartEvent.prototype, "Headers", { + get: function () { + return this.headers; + }, + enumerable: true, + configurable: true + }); + return ConnectionStartEvent; +}(ConnectionEvent)); +exports.ConnectionStartEvent = ConnectionStartEvent; +// tslint:disable-next-line:max-classes-per-file +var ConnectionEstablishedEvent = /** @class */ (function (_super) { + __extends(ConnectionEstablishedEvent, _super); + function ConnectionEstablishedEvent(connectionId, metadata) { + return _super.call(this, "ConnectionEstablishedEvent", connectionId) || this; + } + return ConnectionEstablishedEvent; +}(ConnectionEvent)); +exports.ConnectionEstablishedEvent = ConnectionEstablishedEvent; +// tslint:disable-next-line:max-classes-per-file +var ConnectionClosedEvent = /** @class */ (function (_super) { + __extends(ConnectionClosedEvent, _super); + function ConnectionClosedEvent(connectionId, statusCode, reason) { + var _this = _super.call(this, "ConnectionClosedEvent", connectionId, PlatformEvent_1.EventType.Warning) || this; + _this.reason = reason; + _this.statusCode = statusCode; + return _this; + } + Object.defineProperty(ConnectionClosedEvent.prototype, "Reason", { + get: function () { + return this.reason; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionClosedEvent.prototype, "StatusCode", { + get: function () { + return this.statusCode; + }, + enumerable: true, + configurable: true + }); + return ConnectionClosedEvent; +}(ConnectionEvent)); +exports.ConnectionClosedEvent = ConnectionClosedEvent; +// tslint:disable-next-line:max-classes-per-file +var ConnectionEstablishErrorEvent = /** @class */ (function (_super) { + __extends(ConnectionEstablishErrorEvent, _super); + function ConnectionEstablishErrorEvent(connectionId, statuscode, reason) { + var _this = _super.call(this, "ConnectionEstablishErrorEvent", connectionId, PlatformEvent_1.EventType.Error) || this; + _this.statusCode = statuscode; + _this.reason = reason; + return _this; + } + Object.defineProperty(ConnectionEstablishErrorEvent.prototype, "Reason", { + get: function () { + return this.reason; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionEstablishErrorEvent.prototype, "StatusCode", { + get: function () { + return this.statusCode; + }, + enumerable: true, + configurable: true + }); + return ConnectionEstablishErrorEvent; +}(ConnectionEvent)); +exports.ConnectionEstablishErrorEvent = ConnectionEstablishErrorEvent; +// tslint:disable-next-line:max-classes-per-file +var ConnectionMessageReceivedEvent = /** @class */ (function (_super) { + __extends(ConnectionMessageReceivedEvent, _super); + function ConnectionMessageReceivedEvent(connectionId, networkReceivedTimeISO, message) { + var _this = _super.call(this, "ConnectionMessageReceivedEvent", connectionId) || this; + _this.networkReceivedTime = networkReceivedTimeISO; + _this.message = message; + return _this; + } + Object.defineProperty(ConnectionMessageReceivedEvent.prototype, "NetworkReceivedTime", { + get: function () { + return this.networkReceivedTime; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionMessageReceivedEvent.prototype, "Message", { + get: function () { + return this.message; + }, + enumerable: true, + configurable: true + }); + return ConnectionMessageReceivedEvent; +}(ConnectionEvent)); +exports.ConnectionMessageReceivedEvent = ConnectionMessageReceivedEvent; +// tslint:disable-next-line:max-classes-per-file +var ConnectionMessageSentEvent = /** @class */ (function (_super) { + __extends(ConnectionMessageSentEvent, _super); + function ConnectionMessageSentEvent(connectionId, networkSentTimeISO, message) { + var _this = _super.call(this, "ConnectionMessageSentEvent", connectionId) || this; + _this.networkSentTime = networkSentTimeISO; + _this.message = message; + return _this; + } + Object.defineProperty(ConnectionMessageSentEvent.prototype, "NetworkSentTime", { + get: function () { + return this.networkSentTime; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionMessageSentEvent.prototype, "Message", { + get: function () { + return this.message; + }, + enumerable: true, + configurable: true + }); + return ConnectionMessageSentEvent; +}(ConnectionEvent)); +exports.ConnectionMessageSentEvent = ConnectionMessageSentEvent; + + + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var ConnectionOpenResponse = /** @class */ (function () { + function ConnectionOpenResponse(statusCode, reason) { + this.statusCode = statusCode; + this.reason = reason; + } + Object.defineProperty(ConnectionOpenResponse.prototype, "StatusCode", { + get: function () { + return this.statusCode; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionOpenResponse.prototype, "Reason", { + get: function () { + return this.reason; + }, + enumerable: true, + configurable: true + }); + return ConnectionOpenResponse; +}()); +exports.ConnectionOpenResponse = ConnectionOpenResponse; + + + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Error_1 = __webpack_require__(1); +var EventSource_1 = __webpack_require__(9); +var Events = /** @class */ (function () { + function Events() { + } + Object.defineProperty(Events, "Instance", { + get: function () { + return Events.instance; + }, + enumerable: true, + configurable: true + }); + Events.instance = new EventSource_1.EventSource(); + Events.SetEventSource = function (eventSource) { + if (!eventSource) { + throw new Error_1.ArgumentNullError("eventSource"); + } + Events.instance = eventSource; + }; + return Events; +}()); +exports.Events = Events; + + + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var ConnectionState; +(function (ConnectionState) { + ConnectionState[ConnectionState["None"] = 0] = "None"; + ConnectionState[ConnectionState["Connected"] = 1] = "Connected"; + ConnectionState[ConnectionState["Connecting"] = 2] = "Connecting"; + ConnectionState[ConnectionState["Disconnected"] = 3] = "Disconnected"; +})(ConnectionState = exports.ConnectionState || (exports.ConnectionState = {})); + + + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var ConnectionMessage_1 = __webpack_require__(8); +var Error_1 = __webpack_require__(1); +var Guid_1 = __webpack_require__(2); +var RawWebsocketMessage = /** @class */ (function () { + function RawWebsocketMessage(messageType, payload, id) { + this.payload = null; + if (!payload) { + throw new Error_1.ArgumentNullError("payload"); + } + if (messageType === ConnectionMessage_1.MessageType.Binary && !(payload instanceof ArrayBuffer)) { + throw new Error_1.InvalidOperationError("Payload must be ArrayBuffer"); + } + if (messageType === ConnectionMessage_1.MessageType.Text && !(typeof (payload) === "string")) { + throw new Error_1.InvalidOperationError("Payload must be a string"); + } + this.messageType = messageType; + this.payload = payload; + this.id = id ? id : Guid_1.CreateNoDashGuid(); + } + Object.defineProperty(RawWebsocketMessage.prototype, "MessageType", { + get: function () { + return this.messageType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RawWebsocketMessage.prototype, "Payload", { + get: function () { + return this.payload; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RawWebsocketMessage.prototype, "TextContent", { + get: function () { + if (this.messageType === ConnectionMessage_1.MessageType.Binary) { + throw new Error_1.InvalidOperationError("Not supported for binary message"); + } + return this.payload; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RawWebsocketMessage.prototype, "BinaryContent", { + get: function () { + if (this.messageType === ConnectionMessage_1.MessageType.Text) { + throw new Error_1.InvalidOperationError("Not supported for text message"); + } + return this.payload; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RawWebsocketMessage.prototype, "Id", { + get: function () { + return this.id; + }, + enumerable: true, + configurable: true + }); + return RawWebsocketMessage; +}()); +exports.RawWebsocketMessage = RawWebsocketMessage; + + + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var RiffPcmEncoder = /** @class */ (function () { + function RiffPcmEncoder(actualSampleRate, desiredSampleRate) { + var _this = this; + this.channelCount = 1; + this.Encode = function (needHeader, actualAudioFrame) { + var audioFrame = _this.DownSampleAudioFrame(actualAudioFrame, _this.actualSampleRate, _this.desiredSampleRate); + if (!audioFrame) { + return null; + } + var audioLength = audioFrame.length * 2; + if (!needHeader) { + var buffer_1 = new ArrayBuffer(audioLength); + var view_1 = new DataView(buffer_1); + _this.FloatTo16BitPCM(view_1, 0, audioFrame); + return buffer_1; + } + var buffer = new ArrayBuffer(44 + audioLength); + var bitsPerSample = 16; + var bytesPerSample = bitsPerSample / 8; + // We dont know ahead of time about the length of audio to stream. So set to 0. + var fileLength = 0; + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView + var view = new DataView(buffer); + /* RIFF identifier */ + _this.SetString(view, 0, "RIFF"); + /* file length */ + view.setUint32(4, fileLength, true); + /* RIFF type & Format */ + _this.SetString(view, 8, "WAVEfmt "); + /* format chunk length */ + view.setUint32(16, 16, true); + /* sample format (raw) */ + view.setUint16(20, 1, true); + /* channel count */ + view.setUint16(22, _this.channelCount, true); + /* sample rate */ + view.setUint32(24, _this.desiredSampleRate, true); + /* byte rate (sample rate * block align) */ + view.setUint32(28, _this.desiredSampleRate * _this.channelCount * bytesPerSample, true); + /* block align (channel count * bytes per sample) */ + view.setUint16(32, _this.channelCount * bytesPerSample, true); + /* bits per sample */ + view.setUint16(34, bitsPerSample, true); + /* data chunk identifier */ + _this.SetString(view, 36, "data"); + /* data chunk length */ + view.setUint32(40, fileLength, true); + _this.FloatTo16BitPCM(view, 44, audioFrame); + return buffer; + }; + this.SetString = function (view, offset, str) { + for (var i = 0; i < str.length; i++) { + view.setUint8(offset + i, str.charCodeAt(i)); + } + }; + this.FloatTo16BitPCM = function (view, offset, input) { + for (var i = 0; i < input.length; i++, offset += 2) { + var s = Math.max(-1, Math.min(1, input[i])); + view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7FFF, true); + } + }; + this.DownSampleAudioFrame = function (srcFrame, srcRate, dstRate) { + if (dstRate === srcRate || dstRate > srcRate) { + return srcFrame; + } + var ratio = srcRate / dstRate; + var dstLength = Math.round(srcFrame.length / ratio); + var dstFrame = new Float32Array(dstLength); + var srcOffset = 0; + var dstOffset = 0; + while (dstOffset < dstLength) { + var nextSrcOffset = Math.round((dstOffset + 1) * ratio); + var accum = 0; + var count = 0; + while (srcOffset < nextSrcOffset && srcOffset < srcFrame.length) { + accum += srcFrame[srcOffset++]; + count++; + } + dstFrame[dstOffset++] = accum / count; + } + return dstFrame; + }; + this.actualSampleRate = actualSampleRate; + this.desiredSampleRate = desiredSampleRate; + } + return RiffPcmEncoder; +}()); +exports.RiffPcmEncoder = RiffPcmEncoder; + + + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Error_1 = __webpack_require__(1); +var InMemoryStorage_1 = __webpack_require__(10); +var Storage = /** @class */ (function () { + function Storage() { + } + Object.defineProperty(Storage, "Session", { + get: function () { + return Storage.sessionStorage; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Storage, "Local", { + get: function () { + return Storage.localStorage; + }, + enumerable: true, + configurable: true + }); + Storage.sessionStorage = new InMemoryStorage_1.InMemoryStorage(); + Storage.localStorage = new InMemoryStorage_1.InMemoryStorage(); + Storage.SetSessionStorage = function (sessionStorage) { + if (!sessionStorage) { + throw new Error_1.ArgumentNullError("sessionStorage"); + } + Storage.sessionStorage = sessionStorage; + }; + Storage.SetLocalStorage = function (localStorage) { + if (!localStorage) { + throw new Error_1.ArgumentNullError("localStorage"); + } + Storage.localStorage = localStorage; + }; + return Storage; +}()); +exports.Storage = Storage; + + + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Error_1 = __webpack_require__(1); +var Guid_1 = __webpack_require__(2); +var Queue_1 = __webpack_require__(13); +var Stream = /** @class */ (function () { + function Stream(streamId) { + var _this = this; + this.readerIdCounter = 1; + this.isEnded = false; + this.Write = function (buffer) { + _this.ThrowIfClosed(); + _this.WriteStreamChunk({ + Buffer: buffer, + IsEnd: false, + }); + }; + this.GetReader = function () { + var readerId = _this.readerIdCounter; + _this.readerIdCounter++; + var readerQueue = new Queue_1.Queue(); + var currentLength = _this.streambuffer.length; + _this.readerQueues[readerId] = readerQueue; + for (var i = 0; i < currentLength; i++) { + readerQueue.Enqueue(_this.streambuffer[i]); + } + return new StreamReader(_this.id, readerQueue, function () { + delete _this.readerQueues[readerId]; + }); + }; + this.Close = function () { + if (!_this.isEnded) { + _this.WriteStreamChunk({ + Buffer: null, + IsEnd: true, + }); + _this.isEnded = true; + } + }; + this.WriteStreamChunk = function (streamChunk) { + _this.ThrowIfClosed(); + _this.streambuffer.push(streamChunk); + for (var readerId in _this.readerQueues) { + if (!_this.readerQueues[readerId].IsDisposed()) { + try { + _this.readerQueues[readerId].Enqueue(streamChunk); + } + catch (e) { + // Do nothing + } + } + } + }; + this.ThrowIfClosed = function () { + if (_this.isEnded) { + throw new Error_1.InvalidOperationError("Stream closed"); + } + }; + this.id = streamId ? streamId : Guid_1.CreateNoDashGuid(); + this.streambuffer = []; + this.readerQueues = {}; + } + Object.defineProperty(Stream.prototype, "IsClosed", { + get: function () { + return this.isEnded; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stream.prototype, "Id", { + get: function () { + return this.id; + }, + enumerable: true, + configurable: true + }); + return Stream; +}()); +exports.Stream = Stream; +// tslint:disable-next-line:max-classes-per-file +var StreamReader = /** @class */ (function () { + function StreamReader(streamId, readerQueue, onClose) { + var _this = this; + this.isClosed = false; + this.Read = function () { + if (_this.IsClosed) { + throw new Error_1.InvalidOperationError("StreamReader closed"); + } + return _this.readerQueue + .Dequeue() + .OnSuccessContinueWith(function (streamChunk) { + if (streamChunk.IsEnd) { + _this.readerQueue.Dispose("End of stream reached"); + } + return streamChunk; + }); + }; + this.Close = function () { + if (!_this.isClosed) { + _this.isClosed = true; + _this.readerQueue.Dispose("StreamReader closed"); + _this.onClose(); + } + }; + this.readerQueue = readerQueue; + this.onClose = onClose; + this.streamId = streamId; + } + Object.defineProperty(StreamReader.prototype, "IsClosed", { + get: function () { + return this.isClosed; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StreamReader.prototype, "StreamId", { + get: function () { + return this.streamId; + }, + enumerable: true, + configurable: true + }); + return StreamReader; +}()); +exports.StreamReader = StreamReader; + + + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var LocalStorage = /** @class */ (function () { + function LocalStorage() { + this.Get = function (key) { + if (!key) { + throw new Exports_1.ArgumentNullError("key"); + } + return localStorage.getItem(key); + }; + this.GetOrAdd = function (key, valueToAdd) { + if (!key) { + throw new Exports_1.ArgumentNullError("key"); + } + var value = localStorage.getItem(key); + if (value === null || value === undefined) { + localStorage.setItem(key, valueToAdd); + } + return localStorage.getItem(key); + }; + this.Set = function (key, value) { + if (!key) { + throw new Exports_1.ArgumentNullError("key"); + } + localStorage.setItem(key, value); + }; + this.Remove = function (key) { + if (!key) { + throw new Exports_1.ArgumentNullError("key"); + } + localStorage.removeItem(key); + }; + } + return LocalStorage; +}()); +exports.LocalStorage = LocalStorage; + + + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var MicAudioSource = /** @class */ (function () { + function MicAudioSource(recorder, audioSourceId) { + var _this = this; + this.streams = {}; + this.TurnOn = function () { + if (_this.initializeDeferral) { + return _this.initializeDeferral.Promise(); + } + _this.initializeDeferral = new Exports_1.Deferred(); + _this.CreateAudioContext(); + var nav = window.navigator; + var getUserMedia = (nav.getUserMedia || + nav.webkitGetUserMedia || + nav.mozGetUserMedia || + nav.msGetUserMedia); + if (!!nav.mediaDevices) { + getUserMedia = function (constraints, successCallback, errorCallback) { + nav.mediaDevices + .getUserMedia(constraints) + .then(successCallback) + .catch(errorCallback); + }; + } + if (!getUserMedia) { + var errorMsg = "Browser does not support getUserMedia."; + _this.initializeDeferral.Reject(errorMsg); + _this.OnEvent(new Exports_1.AudioSourceErrorEvent(errorMsg, "")); // mic initialized error - no streamid at this point + } + else { + var next = function () { + _this.OnEvent(new Exports_1.AudioSourceInitializingEvent(_this.id)); // no stream id + getUserMedia({ audio: true, video: false }, function (mediaStream) { + _this.mediaStream = mediaStream; + _this.OnEvent(new Exports_1.AudioSourceReadyEvent(_this.id)); + _this.initializeDeferral.Resolve(true); + }, function (error) { + var errorMsg = "Error occurred during microphone initialization: " + error; + var tmp = _this.initializeDeferral; + // HACK: this should be handled through onError callbacks of all promises up the stack. + // Unfortunately, the current implementation does not provide an easy way to reject promises + // without a lot of code replication. + // TODO: fix promise implementation, allow for a graceful reject chaining. + _this.initializeDeferral = null; + tmp.Reject(errorMsg); // this will bubble up through the whole chain of promises, + // with each new level adding extra "Unhandled callback error" prefix to the error message. + // The following line is not guaranteed to be executed. + _this.OnEvent(new Exports_1.AudioSourceErrorEvent(_this.id, errorMsg)); + }); + }; + if (_this.context.state === "suspended") { + // NOTE: On iOS, the Web Audio API requires sounds to be triggered from an explicit user action. + // https://github.com/WebAudio/web-audio-api/issues/790 + _this.context.resume().then(next, function (reason) { + _this.initializeDeferral.Reject("Failed to initialize audio context: " + reason); + }); + } + else { + next(); + } + } + return _this.initializeDeferral.Promise(); + }; + this.Id = function () { + return _this.id; + }; + this.Attach = function (audioNodeId) { + _this.OnEvent(new Exports_1.AudioStreamNodeAttachingEvent(_this.id, audioNodeId)); + return _this.Listen(audioNodeId).OnSuccessContinueWith(function (streamReader) { + _this.OnEvent(new Exports_1.AudioStreamNodeAttachedEvent(_this.id, audioNodeId)); + return { + Detach: function () { + streamReader.Close(); + delete _this.streams[audioNodeId]; + _this.OnEvent(new Exports_1.AudioStreamNodeDetachedEvent(_this.id, audioNodeId)); + _this.TurnOff(); + }, + Id: function () { + return audioNodeId; + }, + Read: function () { + return streamReader.Read(); + }, + }; + }); + }; + this.Detach = function (audioNodeId) { + if (audioNodeId && _this.streams[audioNodeId]) { + _this.streams[audioNodeId].Close(); + delete _this.streams[audioNodeId]; + _this.OnEvent(new Exports_1.AudioStreamNodeDetachedEvent(_this.id, audioNodeId)); + } + }; + this.TurnOff = function () { + for (var streamId in _this.streams) { + if (streamId) { + var stream = _this.streams[streamId]; + if (stream) { + stream.Close(); + } + } + } + _this.OnEvent(new Exports_1.AudioSourceOffEvent(_this.id)); // no stream now + _this.initializeDeferral = null; + _this.DestroyAudioContext(); + return Exports_1.PromiseHelper.FromResult(true); + }; + this.Listen = function (audioNodeId) { + return _this.TurnOn() + .OnSuccessContinueWith(function (_) { + var stream = new Exports_1.Stream(audioNodeId); + _this.streams[audioNodeId] = stream; + try { + _this.recorder.Record(_this.context, _this.mediaStream, stream); + } + catch (error) { + _this.OnEvent(new Exports_1.AudioStreamNodeErrorEvent(_this.id, audioNodeId, error)); + throw error; + } + return stream.GetReader(); + }); + }; + this.OnEvent = function (event) { + _this.events.OnEvent(event); + Exports_1.Events.Instance.OnEvent(event); + }; + this.CreateAudioContext = function () { + if (!!_this.context) { + return; + } + // https://developer.mozilla.org/en-US/docs/Web/API/AudioContext + var AudioContext = (window.AudioContext) + || (window.webkitAudioContext) + || false; + if (!AudioContext) { + throw new Error("Browser does not support Web Audio API (AudioContext is not available)."); + } + _this.context = new AudioContext(); + }; + this.DestroyAudioContext = function () { + if (!_this.context) { + return; + } + _this.recorder.ReleaseMediaResources(_this.context); + if ("close" in _this.context) { + _this.context.close(); + _this.context = null; + } + else if (_this.context.state === "running") { + // Suspend actually takes a callback, but analogous to the + // resume method, it'll be only fired if suspend is called + // in a direct response to a user action. The later is not always + // the case, as TurnOff is also called, when we receive an + // end-of-speech message from the service. So, doing a best effort + // fire-and-forget here. + _this.context.suspend(); + } + }; + this.id = audioSourceId ? audioSourceId : Exports_1.CreateNoDashGuid(); + this.events = new Exports_1.EventSource(); + this.recorder = recorder; + } + Object.defineProperty(MicAudioSource.prototype, "Events", { + get: function () { + return this.events; + }, + enumerable: true, + configurable: true + }); + return MicAudioSource; +}()); +exports.MicAudioSource = MicAudioSource; + + + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var Exports_2 = __webpack_require__(3); +var FileAudioSource = /** @class */ (function () { + function FileAudioSource(file, audioSourceId) { + var _this = this; + this.streams = {}; + this.TurnOn = function () { + if (typeof FileReader === "undefined") { + var errorMsg = "Browser does not support FileReader."; + _this.OnEvent(new Exports_1.AudioSourceErrorEvent(errorMsg, "")); // initialization error - no streamid at this point + return Exports_1.PromiseHelper.FromError(errorMsg); + } + else if (_this.file.name.lastIndexOf(".wav") !== _this.file.name.length - 4) { + var errorMsg = _this.file.name + " is not supported. Only WAVE files are allowed at the moment."; + _this.OnEvent(new Exports_1.AudioSourceErrorEvent(errorMsg, "")); + return Exports_1.PromiseHelper.FromError(errorMsg); + } + else if (_this.file.size > FileAudioSource.MAX_SIZE) { + var errorMsg = _this.file.name + " exceeds the maximum allowed file size (" + FileAudioSource.MAX_SIZE + ")."; + _this.OnEvent(new Exports_1.AudioSourceErrorEvent(errorMsg, "")); + return Exports_1.PromiseHelper.FromError(errorMsg); + } + _this.OnEvent(new Exports_1.AudioSourceInitializingEvent(_this.id)); // no stream id + _this.OnEvent(new Exports_1.AudioSourceReadyEvent(_this.id)); + return Exports_1.PromiseHelper.FromResult(true); + }; + this.Id = function () { + return _this.id; + }; + this.Attach = function (audioNodeId) { + _this.OnEvent(new Exports_1.AudioStreamNodeAttachingEvent(_this.id, audioNodeId)); + return _this.Upload(audioNodeId).OnSuccessContinueWith(function (streamReader) { + _this.OnEvent(new Exports_1.AudioStreamNodeAttachedEvent(_this.id, audioNodeId)); + return { + Detach: function () { + streamReader.Close(); + delete _this.streams[audioNodeId]; + _this.OnEvent(new Exports_1.AudioStreamNodeDetachedEvent(_this.id, audioNodeId)); + _this.TurnOff(); + }, + Id: function () { + return audioNodeId; + }, + Read: function () { + return streamReader.Read(); + }, + }; + }); + }; + this.Detach = function (audioNodeId) { + if (audioNodeId && _this.streams[audioNodeId]) { + _this.streams[audioNodeId].Close(); + delete _this.streams[audioNodeId]; + _this.OnEvent(new Exports_1.AudioStreamNodeDetachedEvent(_this.id, audioNodeId)); + } + }; + this.TurnOff = function () { + for (var streamId in _this.streams) { + if (streamId) { + var stream = _this.streams[streamId]; + if (stream && !stream.IsClosed) { + stream.Close(); + } + } + } + _this.OnEvent(new Exports_1.AudioSourceOffEvent(_this.id)); // no stream now + return Exports_1.PromiseHelper.FromResult(true); + }; + this.Upload = function (audioNodeId) { + return _this.TurnOn() + .OnSuccessContinueWith(function (_) { + var stream = new Exports_1.Stream(audioNodeId); + _this.streams[audioNodeId] = stream; + var reader = new FileReader(); + var startOffset = 0; + var endOffset = FileAudioSource.CHUNK_SIZE; + var lastWriteTimestamp = 0; + var processNextChunk = function (event) { + if (stream.IsClosed) { + return; // output stream was closed (somebody called TurnOff). We're done here. + } + if (lastWriteTimestamp !== 0) { + var delay = Date.now() - lastWriteTimestamp; + if (delay < FileAudioSource.UPLOAD_INTERVAL) { + // It's been less than the "upload interval" since we've uploaded the + // last chunk. Schedule the next upload to make sure that we're sending + // upstream roughly one chunk per upload interval. + new Exports_2.Timer(FileAudioSource.UPLOAD_INTERVAL - delay, processNextChunk).start(); + return; + } + } + stream.Write(reader.result); + lastWriteTimestamp = Date.now(); + if (endOffset < _this.file.size) { + startOffset = endOffset; + endOffset = Math.min(endOffset + FileAudioSource.CHUNK_SIZE, _this.file.size); + var chunk_1 = _this.file.slice(startOffset, endOffset); + reader.readAsArrayBuffer(chunk_1); + } + else { + // we've written the entire file to the output stream, can close it now. + stream.Close(); + } + }; + reader.onload = processNextChunk; + reader.onerror = function (event) { + var errorMsg = "Error occurred while processing '" + _this.file.name + "'. " + event.error; + _this.OnEvent(new Exports_1.AudioStreamNodeErrorEvent(_this.id, audioNodeId, event.error)); + throw new Error(errorMsg); + }; + var chunk = _this.file.slice(startOffset, endOffset); + reader.readAsArrayBuffer(chunk); + return stream.GetReader(); + }); + }; + this.OnEvent = function (event) { + _this.events.OnEvent(event); + Exports_1.Events.Instance.OnEvent(event); + }; + this.id = audioSourceId ? audioSourceId : Exports_1.CreateNoDashGuid(); + this.events = new Exports_1.EventSource(); + this.file = file; + } + Object.defineProperty(FileAudioSource.prototype, "Events", { + get: function () { + return this.events; + }, + enumerable: true, + configurable: true + }); + // Recommended sample rate (bytes/second). + FileAudioSource.SAMPLE_RATE = 16000 * 2; // 16 kHz * 16 bits + // We should stream audio at no faster than 2x real-time (i.e., send five chunks + // per second, with the chunk size == sample rate in bytes per second * 2 / 5). + FileAudioSource.CHUNK_SIZE = FileAudioSource.SAMPLE_RATE * 2 / 5; + FileAudioSource.UPLOAD_INTERVAL = 200; // milliseconds + // 10 seconds of audio in bytes = + // sample rate (bytes/second) * 600 (seconds) + 44 (size of the wave header). + FileAudioSource.MAX_SIZE = FileAudioSource.SAMPLE_RATE * 600 + 44; + return FileAudioSource; +}()); +exports.FileAudioSource = FileAudioSource; + + + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var OpusRecorder = /** @class */ (function () { + function OpusRecorder(options) { + var _this = this; + this.Record = function (context, mediaStream, outputStream) { + var mediaRecorder = new MediaRecorder(mediaStream, _this.mediaRecorderOptions); + var timeslice = 100; // this is in ms - 100 ensures that the chunk doesn't exceed the max size of chunk allowed in WS connection + mediaRecorder.ondataavailable = function (dataAvailableEvent) { + if (outputStream) { + var reader_1 = new FileReader(); + reader_1.readAsArrayBuffer(dataAvailableEvent.data); + reader_1.onloadend = function (event) { + outputStream.Write(reader_1.result); + }; + } + }; + _this.mediaResources = { + recorder: mediaRecorder, + stream: mediaStream, + }; + mediaRecorder.start(timeslice); + }; + this.ReleaseMediaResources = function (context) { + if (_this.mediaResources.recorder.state !== "inactive") { + _this.mediaResources.recorder.stop(); + } + _this.mediaResources.stream.getTracks().forEach(function (track) { return track.stop(); }); + }; + this.mediaRecorderOptions = options; + } + return OpusRecorder; +}()); +exports.OpusRecorder = OpusRecorder; +/* Declaring this inline to avoid compiler warnings +declare class MediaRecorder { + constructor(mediaStream: MediaStream, options: any); + + public state: string; + + public ondataavailable(dataAvailableEvent: any): void; + public stop(): void; +}*/ + + + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var PcmRecorder = /** @class */ (function () { + function PcmRecorder() { + var _this = this; + this.Record = function (context, mediaStream, outputStream) { + var desiredSampleRate = 16000; + // https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createScriptProcessor + var scriptNode = (function () { + var bufferSize = 0; + try { + return context.createScriptProcessor(bufferSize, 1, 1); + } + catch (error) { + // Webkit (<= version 31) requires a valid bufferSize. + bufferSize = 2048; + var audioSampleRate = context.sampleRate; + while (bufferSize < 16384 && audioSampleRate >= (2 * desiredSampleRate)) { + bufferSize <<= 1; + audioSampleRate >>= 1; + } + return context.createScriptProcessor(bufferSize, 1, 1); + } + })(); + var waveStreamEncoder = new Exports_1.RiffPcmEncoder(context.sampleRate, desiredSampleRate); + var needHeader = true; + var that = _this; + scriptNode.onaudioprocess = function (event) { + var inputFrame = event.inputBuffer.getChannelData(0); + if (outputStream && !outputStream.IsClosed) { + var waveFrame = waveStreamEncoder.Encode(needHeader, inputFrame); + if (!!waveFrame) { + outputStream.Write(waveFrame); + needHeader = false; + } + } + }; + // https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createMediaStreamSource + var micInput = context.createMediaStreamSource(mediaStream); + _this.mediaResources = { + scriptProcessorNode: scriptNode, + source: micInput, + stream: mediaStream, + }; + micInput.connect(scriptNode); + scriptNode.connect(context.destination); + }; + this.ReleaseMediaResources = function (context) { + if (_this.mediaResources) { + if (_this.mediaResources.scriptProcessorNode) { + _this.mediaResources.scriptProcessorNode.disconnect(context.destination); + _this.mediaResources.scriptProcessorNode = null; + } + if (_this.mediaResources.source) { + _this.mediaResources.source.disconnect(); + _this.mediaResources.stream.getTracks().forEach(function (track) { return track.stop(); }); + _this.mediaResources.source = null; + } + } + }; + } + return PcmRecorder; +}()); +exports.PcmRecorder = PcmRecorder; + + + +/***/ }), +/* 34 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var SessionStorage = /** @class */ (function () { + function SessionStorage() { + this.Get = function (key) { + if (!key) { + throw new Exports_1.ArgumentNullError("key"); + } + return sessionStorage.getItem(key); + }; + this.GetOrAdd = function (key, valueToAdd) { + if (!key) { + throw new Exports_1.ArgumentNullError("key"); + } + var value = sessionStorage.getItem(key); + if (value === null || value === undefined) { + sessionStorage.setItem(key, valueToAdd); + } + return sessionStorage.getItem(key); + }; + this.Set = function (key, value) { + if (!key) { + throw new Exports_1.ArgumentNullError("key"); + } + sessionStorage.setItem(key, value); + }; + this.Remove = function (key) { + if (!key) { + throw new Exports_1.ArgumentNullError("key"); + } + sessionStorage.removeItem(key); + }; + } + return SessionStorage; +}()); +exports.SessionStorage = SessionStorage; + + + +/***/ }), +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Timer = /** @class */ (function () { + function Timer(delayInMillisec, successCallback) { + var _this = this; + this.start = function () { + var params = []; + for (var _i = 0; _i < arguments.length; _i++) { + params[_i] = arguments[_i]; + } + if (_this.timerId) { + _this.stop(); + } + _this.timerId = setTimeout(_this.successCallback, _this.delayInMillisec, params); + }; + this.stop = function () { + clearTimeout(_this.timerId); + }; + this.delayInMillisec = delayInMillisec; + this.successCallback = successCallback; + } + return Timer; +}()); +exports.Timer = Timer; + + + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var WebsocketMessageAdapter_1 = __webpack_require__(14); +var WebsocketConnection = /** @class */ (function () { + function WebsocketConnection(uri, queryParameters, headers, messageFormatter, connectionId) { + var _this = this; + this.isDisposed = false; + this.Dispose = function () { + _this.isDisposed = true; + if (_this.connectionMessageAdapter) { + _this.connectionMessageAdapter.Close(); + } + }; + this.IsDisposed = function () { + return _this.isDisposed; + }; + this.State = function () { + return _this.connectionMessageAdapter.State; + }; + this.Open = function () { + return _this.connectionMessageAdapter.Open(); + }; + this.Send = function (message) { + return _this.connectionMessageAdapter.Send(message); + }; + this.Read = function () { + return _this.connectionMessageAdapter.Read(); + }; + if (!uri) { + throw new Exports_1.ArgumentNullError("uri"); + } + if (!messageFormatter) { + throw new Exports_1.ArgumentNullError("messageFormatter"); + } + this.messageFormatter = messageFormatter; + var queryParams = ""; + var i = 0; + if (queryParameters) { + for (var paramName in queryParameters) { + if (paramName) { + queryParams += i === 0 ? "?" : "&"; + var val = encodeURIComponent(queryParameters[paramName]); + queryParams += paramName + "=" + val; + i++; + } + } + } + if (headers) { + for (var headerName in headers) { + if (headerName) { + queryParams += i === 0 ? "?" : "&"; + var val = encodeURIComponent(headers[headerName]); + queryParams += headerName + "=" + val; + i++; + } + } + } + this.uri = uri + queryParams; + this.id = connectionId ? connectionId : Exports_1.CreateNoDashGuid(); + this.connectionMessageAdapter = new WebsocketMessageAdapter_1.WebsocketMessageAdapter(this.uri, this.Id, this.messageFormatter); + } + Object.defineProperty(WebsocketConnection.prototype, "Id", { + get: function () { + return this.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(WebsocketConnection.prototype, "Events", { + get: function () { + return this.connectionMessageAdapter.Events; + }, + enumerable: true, + configurable: true + }); + return WebsocketConnection; +}()); +exports.WebsocketConnection = WebsocketConnection; + + + +/***/ }), +/* 37 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var IAuthentication_1 = __webpack_require__(6); +var AuthHeader = "Ocp-Apim-Subscription-Key"; +var CognitiveSubscriptionKeyAuthentication = /** @class */ (function () { + function CognitiveSubscriptionKeyAuthentication(subscriptionKey) { + var _this = this; + this.Fetch = function (authFetchEventId) { + return Exports_1.PromiseHelper.FromResult(_this.authInfo); + }; + this.FetchOnExpiry = function (authFetchEventId) { + return Exports_1.PromiseHelper.FromResult(_this.authInfo); + }; + if (!subscriptionKey) { + throw new Exports_1.ArgumentNullError("subscriptionKey"); + } + this.authInfo = new IAuthentication_1.AuthInfo(AuthHeader, subscriptionKey); + } + return CognitiveSubscriptionKeyAuthentication; +}()); +exports.CognitiveSubscriptionKeyAuthentication = CognitiveSubscriptionKeyAuthentication; + + + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var IAuthentication_1 = __webpack_require__(6); +var AuthHeader = "Authorization"; +var CognitiveTokenAuthentication = /** @class */ (function () { + function CognitiveTokenAuthentication(fetchCallback, fetchOnExpiryCallback) { + var _this = this; + this.Fetch = function (authFetchEventId) { + return _this.fetchCallback(authFetchEventId).OnSuccessContinueWith(function (token) { return new IAuthentication_1.AuthInfo(AuthHeader, token); }); + }; + this.FetchOnExpiry = function (authFetchEventId) { + return _this.fetchOnExpiryCallback(authFetchEventId).OnSuccessContinueWith(function (token) { return new IAuthentication_1.AuthInfo(AuthHeader, token); }); + }; + if (!fetchCallback) { + throw new Exports_1.ArgumentNullError("fetchCallback"); + } + if (!fetchOnExpiryCallback) { + throw new Exports_1.ArgumentNullError("fetchOnExpiryCallback"); + } + this.fetchCallback = fetchCallback; + this.fetchOnExpiryCallback = fetchOnExpiryCallback; + } + return CognitiveTokenAuthentication; +}()); +exports.CognitiveTokenAuthentication = CognitiveTokenAuthentication; + + + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var RecognitionEvents_1 = __webpack_require__(7); +var RecognizerConfig_1 = __webpack_require__(15); +var ServiceTelemetryListener_Internal_1 = __webpack_require__(40); +var SpeechConnectionMessage_Internal_1 = __webpack_require__(41); +var Recognizer = /** @class */ (function () { + function Recognizer(authentication, connectionFactory, audioSource, recognizerConfig) { + var _this = this; + this.Recognize = function (onEventCallback, speechContextJson) { + var requestSession = new RequestSession(_this.audioSource.Id(), onEventCallback); + requestSession.ListenForServiceTelemetry(_this.audioSource.Events); + return _this.audioSource + .Attach(requestSession.AudioNodeId) + .ContinueWithPromise(function (result) { + if (result.IsError) { + requestSession.OnAudioSourceAttachCompleted(null, true, result.Error); + throw new Error(result.Error); + } + else { + requestSession.OnAudioSourceAttachCompleted(result.Result, false); + } + var audioNode = result.Result; + _this.FetchConnection(requestSession) + .OnSuccessContinueWith(function (connection) { + var messageRetrievalPromise = _this.ReceiveMessage(connection, requestSession); + var messageSendPromise = _this.SendSpeechConfig(requestSession.RequestId, connection, _this.recognizerConfig.SpeechConfig.Serialize()) + .OnSuccessContinueWithPromise(function (_) { + return _this.SendSpeechContext(requestSession.RequestId, connection, speechContextJson) + .OnSuccessContinueWithPromise(function (_) { + return _this.SendAudio(requestSession.RequestId, connection, audioNode, requestSession); + }); + }); + var completionPromise = Exports_1.PromiseHelper.WhenAll([messageRetrievalPromise, messageSendPromise]); + completionPromise.On(function (r) { + requestSession.Dispose(); + _this.SendTelemetryData(requestSession.RequestId, connection, requestSession.GetTelemetry()); + }, function (error) { + requestSession.Dispose(error); + _this.SendTelemetryData(requestSession.RequestId, connection, requestSession.GetTelemetry()); + }); + return completionPromise; + }); + return requestSession.CompletionPromise; + }); + }; + this.FetchConnection = function (requestSession, isUnAuthorized) { + if (isUnAuthorized === void 0) { isUnAuthorized = false; } + if (_this.connectionFetchPromise) { + if (_this.connectionFetchPromise.Result().IsError + || _this.connectionFetchPromise.Result().Result.State() === Exports_1.ConnectionState.Disconnected) { + _this.connectionId = null; + _this.connectionFetchPromise = null; + return _this.FetchConnection(requestSession); + } + else { + requestSession.OnPreConnectionStart(_this.authFetchEventId, _this.connectionId); + requestSession.OnConnectionEstablishCompleted(200); + requestSession.ListenForServiceTelemetry(_this.connectionFetchPromise.Result().Result.Events); + return _this.connectionFetchPromise; + } + } + _this.authFetchEventId = Exports_1.CreateNoDashGuid(); + _this.connectionId = Exports_1.CreateNoDashGuid(); + requestSession.OnPreConnectionStart(_this.authFetchEventId, _this.connectionId); + var authPromise = isUnAuthorized ? _this.authentication.FetchOnExpiry(_this.authFetchEventId) : _this.authentication.Fetch(_this.authFetchEventId); + _this.connectionFetchPromise = authPromise + .ContinueWithPromise(function (result) { + if (result.IsError) { + requestSession.OnAuthCompleted(true, result.Error); + throw new Error(result.Error); + } + else { + requestSession.OnAuthCompleted(false); + } + var connection = _this.connectionFactory.Create(_this.recognizerConfig, result.Result, _this.connectionId); + requestSession.ListenForServiceTelemetry(connection.Events); + return connection.Open().OnSuccessContinueWithPromise(function (response) { + if (response.StatusCode === 200) { + requestSession.OnConnectionEstablishCompleted(response.StatusCode); + return Exports_1.PromiseHelper.FromResult(connection); + } + else if (response.StatusCode === 403 && !isUnAuthorized) { + return _this.FetchConnection(requestSession, true); + } + else { + requestSession.OnConnectionEstablishCompleted(response.StatusCode, response.Reason); + return Exports_1.PromiseHelper.FromError("Unable to contact server. StatusCode: " + response.StatusCode + ", Reason: " + response.Reason); + } + }); + }); + return _this.connectionFetchPromise; + }; + this.ReceiveMessage = function (connection, requestSession) { + return connection + .Read() + .OnSuccessContinueWithPromise(function (message) { + var connectionMessage = SpeechConnectionMessage_Internal_1.SpeechConnectionMessage.FromConnectionMessage(message); + if (connectionMessage.RequestId.toLowerCase() === requestSession.RequestId.toLowerCase()) { + switch (connectionMessage.Path.toLowerCase()) { + case "turn.start": + requestSession.OnServiceTurnStartResponse(JSON.parse(connectionMessage.TextBody)); + break; + case "speech.startDetected": + requestSession.OnServiceSpeechStartDetectedResponse(JSON.parse(connectionMessage.TextBody)); + break; + case "speech.hypothesis": + requestSession.OnServiceSpeechHypothesisResponse(JSON.parse(connectionMessage.TextBody)); + break; + case "speech.fragment": + requestSession.OnServiceSpeechFragmentResponse(JSON.parse(connectionMessage.TextBody)); + break; + case "speech.enddetected": + requestSession.OnServiceSpeechEndDetectedResponse(JSON.parse(connectionMessage.TextBody)); + break; + case "speech.phrase": + if (_this.recognizerConfig.IsContinuousRecognition) { + // For continuous recognition telemetry has to be sent for every phrase as per spec. + _this.SendTelemetryData(requestSession.RequestId, connection, requestSession.GetTelemetry()); + } + if (_this.recognizerConfig.Format === RecognizerConfig_1.SpeechResultFormat.Simple) { + requestSession.OnServiceSimpleSpeechPhraseResponse(JSON.parse(connectionMessage.TextBody)); + } + else { + requestSession.OnServiceDetailedSpeechPhraseResponse(JSON.parse(connectionMessage.TextBody)); + } + break; + case "turn.end": + requestSession.OnServiceTurnEndResponse(); + return Exports_1.PromiseHelper.FromResult(true); + default: + break; + } + } + return _this.ReceiveMessage(connection, requestSession); + }); + }; + this.SendSpeechConfig = function (requestId, connection, speechConfigJson) { + if (speechConfigJson && _this.connectionId !== _this.speechConfigConnectionId) { + _this.speechConfigConnectionId = _this.connectionId; + return connection + .Send(new SpeechConnectionMessage_Internal_1.SpeechConnectionMessage(Exports_1.MessageType.Text, "speech.config", requestId, "application/json", speechConfigJson)); + } + return Exports_1.PromiseHelper.FromResult(true); + }; + this.SendSpeechContext = function (requestId, connection, speechContextJson) { + if (speechContextJson) { + return connection + .Send(new SpeechConnectionMessage_Internal_1.SpeechConnectionMessage(Exports_1.MessageType.Text, "speech.context", requestId, "application/json", speechContextJson)); + } + return Exports_1.PromiseHelper.FromResult(true); + }; + this.SendTelemetryData = function (requestId, connection, telemetryData) { + return connection + .Send(new SpeechConnectionMessage_Internal_1.SpeechConnectionMessage(Exports_1.MessageType.Text, "telemetry", requestId, "application/json", telemetryData)); + }; + this.SendAudio = function (requestId, connection, audioStreamNode, requestSession) { + // NOTE: Home-baked promises crash ios safari during the invocation + // of the error callback chain (looks like the recursion is way too deep, and + // it blows up the stack). The following construct is a stop-gap that does not + // bubble the error up the callback chain and hence circumvents this problem. + // TODO: rewrite with ES6 promises. + var deferred = new Exports_1.Deferred(); + var readAndUploadCycle = function (_) { + audioStreamNode.Read().On(function (audioStreamChunk) { + // we have a new audio chunk to upload. + if (requestSession.IsSpeechEnded) { + // If service already recognized audio end then dont send any more audio + deferred.Resolve(true); + return; + } + var payload = (audioStreamChunk.IsEnd) ? null : audioStreamChunk.Buffer; + var uploaded = connection.Send(new SpeechConnectionMessage_Internal_1.SpeechConnectionMessage(Exports_1.MessageType.Binary, "audio", requestId, null, payload)); + if (!audioStreamChunk.IsEnd) { + uploaded.OnSuccessContinueWith(readAndUploadCycle); + } + else { + // the audio stream has been closed, no need to schedule next + // read-upload cycle. + deferred.Resolve(true); + } + }, function (error) { + if (requestSession.IsSpeechEnded) { + // For whatever reason, Reject is used to remove queue subscribers inside + // the Queue.DrainAndDispose invoked from DetachAudioNode down blow, which + // means that sometimes things can be rejected in normal circumstances, without + // any errors. + deferred.Resolve(true); // TODO: remove the argument, it's is completely meaningless. + } + else { + // Only reject, if there was a proper error. + deferred.Reject(error); + } + }); + }; + readAndUploadCycle(true); + return deferred.Promise(); + }; + if (!authentication) { + throw new Exports_1.ArgumentNullError("authentication"); + } + if (!connectionFactory) { + throw new Exports_1.ArgumentNullError("connectionFactory"); + } + if (!audioSource) { + throw new Exports_1.ArgumentNullError("audioSource"); + } + if (!recognizerConfig) { + throw new Exports_1.ArgumentNullError("recognizerConfig"); + } + this.authentication = authentication; + this.connectionFactory = connectionFactory; + this.audioSource = audioSource; + this.recognizerConfig = recognizerConfig; + } + Object.defineProperty(Recognizer.prototype, "AudioSource", { + get: function () { + return this.audioSource; + }, + enumerable: true, + configurable: true + }); + return Recognizer; +}()); +exports.Recognizer = Recognizer; +// tslint:disable-next-line:max-classes-per-file +var RequestSession = /** @class */ (function () { + function RequestSession(audioSourceId, onEventCallback) { + var _this = this; + this.isDisposed = false; + this.detachables = new Array(); + this.isAudioNodeDetached = false; + this.isCompleted = false; + this.OnAudioSourceAttachCompleted = function (audioNode, isError, error) { + _this.audioNode = audioNode; + if (isError) { + _this.OnComplete(RecognitionEvents_1.RecognitionCompletionStatus.AudioSourceError, error); + } + else { + _this.OnEvent(new RecognitionEvents_1.ListeningStartedEvent(_this.requestId, _this.audioSourceId, _this.audioNodeId)); + } + }; + this.OnPreConnectionStart = function (authFetchEventId, connectionId) { + _this.authFetchEventId = authFetchEventId; + _this.connectionId = connectionId; + _this.OnEvent(new RecognitionEvents_1.ConnectingToServiceEvent(_this.requestId, _this.authFetchEventId, _this.connectionId)); + }; + this.OnAuthCompleted = function (isError, error) { + if (isError) { + _this.OnComplete(RecognitionEvents_1.RecognitionCompletionStatus.AuthTokenFetchError, error); + } + }; + this.OnConnectionEstablishCompleted = function (statusCode, reason) { + if (statusCode === 200) { + _this.OnEvent(new RecognitionEvents_1.RecognitionStartedEvent(_this.RequestId, _this.audioSourceId, _this.audioNodeId, _this.authFetchEventId, _this.connectionId)); + return; + } + else if (statusCode === 403) { + _this.OnComplete(RecognitionEvents_1.RecognitionCompletionStatus.UnAuthorized, reason); + } + else { + _this.OnComplete(RecognitionEvents_1.RecognitionCompletionStatus.ConnectError, reason); + } + }; + this.OnServiceTurnStartResponse = function (response) { + if (response && response.context && response.context.serviceTag) { + _this.serviceTag = response.context.serviceTag; + } + }; + this.OnServiceSpeechStartDetectedResponse = function (result) { + _this.OnEvent(new RecognitionEvents_1.SpeechStartDetectedEvent(_this.RequestId, result)); + }; + this.OnServiceSpeechHypothesisResponse = function (result) { + _this.OnEvent(new RecognitionEvents_1.SpeechHypothesisEvent(_this.RequestId, result)); + }; + this.OnServiceSpeechFragmentResponse = function (result) { + _this.OnEvent(new RecognitionEvents_1.SpeechFragmentEvent(_this.RequestId, result)); + }; + this.OnServiceSpeechEndDetectedResponse = function (result) { + _this.DetachAudioNode(); + _this.OnEvent(new RecognitionEvents_1.SpeechEndDetectedEvent(_this.RequestId, result)); + }; + this.OnServiceSimpleSpeechPhraseResponse = function (result) { + _this.OnEvent(new RecognitionEvents_1.SpeechSimplePhraseEvent(_this.RequestId, result)); + }; + this.OnServiceDetailedSpeechPhraseResponse = function (result) { + _this.OnEvent(new RecognitionEvents_1.SpeechDetailedPhraseEvent(_this.RequestId, result)); + }; + this.OnServiceTurnEndResponse = function () { + _this.OnComplete(RecognitionEvents_1.RecognitionCompletionStatus.Success); + }; + this.OnConnectionError = function (error) { + _this.OnComplete(RecognitionEvents_1.RecognitionCompletionStatus.UnknownError, error); + }; + this.Dispose = function (error) { + if (!_this.isDisposed) { + // we should have completed by now. If we did not its an unknown error. + _this.OnComplete(RecognitionEvents_1.RecognitionCompletionStatus.UnknownError, error); + _this.isDisposed = true; + for (var _i = 0, _a = _this.detachables; _i < _a.length; _i++) { + var detachable = _a[_i]; + detachable.Detach(); + } + _this.serviceTelemetryListener.Dispose(); + } + }; + this.GetTelemetry = function () { + return _this.serviceTelemetryListener.GetTelemetry(); + }; + this.OnComplete = function (status, error) { + if (!_this.isCompleted) { + _this.isCompleted = true; + _this.DetachAudioNode(); + _this.OnEvent(new RecognitionEvents_1.RecognitionEndedEvent(_this.RequestId, _this.audioSourceId, _this.audioNodeId, _this.authFetchEventId, _this.connectionId, _this.serviceTag, status, error ? error : "")); + } + }; + this.DetachAudioNode = function () { + if (!_this.isAudioNodeDetached) { + _this.isAudioNodeDetached = true; + if (_this.audioNode) { + _this.audioNode.Detach(); + } + } + }; + this.OnEvent = function (event) { + _this.serviceTelemetryListener.OnEvent(event); + Exports_1.Events.Instance.OnEvent(event); + if (_this.onEventCallback) { + _this.onEventCallback(event); + } + }; + this.audioSourceId = audioSourceId; + this.onEventCallback = onEventCallback; + this.requestId = Exports_1.CreateNoDashGuid(); + this.audioNodeId = Exports_1.CreateNoDashGuid(); + this.requestCompletionDeferral = new Exports_1.Deferred(); + this.serviceTelemetryListener = new ServiceTelemetryListener_Internal_1.ServiceTelemetryListener(this.requestId, this.audioSourceId, this.audioNodeId); + this.OnEvent(new RecognitionEvents_1.RecognitionTriggeredEvent(this.RequestId, this.audioSourceId, this.audioNodeId)); + } + Object.defineProperty(RequestSession.prototype, "RequestId", { + get: function () { + return this.requestId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RequestSession.prototype, "AudioNodeId", { + get: function () { + return this.audioNodeId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RequestSession.prototype, "CompletionPromise", { + get: function () { + return this.requestCompletionDeferral.Promise(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RequestSession.prototype, "IsSpeechEnded", { + get: function () { + return this.isAudioNodeDetached; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RequestSession.prototype, "IsCompleted", { + get: function () { + return this.isCompleted; + }, + enumerable: true, + configurable: true + }); + RequestSession.prototype.ListenForServiceTelemetry = function (eventSource) { + this.detachables.push(eventSource.AttachListener(this.serviceTelemetryListener)); + }; + return RequestSession; +}()); + + + +/***/ }), +/* 40 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var RecognitionEvents_1 = __webpack_require__(7); +// tslint:disable-next-line:max-classes-per-file +var ServiceTelemetryListener = /** @class */ (function () { + function ServiceTelemetryListener(requestId, audioSourceId, audioNodeId) { + var _this = this; + this.isDisposed = false; + this.listeningTriggerMetric = null; + this.micMetric = null; + this.connectionEstablishMetric = null; + this.OnEvent = function (e) { + if (_this.isDisposed) { + return; + } + if (e instanceof RecognitionEvents_1.RecognitionTriggeredEvent && e.RequestId === _this.requestId) { + _this.listeningTriggerMetric = { + End: e.EventTime, + Name: "ListeningTrigger", + Start: e.EventTime, + }; + } + if (e instanceof Exports_1.AudioStreamNodeAttachingEvent && e.AudioSourceId === _this.audioSourceId && e.AudioNodeId === _this.audioNodeId) { + _this.micStartTime = e.EventTime; + } + if (e instanceof Exports_1.AudioStreamNodeAttachedEvent && e.AudioSourceId === _this.audioSourceId && e.AudioNodeId === _this.audioNodeId) { + _this.micStartTime = e.EventTime; + } + if (e instanceof Exports_1.AudioSourceErrorEvent && e.AudioSourceId === _this.audioSourceId) { + if (!_this.micMetric) { + _this.micMetric = { + End: e.EventTime, + Error: e.Error, + Name: "Microphone", + Start: _this.micStartTime, + }; + } + } + if (e instanceof Exports_1.AudioStreamNodeErrorEvent && e.AudioSourceId === _this.audioSourceId && e.AudioNodeId === _this.audioNodeId) { + if (!_this.micMetric) { + _this.micMetric = { + End: e.EventTime, + Error: e.Error, + Name: "Microphone", + Start: _this.micStartTime, + }; + } + } + if (e instanceof Exports_1.AudioStreamNodeDetachedEvent && e.AudioSourceId === _this.audioSourceId && e.AudioNodeId === _this.audioNodeId) { + if (!_this.micMetric) { + _this.micMetric = { + End: e.EventTime, + Name: "Microphone", + Start: _this.micStartTime, + }; + } + } + if (e instanceof RecognitionEvents_1.ConnectingToServiceEvent && e.RequestId === _this.requestId) { + _this.connectionId = e.ConnectionId; + } + if (e instanceof Exports_1.ConnectionStartEvent && e.ConnectionId === _this.connectionId) { + _this.connectionStartTime = e.EventTime; + } + if (e instanceof Exports_1.ConnectionEstablishedEvent && e.ConnectionId === _this.connectionId) { + if (!_this.connectionEstablishMetric) { + _this.connectionEstablishMetric = { + End: e.EventTime, + Id: _this.connectionId, + Name: "Connection", + Start: _this.connectionStartTime, + }; + } + } + if (e instanceof Exports_1.ConnectionEstablishErrorEvent && e.ConnectionId === _this.connectionId) { + if (!_this.connectionEstablishMetric) { + _this.connectionEstablishMetric = { + End: e.EventTime, + Error: _this.GetConnectionError(e.StatusCode), + Id: _this.connectionId, + Name: "Connection", + Start: _this.connectionStartTime, + }; + } + } + if (e instanceof Exports_1.ConnectionMessageReceivedEvent && e.ConnectionId === _this.connectionId) { + if (e.Message && e.Message.Headers && e.Message.Headers.path) { + if (!_this.receivedMessages[e.Message.Headers.path]) { + _this.receivedMessages[e.Message.Headers.path] = new Array(); + } + _this.receivedMessages[e.Message.Headers.path].push(e.NetworkReceivedTime); + } + } + }; + this.GetTelemetry = function () { + var metrics = new Array(); + if (_this.listeningTriggerMetric) { + metrics.push(_this.listeningTriggerMetric); + } + if (_this.micMetric) { + metrics.push(_this.micMetric); + } + if (_this.connectionEstablishMetric) { + metrics.push(_this.connectionEstablishMetric); + } + var telemetry = { + Metrics: metrics, + ReceivedMessages: _this.receivedMessages, + }; + var json = JSON.stringify(telemetry); + // We dont want to send the same telemetry again. So clean those out. + _this.receivedMessages = {}; + _this.listeningTriggerMetric = null; + _this.micMetric = null; + _this.connectionEstablishMetric = null; + return json; + }; + this.Dispose = function () { + _this.isDisposed = true; + }; + this.GetConnectionError = function (statusCode) { + /* + -- Websocket status codes -- + NormalClosure = 1000, + EndpointUnavailable = 1001, + ProtocolError = 1002, + InvalidMessageType = 1003, + Empty = 1005, + InvalidPayloadData = 1007, + PolicyViolation = 1008, + MessageTooBig = 1009, + MandatoryExtension = 1010, + InternalServerError = 1011 + */ + switch (statusCode) { + case 400: + case 1002: + case 1003: + case 1005: + case 1007: + case 1008: + case 1009: return "BadRequest"; + case 401: return "Unauthorized"; + case 403: return "Forbidden"; + case 503: + case 1001: return "ServerUnavailable"; + case 500: + case 1011: return "ServerError"; + case 408: + case 504: return "Timeout"; + default: return "statuscode:" + statusCode.toString(); + } + }; + this.requestId = requestId; + this.audioSourceId = audioSourceId; + this.audioNodeId = audioNodeId; + this.receivedMessages = {}; + } + return ServiceTelemetryListener; +}()); +exports.ServiceTelemetryListener = ServiceTelemetryListener; + + + +/***/ }), +/* 41 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var PathHeaderName = "path"; +var ContentTypeHeaderName = "content-type"; +var RequestIdHeaderName = "x-requestid"; +var RequestTimestampHeaderName = "x-timestamp"; +var SpeechConnectionMessage = /** @class */ (function (_super) { + __extends(SpeechConnectionMessage, _super); + function SpeechConnectionMessage(messageType, path, requestId, contentType, body, additionalHeaders, id) { + var _this = this; + if (!path) { + throw new Exports_1.ArgumentNullError("path"); + } + if (!requestId) { + throw new Exports_1.ArgumentNullError("requestId"); + } + var headers = {}; + headers[PathHeaderName] = path; + headers[RequestIdHeaderName] = requestId; + headers[RequestTimestampHeaderName] = new Date().toISOString(); + if (contentType) { + headers[ContentTypeHeaderName] = contentType; + } + if (additionalHeaders) { + for (var headerName in additionalHeaders) { + if (headerName) { + headers[headerName] = additionalHeaders[headerName]; + } + } + } + if (id) { + _this = _super.call(this, messageType, body, headers, id) || this; + } + else { + _this = _super.call(this, messageType, body, headers) || this; + } + _this.path = path; + _this.requestId = requestId; + _this.contentType = contentType; + _this.additionalHeaders = additionalHeaders; + return _this; + } + Object.defineProperty(SpeechConnectionMessage.prototype, "Path", { + get: function () { + return this.path; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SpeechConnectionMessage.prototype, "RequestId", { + get: function () { + return this.requestId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SpeechConnectionMessage.prototype, "ContentType", { + get: function () { + return this.contentType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SpeechConnectionMessage.prototype, "AdditionalHeaders", { + get: function () { + return this.additionalHeaders; + }, + enumerable: true, + configurable: true + }); + SpeechConnectionMessage.FromConnectionMessage = function (message) { + var path = null; + var requestId = null; + var contentType = null; + var requestTimestamp = null; + var additionalHeaders = {}; + if (message.Headers) { + for (var headerName in message.Headers) { + if (headerName) { + if (headerName.toLowerCase() === PathHeaderName.toLowerCase()) { + path = message.Headers[headerName]; + } + else if (headerName.toLowerCase() === RequestIdHeaderName.toLowerCase()) { + requestId = message.Headers[headerName]; + } + else if (headerName.toLowerCase() === RequestTimestampHeaderName.toLowerCase()) { + requestTimestamp = message.Headers[headerName]; + } + else if (headerName.toLowerCase() === ContentTypeHeaderName.toLowerCase()) { + contentType = message.Headers[headerName]; + } + else { + additionalHeaders[headerName] = message.Headers[headerName]; + } + } + } + } + return new SpeechConnectionMessage(message.MessageType, path, requestId, contentType, message.Body, additionalHeaders, message.Id); + }; + return SpeechConnectionMessage; +}(Exports_1.ConnectionMessage)); +exports.SpeechConnectionMessage = SpeechConnectionMessage; + + + +/***/ }), +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var RecognitionStatus; +(function (RecognitionStatus) { + RecognitionStatus[RecognitionStatus["Success"] = 0] = "Success"; + RecognitionStatus[RecognitionStatus["NoMatch"] = 1] = "NoMatch"; + RecognitionStatus[RecognitionStatus["InitialSilenceTimeout"] = 2] = "InitialSilenceTimeout"; + RecognitionStatus[RecognitionStatus["BabbleTimeout"] = 3] = "BabbleTimeout"; + RecognitionStatus[RecognitionStatus["Error"] = 4] = "Error"; + RecognitionStatus[RecognitionStatus["EndOfDictation"] = 5] = "EndOfDictation"; +})(RecognitionStatus = exports.RecognitionStatus || (exports.RecognitionStatus = {})); + + + +/***/ }), +/* 43 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(0); +var CRLF = "\r\n"; +var WebsocketMessageFormatter = /** @class */ (function () { + function WebsocketMessageFormatter() { + var _this = this; + this.ToConnectionMessage = function (message) { + var deferral = new Exports_1.Deferred(); + try { + if (message.MessageType === Exports_1.MessageType.Text) { + var textMessage = message.TextContent; + var headers = {}; + var body = null; + if (textMessage) { + var headerBodySplit = textMessage.split("\r\n\r\n"); + if (headerBodySplit && headerBodySplit.length > 0) { + headers = _this.ParseHeaders(headerBodySplit[0]); + if (headerBodySplit.length > 1) { + body = headerBodySplit[1]; + } + } + } + deferral.Resolve(new Exports_1.ConnectionMessage(message.MessageType, body, headers, message.Id)); + } + else if (message.MessageType === Exports_1.MessageType.Binary) { + var binaryMessage = message.BinaryContent; + var headers = {}; + var body = null; + if (!binaryMessage || binaryMessage.byteLength < 2) { + throw new Error("Invalid binary message format. Header length missing."); + } + var dataView = new DataView(binaryMessage); + var headerLength = dataView.getInt16(0); + if (binaryMessage.byteLength < headerLength + 2) { + throw new Error("Invalid binary message format. Header content missing."); + } + var headersString = ""; + for (var i = 0; i < headerLength; i++) { + headersString += String.fromCharCode((dataView).getInt8(i + 2)); + } + headers = _this.ParseHeaders(headersString); + if (binaryMessage.byteLength > headerLength + 2) { + body = binaryMessage.slice(2 + headerLength); + } + deferral.Resolve(new Exports_1.ConnectionMessage(message.MessageType, body, headers, message.Id)); + } + } + catch (e) { + deferral.Reject("Error formatting the message. Error: " + e); + } + return deferral.Promise(); + }; + this.FromConnectionMessage = function (message) { + var deferral = new Exports_1.Deferred(); + try { + if (message.MessageType === Exports_1.MessageType.Text) { + var payload = "" + _this.MakeHeaders(message) + CRLF + (message.TextBody ? message.TextBody : ""); + deferral.Resolve(new Exports_1.RawWebsocketMessage(Exports_1.MessageType.Text, payload, message.Id)); + } + else if (message.MessageType === Exports_1.MessageType.Binary) { + var headersString = _this.MakeHeaders(message); + var content = message.BinaryBody; + var headerInt8Array = new Int8Array(_this.StringToArrayBuffer(headersString)); + var payload = new ArrayBuffer(2 + headerInt8Array.byteLength + (content ? content.byteLength : 0)); + var dataView = new DataView(payload); + dataView.setInt16(0, headerInt8Array.length); + for (var i = 0; i < headerInt8Array.byteLength; i++) { + dataView.setInt8(2 + i, headerInt8Array[i]); + } + if (content) { + var bodyInt8Array = new Int8Array(content); + for (var i = 0; i < bodyInt8Array.byteLength; i++) { + dataView.setInt8(2 + headerInt8Array.byteLength + i, bodyInt8Array[i]); + } + } + deferral.Resolve(new Exports_1.RawWebsocketMessage(Exports_1.MessageType.Binary, payload, message.Id)); + } + } + catch (e) { + deferral.Reject("Error formatting the message. " + e); + } + return deferral.Promise(); + }; + this.MakeHeaders = function (message) { + var headersString = ""; + if (message.Headers) { + for (var header in message.Headers) { + if (header) { + headersString += header + ": " + message.Headers[header] + CRLF; + } + } + } + return headersString; + }; + this.ParseHeaders = function (headersString) { + var headers = {}; + if (headersString) { + var headerMatches = headersString.match(/[^\r\n]+/g); + if (headers) { + for (var _i = 0, headerMatches_1 = headerMatches; _i < headerMatches_1.length; _i++) { + var header = headerMatches_1[_i]; + if (header) { + var separatorIndex = header.indexOf(":"); + var headerName = separatorIndex > 0 ? header.substr(0, separatorIndex).trim().toLowerCase() : header; + var headerValue = separatorIndex > 0 && header.length > (separatorIndex + 1) ? + header.substr(separatorIndex + 1).trim() : + ""; + headers[headerName] = headerValue; + } + } + } + } + return headers; + }; + this.StringToArrayBuffer = function (str) { + var buffer = new ArrayBuffer(str.length); + var view = new DataView(buffer); + for (var i = 0; i < str.length; i++) { + view.setUint8(i, str.charCodeAt(i)); + } + return buffer; + }; + } + return WebsocketMessageFormatter; +}()); +exports.WebsocketMessageFormatter = WebsocketMessageFormatter; + + + +/***/ }), +/* 44 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", { value: true }); +__export(__webpack_require__(45)); +__export(__webpack_require__(16)); + + + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Exports_1 = __webpack_require__(3); +var Exports_2 = __webpack_require__(5); +var SpeechConnectionFactory_1 = __webpack_require__(16); +var CreateRecognizer = function (recognizerConfig, authentication) { + return CreateRecognizerWithPcmRecorder(recognizerConfig, authentication); +}; +exports.CreateRecognizer = CreateRecognizer; +var CreateRecognizerWithPcmRecorder = function (recognizerConfig, authentication) { + return CreateRecognizerWithCustomAudioSource(recognizerConfig, authentication, new Exports_1.MicAudioSource(new Exports_1.PcmRecorder())); +}; +exports.CreateRecognizerWithPcmRecorder = CreateRecognizerWithPcmRecorder; +var CreateRecognizerWithFileAudioSource = function (recognizerConfig, authentication, file) { + return CreateRecognizerWithCustomAudioSource(recognizerConfig, authentication, new Exports_1.FileAudioSource(file)); +}; +exports.CreateRecognizerWithFileAudioSource = CreateRecognizerWithFileAudioSource; +var CreateRecognizerWithCustomAudioSource = function (recognizerConfig, authentication, audioSource) { + return new Exports_2.Recognizer(authentication, new SpeechConnectionFactory_1.SpeechConnectionFactory(), audioSource, recognizerConfig); +}; +exports.CreateRecognizerWithCustomAudioSource = CreateRecognizerWithCustomAudioSource; + + + +/***/ }) +/******/ ]); +//# sourceMappingURL=speech.sdk.bundle.js.map \ No newline at end of file diff --git a/distrib/speech.sdk.bundle.js.map b/distrib/speech.sdk.bundle.js.map new file mode 100644 index 0000000..d9eb7ff --- /dev/null +++ b/distrib/speech.sdk.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap 9bf3cf029f1c9b09bcaa","webpack:///../src/common/Exports.ts","webpack:///../src/common/Error.ts","webpack:///../src/common/Guid.ts","webpack:///../src/common.browser/Exports.ts","webpack:///../src/common/PlatformEvent.ts","webpack:///../src/sdk/speech/Exports.ts","webpack:///../src/sdk/speech/IAuthentication.ts","webpack:///../src/sdk/speech/RecognitionEvents.ts","webpack:///../src/common/ConnectionMessage.ts","webpack:///../src/common/EventSource.ts","webpack:///../src/common/InMemoryStorage.ts","webpack:///../src/common/List.ts","webpack:///../src/common/Promise.ts","webpack:///../src/common/Queue.ts","webpack:///../src/common.browser/WebsocketMessageAdapter.ts","webpack:///../src/sdk/speech/RecognizerConfig.ts","webpack:///../src/sdk/speech.browser/SpeechConnectionFactory.ts","webpack:///./samples/browser/sample_app.js","webpack:///../Speech.Browser.Sdk.ts","webpack:///../src/common.browser/ConsoleLoggingListener.ts","webpack:///../src/common/AudioSourceEvents.ts","webpack:///../src/common/ConnectionEvents.ts","webpack:///../src/common/ConnectionOpenResponse.ts","webpack:///../src/common/Events.ts","webpack:///../src/common/IConnection.ts","webpack:///../src/common/RawWebsocketMessage.ts","webpack:///../src/common/RiffPcmEncoder.ts","webpack:///../src/common/Storage.ts","webpack:///../src/common/Stream.ts","webpack:///../src/common.browser/LocalStorage.ts","webpack:///../src/common.browser/MicAudioSource.ts","webpack:///../src/common.browser/FileAudioSource.ts","webpack:///../src/common.browser/OpusRecorder.ts","webpack:///../src/common.browser/PCMRecorder.ts","webpack:///../src/common.browser/SessionStorage.ts","webpack:///../src/common.browser/Timer.ts","webpack:///../src/common.browser/WebsocketConnection.ts","webpack:///../src/sdk/speech/CognitiveSubscriptionKeyAuthentication.ts","webpack:///../src/sdk/speech/CognitiveTokenAuthentication.ts","webpack:///../src/sdk/speech/Recognizer.ts","webpack:///../src/sdk/speech/ServiceTelemetryListener.Internal.ts","webpack:///../src/sdk/speech/SpeechConnectionMessage.Internal.ts","webpack:///../src/sdk/speech/SpeechResults.ts","webpack:///../src/sdk/speech/WebsocketMessageFormatter.ts","webpack:///../src/sdk/speech.browser/Exports.ts","webpack:///../src/sdk/speech.browser/Recognizer.ts"],"names":[],"mappings":"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","file":"speech.sdk.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 17);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9bf3cf029f1c9b09bcaa","\r\nexport * from \"./AudioSourceEvents\";\r\nexport * from \"./ConnectionEvents\";\r\nexport * from \"./ConnectionMessage\";\r\nexport * from \"./ConnectionOpenResponse\";\r\nexport * from \"./Error\";\r\nexport * from \"./Events\";\r\nexport * from \"./EventSource\";\r\nexport * from \"./Guid\";\r\nexport * from \"./IAudioSource\";\r\nexport * from \"./IConnection\";\r\nexport * from \"./IDetachable\";\r\nexport * from \"./IDictionary\";\r\nexport * from \"./IDisposable\";\r\nexport * from \"./IEventSource\";\r\nexport * from \"./IKeyValueStorage\";\r\nexport * from \"./InMemoryStorage\";\r\nexport * from \"./ITimer\";\r\nexport * from \"./IWebsocketMessageFormatter\";\r\nexport * from \"./List\";\r\nexport * from \"./PlatformEvent\";\r\nexport * from \"./Promise\";\r\nexport * from \"./Queue\";\r\nexport * from \"./RawWebsocketMessage\";\r\nexport * from \"./RiffPcmEncoder\";\r\nexport * from \"./Storage\";\r\nexport * from \"./Stream\";\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/Exports.ts","\r\n/**\r\n * The error that is thrown when an argument passed in is null.\r\n *\r\n * @export\r\n * @class ArgumentNullError\r\n * @extends {Error}\r\n */\r\nexport class ArgumentNullError extends Error {\r\n\r\n /**\r\n * Creates an instance of ArgumentNullError.\r\n *\r\n * @param {string} argumentName Name of the argument that is null\r\n *\r\n * @memberOf ArgumentNullError\r\n */\r\n public constructor(argumentName: string) {\r\n super(argumentName);\r\n this.name = \"ArgumentNull\";\r\n this.message = argumentName;\r\n }\r\n}\r\n\r\n/**\r\n * The error that is thrown when an invalid operation is performed in the code.\r\n *\r\n * @export\r\n * @class InvalidOperationError\r\n * @extends {Error}\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class InvalidOperationError extends Error {\r\n\r\n /**\r\n * Creates an instance of InvalidOperationError.\r\n *\r\n * @param {string} error The error\r\n *\r\n * @memberOf InvalidOperationError\r\n */\r\n public constructor(error: string) {\r\n super(error);\r\n this.name = \"InvalidOperation\";\r\n this.message = error;\r\n }\r\n}\r\n\r\n/**\r\n * The error that is thrown when an object is disposed.\r\n *\r\n * @export\r\n * @class ObjectDisposedError\r\n * @extends {Error}\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ObjectDisposedError extends Error {\r\n\r\n /**\r\n * Creates an instance of ObjectDisposedError.\r\n *\r\n * @param {string} objectName The object that is disposed\r\n * @param {string} error The error\r\n *\r\n * @memberOf ObjectDisposedError\r\n */\r\n public constructor(objectName: string, error?: string) {\r\n super(error);\r\n this.name = objectName + \"ObjectDisposed\";\r\n this.message = error;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/Error.ts","\r\nconst CreateGuid: () => string = (): string => {\r\n let d = new Date().getTime();\r\n const guid = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c: string) => {\r\n const r = (d + Math.random() * 16) % 16 | 0;\r\n d = Math.floor(d / 16);\r\n return (c === \"x\" ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n\r\n return guid;\r\n};\r\n\r\nconst CreateNoDashGuid: () => string = (): string => {\r\n return CreateGuid().replace(new RegExp(\"-\", \"g\"), \"\").toUpperCase();\r\n};\r\n\r\nexport { CreateGuid, CreateNoDashGuid };\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/Guid.ts","\r\nexport * from \"./ConsoleLoggingListener\";\r\nexport * from \"./IRecorder\";\r\nexport * from \"./LocalStorage\";\r\nexport * from \"./MicAudioSource\";\r\nexport * from \"./FileAudioSource\";\r\nexport * from \"./OpusRecorder\";\r\nexport * from \"./PCMRecorder\";\r\nexport * from \"./SessionStorage\";\r\nexport * from \"./Timer\";\r\nexport * from \"./WebsocketConnection\";\r\nexport * from \"./WebsocketMessageAdapter\";\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common.browser/Exports.ts","import { CreateNoDashGuid } from \"./Guid\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\n\r\nexport enum EventType {\r\n Debug,\r\n Info,\r\n Warning,\r\n Error,\r\n}\r\n\r\nexport class PlatformEvent {\r\n private name: string;\r\n private eventId: string;\r\n private eventTime: string;\r\n private eventType: EventType;\r\n private metadata: IStringDictionary;\r\n\r\n constructor(eventName: string, eventType: EventType) {\r\n this.name = eventName;\r\n this.eventId = CreateNoDashGuid();\r\n this.eventTime = new Date().toISOString();\r\n this.eventType = eventType;\r\n this.metadata = { };\r\n }\r\n\r\n public get Name(): string {\r\n return this.name;\r\n }\r\n\r\n public get EventId(): string {\r\n return this.eventId;\r\n }\r\n\r\n public get EventTime(): string {\r\n return this.eventTime;\r\n }\r\n\r\n public get EventType(): EventType {\r\n return this.eventType;\r\n }\r\n\r\n public get Metadata(): IStringDictionary {\r\n return this.metadata;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/PlatformEvent.ts","\r\n// IMPORTANT - Dont publish internal modules.\r\n\r\nexport * from \"./CognitiveSubscriptionKeyAuthentication\";\r\nexport * from \"./CognitiveTokenAuthentication\";\r\nexport * from \"./IAuthentication\";\r\nexport * from \"./IConnectionFactory\";\r\nexport * from \"./RecognitionEvents\";\r\nexport * from \"./Recognizer\";\r\nexport * from \"./RecognizerConfig\";\r\nexport * from \"./SpeechResults\";\r\nexport * from \"./WebsocketMessageFormatter\";\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech/Exports.ts","import { Promise } from \"../../common/Exports\";\r\n\r\nexport interface IAuthentication {\r\n Fetch(authFetchEventId: string): Promise;\r\n FetchOnExpiry(authFetchEventId: string): Promise;\r\n}\r\n\r\nexport class AuthInfo {\r\n private headerName: string;\r\n private token: string;\r\n\r\n public constructor(headerName: string, token: string) {\r\n this.headerName = headerName;\r\n this.token = token;\r\n }\r\n\r\n public get HeaderName(): string {\r\n return this.headerName;\r\n }\r\n\r\n public get Token(): string {\r\n return this.token;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech/IAuthentication.ts","import { EventType, PlatformEvent } from \"../../common/Exports\";\r\nimport {\r\n IDetailedSpeechPhrase,\r\n ISimpleSpeechPhrase,\r\n ISpeechEndDetectedResult,\r\n ISpeechFragment,\r\n ISpeechStartDetectedResult,\r\n} from \"./SpeechResults\";\r\n\r\nexport class SpeechRecognitionEvent extends PlatformEvent {\r\n private requestId: string;\r\n\r\n constructor(eventName: string, requestId: string, eventType: EventType = EventType.Info) {\r\n super(eventName, eventType);\r\n\r\n this.requestId = requestId;\r\n }\r\n\r\n public get RequestId(): string {\r\n return this.requestId;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SpeechRecognitionResultEvent extends SpeechRecognitionEvent {\r\n private result: TResult;\r\n\r\n constructor(eventName: string, requestId: string, result: TResult) {\r\n super(eventName, requestId);\r\n this.result = result;\r\n }\r\n\r\n public get Result(): TResult {\r\n return this.result;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class RecognitionTriggeredEvent extends SpeechRecognitionEvent {\r\n private audioSourceId: string;\r\n private audioNodeId: string;\r\n\r\n constructor(requestId: string, audioSourceId: string, audioNodeId: string) {\r\n super(\"RecognitionTriggeredEvent\", requestId);\r\n\r\n this.audioSourceId = audioSourceId;\r\n this.audioNodeId = audioNodeId;\r\n }\r\n\r\n public get AudioSourceId(): string {\r\n return this.audioSourceId;\r\n }\r\n\r\n public get AudioNodeId(): string {\r\n return this.audioNodeId;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ListeningStartedEvent extends SpeechRecognitionEvent {\r\n private audioSourceId: string;\r\n private audioNodeId: string;\r\n\r\n constructor(requestId: string, audioSourceId: string, audioNodeId: string) {\r\n super(\"ListeningStartedEvent\", requestId);\r\n this.audioSourceId = audioSourceId;\r\n this.audioNodeId = audioNodeId;\r\n }\r\n\r\n public get AudioSourceId(): string {\r\n return this.audioSourceId;\r\n }\r\n\r\n public get AudioNodeId(): string {\r\n return this.audioNodeId;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ConnectingToServiceEvent extends SpeechRecognitionEvent {\r\n private authFetchEventid: string;\r\n private connectionId: string;\r\n\r\n constructor(requestId: string, authFetchEventid: string, connectionId: string) {\r\n super(\"ConnectingToServiceEvent\", requestId);\r\n this.authFetchEventid = authFetchEventid;\r\n this.connectionId = connectionId;\r\n }\r\n\r\n public get AuthFetchEventid(): string {\r\n return this.authFetchEventid;\r\n }\r\n\r\n public get ConnectionId(): string {\r\n return this.connectionId;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class RecognitionStartedEvent extends SpeechRecognitionEvent {\r\n private audioSourceId: string;\r\n private audioNodeId: string;\r\n private authFetchEventId: string;\r\n private connectionId: string;\r\n\r\n constructor(requestId: string, audioSourceId: string, audioNodeId: string, authFetchEventId: string, connectionId: string) {\r\n super(\"RecognitionStartedEvent\", requestId);\r\n\r\n this.audioSourceId = audioSourceId;\r\n this.audioNodeId = audioNodeId;\r\n this.authFetchEventId = authFetchEventId;\r\n this.connectionId = connectionId;\r\n }\r\n\r\n public get AudioSourceId(): string {\r\n return this.audioSourceId;\r\n }\r\n\r\n public get AudioNodeId(): string {\r\n return this.audioNodeId;\r\n }\r\n\r\n public get AuthFetchEventId(): string {\r\n return this.authFetchEventId;\r\n }\r\n\r\n public get ConnectionId(): string {\r\n return this.connectionId;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SpeechStartDetectedEvent extends SpeechRecognitionResultEvent {\r\n constructor(requestId: string, result: ISpeechStartDetectedResult) {\r\n super(\"SpeechStartDetectedEvent\", requestId, result);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SpeechHypothesisEvent extends SpeechRecognitionResultEvent {\r\n constructor(requestId: string, result: ISpeechFragment) {\r\n super(\"SpeechHypothesisEvent\", requestId, result);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SpeechFragmentEvent extends SpeechRecognitionResultEvent {\r\n constructor(requestId: string, result: ISpeechFragment) {\r\n super(\"SpeechFragmentEvent\", requestId, result);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SpeechEndDetectedEvent extends SpeechRecognitionResultEvent {\r\n constructor(requestId: string, result: ISpeechEndDetectedResult) {\r\n super(\"SpeechEndDetectedEvent\", requestId, result);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SpeechSimplePhraseEvent extends SpeechRecognitionResultEvent {\r\n constructor(requestId: string, result: ISimpleSpeechPhrase) {\r\n super(\"SpeechSimplePhraseEvent\", requestId, result);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SpeechDetailedPhraseEvent extends SpeechRecognitionResultEvent {\r\n constructor(requestId: string, result: IDetailedSpeechPhrase) {\r\n super(\"SpeechDetailedPhraseEvent\", requestId, result);\r\n }\r\n}\r\n\r\nexport enum RecognitionCompletionStatus {\r\n Success,\r\n AudioSourceError,\r\n AudioSourceTimeout,\r\n AuthTokenFetchError,\r\n AuthTokenFetchTimeout,\r\n UnAuthorized,\r\n ConnectTimeout,\r\n ConnectError,\r\n ClientRecognitionActivityTimeout,\r\n UnknownError,\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class RecognitionEndedEvent extends SpeechRecognitionEvent {\r\n private audioSourceId: string;\r\n private audioNodeId: string;\r\n private authFetchEventId: string;\r\n private connectionId: string;\r\n private serviceTag: string;\r\n private status: RecognitionCompletionStatus;\r\n private error: string;\r\n\r\n constructor(\r\n requestId: string,\r\n audioSourceId: string,\r\n audioNodeId: string,\r\n authFetchEventId: string,\r\n connectionId: string,\r\n serviceTag: string,\r\n status: RecognitionCompletionStatus,\r\n error: string) {\r\n\r\n super(\"RecognitionEndedEvent\", requestId, status === RecognitionCompletionStatus.Success ? EventType.Info : EventType.Error);\r\n\r\n this.audioSourceId = audioSourceId;\r\n this.audioNodeId = audioNodeId;\r\n this.connectionId = connectionId;\r\n this.authFetchEventId = authFetchEventId;\r\n this.status = status;\r\n this.error = error;\r\n this.serviceTag = serviceTag;\r\n }\r\n\r\n public get AudioSourceId(): string {\r\n return this.audioSourceId;\r\n }\r\n\r\n public get AudioNodeId(): string {\r\n return this.audioNodeId;\r\n }\r\n\r\n public get AuthFetchEventId(): string {\r\n return this.authFetchEventId;\r\n }\r\n\r\n public get ConnectionId(): string {\r\n return this.connectionId;\r\n }\r\n\r\n public get ServiceTag(): string {\r\n return this.serviceTag;\r\n }\r\n\r\n public get Status(): RecognitionCompletionStatus {\r\n return this.status;\r\n }\r\n\r\n public get Error(): string {\r\n return this.error;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech/RecognitionEvents.ts","import { InvalidOperationError } from \"./Error\";\r\nimport { CreateNoDashGuid } from \"./Guid\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\n\r\nexport enum MessageType {\r\n Text,\r\n Binary,\r\n}\r\n\r\nexport class ConnectionMessage {\r\n\r\n private messageType: MessageType;\r\n private headers: IStringDictionary;\r\n private body: any = null;\r\n\r\n private id: string;\r\n\r\n public constructor(\r\n messageType: MessageType,\r\n body: any,\r\n headers?: IStringDictionary,\r\n id?: string) {\r\n\r\n if (messageType === MessageType.Text && body && !(typeof (body) === \"string\")) {\r\n throw new InvalidOperationError(\"Payload must be a string\");\r\n }\r\n\r\n if (messageType === MessageType.Binary && body && !(body instanceof ArrayBuffer)) {\r\n throw new InvalidOperationError(\"Payload must be ArrayBuffer\");\r\n }\r\n\r\n this.messageType = messageType;\r\n this.body = body;\r\n this.headers = headers ? headers : {};\r\n this.id = id ? id : CreateNoDashGuid();\r\n }\r\n\r\n public get MessageType(): MessageType {\r\n return this.messageType;\r\n }\r\n\r\n public get Headers(): any {\r\n return this.headers;\r\n }\r\n\r\n public get Body(): any {\r\n return this.body;\r\n }\r\n\r\n public get TextBody(): string {\r\n if (this.messageType === MessageType.Binary) {\r\n throw new InvalidOperationError(\"Not supported for binary message\");\r\n }\r\n\r\n return this.body as string;\r\n }\r\n\r\n public get BinaryBody(): ArrayBuffer {\r\n if (this.messageType === MessageType.Text) {\r\n throw new InvalidOperationError(\"Not supported for text message\");\r\n }\r\n\r\n return this.body;\r\n }\r\n\r\n public get Id(): string {\r\n return this.id;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/ConnectionMessage.ts","import { ObjectDisposedError } from \"./Error\";\r\nimport { CreateNoDashGuid } from \"./Guid\";\r\nimport { IDetachable } from \"./IDetachable\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\nimport { IEventListener, IEventSource } from \"./IEventSource\";\r\nimport { PlatformEvent } from \"./PlatformEvent\";\r\n\r\nexport class EventSource implements IEventSource {\r\n private eventListeners: IStringDictionary<(event: TEvent) => void> = {};\r\n private metadata: IStringDictionary;\r\n private isDisposed: boolean = false;\r\n\r\n constructor(metadata?: IStringDictionary) {\r\n this.metadata = metadata;\r\n }\r\n\r\n public OnEvent = (event: TEvent): void => {\r\n if (this.IsDisposed()) {\r\n throw (new ObjectDisposedError(\"EventSource\"));\r\n }\r\n\r\n if (this.Metadata) {\r\n for (const paramName in this.Metadata) {\r\n if (paramName) {\r\n if (event.Metadata) {\r\n if (!event.Metadata[paramName]) {\r\n event.Metadata[paramName] = this.Metadata[paramName];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const eventId in this.eventListeners) {\r\n if (eventId && this.eventListeners[eventId]) {\r\n this.eventListeners[eventId](event);\r\n }\r\n }\r\n }\r\n\r\n public Attach = (onEventCallback: (event: TEvent) => void): IDetachable => {\r\n const id = CreateNoDashGuid();\r\n this.eventListeners[id] = onEventCallback;\r\n return {\r\n Detach: () => {\r\n delete this.eventListeners[id];\r\n },\r\n };\r\n }\r\n\r\n public AttachListener = (listener: IEventListener): IDetachable => {\r\n return this.Attach(listener.OnEvent);\r\n }\r\n\r\n public IsDisposed = (): boolean => {\r\n return this.isDisposed;\r\n }\r\n\r\n public Dispose = (): void => {\r\n this.eventListeners = null;\r\n this.isDisposed = true;\r\n }\r\n\r\n public get Metadata(): IStringDictionary {\r\n return this.metadata;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/EventSource.ts","import { ArgumentNullError } from \"./Error\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\nimport { IKeyValueStorage } from \"./IKeyValueStorage\";\r\n\r\nexport class InMemoryStorage implements IKeyValueStorage {\r\n\r\n private store: IStringDictionary = {};\r\n\r\n public Get = (key: string): string => {\r\n if (!key) {\r\n throw new ArgumentNullError(\"key\");\r\n }\r\n\r\n return this.store[key];\r\n }\r\n\r\n public GetOrAdd = (key: string, valueToAdd: string): string => {\r\n if (!key) {\r\n throw new ArgumentNullError(\"key\");\r\n }\r\n\r\n if (this.store[key] === undefined) {\r\n this.store[key] = valueToAdd;\r\n }\r\n\r\n return this.store[key];\r\n }\r\n\r\n public Set = (key: string, value: string): void => {\r\n if (!key) {\r\n throw new ArgumentNullError(\"key\");\r\n }\r\n\r\n this.store[key] = value;\r\n }\r\n\r\n public Remove = (key: string): void => {\r\n if (!key) {\r\n throw new ArgumentNullError(\"key\");\r\n }\r\n\r\n if (this.store[key] !== undefined) {\r\n delete this.store[key];\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/InMemoryStorage.ts","import { ObjectDisposedError } from \"./Error\";\r\nimport { IDetachable } from \"./IDetachable\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\nimport { IDisposable } from \"./IDisposable\";\r\n\r\nexport interface IList extends IDisposable {\r\n Get(itemIndex: number): TItem;\r\n First(): TItem;\r\n Last(): TItem;\r\n\r\n Add(item: TItem): void;\r\n InsertAt(index: number, item: TItem): void;\r\n\r\n RemoveFirst(): TItem;\r\n RemoveLast(): TItem;\r\n RemoveAt(index: number): TItem;\r\n Remove(index: number, count: number): TItem[];\r\n Clear(): void;\r\n\r\n Length(): number;\r\n\r\n OnAdded(addedCallback: () => void): IDetachable;\r\n OnRemoved(removedCallback: () => void): IDetachable;\r\n OnDisposed(disposedCallback: () => void): IDetachable;\r\n\r\n Join(seperator?: string): string;\r\n\r\n ToArray(): TItem[];\r\n\r\n Any(callback?: (item: TItem, index: number) => boolean): boolean;\r\n All(callback: (item: TItem) => boolean): boolean;\r\n ForEach(callback: (item: TItem, index: number) => void): void;\r\n Select(callback: (item: TItem, index: number) => T2): List;\r\n Where(callback: (item: TItem, index: number) => boolean): List;\r\n OrderBy(compareFn: (a: TItem, b: TItem) => number): List;\r\n OrderByDesc(compareFn: (a: TItem, b: TItem) => number): List;\r\n Clone(): List;\r\n Concat(list: List): List;\r\n ConcatArray(array: TItem[]): List;\r\n}\r\n\r\nexport class List implements IList {\r\n private list: TItem[];\r\n private subscriptionIdCounter: number = 0;\r\n private addSubscriptions: IStringDictionary<() => void> = {};\r\n private removeSubscriptions: IStringDictionary<() => void> = {};\r\n private disposedSubscriptions: IStringDictionary<() => void> = {};\r\n private disposeReason: string = null;\r\n\r\n public constructor(list?: TItem[]) {\r\n this.list = [];\r\n // copy the list rather than taking as is.\r\n if (list) {\r\n for (const item of list) {\r\n this.list.push(item);\r\n }\r\n }\r\n }\r\n\r\n public Get = (itemIndex: number): TItem => {\r\n this.ThrowIfDisposed();\r\n return this.list[itemIndex];\r\n }\r\n\r\n public First = (): TItem => {\r\n return this.Get(0);\r\n }\r\n\r\n public Last = (): TItem => {\r\n return this.Get(this.Length() - 1);\r\n }\r\n\r\n public Add = (item: TItem): void => {\r\n this.ThrowIfDisposed();\r\n this.InsertAt(this.list.length, item);\r\n }\r\n\r\n public InsertAt = (index: number, item: TItem): void => {\r\n this.ThrowIfDisposed();\r\n if (index === 0) {\r\n this.list.unshift(item);\r\n } else if (index === this.list.length) {\r\n this.list.push(item);\r\n } else {\r\n this.list.splice(index, 0, item);\r\n }\r\n this.TriggerSubscriptions(this.addSubscriptions);\r\n }\r\n\r\n public RemoveFirst = (): TItem => {\r\n this.ThrowIfDisposed();\r\n return this.RemoveAt(0);\r\n }\r\n\r\n public RemoveLast = (): TItem => {\r\n this.ThrowIfDisposed();\r\n return this.RemoveAt(this.Length() - 1);\r\n }\r\n\r\n public RemoveAt = (index: number): TItem => {\r\n this.ThrowIfDisposed();\r\n return this.Remove(index, 1)[0];\r\n }\r\n\r\n public Remove = (index: number, count: number): TItem[] => {\r\n this.ThrowIfDisposed();\r\n const removedElements = this.list.splice(index, count);\r\n this.TriggerSubscriptions(this.removeSubscriptions);\r\n return removedElements;\r\n }\r\n\r\n public Clear = (): void => {\r\n this.ThrowIfDisposed();\r\n this.Remove(0, this.Length());\r\n }\r\n\r\n public Length = (): number => {\r\n this.ThrowIfDisposed();\r\n return this.list.length;\r\n }\r\n\r\n public OnAdded = (addedCallback: () => void): IDetachable => {\r\n this.ThrowIfDisposed();\r\n const subscriptionId = this.subscriptionIdCounter++;\r\n\r\n this.addSubscriptions[subscriptionId] = addedCallback;\r\n\r\n return {\r\n Detach: () => {\r\n delete this.addSubscriptions[subscriptionId];\r\n },\r\n };\r\n }\r\n\r\n public OnRemoved = (removedCallback: () => void): IDetachable => {\r\n this.ThrowIfDisposed();\r\n const subscriptionId = this.subscriptionIdCounter++;\r\n\r\n this.removeSubscriptions[subscriptionId] = removedCallback;\r\n\r\n return {\r\n Detach: () => {\r\n delete this.removeSubscriptions[subscriptionId];\r\n },\r\n };\r\n }\r\n\r\n public OnDisposed = (disposedCallback: () => void): IDetachable => {\r\n this.ThrowIfDisposed();\r\n const subscriptionId = this.subscriptionIdCounter++;\r\n\r\n this.disposedSubscriptions[subscriptionId] = disposedCallback;\r\n\r\n return {\r\n Detach: () => {\r\n delete this.disposedSubscriptions[subscriptionId];\r\n },\r\n };\r\n }\r\n\r\n public Join = (seperator?: string): string => {\r\n this.ThrowIfDisposed();\r\n return this.list.join(seperator);\r\n }\r\n\r\n public ToArray = (): TItem[] => {\r\n const cloneCopy = Array();\r\n this.list.forEach((val: TItem) => {\r\n cloneCopy.push(val);\r\n });\r\n return cloneCopy;\r\n }\r\n\r\n public Any = (callback?: (item: TItem, index: number) => boolean): boolean => {\r\n this.ThrowIfDisposed();\r\n if (callback) {\r\n return this.Where(callback).Length() > 0;\r\n } else {\r\n return this.Length() > 0;\r\n }\r\n }\r\n\r\n public All = (callback: (item: TItem) => boolean): boolean => {\r\n this.ThrowIfDisposed();\r\n return this.Where(callback).Length() === this.Length();\r\n }\r\n\r\n public ForEach = (callback: (item: TItem, index: number) => void): void => {\r\n this.ThrowIfDisposed();\r\n for (let i = 0; i < this.Length(); i++) {\r\n callback(this.list[i], i);\r\n }\r\n }\r\n\r\n public Select = (callback: (item: TItem, index: number) => T2): List => {\r\n this.ThrowIfDisposed();\r\n const selectList: T2[] = [];\r\n for (let i = 0; i < this.list.length; i++) {\r\n selectList.push(callback(this.list[i], i));\r\n }\r\n\r\n return new List(selectList);\r\n }\r\n\r\n public Where = (callback: (item: TItem, index: number) => boolean): List => {\r\n this.ThrowIfDisposed();\r\n const filteredList = new List();\r\n for (let i = 0; i < this.list.length; i++) {\r\n if (callback(this.list[i], i)) {\r\n filteredList.Add(this.list[i]);\r\n }\r\n }\r\n return filteredList;\r\n }\r\n\r\n public OrderBy = (compareFn: (a: TItem, b: TItem) => number): List => {\r\n this.ThrowIfDisposed();\r\n const clonedArray = this.ToArray();\r\n const orderedArray = clonedArray.sort(compareFn);\r\n return new List(orderedArray);\r\n }\r\n\r\n public OrderByDesc = (compareFn: (a: TItem, b: TItem) => number): List => {\r\n this.ThrowIfDisposed();\r\n return this.OrderBy((a: TItem, b: TItem) => compareFn(b, a));\r\n }\r\n\r\n public Clone = (): List => {\r\n this.ThrowIfDisposed();\r\n return new List(this.ToArray());\r\n }\r\n\r\n public Concat = (list: List): List => {\r\n this.ThrowIfDisposed();\r\n return new List(this.list.concat(list.ToArray()));\r\n }\r\n\r\n public ConcatArray = (array: TItem[]): List => {\r\n this.ThrowIfDisposed();\r\n return new List(this.list.concat(array));\r\n }\r\n\r\n public IsDisposed = (): boolean => {\r\n return this.list == null;\r\n }\r\n\r\n public Dispose = (reason?: string): void => {\r\n if (!this.IsDisposed()) {\r\n this.disposeReason = reason;\r\n this.list = null;\r\n this.addSubscriptions = null;\r\n this.removeSubscriptions = null;\r\n this.TriggerSubscriptions(this.disposedSubscriptions);\r\n }\r\n }\r\n\r\n private ThrowIfDisposed = (): void => {\r\n if (this.IsDisposed()) {\r\n throw new ObjectDisposedError(\"List\", this.disposeReason);\r\n }\r\n }\r\n\r\n private TriggerSubscriptions = (subscriptions: IStringDictionary<() => void>): void => {\r\n if (subscriptions) {\r\n for (const subscriptionId in subscriptions) {\r\n if (subscriptionId) {\r\n subscriptions[subscriptionId]();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/List.ts","import { ArgumentNullError } from \"./Error\";\r\n\r\nexport enum PromiseState {\r\n None,\r\n Resolved,\r\n Rejected,\r\n}\r\n\r\nexport interface IPromise {\r\n Result(): PromiseResult;\r\n\r\n ContinueWith(\r\n continuationCallback: (promiseResult: PromiseResult) => TContinuationResult): IPromise;\r\n\r\n ContinueWithPromise(\r\n continuationCallback: (promiseResult: PromiseResult) => IPromise): IPromise;\r\n\r\n OnSuccessContinueWith(\r\n continuationCallback: (result: T) => TContinuationResult): IPromise;\r\n\r\n OnSuccessContinueWithPromise(\r\n continuationCallback: (result: T) => IPromise): IPromise;\r\n\r\n On(successCallback: (result: T) => void, errorCallback: (error: string) => void): IPromise;\r\n\r\n Finally(callback: () => void): IPromise;\r\n}\r\n\r\nexport interface IDeferred {\r\n State(): PromiseState;\r\n\r\n Promise(): IPromise;\r\n\r\n Resolve(result: T): IDeferred;\r\n\r\n Reject(error: string): IDeferred;\r\n}\r\n\r\nexport class PromiseResult {\r\n protected isCompleted: boolean;\r\n protected isError: boolean;\r\n protected error: string;\r\n protected result: T;\r\n\r\n public constructor(promiseResultEventSource: PromiseResultEventSource) {\r\n promiseResultEventSource.On((result: T) => {\r\n if (!this.isCompleted) {\r\n this.isCompleted = true;\r\n this.isError = false;\r\n this.result = result;\r\n }\r\n }, (error: string) => {\r\n if (!this.isCompleted) {\r\n this.isCompleted = true;\r\n this.isError = true;\r\n this.error = error;\r\n }\r\n });\r\n }\r\n\r\n public get IsCompleted(): boolean {\r\n return this.isCompleted;\r\n }\r\n\r\n public get IsError(): boolean {\r\n return this.isError;\r\n }\r\n\r\n public get Error(): string {\r\n return this.error;\r\n }\r\n\r\n public get Result(): T {\r\n return this.result;\r\n }\r\n\r\n public ThrowIfError = (): void => {\r\n if (this.IsError) {\r\n throw this.Error;\r\n }\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class PromiseResultEventSource {\r\n\r\n private onSetResult: (result: T) => void;\r\n private onSetError: (error: string) => void;\r\n\r\n public SetResult = (result: T): void => {\r\n this.onSetResult(result);\r\n }\r\n\r\n public SetError = (error: string): void => {\r\n this.onSetError(error);\r\n }\r\n\r\n public On = (onSetResult: (result: T) => void, onSetError: (error: string) => void): void => {\r\n this.onSetResult = onSetResult;\r\n this.onSetError = onSetError;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class PromiseHelper {\r\n public static WhenAll = (promises: Array>): Promise => {\r\n if (!promises || promises.length === 0) {\r\n throw new ArgumentNullError(\"promises\");\r\n }\r\n\r\n const deferred = new Deferred();\r\n const errors: string[] = [];\r\n let completedPromises: number = 0;\r\n\r\n const checkForCompletion = () => {\r\n completedPromises++;\r\n if (completedPromises === promises.length) {\r\n if (errors.length === 0) {\r\n deferred.Resolve(true);\r\n } else {\r\n deferred.Reject(errors.join(\", \"));\r\n }\r\n }\r\n };\r\n\r\n for (const promise of promises) {\r\n promise.On((r: any) => {\r\n checkForCompletion();\r\n }, (e: string) => {\r\n errors.push(e);\r\n checkForCompletion();\r\n });\r\n }\r\n\r\n return deferred.Promise();\r\n }\r\n\r\n public static FromResult = (result: TResult): Promise => {\r\n const deferred = new Deferred();\r\n deferred.Resolve(result);\r\n return deferred.Promise();\r\n }\r\n\r\n public static FromError = (error: string): Promise => {\r\n const deferred = new Deferred();\r\n deferred.Reject(error);\r\n return deferred.Promise();\r\n }\r\n}\r\n\r\n// TODO: replace with ES6 promises\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class Promise implements IPromise {\r\n\r\n private sink: Sink;\r\n\r\n public constructor(sink: Sink) {\r\n this.sink = sink;\r\n }\r\n\r\n public Result = (): PromiseResult => {\r\n return this.sink.Result;\r\n }\r\n\r\n public ContinueWith = (\r\n continuationCallback: (promiseResult: PromiseResult) => TContinuationResult): Promise => {\r\n\r\n if (!continuationCallback) {\r\n throw new ArgumentNullError(\"continuationCallback\");\r\n }\r\n\r\n const continuationDeferral = new Deferred();\r\n\r\n this.sink.on(\r\n (r: T) => {\r\n try {\r\n const continuationResult: TContinuationResult = continuationCallback(this.sink.Result);\r\n continuationDeferral.Resolve(continuationResult);\r\n } catch (e) {\r\n continuationDeferral.Reject(`'Unhandled callback error: ${e}'`);\r\n }\r\n },\r\n (error: string) => {\r\n try {\r\n const continuationResult: TContinuationResult = continuationCallback(this.sink.Result);\r\n continuationDeferral.Resolve(continuationResult);\r\n } catch (e) {\r\n continuationDeferral.Reject(`'Unhandled callback error: ${e}. InnerError: ${error}'`);\r\n }\r\n },\r\n );\r\n\r\n return continuationDeferral.Promise();\r\n }\r\n\r\n public OnSuccessContinueWith = (\r\n continuationCallback: (result: T) => TContinuationResult): Promise => {\r\n\r\n if (!continuationCallback) {\r\n throw new ArgumentNullError(\"continuationCallback\");\r\n }\r\n\r\n const continuationDeferral = new Deferred();\r\n\r\n this.sink.on(\r\n (r: T) => {\r\n try {\r\n const continuationResult: TContinuationResult = continuationCallback(r);\r\n continuationDeferral.Resolve(continuationResult);\r\n } catch (e) {\r\n continuationDeferral.Reject(`'Unhandled callback error: ${e}'`);\r\n }\r\n },\r\n (error: string) => {\r\n continuationDeferral.Reject(`'Unhandled callback error: ${error}'`);\r\n },\r\n );\r\n\r\n return continuationDeferral.Promise();\r\n }\r\n\r\n public ContinueWithPromise = (\r\n continuationCallback: (promiseResult: PromiseResult) => Promise): Promise => {\r\n\r\n if (!continuationCallback) {\r\n throw new ArgumentNullError(\"continuationCallback\");\r\n }\r\n\r\n const continuationDeferral = new Deferred();\r\n\r\n this.sink.on(\r\n (r: T) => {\r\n try {\r\n const continuationPromise: Promise = continuationCallback(this.sink.Result);\r\n if (!continuationPromise) {\r\n throw new Error(\"'Continuation callback did not return promise'\");\r\n }\r\n continuationPromise.On((continuationResult: TContinuationResult) => {\r\n continuationDeferral.Resolve(continuationResult);\r\n }, (e: string) => {\r\n continuationDeferral.Reject(e);\r\n });\r\n } catch (e) {\r\n continuationDeferral.Reject(`'Unhandled callback error: ${e}'`);\r\n }\r\n },\r\n (error: string) => {\r\n try {\r\n const continuationPromise: Promise = continuationCallback(this.sink.Result);\r\n if (!continuationPromise) {\r\n throw new Error(\"Continuation callback did not return promise\");\r\n }\r\n continuationPromise.On((continuationResult: TContinuationResult) => {\r\n continuationDeferral.Resolve(continuationResult);\r\n }, (e: string) => {\r\n continuationDeferral.Reject(e);\r\n });\r\n } catch (e) {\r\n continuationDeferral.Reject(`'Unhandled callback error: ${e}. InnerError: ${error}'`);\r\n }\r\n },\r\n );\r\n\r\n return continuationDeferral.Promise();\r\n }\r\n\r\n public OnSuccessContinueWithPromise = (\r\n continuationCallback: (result: T) => Promise): Promise => {\r\n\r\n if (!continuationCallback) {\r\n throw new ArgumentNullError(\"continuationCallback\");\r\n }\r\n\r\n const continuationDeferral = new Deferred();\r\n\r\n this.sink.on(\r\n (r: T) => {\r\n try {\r\n const continuationPromise: Promise = continuationCallback(r);\r\n if (!continuationPromise) {\r\n throw new Error(\"Continuation callback did not return promise\");\r\n }\r\n continuationPromise.On((continuationResult: TContinuationResult) => {\r\n continuationDeferral.Resolve(continuationResult);\r\n }, (e: string) => {\r\n continuationDeferral.Reject(e);\r\n });\r\n } catch (e) {\r\n continuationDeferral.Reject(`'Unhandled callback error: ${e}'`);\r\n }\r\n },\r\n (error: string) => {\r\n continuationDeferral.Reject(`'Unhandled callback error: ${error}.'`);\r\n },\r\n );\r\n\r\n return continuationDeferral.Promise();\r\n }\r\n\r\n public On = (\r\n successCallback: (result: T) => void,\r\n errorCallback: (error: string) => void): Promise => {\r\n if (!successCallback) {\r\n throw new ArgumentNullError(\"successCallback\");\r\n }\r\n\r\n if (!errorCallback) {\r\n throw new ArgumentNullError(\"errorCallback\");\r\n }\r\n\r\n this.sink.on(successCallback, errorCallback);\r\n return this;\r\n }\r\n\r\n public Finally = (callback: () => void): Promise => {\r\n if (!callback) {\r\n throw new ArgumentNullError(\"callback\");\r\n }\r\n\r\n const callbackWrapper = (_: any) => {\r\n callback();\r\n };\r\n\r\n return this.On(callbackWrapper, callbackWrapper);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class Deferred implements IDeferred {\r\n\r\n private promise: Promise;\r\n private sink: Sink;\r\n\r\n public constructor() {\r\n this.sink = new Sink();\r\n this.promise = new Promise(this.sink);\r\n }\r\n\r\n public State = (): PromiseState => {\r\n return this.sink.State;\r\n }\r\n\r\n public Promise = (): Promise => {\r\n return this.promise;\r\n }\r\n\r\n public Resolve = (result: T): Deferred => {\r\n this.sink.Resolve(result);\r\n return this;\r\n }\r\n\r\n public Reject = (error: string): Deferred => {\r\n this.sink.Reject(error);\r\n return this;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class Sink {\r\n\r\n private state: PromiseState = PromiseState.None;\r\n private promiseResult: PromiseResult = null;\r\n private promiseResultEvents: PromiseResultEventSource = null;\r\n\r\n private successHandlers: Array<((result: T) => void)> = [];\r\n private errorHandlers: Array<(e: string) => void> = [];\r\n\r\n public constructor() {\r\n this.promiseResultEvents = new PromiseResultEventSource();\r\n this.promiseResult = new PromiseResult(this.promiseResultEvents);\r\n }\r\n\r\n public get State(): PromiseState {\r\n return this.state;\r\n }\r\n\r\n public get Result(): PromiseResult {\r\n return this.promiseResult;\r\n }\r\n\r\n public Resolve = (result: T): void => {\r\n if (this.state !== PromiseState.None) {\r\n throw new Error(\"'Cannot resolve a completed promise'\");\r\n }\r\n\r\n this.state = PromiseState.Resolved;\r\n this.promiseResultEvents.SetResult(result);\r\n\r\n for (let i = 0; i < this.successHandlers.length; i++) {\r\n this.ExecuteSuccessCallback(result, this.successHandlers[i], this.errorHandlers[i]);\r\n }\r\n\r\n this.DetachHandlers();\r\n }\r\n\r\n public Reject = (error: string): void => {\r\n if (this.state !== PromiseState.None) {\r\n throw new Error(\"'Cannot reject a completed promise'\");\r\n }\r\n\r\n this.state = PromiseState.Rejected;\r\n this.promiseResultEvents.SetError(error);\r\n\r\n for (const errorHandler of this.errorHandlers) {\r\n this.ExecuteErrorCallback(error, errorHandler);\r\n }\r\n\r\n this.DetachHandlers();\r\n }\r\n\r\n public on = (\r\n successCallback: (result: T) => void,\r\n errorCallback: (error: string) => void): void => {\r\n\r\n if (successCallback == null) {\r\n successCallback = (r: T) => { return; };\r\n }\r\n\r\n if (this.state === PromiseState.None) {\r\n this.successHandlers.push(successCallback);\r\n this.errorHandlers.push(errorCallback);\r\n } else {\r\n if (this.state === PromiseState.Resolved) {\r\n this.ExecuteSuccessCallback(this.promiseResult.Result, successCallback, errorCallback);\r\n } else if (this.state === PromiseState.Rejected) {\r\n this.ExecuteErrorCallback(this.promiseResult.Error, errorCallback);\r\n }\r\n\r\n this.DetachHandlers();\r\n }\r\n }\r\n\r\n private ExecuteSuccessCallback = (result: T, successCallback: (result: T) => void, errorCallback: (error: string) => void): void => {\r\n try {\r\n successCallback(result);\r\n } catch (e) {\r\n this.ExecuteErrorCallback(`'Unhandled callback error: ${e}'`, errorCallback);\r\n }\r\n }\r\n\r\n private ExecuteErrorCallback = (error: string, errorCallback: (error: string) => void): void => {\r\n if (errorCallback) {\r\n try {\r\n errorCallback(error);\r\n } catch (e) {\r\n throw new Error(`'Unhandled callback error: ${e}. InnerError: ${error}'`);\r\n }\r\n } else {\r\n throw new Error(`'Unhandled error: ${error}'`);\r\n }\r\n }\r\n\r\n private DetachHandlers = (): void => {\r\n this.errorHandlers = [];\r\n this.successHandlers = [];\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/Promise.ts","import { InvalidOperationError, ObjectDisposedError } from \"./Error\";\r\nimport { IDetachable } from \"./IDetachable\";\r\nimport { IDisposable } from \"./IDisposable\";\r\nimport { List } from \"./List\";\r\nimport { Deferred, Promise, PromiseHelper } from \"./Promise\";\r\n\r\nexport interface IQueue extends IDisposable {\r\n Enqueue(item: TItem): void;\r\n EnqueueFromPromise(promise: Promise): void;\r\n Dequeue(): Promise;\r\n Peek(): Promise;\r\n Length(): number;\r\n}\r\n\r\nenum SubscriberType {\r\n Dequeue,\r\n Peek,\r\n}\r\n\r\nexport class Queue implements IQueue {\r\n private promiseStore: List> = new List>();\r\n private list: List;\r\n private detachables: IDetachable[];\r\n private subscribers: List<{ type: SubscriberType, deferral: Deferred }>;\r\n private isDrainInProgress: boolean = false;\r\n private isDisposing: boolean = false;\r\n private disposeReason: string = null;\r\n\r\n public constructor(list?: List) {\r\n this.list = list ? list : new List();\r\n this.detachables = [];\r\n this.subscribers = new List<{ type: SubscriberType, deferral: Deferred }>();\r\n this.detachables.push(this.list.OnAdded(this.Drain));\r\n }\r\n\r\n public Enqueue = (item: TItem): void => {\r\n this.ThrowIfDispose();\r\n this.EnqueueFromPromise(PromiseHelper.FromResult(item));\r\n }\r\n\r\n public EnqueueFromPromise = (promise: Promise): void => {\r\n this.ThrowIfDispose();\r\n this.promiseStore.Add(promise);\r\n promise.Finally(() => {\r\n while (this.promiseStore.Length() > 0) {\r\n if (!this.promiseStore.First().Result().IsCompleted) {\r\n break;\r\n } else {\r\n const p = this.promiseStore.RemoveFirst();\r\n if (!p.Result().IsError) {\r\n this.list.Add(p.Result().Result);\r\n } else {\r\n // TODO: Log as warning.\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n public Dequeue = (): Promise => {\r\n this.ThrowIfDispose();\r\n const deferredSubscriber = new Deferred();\r\n this.subscribers.Add({ deferral: deferredSubscriber, type: SubscriberType.Dequeue });\r\n this.Drain();\r\n return deferredSubscriber.Promise();\r\n }\r\n\r\n public Peek = (): Promise => {\r\n this.ThrowIfDispose();\r\n const deferredSubscriber = new Deferred();\r\n this.subscribers.Add({ deferral: deferredSubscriber, type: SubscriberType.Peek });\r\n this.Drain();\r\n return deferredSubscriber.Promise();\r\n }\r\n\r\n public Length = (): number => {\r\n this.ThrowIfDispose();\r\n return this.list.Length();\r\n }\r\n\r\n public IsDisposed = (): boolean => {\r\n return this.subscribers == null;\r\n }\r\n\r\n public DrainAndDispose = (pendingItemProcessor: (pendingItemInQueue: TItem) => void, reason?: string): Promise => {\r\n if (!this.IsDisposed() && !this.isDisposing) {\r\n this.disposeReason = reason;\r\n this.isDisposing = true;\r\n while (this.subscribers.Length() > 0) {\r\n const subscriber = this.subscribers.RemoveFirst();\r\n // TODO: this needs work (Resolve(null) instead?).\r\n subscriber.deferral.Reject(\"Disposed\");\r\n }\r\n\r\n for (const detachable of this.detachables) {\r\n detachable.Detach();\r\n }\r\n\r\n if (this.promiseStore.Length() > 0 && pendingItemProcessor) {\r\n return PromiseHelper\r\n .WhenAll(this.promiseStore.ToArray())\r\n .ContinueWith(() => {\r\n this.subscribers = null;\r\n this.list.ForEach((item: TItem, index: number): void => {\r\n pendingItemProcessor(item);\r\n });\r\n this.list = null;\r\n return true;\r\n });\r\n } else {\r\n this.subscribers = null;\r\n this.list = null;\r\n }\r\n }\r\n\r\n return PromiseHelper.FromResult(true);\r\n }\r\n\r\n public Dispose = (reason?: string): void => {\r\n this.DrainAndDispose(null, reason);\r\n }\r\n\r\n private Drain = (): void => {\r\n if (!this.isDrainInProgress && !this.isDisposing) {\r\n this.isDrainInProgress = true;\r\n\r\n while (this.list.Length() > 0 && this.subscribers.Length() > 0 && !this.isDisposing) {\r\n const subscriber = this.subscribers.RemoveFirst();\r\n if (subscriber.type === SubscriberType.Peek) {\r\n subscriber.deferral.Resolve(this.list.First());\r\n } else {\r\n const dequeuedItem = this.list.RemoveFirst();\r\n subscriber.deferral.Resolve(dequeuedItem);\r\n }\r\n }\r\n\r\n this.isDrainInProgress = false;\r\n }\r\n }\r\n\r\n private ThrowIfDispose = (): void => {\r\n if (this.IsDisposed()) {\r\n if (this.disposeReason) {\r\n throw new InvalidOperationError(this.disposeReason);\r\n }\r\n\r\n throw new ObjectDisposedError(\"Queue\");\r\n } else if (this.isDisposing) {\r\n throw new InvalidOperationError(\"Queue disposing\");\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/Queue.ts","import {\r\n ArgumentNullError,\r\n ConnectionClosedEvent,\r\n ConnectionEstablishedEvent,\r\n ConnectionEstablishErrorEvent,\r\n ConnectionEvent,\r\n ConnectionMessage,\r\n ConnectionMessageReceivedEvent,\r\n ConnectionMessageSentEvent,\r\n ConnectionOpenResponse,\r\n ConnectionStartEvent,\r\n ConnectionState,\r\n Deferred,\r\n Events,\r\n EventSource,\r\n IWebsocketMessageFormatter,\r\n MessageType,\r\n PlatformEvent,\r\n Promise,\r\n PromiseHelper,\r\n Queue,\r\n RawWebsocketMessage,\r\n} from \"../common/Exports\";\r\n\r\ninterface ISendItem {\r\n Message: ConnectionMessage;\r\n RawWebsocketMessage: RawWebsocketMessage;\r\n SendStatusDeferral: Deferred;\r\n}\r\n\r\nexport class WebsocketMessageAdapter {\r\n\r\n private connectionState: ConnectionState;\r\n private messageFormatter: IWebsocketMessageFormatter;\r\n private websocketClient: WebSocket;\r\n\r\n private sendMessageQueue: Queue;\r\n private receivingMessageQueue: Queue;\r\n private connectionEstablishDeferral: Deferred;\r\n private disconnectDeferral: Deferred;\r\n private connectionEvents: EventSource;\r\n private connectionId: string;\r\n private uri: string;\r\n\r\n public constructor(\r\n uri: string,\r\n connectionId: string,\r\n messageFormatter: IWebsocketMessageFormatter) {\r\n\r\n if (!uri) {\r\n throw new ArgumentNullError(\"uri\");\r\n }\r\n\r\n if (!messageFormatter) {\r\n throw new ArgumentNullError(\"messageFormatter\");\r\n }\r\n\r\n this.connectionEvents = new EventSource();\r\n this.connectionId = connectionId;\r\n this.messageFormatter = messageFormatter;\r\n this.connectionState = ConnectionState.None;\r\n this.uri = uri;\r\n }\r\n\r\n public get State(): ConnectionState {\r\n return this.connectionState;\r\n }\r\n\r\n public Open = (): Promise => {\r\n if (this.connectionState === ConnectionState.Disconnected) {\r\n return PromiseHelper.FromError(`Cannot open a connection that is in ${this.connectionState} state`);\r\n }\r\n\r\n if (this.connectionEstablishDeferral) {\r\n return this.connectionEstablishDeferral.Promise();\r\n }\r\n\r\n this.connectionEstablishDeferral = new Deferred();\r\n this.connectionState = ConnectionState.Connecting;\r\n\r\n this.websocketClient = new WebSocket(this.uri);\r\n this.websocketClient.binaryType = \"arraybuffer\";\r\n this.receivingMessageQueue = new Queue();\r\n this.disconnectDeferral = new Deferred();\r\n this.sendMessageQueue = new Queue();\r\n this.ProcessSendQueue();\r\n\r\n this.OnEvent(new ConnectionStartEvent(this.connectionId, this.uri));\r\n\r\n this.websocketClient.onopen = (e: Event) => {\r\n this.connectionState = ConnectionState.Connected;\r\n this.OnEvent(new ConnectionEstablishedEvent(this.connectionId));\r\n this.connectionEstablishDeferral.Resolve(new ConnectionOpenResponse(200, \"\"));\r\n };\r\n\r\n this.websocketClient.onerror = (e: Event) => {\r\n // TODO: Understand what this is error is. Will we still get onClose ?\r\n if (this.connectionState !== ConnectionState.Connecting) {\r\n // TODO: Is this required ?\r\n // this.OnEvent(new ConnectionErrorEvent(errorMsg, connectionId));\r\n }\r\n };\r\n\r\n this.websocketClient.onclose = (e: CloseEvent) => {\r\n if (this.connectionState === ConnectionState.Connecting) {\r\n this.connectionState = ConnectionState.Disconnected;\r\n this.OnEvent(new ConnectionEstablishErrorEvent(this.connectionId, e.code, e.reason));\r\n this.connectionEstablishDeferral.Resolve(new ConnectionOpenResponse(e.code, e.reason));\r\n } else {\r\n this.OnEvent(new ConnectionClosedEvent(this.connectionId, e.code, e.reason));\r\n }\r\n\r\n this.OnClose(e.code, e.reason);\r\n };\r\n\r\n this.websocketClient.onmessage = (e: MessageEvent) => {\r\n const networkReceivedTime = new Date().toISOString();\r\n if (this.connectionState === ConnectionState.Connected) {\r\n const deferred = new Deferred();\r\n // let id = ++this.idCounter;\r\n this.receivingMessageQueue.EnqueueFromPromise(deferred.Promise());\r\n if (e.data instanceof ArrayBuffer) {\r\n const rawMessage = new RawWebsocketMessage(MessageType.Binary, e.data);\r\n this.messageFormatter\r\n .ToConnectionMessage(rawMessage)\r\n .On((connectionMessage: ConnectionMessage) => {\r\n this.OnEvent(new ConnectionMessageReceivedEvent(this.connectionId, networkReceivedTime, connectionMessage));\r\n deferred.Resolve(connectionMessage);\r\n }, (error: string) => {\r\n // TODO: Events for these ?\r\n deferred.Reject(`Invalid binary message format. Error: ${error}`);\r\n });\r\n } else {\r\n const rawMessage = new RawWebsocketMessage(MessageType.Text, e.data);\r\n this.messageFormatter\r\n .ToConnectionMessage(rawMessage)\r\n .On((connectionMessage: ConnectionMessage) => {\r\n this.OnEvent(new ConnectionMessageReceivedEvent(this.connectionId, networkReceivedTime, connectionMessage));\r\n deferred.Resolve(connectionMessage);\r\n }, (error: string) => {\r\n // TODO: Events for these ?\r\n deferred.Reject(`Invalid text message format. Error: ${error}`);\r\n });\r\n }\r\n }\r\n };\r\n\r\n return this.connectionEstablishDeferral.Promise();\r\n }\r\n\r\n public Send = (message: ConnectionMessage): Promise => {\r\n if (this.connectionState !== ConnectionState.Connected) {\r\n return PromiseHelper.FromError(`Cannot send on connection that is in ${this.connectionState} state`);\r\n }\r\n\r\n const messageSendStatusDeferral = new Deferred();\r\n const messageSendDeferral = new Deferred();\r\n\r\n this.sendMessageQueue.EnqueueFromPromise(messageSendDeferral.Promise());\r\n\r\n this.messageFormatter\r\n .FromConnectionMessage(message)\r\n .On((rawMessage: RawWebsocketMessage) => {\r\n messageSendDeferral.Resolve({\r\n Message: message,\r\n RawWebsocketMessage: rawMessage,\r\n SendStatusDeferral: messageSendStatusDeferral,\r\n });\r\n }, (error: string) => {\r\n messageSendDeferral.Reject(`Error formatting the message. ${error}`);\r\n });\r\n\r\n return messageSendStatusDeferral.Promise();\r\n }\r\n\r\n public Read = (): Promise => {\r\n if (this.connectionState !== ConnectionState.Connected) {\r\n return PromiseHelper.FromError(`Cannot read on connection that is in ${this.connectionState} state`);\r\n }\r\n\r\n return this.receivingMessageQueue.Dequeue();\r\n }\r\n\r\n public Close = (reason?: string): Promise => {\r\n if (this.websocketClient) {\r\n if (this.connectionState !== ConnectionState.Connected) {\r\n this.websocketClient.close(1000, reason ? reason : \"Normal closure by client\");\r\n }\r\n } else {\r\n const deferral = new Deferred();\r\n deferral.Resolve(true);\r\n return deferral.Promise();\r\n }\r\n\r\n return this.disconnectDeferral.Promise();\r\n }\r\n\r\n public get Events(): EventSource {\r\n return this.connectionEvents;\r\n }\r\n\r\n private SendRawMessage = (sendItem: ISendItem): Promise => {\r\n try {\r\n this.OnEvent(new ConnectionMessageSentEvent(this.connectionId, new Date().toISOString(), sendItem.Message));\r\n this.websocketClient.send(sendItem.RawWebsocketMessage.Payload);\r\n return PromiseHelper.FromResult(true);\r\n } catch (e) {\r\n return PromiseHelper.FromError(`websocket send error: ${e}`);\r\n }\r\n }\r\n\r\n private OnClose = (code: number, reason: string): void => {\r\n const closeReason = `Connection closed. ${code}: ${reason}`;\r\n this.connectionState = ConnectionState.Disconnected;\r\n this.disconnectDeferral.Resolve(true);\r\n this.receivingMessageQueue.Dispose(reason);\r\n this.receivingMessageQueue.DrainAndDispose((pendingReceiveItem: ConnectionMessage) => {\r\n // TODO: Events for these ?\r\n // Logger.Instance.OnEvent(new LoggingEvent(LogType.Warning, null, `Failed to process received message. Reason: ${closeReason}, Message: ${JSON.stringify(pendingReceiveItem)}`));\r\n }, closeReason);\r\n\r\n this.sendMessageQueue.DrainAndDispose((pendingSendItem: ISendItem) => {\r\n pendingSendItem.SendStatusDeferral.Reject(closeReason);\r\n }, closeReason);\r\n }\r\n\r\n private ProcessSendQueue = (): void => {\r\n this.sendMessageQueue\r\n .Dequeue()\r\n .On((sendItem: ISendItem) => {\r\n this.SendRawMessage(sendItem)\r\n .On((result: boolean) => {\r\n sendItem.SendStatusDeferral.Resolve(result);\r\n this.ProcessSendQueue();\r\n }, (sendError: string) => {\r\n sendItem.SendStatusDeferral.Reject(sendError);\r\n this.ProcessSendQueue();\r\n });\r\n }, (error: string) => {\r\n // do nothing\r\n });\r\n }\r\n\r\n private OnEvent = (event: ConnectionEvent): void => {\r\n this.connectionEvents.OnEvent(event);\r\n Events.Instance.OnEvent(event);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common.browser/WebsocketMessageAdapter.ts","\r\nexport enum RecognitionMode {\r\n Interactive,\r\n Conversation,\r\n Dictation,\r\n}\r\n\r\nexport enum SpeechResultFormat {\r\n Simple,\r\n Detailed,\r\n}\r\n\r\nexport class RecognizerConfig {\r\n private recognitionMode: RecognitionMode = RecognitionMode.Interactive;\r\n private language: string;\r\n private format: SpeechResultFormat;\r\n private speechConfig: SpeechConfig;\r\n private recognitionActivityTimeout: number;\r\n\r\n constructor(\r\n platformConfig: SpeechConfig,\r\n recognitionMode: RecognitionMode = RecognitionMode.Interactive,\r\n language: string = \"en-us\",\r\n format: SpeechResultFormat = SpeechResultFormat.Simple) {\r\n this.speechConfig = platformConfig ? platformConfig : new SpeechConfig(new Context(null, null));\r\n this.recognitionMode = recognitionMode;\r\n this.language = language;\r\n this.format = format;\r\n this.recognitionActivityTimeout = recognitionMode === RecognitionMode.Interactive ? 8000 : 25000;\r\n }\r\n\r\n public get RecognitionMode(): RecognitionMode {\r\n return this.recognitionMode;\r\n }\r\n\r\n public get Language(): string {\r\n return this.language;\r\n }\r\n\r\n public get Format(): SpeechResultFormat {\r\n return this.format;\r\n }\r\n\r\n public get SpeechConfig(): SpeechConfig {\r\n return this.speechConfig;\r\n }\r\n\r\n public get RecognitionActivityTimeout(): number {\r\n return this.recognitionActivityTimeout;\r\n }\r\n\r\n public get IsContinuousRecognition(): boolean {\r\n return this.recognitionMode !== RecognitionMode.Interactive;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SpeechConfig {\r\n private context: Context;\r\n\r\n constructor(context: Context) {\r\n this.context = context;\r\n }\r\n\r\n public Serialize = (): string => {\r\n return JSON.stringify(this, (key: any, value: any): any => {\r\n if (value && typeof value === \"object\") {\r\n const replacement: any = {};\r\n for (const k in value) {\r\n if (Object.hasOwnProperty.call(value, k)) {\r\n replacement[k && k.charAt(0).toLowerCase() + k.substring(1)] = value[k];\r\n }\r\n }\r\n return replacement;\r\n }\r\n return value;\r\n });\r\n }\r\n\r\n public get Context(): Context {\r\n return this.context;\r\n }\r\n\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class Context {\r\n private system: System;\r\n private os: OS;\r\n private device: Device;\r\n\r\n constructor(os: OS, device: Device) {\r\n this.system = new System();\r\n this.os = os;\r\n this.device = device;\r\n }\r\n\r\n public get System(): System {\r\n return this.system;\r\n }\r\n\r\n public get OS(): OS {\r\n return this.os;\r\n }\r\n\r\n public get Device(): Device {\r\n return this.device;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class System {\r\n private version: string;\r\n constructor() {\r\n // TODO: Tie this with the sdk Version somehow\r\n this.version = \"1.0.00000\";\r\n }\r\n public get Version(): string {\r\n // Controlled by sdk\r\n return this.version;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class OS {\r\n\r\n private platform: string;\r\n private name: string;\r\n private version: string;\r\n\r\n constructor(platform: string, name: string, version: string) {\r\n this.platform = platform;\r\n this.name = name;\r\n this.version = version;\r\n }\r\n\r\n public get Platform(): string {\r\n return this.platform;\r\n }\r\n\r\n public get Name(): string {\r\n return this.name;\r\n }\r\n\r\n public get Version(): string {\r\n return this.version;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class Device {\r\n\r\n private manufacturer: string;\r\n private model: string;\r\n private version: string;\r\n\r\n constructor(manufacturer: string, model: string, version: string) {\r\n this.manufacturer = manufacturer;\r\n this.model = model;\r\n this.version = version;\r\n }\r\n\r\n public get Manufacturer(): string {\r\n return this.manufacturer;\r\n }\r\n\r\n public get Model(): string {\r\n return this.model;\r\n }\r\n\r\n public get Version(): string {\r\n return this.version;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech/RecognizerConfig.ts","import { WebsocketConnection } from \"../../common.browser/Exports\";\r\nimport {\r\n IConnection,\r\n IStringDictionary,\r\n Promise,\r\n Storage,\r\n} from \"../../common/Exports\";\r\nimport {\r\n AuthInfo,\r\n IAuthentication,\r\n IConnectionFactory,\r\n RecognitionMode,\r\n RecognizerConfig,\r\n SpeechResultFormat,\r\n WebsocketMessageFormatter,\r\n} from \"../speech/Exports\";\r\n\r\nconst TestHooksParamName: string = \"testhooks\";\r\nconst ConnectionIdHeader: string = \"X-ConnectionId\";\r\n\r\nexport class SpeechConnectionFactory implements IConnectionFactory {\r\n\r\n public Create = (\r\n config: RecognizerConfig,\r\n authInfo: AuthInfo,\r\n connectionId?: string): IConnection => {\r\n\r\n let endpoint = \"\";\r\n switch (config.RecognitionMode) {\r\n case RecognitionMode.Conversation:\r\n endpoint = this.Host + this.ConversationRelativeUri;\r\n break;\r\n case RecognitionMode.Dictation:\r\n endpoint = this.Host + this.DictationRelativeUri;\r\n break;\r\n default:\r\n endpoint = this.Host + this.InteractiveRelativeUri; // default is interactive\r\n break;\r\n }\r\n\r\n const queryParams: IStringDictionary = {\r\n format: SpeechResultFormat[config.Format].toString().toLowerCase(),\r\n language: config.Language,\r\n };\r\n\r\n if (this.IsDebugModeEnabled) {\r\n queryParams[TestHooksParamName] = \"1\";\r\n }\r\n\r\n const headers: IStringDictionary = {};\r\n headers[authInfo.HeaderName] = authInfo.Token;\r\n headers[ConnectionIdHeader] = connectionId;\r\n\r\n return new WebsocketConnection(endpoint, queryParams, headers, new WebsocketMessageFormatter(), connectionId);\r\n }\r\n\r\n private get Host(): string {\r\n return Storage.Local.GetOrAdd(\"Host\", \"wss://speech.platform.bing.com\");\r\n }\r\n\r\n private get InteractiveRelativeUri(): string {\r\n return Storage.Local.GetOrAdd(\"InteractiveRelativeUri\", \"/speech/recognition/interactive/cognitiveservices/v1\");\r\n }\r\n\r\n private get ConversationRelativeUri(): string {\r\n return Storage.Local.GetOrAdd(\"ConversationRelativeUri\", \"/speech/recognition/conversation/cognitiveservices/v1\");\r\n }\r\n\r\n private get DictationRelativeUri(): string {\r\n return Storage.Local.GetOrAdd(\"DictationRelativeUri\", \"/speech/recognition/dictation/cognitiveservices/v1\");\r\n }\r\n\r\n private get IsDebugModeEnabled(): boolean {\r\n const value = Storage.Local.GetOrAdd(\"IsDebugModeEnabled\", \"false\");\r\n return value.toLowerCase() === \"true\";\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech.browser/SpeechConnectionFactory.ts","window.SDK = require('../../distrib/Speech.Browser.Sdk.js')\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./samples/browser/sample_app.js\n// module id = 17\n// module chunks = 0","import { ConsoleLoggingListener, LocalStorage, SessionStorage } from \"./src/common.browser/Exports\";\r\nimport { Events, Storage } from \"./src/common/Exports\";\r\n\r\n// Common.Storage.SetLocalStorage(new Common.Browser.LocalStorage());\r\n// Common.Storage.SetSessionStorage(new Common.Browser.SessionStorage());\r\nEvents.Instance.AttachListener(new ConsoleLoggingListener());\r\n\r\nexport * from \"./src/common/Exports\";\r\nexport * from \"./src/common.browser/Exports\";\r\nexport * from \"./src/sdk/speech/Exports\";\r\nexport * from \"./src/sdk/speech.browser/Exports\";\r\n\n\n\n// WEBPACK FOOTER //\n// ../Speech.Browser.Sdk.ts","import { EventType, IEventListener, PlatformEvent } from \"../common/Exports\";\r\n\r\nexport class ConsoleLoggingListener implements IEventListener {\r\n private logLevelFilter: EventType;\r\n\r\n public constructor(logLevelFilter: EventType = EventType.Warning) {\r\n this.logLevelFilter = logLevelFilter;\r\n }\r\n\r\n public OnEvent = (event: PlatformEvent): void => {\r\n if (event.EventType >= this.logLevelFilter) {\r\n const log = this.ToString(event);\r\n\r\n switch (event.EventType) {\r\n case EventType.Debug:\r\n // tslint:disable-next-line:no-console\r\n console.debug(log);\r\n break;\r\n case EventType.Info:\r\n // tslint:disable-next-line:no-console\r\n console.info(log);\r\n break;\r\n case EventType.Warning:\r\n // tslint:disable-next-line:no-console\r\n console.warn(log);\r\n break;\r\n case EventType.Error:\r\n // tslint:disable-next-line:no-console\r\n console.error(log);\r\n break;\r\n default:\r\n // tslint:disable-next-line:no-console\r\n console.log(log);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private ToString = (event: any): string => {\r\n const logFragments = [\r\n `${event.EventTime}`,\r\n `${event.Name}`,\r\n ];\r\n\r\n for (const prop in event) {\r\n if (prop && event.hasOwnProperty(prop) && prop !== \"eventTime\" && prop !== \"eventType\" && prop !== \"eventId\" && prop !== \"name\" && prop !== \"constructor\") {\r\n const value = event[prop];\r\n let valueToLog = \"\";\r\n if (value !== undefined && value !== null) {\r\n if (typeof (value) === \"number\" || typeof (value) === \"string\") {\r\n valueToLog = value.toString();\r\n } else {\r\n valueToLog = JSON.stringify(value);\r\n }\r\n }\r\n\r\n logFragments.push(`${prop}: ${valueToLog}`);\r\n }\r\n\r\n }\r\n\r\n return logFragments.join(\" | \");\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common.browser/ConsoleLoggingListener.ts","import { EventType, PlatformEvent } from \"./PlatformEvent\";\r\n\r\nexport class AudioSourceEvent extends PlatformEvent {\r\n private audioSourceId: string;\r\n\r\n constructor(eventName: string, audioSourceId: string, eventType: EventType = EventType.Info) {\r\n super(eventName, eventType);\r\n this.audioSourceId = audioSourceId;\r\n }\r\n\r\n public get AudioSourceId(): string {\r\n return this.audioSourceId;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class AudioSourceInitializingEvent extends AudioSourceEvent {\r\n constructor(audioSourceId: string) {\r\n super(\"AudioSourceInitializingEvent\", audioSourceId);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class AudioSourceReadyEvent extends AudioSourceEvent {\r\n constructor(audioSourceId: string) {\r\n super(\"AudioSourceReadyEvent\", audioSourceId);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class AudioSourceOffEvent extends AudioSourceEvent {\r\n constructor(audioSourceId: string) {\r\n super(\"AudioSourceOffEvent\", audioSourceId);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class AudioSourceErrorEvent extends AudioSourceEvent {\r\n private error: string;\r\n constructor(audioSourceId: string, error: string) {\r\n super(\"AudioSourceErrorEvent\", audioSourceId, EventType.Error);\r\n this.error = error;\r\n }\r\n\r\n public get Error(): string {\r\n return this.error;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class AudioStreamNodeEvent extends AudioSourceEvent {\r\n private audioNodeId: string;\r\n\r\n constructor(eventName: string, audioSourceId: string, audioNodeId: string) {\r\n super(eventName, audioSourceId);\r\n this.audioNodeId = audioNodeId;\r\n }\r\n\r\n public get AudioNodeId(): string {\r\n return this.audioNodeId;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class AudioStreamNodeAttachingEvent extends AudioStreamNodeEvent {\r\n constructor(audioSourceId: string, audioNodeId: string) {\r\n super(\"AudioStreamNodeAttachingEvent\", audioSourceId, audioNodeId);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class AudioStreamNodeAttachedEvent extends AudioStreamNodeEvent {\r\n constructor(audioSourceId: string, audioNodeId: string) {\r\n super(\"AudioStreamNodeAttachedEvent\", audioSourceId, audioNodeId);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class AudioStreamNodeDetachedEvent extends AudioStreamNodeEvent {\r\n constructor(audioSourceId: string, audioNodeId: string) {\r\n super(\"AudioStreamNodeDetachedEvent\", audioSourceId, audioNodeId);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class AudioStreamNodeErrorEvent extends AudioStreamNodeEvent {\r\n private error: string;\r\n\r\n constructor(audioSourceId: string, audioNodeId: string, error: string) {\r\n super(\"AudioStreamNodeErrorEvent\", audioSourceId, audioNodeId);\r\n this.error = error;\r\n }\r\n\r\n public get Error(): string {\r\n return this.error;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/AudioSourceEvents.ts","import { ConnectionMessage } from \"./ConnectionMessage\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\nimport { EventType, PlatformEvent } from \"./PlatformEvent\";\r\n\r\nexport class ConnectionEvent extends PlatformEvent {\r\n private connectionId: string;\r\n\r\n constructor(eventName: string, connectionId: string, eventType: EventType = EventType.Info) {\r\n super(eventName, eventType);\r\n this.connectionId = connectionId;\r\n }\r\n\r\n public get ConnectionId(): string {\r\n return this.connectionId;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ConnectionStartEvent extends ConnectionEvent {\r\n private uri: string;\r\n private headers: IStringDictionary;\r\n\r\n constructor(connectionId: string, uri: string, headers?: IStringDictionary) {\r\n super(\"ConnectionStartEvent\", connectionId);\r\n this.uri = uri;\r\n this.headers = headers;\r\n }\r\n\r\n public get Uri(): string {\r\n return this.uri;\r\n }\r\n\r\n public get Headers(): IStringDictionary {\r\n return this.headers;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ConnectionEstablishedEvent extends ConnectionEvent {\r\n constructor(connectionId: string, metadata?: IStringDictionary) {\r\n super(\"ConnectionEstablishedEvent\", connectionId);\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ConnectionClosedEvent extends ConnectionEvent {\r\n private reason: string;\r\n private statusCode: number;\r\n\r\n constructor(connectionId: string, statusCode: number, reason: string) {\r\n super(\"ConnectionClosedEvent\", connectionId, EventType.Warning);\r\n this.reason = reason;\r\n this.statusCode = statusCode;\r\n }\r\n\r\n public get Reason(): string {\r\n return this.reason;\r\n }\r\n\r\n public get StatusCode(): number {\r\n return this.statusCode;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ConnectionEstablishErrorEvent extends ConnectionEvent {\r\n private statusCode: number;\r\n private reason: string;\r\n\r\n constructor(connectionId: string, statuscode: number, reason: string) {\r\n super(\"ConnectionEstablishErrorEvent\", connectionId, EventType.Error);\r\n this.statusCode = statuscode;\r\n this.reason = reason;\r\n }\r\n\r\n public get Reason(): string {\r\n return this.reason;\r\n }\r\n\r\n public get StatusCode(): number {\r\n return this.statusCode;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ConnectionMessageReceivedEvent extends ConnectionEvent {\r\n private networkReceivedTime: string;\r\n private message: ConnectionMessage;\r\n\r\n constructor(connectionId: string, networkReceivedTimeISO: string, message: ConnectionMessage) {\r\n super(\"ConnectionMessageReceivedEvent\", connectionId);\r\n this.networkReceivedTime = networkReceivedTimeISO;\r\n this.message = message;\r\n }\r\n\r\n public get NetworkReceivedTime(): string {\r\n return this.networkReceivedTime;\r\n }\r\n\r\n public get Message(): ConnectionMessage {\r\n return this.message;\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ConnectionMessageSentEvent extends ConnectionEvent {\r\n private networkSentTime: string;\r\n private message: ConnectionMessage;\r\n\r\n constructor(connectionId: string, networkSentTimeISO: string, message: ConnectionMessage) {\r\n super(\"ConnectionMessageSentEvent\", connectionId);\r\n this.networkSentTime = networkSentTimeISO;\r\n this.message = message;\r\n }\r\n\r\n public get NetworkSentTime(): string {\r\n return this.networkSentTime;\r\n }\r\n\r\n public get Message(): ConnectionMessage {\r\n return this.message;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/ConnectionEvents.ts","\r\nexport class ConnectionOpenResponse {\r\n private statusCode: number;\r\n private reason: string;\r\n\r\n constructor(statusCode: number, reason: string) {\r\n this.statusCode = statusCode;\r\n this.reason = reason;\r\n }\r\n\r\n public get StatusCode(): number {\r\n return this.statusCode;\r\n }\r\n\r\n public get Reason(): string {\r\n return this.reason;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/ConnectionOpenResponse.ts","import { ArgumentNullError } from \"./Error\";\r\nimport { EventSource } from \"./EventSource\";\r\nimport { IEventSource } from \"./IEventSource\";\r\nimport { PlatformEvent } from \"./PlatformEvent\";\r\n\r\nexport class Events {\r\n private static instance: IEventSource = new EventSource();\r\n\r\n public static SetEventSource = (eventSource: IEventSource): void => {\r\n if (!eventSource) {\r\n throw new ArgumentNullError(\"eventSource\");\r\n }\r\n\r\n Events.instance = eventSource;\r\n }\r\n\r\n public static get Instance(): IEventSource {\r\n return Events.instance;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/Events.ts","import { ConnectionEvent } from \"./ConnectionEvents\";\r\nimport { ConnectionMessage } from \"./ConnectionMessage\";\r\nimport { ConnectionOpenResponse } from \"./ConnectionOpenResponse\";\r\nimport { EventSource } from \"./EventSource\";\r\nimport { IDisposable } from \"./IDisposable\";\r\nimport { Promise } from \"./Promise\";\r\n\r\nexport enum ConnectionState {\r\n None,\r\n Connected,\r\n Connecting,\r\n Disconnected,\r\n}\r\n\r\nexport interface IConnection extends IDisposable {\r\n Id: string;\r\n State(): ConnectionState;\r\n Open(): Promise;\r\n Send(message: ConnectionMessage): Promise;\r\n Read(): Promise;\r\n Events: EventSource;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/IConnection.ts","import { MessageType } from \"./ConnectionMessage\";\r\nimport { ArgumentNullError, InvalidOperationError } from \"./Error\";\r\nimport { CreateNoDashGuid } from \"./Guid\";\r\n\r\nexport class RawWebsocketMessage {\r\n\r\n private messageType: MessageType;\r\n private payload: any = null;\r\n private id: string;\r\n\r\n public constructor(messageType: MessageType, payload: any, id?: string) {\r\n if (!payload) {\r\n throw new ArgumentNullError(\"payload\");\r\n }\r\n\r\n if (messageType === MessageType.Binary && !(payload instanceof ArrayBuffer)) {\r\n throw new InvalidOperationError(\"Payload must be ArrayBuffer\");\r\n }\r\n\r\n if (messageType === MessageType.Text && !(typeof (payload) === \"string\")) {\r\n throw new InvalidOperationError(\"Payload must be a string\");\r\n }\r\n\r\n this.messageType = messageType;\r\n this.payload = payload;\r\n this.id = id ? id : CreateNoDashGuid();\r\n }\r\n\r\n public get MessageType(): MessageType {\r\n return this.messageType;\r\n }\r\n\r\n public get Payload(): any {\r\n return this.payload;\r\n }\r\n\r\n public get TextContent(): string {\r\n if (this.messageType === MessageType.Binary) {\r\n throw new InvalidOperationError(\"Not supported for binary message\");\r\n }\r\n\r\n return this.payload as string;\r\n }\r\n\r\n public get BinaryContent(): ArrayBuffer {\r\n if (this.messageType === MessageType.Text) {\r\n throw new InvalidOperationError(\"Not supported for text message\");\r\n }\r\n\r\n return this.payload;\r\n }\r\n\r\n public get Id(): string {\r\n return this.id;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/RawWebsocketMessage.ts","\r\nexport class RiffPcmEncoder {\r\n\r\n private actualSampleRate: number;\r\n private desiredSampleRate: number;\r\n private channelCount: number = 1;\r\n\r\n public constructor(actualSampleRate: number, desiredSampleRate: number) {\r\n this.actualSampleRate = actualSampleRate;\r\n this.desiredSampleRate = desiredSampleRate;\r\n }\r\n\r\n public Encode = (\r\n needHeader: boolean,\r\n actualAudioFrame: Float32Array): ArrayBuffer => {\r\n\r\n const audioFrame = this.DownSampleAudioFrame(actualAudioFrame, this.actualSampleRate, this.desiredSampleRate);\r\n\r\n if (!audioFrame) {\r\n return null;\r\n }\r\n\r\n const audioLength = audioFrame.length * 2;\r\n\r\n if (!needHeader) {\r\n const buffer = new ArrayBuffer(audioLength);\r\n const view = new DataView(buffer);\r\n this.FloatTo16BitPCM(view, 0, audioFrame);\r\n\r\n return buffer;\r\n }\r\n\r\n const buffer = new ArrayBuffer(44 + audioLength);\r\n\r\n const bitsPerSample = 16;\r\n const bytesPerSample = bitsPerSample / 8;\r\n // We dont know ahead of time about the length of audio to stream. So set to 0.\r\n const fileLength = 0;\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView\r\n const view = new DataView(buffer);\r\n\r\n /* RIFF identifier */\r\n this.SetString(view, 0, \"RIFF\");\r\n /* file length */\r\n view.setUint32(4, fileLength, true);\r\n /* RIFF type & Format */\r\n this.SetString(view, 8, \"WAVEfmt \");\r\n /* format chunk length */\r\n view.setUint32(16, 16, true);\r\n /* sample format (raw) */\r\n view.setUint16(20, 1, true);\r\n /* channel count */\r\n view.setUint16(22, this.channelCount, true);\r\n /* sample rate */\r\n view.setUint32(24, this.desiredSampleRate, true);\r\n /* byte rate (sample rate * block align) */\r\n view.setUint32(28, this.desiredSampleRate * this.channelCount * bytesPerSample, true);\r\n /* block align (channel count * bytes per sample) */\r\n view.setUint16(32, this.channelCount * bytesPerSample, true);\r\n /* bits per sample */\r\n view.setUint16(34, bitsPerSample, true);\r\n /* data chunk identifier */\r\n this.SetString(view, 36, \"data\");\r\n /* data chunk length */\r\n view.setUint32(40, fileLength, true);\r\n\r\n this.FloatTo16BitPCM(view, 44, audioFrame);\r\n\r\n return buffer;\r\n }\r\n\r\n private SetString = (view: DataView, offset: number, str: string): void => {\r\n for (let i = 0; i < str.length; i++) {\r\n view.setUint8(offset + i, str.charCodeAt(i));\r\n }\r\n }\r\n\r\n private FloatTo16BitPCM = (view: DataView, offset: number, input: Float32Array): void => {\r\n for (let i = 0; i < input.length; i++ , offset += 2) {\r\n const s = Math.max(-1, Math.min(1, input[i]));\r\n view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7FFF, true);\r\n }\r\n }\r\n\r\n private DownSampleAudioFrame = (\r\n srcFrame: Float32Array,\r\n srcRate: number,\r\n dstRate: number): Float32Array => {\r\n\r\n if (dstRate === srcRate || dstRate > srcRate) {\r\n return srcFrame;\r\n }\r\n\r\n const ratio = srcRate / dstRate;\r\n const dstLength = Math.round(srcFrame.length / ratio);\r\n const dstFrame = new Float32Array(dstLength);\r\n let srcOffset = 0;\r\n let dstOffset = 0;\r\n while (dstOffset < dstLength) {\r\n const nextSrcOffset = Math.round((dstOffset + 1) * ratio);\r\n let accum = 0;\r\n let count = 0;\r\n while (srcOffset < nextSrcOffset && srcOffset < srcFrame.length) {\r\n accum += srcFrame[srcOffset++];\r\n count++;\r\n }\r\n dstFrame[dstOffset++] = accum / count;\r\n }\r\n\r\n return dstFrame;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/RiffPcmEncoder.ts","import { ArgumentNullError } from \"./Error\";\r\nimport { IKeyValueStorage } from \"./IKeyValueStorage\";\r\nimport { InMemoryStorage } from \"./InMemoryStorage\";\r\n\r\nexport class Storage {\r\n private static sessionStorage: IKeyValueStorage = new InMemoryStorage();\r\n private static localStorage: IKeyValueStorage = new InMemoryStorage();\r\n\r\n public static SetSessionStorage = (sessionStorage: IKeyValueStorage): void => {\r\n if (!sessionStorage) {\r\n throw new ArgumentNullError(\"sessionStorage\");\r\n }\r\n\r\n Storage.sessionStorage = sessionStorage;\r\n }\r\n\r\n public static SetLocalStorage = (localStorage: IKeyValueStorage): void => {\r\n if (!localStorage) {\r\n throw new ArgumentNullError(\"localStorage\");\r\n }\r\n\r\n Storage.localStorage = localStorage;\r\n }\r\n\r\n public static get Session(): IKeyValueStorage {\r\n return Storage.sessionStorage;\r\n }\r\n\r\n public static get Local(): IKeyValueStorage {\r\n return Storage.localStorage;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/Storage.ts","import { InvalidOperationError } from \"./Error\";\r\nimport { CreateNoDashGuid } from \"./Guid\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\nimport { Promise } from \"./Promise\";\r\nimport { Queue } from \"./Queue\";\r\nimport { IStreamChunk } from \"./Stream\";\r\n\r\nexport interface IStreamChunk {\r\n IsEnd: boolean;\r\n Buffer: TBuffer;\r\n}\r\n\r\nexport class Stream {\r\n private id: string;\r\n private readerIdCounter: number = 1;\r\n private streambuffer: Array>;\r\n private isEnded: boolean = false;\r\n private readerQueues: IStringDictionary>>;\r\n\r\n public constructor(streamId?: string) {\r\n this.id = streamId ? streamId : CreateNoDashGuid();\r\n this.streambuffer = [];\r\n this.readerQueues = {};\r\n }\r\n\r\n public get IsClosed(): boolean {\r\n return this.isEnded;\r\n }\r\n\r\n public get Id(): string {\r\n return this.id;\r\n }\r\n\r\n public Write = (buffer: TBuffer): void => {\r\n this.ThrowIfClosed();\r\n this.WriteStreamChunk({\r\n Buffer: buffer,\r\n IsEnd: false,\r\n });\r\n }\r\n\r\n public GetReader = (): StreamReader => {\r\n const readerId = this.readerIdCounter;\r\n this.readerIdCounter++;\r\n const readerQueue = new Queue>();\r\n const currentLength = this.streambuffer.length;\r\n this.readerQueues[readerId] = readerQueue;\r\n for (let i = 0; i < currentLength; i++) {\r\n readerQueue.Enqueue(this.streambuffer[i]);\r\n }\r\n return new StreamReader(\r\n this.id,\r\n readerQueue,\r\n () => {\r\n delete this.readerQueues[readerId];\r\n });\r\n }\r\n\r\n public Close = (): void => {\r\n if (!this.isEnded) {\r\n this.WriteStreamChunk({\r\n Buffer: null,\r\n IsEnd: true,\r\n });\r\n this.isEnded = true;\r\n }\r\n }\r\n\r\n private WriteStreamChunk = (streamChunk: IStreamChunk): void => {\r\n this.ThrowIfClosed();\r\n this.streambuffer.push(streamChunk);\r\n for (const readerId in this.readerQueues) {\r\n if (!this.readerQueues[readerId].IsDisposed()) {\r\n try {\r\n this.readerQueues[readerId].Enqueue(streamChunk);\r\n } catch (e) {\r\n // Do nothing\r\n }\r\n }\r\n }\r\n }\r\n\r\n private ThrowIfClosed = (): void => {\r\n if (this.isEnded) {\r\n throw new InvalidOperationError(\"Stream closed\");\r\n }\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class StreamReader {\r\n private readerQueue: Queue>;\r\n private onClose: () => void;\r\n private isClosed: boolean = false;\r\n private streamId: string;\r\n\r\n public constructor(streamId: string, readerQueue: Queue>, onClose: () => void) {\r\n this.readerQueue = readerQueue;\r\n this.onClose = onClose;\r\n this.streamId = streamId;\r\n }\r\n\r\n public get IsClosed(): boolean {\r\n return this.isClosed;\r\n }\r\n\r\n public get StreamId(): string {\r\n return this.streamId;\r\n }\r\n\r\n public Read = (): Promise> => {\r\n if (this.IsClosed) {\r\n throw new InvalidOperationError(\"StreamReader closed\");\r\n }\r\n\r\n return this.readerQueue\r\n .Dequeue()\r\n .OnSuccessContinueWith((streamChunk: IStreamChunk) => {\r\n if (streamChunk.IsEnd) {\r\n this.readerQueue.Dispose(\"End of stream reached\");\r\n }\r\n\r\n return streamChunk;\r\n });\r\n }\r\n\r\n public Close = (): void => {\r\n if (!this.isClosed) {\r\n this.isClosed = true;\r\n this.readerQueue.Dispose(\"StreamReader closed\");\r\n this.onClose();\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common/Stream.ts","import { ArgumentNullError, IKeyValueStorage } from \"../common/Exports\";\r\n\r\nexport class LocalStorage implements IKeyValueStorage {\r\n\r\n public Get = (key: string): string => {\r\n if (!key) {\r\n throw new ArgumentNullError(\"key\");\r\n }\r\n\r\n return localStorage.getItem(key);\r\n }\r\n\r\n public GetOrAdd = (key: string, valueToAdd: string): string => {\r\n if (!key) {\r\n throw new ArgumentNullError(\"key\");\r\n }\r\n\r\n const value = localStorage.getItem(key);\r\n if (value === null || value === undefined) {\r\n localStorage.setItem(key, valueToAdd);\r\n }\r\n\r\n return localStorage.getItem(key);\r\n }\r\n\r\n public Set = (key: string, value: string): void => {\r\n if (!key) {\r\n throw new ArgumentNullError(\"key\");\r\n }\r\n\r\n localStorage.setItem(key, value);\r\n }\r\n\r\n public Remove = (key: string): void => {\r\n if (!key) {\r\n throw new ArgumentNullError(\"key\");\r\n }\r\n\r\n localStorage.removeItem(key);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common.browser/LocalStorage.ts","import {\r\n AudioSourceErrorEvent,\r\n AudioSourceEvent,\r\n AudioSourceInitializingEvent,\r\n AudioSourceOffEvent,\r\n AudioSourceReadyEvent,\r\n AudioStreamNodeAttachedEvent,\r\n AudioStreamNodeAttachingEvent,\r\n AudioStreamNodeDetachedEvent,\r\n AudioStreamNodeErrorEvent,\r\n CreateNoDashGuid,\r\n Deferred,\r\n Events,\r\n EventSource,\r\n IAudioSource,\r\n IAudioStreamNode,\r\n IStringDictionary,\r\n PlatformEvent,\r\n Promise,\r\n PromiseHelper,\r\n Stream,\r\n StreamReader,\r\n} from \"../common/Exports\";\r\nimport { IRecorder } from \"./IRecorder\";\r\n\r\n// Extending the default definition with browser specific definitions for backward compatibility\r\ninterface INavigatorUserMedia extends NavigatorUserMedia {\r\n webkitGetUserMedia?: (constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback) => void;\r\n mozGetUserMedia?: (constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback) => void;\r\n msGetUserMedia?: (constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback) => void;\r\n}\r\n\r\nexport class MicAudioSource implements IAudioSource {\r\n\r\n private streams: IStringDictionary> = {};\r\n\r\n private id: string;\r\n\r\n private events: EventSource;\r\n\r\n private initializeDeferral: Deferred;\r\n\r\n private recorder: IRecorder;\r\n\r\n private mediaStream: MediaStream;\r\n\r\n private context: AudioContext;\r\n\r\n public constructor(recorder: IRecorder, audioSourceId?: string) {\r\n this.id = audioSourceId ? audioSourceId : CreateNoDashGuid();\r\n this.events = new EventSource();\r\n this.recorder = recorder;\r\n }\r\n\r\n public TurnOn = (): Promise => {\r\n if (this.initializeDeferral) {\r\n return this.initializeDeferral.Promise();\r\n }\r\n\r\n this.initializeDeferral = new Deferred();\r\n\r\n this.CreateAudioContext();\r\n\r\n const nav = window.navigator as INavigatorUserMedia;\r\n\r\n let getUserMedia = (\r\n nav.getUserMedia ||\r\n nav.webkitGetUserMedia ||\r\n nav.mozGetUserMedia ||\r\n nav.msGetUserMedia\r\n );\r\n\r\n if (!!nav.mediaDevices) {\r\n getUserMedia = (constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback): void => {\r\n nav.mediaDevices\r\n .getUserMedia(constraints)\r\n .then(successCallback)\r\n .catch(errorCallback);\r\n };\r\n }\r\n\r\n if (!getUserMedia) {\r\n const errorMsg = \"Browser does not support getUserMedia.\";\r\n this.initializeDeferral.Reject(errorMsg);\r\n this.OnEvent(new AudioSourceErrorEvent(errorMsg, \"\")); // mic initialized error - no streamid at this point\r\n } else {\r\n const next = () => {\r\n this.OnEvent(new AudioSourceInitializingEvent(this.id)); // no stream id\r\n getUserMedia(\r\n { audio: true, video: false },\r\n (mediaStream: MediaStream) => {\r\n this.mediaStream = mediaStream;\r\n this.OnEvent(new AudioSourceReadyEvent(this.id));\r\n this.initializeDeferral.Resolve(true);\r\n }, (error: MediaStreamError) => {\r\n const errorMsg = `Error occurred during microphone initialization: ${error}`;\r\n const tmp = this.initializeDeferral;\r\n // HACK: this should be handled through onError callbacks of all promises up the stack.\r\n // Unfortunately, the current implementation does not provide an easy way to reject promises\r\n // without a lot of code replication.\r\n // TODO: fix promise implementation, allow for a graceful reject chaining.\r\n this.initializeDeferral = null;\r\n tmp.Reject(errorMsg); // this will bubble up through the whole chain of promises,\r\n // with each new level adding extra \"Unhandled callback error\" prefix to the error message.\r\n // The following line is not guaranteed to be executed.\r\n this.OnEvent(new AudioSourceErrorEvent(this.id, errorMsg));\r\n });\r\n };\r\n\r\n if (this.context.state === \"suspended\") {\r\n // NOTE: On iOS, the Web Audio API requires sounds to be triggered from an explicit user action.\r\n // https://github.com/WebAudio/web-audio-api/issues/790\r\n this.context.resume().then(next, (reason: any) => {\r\n this.initializeDeferral.Reject(`Failed to initialize audio context: ${reason}`);\r\n });\r\n } else {\r\n next();\r\n }\r\n }\r\n\r\n return this.initializeDeferral.Promise();\r\n }\r\n\r\n public Id = (): string => {\r\n return this.id;\r\n }\r\n\r\n public Attach = (audioNodeId: string): Promise => {\r\n this.OnEvent(new AudioStreamNodeAttachingEvent(this.id, audioNodeId));\r\n\r\n return this.Listen(audioNodeId).OnSuccessContinueWith(\r\n (streamReader: StreamReader) => {\r\n this.OnEvent(new AudioStreamNodeAttachedEvent(this.id, audioNodeId));\r\n return {\r\n Detach: () => {\r\n streamReader.Close();\r\n delete this.streams[audioNodeId];\r\n this.OnEvent(new AudioStreamNodeDetachedEvent(this.id, audioNodeId));\r\n this.TurnOff();\r\n },\r\n Id: () => {\r\n return audioNodeId;\r\n },\r\n Read: () => {\r\n return streamReader.Read();\r\n },\r\n };\r\n });\r\n }\r\n\r\n public Detach = (audioNodeId: string): void => {\r\n if (audioNodeId && this.streams[audioNodeId]) {\r\n this.streams[audioNodeId].Close();\r\n delete this.streams[audioNodeId];\r\n this.OnEvent(new AudioStreamNodeDetachedEvent(this.id, audioNodeId));\r\n }\r\n }\r\n\r\n public TurnOff = (): Promise => {\r\n for (const streamId in this.streams) {\r\n if (streamId) {\r\n const stream = this.streams[streamId];\r\n if (stream) {\r\n stream.Close();\r\n }\r\n }\r\n }\r\n\r\n this.OnEvent(new AudioSourceOffEvent(this.id)); // no stream now\r\n this.initializeDeferral = null;\r\n\r\n this.DestroyAudioContext();\r\n\r\n return PromiseHelper.FromResult(true);\r\n }\r\n\r\n public get Events(): EventSource {\r\n return this.events;\r\n }\r\n\r\n private Listen = (audioNodeId: string): Promise> => {\r\n return this.TurnOn()\r\n .OnSuccessContinueWith>((_: boolean) => {\r\n const stream = new Stream(audioNodeId);\r\n this.streams[audioNodeId] = stream;\r\n\r\n try {\r\n this.recorder.Record(this.context, this.mediaStream, stream);\r\n } catch (error) {\r\n this.OnEvent(new AudioStreamNodeErrorEvent(this.id, audioNodeId, error));\r\n throw error;\r\n }\r\n\r\n return stream.GetReader();\r\n });\r\n }\r\n\r\n private OnEvent = (event: AudioSourceEvent): void => {\r\n this.events.OnEvent(event);\r\n Events.Instance.OnEvent(event);\r\n }\r\n\r\n private CreateAudioContext = (): void => {\r\n if (!!this.context) {\r\n return;\r\n }\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/API/AudioContext\r\n const AudioContext = ((window as any).AudioContext)\r\n || ((window as any).webkitAudioContext)\r\n || false;\r\n\r\n if (!AudioContext) {\r\n throw new Error(\"Browser does not support Web Audio API (AudioContext is not available).\");\r\n }\r\n\r\n this.context = new AudioContext();\r\n }\r\n\r\n private DestroyAudioContext = (): void => {\r\n if (!this.context) {\r\n return;\r\n }\r\n\r\n this.recorder.ReleaseMediaResources(this.context);\r\n\r\n if (\"close\" in this.context) {\r\n this.context.close();\r\n this.context = null;\r\n } else if (this.context.state === \"running\") {\r\n // Suspend actually takes a callback, but analogous to the\r\n // resume method, it'll be only fired if suspend is called\r\n // in a direct response to a user action. The later is not always\r\n // the case, as TurnOff is also called, when we receive an\r\n // end-of-speech message from the service. So, doing a best effort\r\n // fire-and-forget here.\r\n this.context.suspend();\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common.browser/MicAudioSource.ts","import {\r\n AudioSourceErrorEvent,\r\n AudioSourceEvent,\r\n AudioSourceInitializingEvent,\r\n AudioSourceOffEvent,\r\n AudioSourceReadyEvent,\r\n AudioStreamNodeAttachedEvent,\r\n AudioStreamNodeAttachingEvent,\r\n AudioStreamNodeDetachedEvent,\r\n AudioStreamNodeErrorEvent,\r\n CreateNoDashGuid,\r\n Events,\r\n EventSource,\r\n IAudioSource,\r\n IAudioStreamNode,\r\n IStringDictionary,\r\n PlatformEvent,\r\n Promise,\r\n PromiseHelper,\r\n Stream,\r\n StreamReader,\r\n} from \"../common/Exports\";\r\n\r\nimport { Timer } from \"../common.browser/Exports\";\r\n\r\nexport class FileAudioSource implements IAudioSource {\r\n\r\n // Recommended sample rate (bytes/second).\r\n private static readonly SAMPLE_RATE: number = 16000 * 2; // 16 kHz * 16 bits\r\n\r\n // We should stream audio at no faster than 2x real-time (i.e., send five chunks\r\n // per second, with the chunk size == sample rate in bytes per second * 2 / 5).\r\n private static readonly CHUNK_SIZE: number = FileAudioSource.SAMPLE_RATE * 2 / 5;\r\n\r\n private static readonly UPLOAD_INTERVAL: number = 200; // milliseconds\r\n\r\n // 10 seconds of audio in bytes =\r\n // sample rate (bytes/second) * 600 (seconds) + 44 (size of the wave header).\r\n private static readonly MAX_SIZE: number = FileAudioSource.SAMPLE_RATE * 600 + 44;\r\n\r\n private streams: IStringDictionary> = {};\r\n\r\n private id: string;\r\n\r\n private events: EventSource;\r\n\r\n private file: File;\r\n\r\n public constructor(file: File, audioSourceId?: string) {\r\n this.id = audioSourceId ? audioSourceId : CreateNoDashGuid();\r\n this.events = new EventSource();\r\n this.file = file;\r\n }\r\n\r\n public TurnOn = (): Promise => {\r\n if (typeof FileReader === \"undefined\") {\r\n const errorMsg = \"Browser does not support FileReader.\";\r\n this.OnEvent(new AudioSourceErrorEvent(errorMsg, \"\")); // initialization error - no streamid at this point\r\n return PromiseHelper.FromError(errorMsg);\r\n } else if (this.file.name.lastIndexOf(\".wav\") !== this.file.name.length - 4) {\r\n const errorMsg = this.file.name + \" is not supported. Only WAVE files are allowed at the moment.\";\r\n this.OnEvent(new AudioSourceErrorEvent(errorMsg, \"\"));\r\n return PromiseHelper.FromError(errorMsg);\r\n } else if (this.file.size > FileAudioSource.MAX_SIZE) {\r\n const errorMsg = this.file.name + \" exceeds the maximum allowed file size (\" + FileAudioSource.MAX_SIZE + \").\";\r\n this.OnEvent(new AudioSourceErrorEvent(errorMsg, \"\"));\r\n return PromiseHelper.FromError(errorMsg);\r\n }\r\n\r\n this.OnEvent(new AudioSourceInitializingEvent(this.id)); // no stream id\r\n this.OnEvent(new AudioSourceReadyEvent(this.id));\r\n return PromiseHelper.FromResult(true);\r\n }\r\n\r\n public Id = (): string => {\r\n return this.id;\r\n }\r\n\r\n public Attach = (audioNodeId: string): Promise => {\r\n this.OnEvent(new AudioStreamNodeAttachingEvent(this.id, audioNodeId));\r\n\r\n return this.Upload(audioNodeId).OnSuccessContinueWith(\r\n (streamReader: StreamReader) => {\r\n this.OnEvent(new AudioStreamNodeAttachedEvent(this.id, audioNodeId));\r\n return {\r\n Detach: () => {\r\n streamReader.Close();\r\n delete this.streams[audioNodeId];\r\n this.OnEvent(new AudioStreamNodeDetachedEvent(this.id, audioNodeId));\r\n this.TurnOff();\r\n },\r\n Id: () => {\r\n return audioNodeId;\r\n },\r\n Read: () => {\r\n return streamReader.Read();\r\n },\r\n };\r\n });\r\n }\r\n\r\n public Detach = (audioNodeId: string): void => {\r\n if (audioNodeId && this.streams[audioNodeId]) {\r\n this.streams[audioNodeId].Close();\r\n delete this.streams[audioNodeId];\r\n this.OnEvent(new AudioStreamNodeDetachedEvent(this.id, audioNodeId));\r\n }\r\n }\r\n\r\n public TurnOff = (): Promise => {\r\n for (const streamId in this.streams) {\r\n if (streamId) {\r\n const stream = this.streams[streamId];\r\n if (stream && !stream.IsClosed) {\r\n stream.Close();\r\n }\r\n }\r\n }\r\n\r\n this.OnEvent(new AudioSourceOffEvent(this.id)); // no stream now\r\n return PromiseHelper.FromResult(true);\r\n }\r\n\r\n public get Events(): EventSource {\r\n return this.events;\r\n }\r\n\r\n private Upload = (audioNodeId: string): Promise> => {\r\n return this.TurnOn()\r\n .OnSuccessContinueWith>((_: boolean) => {\r\n const stream = new Stream(audioNodeId);\r\n\r\n this.streams[audioNodeId] = stream;\r\n\r\n const reader: FileReader = new FileReader();\r\n\r\n let startOffset = 0;\r\n let endOffset = FileAudioSource.CHUNK_SIZE;\r\n let lastWriteTimestamp = 0;\r\n\r\n const processNextChunk = (event: Event): void => {\r\n if (stream.IsClosed) {\r\n return; // output stream was closed (somebody called TurnOff). We're done here.\r\n }\r\n\r\n if (lastWriteTimestamp !== 0) {\r\n const delay = Date.now() - lastWriteTimestamp;\r\n if (delay < FileAudioSource.UPLOAD_INTERVAL) {\r\n // It's been less than the \"upload interval\" since we've uploaded the\r\n // last chunk. Schedule the next upload to make sure that we're sending\r\n // upstream roughly one chunk per upload interval.\r\n new Timer(FileAudioSource.UPLOAD_INTERVAL - delay, processNextChunk).start();\r\n return;\r\n }\r\n }\r\n\r\n stream.Write(reader.result);\r\n lastWriteTimestamp = Date.now();\r\n\r\n if (endOffset < this.file.size) {\r\n startOffset = endOffset;\r\n endOffset = Math.min(endOffset + FileAudioSource.CHUNK_SIZE, this.file.size);\r\n const chunk = this.file.slice(startOffset, endOffset);\r\n reader.readAsArrayBuffer(chunk);\r\n } else {\r\n // we've written the entire file to the output stream, can close it now.\r\n stream.Close();\r\n }\r\n };\r\n\r\n reader.onload = processNextChunk;\r\n\r\n reader.onerror = (event: ErrorEvent) => {\r\n const errorMsg = `Error occurred while processing '${this.file.name}'. ${event.error}`;\r\n this.OnEvent(new AudioStreamNodeErrorEvent(this.id, audioNodeId, event.error));\r\n throw new Error(errorMsg);\r\n };\r\n\r\n const chunk = this.file.slice(startOffset, endOffset);\r\n reader.readAsArrayBuffer(chunk);\r\n\r\n return stream.GetReader();\r\n });\r\n }\r\n\r\n private OnEvent = (event: AudioSourceEvent): void => {\r\n this.events.OnEvent(event);\r\n Events.Instance.OnEvent(event);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common.browser/FileAudioSource.ts","import { Stream } from \"../common/Exports\";\r\nimport { IRecorder } from \"./IRecorder\";\r\n\r\n// getting around the build error for MediaRecorder as Typescript does not have a definition for this one.\r\ndeclare var MediaRecorder: any;\r\n\r\nexport class OpusRecorder implements IRecorder {\r\n private mediaResources: IMediaResources;\r\n private mediaRecorderOptions: any;\r\n\r\n constructor(options?: { mimeType: string, bitsPerSecond: number }) {\r\n this.mediaRecorderOptions = options;\r\n }\r\n\r\n public Record = (context: AudioContext, mediaStream: MediaStream, outputStream: Stream): void => {\r\n const mediaRecorder: any = new MediaRecorder(mediaStream, this.mediaRecorderOptions);\r\n const timeslice = 100; // this is in ms - 100 ensures that the chunk doesn't exceed the max size of chunk allowed in WS connection\r\n mediaRecorder.ondataavailable = (dataAvailableEvent: any) => {\r\n if (outputStream) {\r\n const reader = new FileReader();\r\n reader.readAsArrayBuffer(dataAvailableEvent.data);\r\n reader.onloadend = (event: ProgressEvent) => {\r\n outputStream.Write(reader.result);\r\n };\r\n }\r\n };\r\n\r\n this.mediaResources = {\r\n recorder: mediaRecorder,\r\n stream: mediaStream,\r\n };\r\n mediaRecorder.start(timeslice);\r\n }\r\n\r\n public ReleaseMediaResources = (context: AudioContext): void => {\r\n if (this.mediaResources.recorder.state !== \"inactive\") {\r\n this.mediaResources.recorder.stop();\r\n }\r\n this.mediaResources.stream.getTracks().forEach((track: any) => track.stop());\r\n }\r\n}\r\n\r\ninterface IMediaResources {\r\n stream: MediaStream;\r\n recorder: any;\r\n}\r\n\r\n/* Declaring this inline to avoid compiler warnings\r\ndeclare class MediaRecorder {\r\n constructor(mediaStream: MediaStream, options: any);\r\n\r\n public state: string;\r\n\r\n public ondataavailable(dataAvailableEvent: any): void;\r\n public stop(): void;\r\n}*/\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common.browser/OpusRecorder.ts","import { RiffPcmEncoder, Stream } from \"../common/Exports\";\r\nimport { IRecorder } from \"./IRecorder\";\r\n\r\nexport class PcmRecorder implements IRecorder {\r\n private mediaResources: IMediaResources;\r\n\r\n public Record = (context: AudioContext, mediaStream: MediaStream, outputStream: Stream): void => {\r\n const desiredSampleRate = 16000;\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createScriptProcessor\r\n const scriptNode = (() => {\r\n let bufferSize = 0;\r\n try {\r\n return context.createScriptProcessor(bufferSize, 1, 1);\r\n } catch (error) {\r\n // Webkit (<= version 31) requires a valid bufferSize.\r\n bufferSize = 2048;\r\n let audioSampleRate = context.sampleRate;\r\n while (bufferSize < 16384 && audioSampleRate >= (2 * desiredSampleRate)) {\r\n bufferSize <<= 1 ;\r\n audioSampleRate >>= 1;\r\n }\r\n return context.createScriptProcessor(bufferSize, 1, 1);\r\n }\r\n })();\r\n\r\n const waveStreamEncoder = new RiffPcmEncoder(context.sampleRate, desiredSampleRate);\r\n let needHeader: boolean = true;\r\n const that = this;\r\n scriptNode.onaudioprocess = (event: AudioProcessingEvent) => {\r\n const inputFrame = event.inputBuffer.getChannelData(0);\r\n\r\n if (outputStream && !outputStream.IsClosed) {\r\n const waveFrame = waveStreamEncoder.Encode(needHeader, inputFrame);\r\n if (!!waveFrame) {\r\n outputStream.Write(waveFrame);\r\n needHeader = false;\r\n }\r\n }\r\n };\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createMediaStreamSource\r\n const micInput = context.createMediaStreamSource(mediaStream);\r\n\r\n this.mediaResources = {\r\n scriptProcessorNode: scriptNode,\r\n source: micInput,\r\n stream: mediaStream,\r\n };\r\n\r\n micInput.connect(scriptNode);\r\n scriptNode.connect(context.destination);\r\n }\r\n\r\n public ReleaseMediaResources = (context: AudioContext): void => {\r\n if (this.mediaResources) {\r\n if (this.mediaResources.scriptProcessorNode) {\r\n this.mediaResources.scriptProcessorNode.disconnect(context.destination);\r\n this.mediaResources.scriptProcessorNode = null;\r\n }\r\n if (this.mediaResources.source) {\r\n this.mediaResources.source.disconnect();\r\n this.mediaResources.stream.getTracks().forEach((track: any) => track.stop());\r\n this.mediaResources.source = null;\r\n }\r\n }\r\n }\r\n}\r\n\r\ninterface IMediaResources {\r\n source: MediaStreamAudioSourceNode;\r\n scriptProcessorNode: ScriptProcessorNode;\r\n stream: MediaStream;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common.browser/PCMRecorder.ts","import { ArgumentNullError, IKeyValueStorage } from \"../common/Exports\";\r\n\r\nexport class SessionStorage implements IKeyValueStorage {\r\n\r\n public Get = (key: string): string => {\r\n if (!key) {\r\n throw new ArgumentNullError(\"key\");\r\n }\r\n\r\n return sessionStorage.getItem(key);\r\n }\r\n\r\n public GetOrAdd = (key: string, valueToAdd: string): string => {\r\n if (!key) {\r\n throw new ArgumentNullError(\"key\");\r\n }\r\n\r\n const value = sessionStorage.getItem(key);\r\n if (value === null || value === undefined) {\r\n sessionStorage.setItem(key, valueToAdd);\r\n }\r\n\r\n return sessionStorage.getItem(key);\r\n }\r\n\r\n public Set = (key: string, value: string): void => {\r\n if (!key) {\r\n throw new ArgumentNullError(\"key\");\r\n }\r\n\r\n sessionStorage.setItem(key, value);\r\n }\r\n\r\n public Remove = (key: string): void => {\r\n if (!key) {\r\n throw new ArgumentNullError(\"key\");\r\n }\r\n\r\n sessionStorage.removeItem(key);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common.browser/SessionStorage.ts","import { ITimer } from \"../common/Exports\";\r\n\r\nexport class Timer implements ITimer {\r\n private delayInMillisec: number;\r\n private timerId: number;\r\n private successCallback: any;\r\n constructor(delayInMillisec: number, successCallback: any) {\r\n this.delayInMillisec = delayInMillisec;\r\n this.successCallback = successCallback;\r\n }\r\n public start = (...params: any[]): void => {\r\n if (this.timerId) {\r\n this.stop();\r\n }\r\n this.timerId = setTimeout(this.successCallback, this.delayInMillisec, params);\r\n }\r\n\r\n public stop = (): void => {\r\n clearTimeout(this.timerId);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common.browser/Timer.ts","import {\r\n ArgumentNullError,\r\n ConnectionEvent,\r\n ConnectionMessage,\r\n ConnectionOpenResponse,\r\n ConnectionState,\r\n CreateNoDashGuid,\r\n EventSource,\r\n IConnection,\r\n IStringDictionary,\r\n IWebsocketMessageFormatter,\r\n PlatformEvent,\r\n Promise,\r\n} from \"../common/Exports\";\r\nimport { WebsocketMessageAdapter } from \"./WebsocketMessageAdapter\";\r\n\r\nexport class WebsocketConnection implements IConnection {\r\n\r\n private uri: string;\r\n private messageFormatter: IWebsocketMessageFormatter;\r\n private connectionMessageAdapter: WebsocketMessageAdapter;\r\n private id: string;\r\n private isDisposed: boolean = false;\r\n\r\n public constructor(\r\n uri: string,\r\n queryParameters: IStringDictionary,\r\n headers: IStringDictionary,\r\n messageFormatter: IWebsocketMessageFormatter,\r\n connectionId?: string) {\r\n\r\n if (!uri) {\r\n throw new ArgumentNullError(\"uri\");\r\n }\r\n\r\n if (!messageFormatter) {\r\n throw new ArgumentNullError(\"messageFormatter\");\r\n }\r\n\r\n this.messageFormatter = messageFormatter;\r\n\r\n let queryParams = \"\";\r\n let i = 0;\r\n\r\n if (queryParameters) {\r\n for (const paramName in queryParameters) {\r\n if (paramName) {\r\n queryParams += i === 0 ? \"?\" : \"&\";\r\n const val = encodeURIComponent(queryParameters[paramName]);\r\n queryParams += `${paramName}=${val}`;\r\n i++;\r\n }\r\n }\r\n }\r\n\r\n if (headers) {\r\n for (const headerName in headers) {\r\n if (headerName) {\r\n queryParams += i === 0 ? \"?\" : \"&\";\r\n const val = encodeURIComponent(headers[headerName]);\r\n queryParams += `${headerName}=${val}`;\r\n i++;\r\n }\r\n }\r\n }\r\n\r\n this.uri = uri + queryParams;\r\n this.id = connectionId ? connectionId : CreateNoDashGuid();\r\n\r\n this.connectionMessageAdapter = new WebsocketMessageAdapter(\r\n this.uri,\r\n this.Id,\r\n this.messageFormatter);\r\n }\r\n\r\n public Dispose = (): void => {\r\n this.isDisposed = true;\r\n\r\n if (this.connectionMessageAdapter) {\r\n this.connectionMessageAdapter.Close();\r\n }\r\n }\r\n\r\n public IsDisposed = (): boolean => {\r\n return this.isDisposed;\r\n }\r\n\r\n public get Id(): string {\r\n return this.id;\r\n }\r\n\r\n public State = (): ConnectionState => {\r\n return this.connectionMessageAdapter.State;\r\n }\r\n\r\n public Open = (): Promise => {\r\n return this.connectionMessageAdapter.Open();\r\n }\r\n\r\n public Send = (message: ConnectionMessage): Promise => {\r\n return this.connectionMessageAdapter.Send(message);\r\n }\r\n\r\n public Read = (): Promise => {\r\n return this.connectionMessageAdapter.Read();\r\n }\r\n\r\n public get Events(): EventSource {\r\n return this.connectionMessageAdapter.Events;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/common.browser/WebsocketConnection.ts","import { ArgumentNullError, Promise, PromiseHelper } from \"../../common/Exports\";\r\nimport { AuthInfo, IAuthentication } from \"./IAuthentication\";\r\n\r\nconst AuthHeader: string = \"Ocp-Apim-Subscription-Key\";\r\n\r\nexport class CognitiveSubscriptionKeyAuthentication implements IAuthentication {\r\n private authInfo: AuthInfo;\r\n\r\n constructor(subscriptionKey: string) {\r\n if (!subscriptionKey) {\r\n throw new ArgumentNullError(\"subscriptionKey\");\r\n }\r\n\r\n this.authInfo = new AuthInfo(AuthHeader, subscriptionKey);\r\n }\r\n\r\n public Fetch = (authFetchEventId: string): Promise => {\r\n return PromiseHelper.FromResult(this.authInfo);\r\n }\r\n\r\n public FetchOnExpiry = (authFetchEventId: string): Promise => {\r\n return PromiseHelper.FromResult(this.authInfo);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech/CognitiveSubscriptionKeyAuthentication.ts","import { ArgumentNullError, Promise, PromiseHelper } from \"../../common/Exports\";\r\nimport { AuthInfo, IAuthentication } from \"./IAuthentication\";\r\n\r\nconst AuthHeader: string = \"Authorization\";\r\n\r\nexport class CognitiveTokenAuthentication implements IAuthentication {\r\n private fetchCallback: (authFetchEventId: string) => Promise;\r\n private fetchOnExpiryCallback: (authFetchEventId: string) => Promise;\r\n\r\n constructor(fetchCallback: (authFetchEventId: string) => Promise, fetchOnExpiryCallback: (authFetchEventId: string) => Promise) {\r\n if (!fetchCallback) {\r\n throw new ArgumentNullError(\"fetchCallback\");\r\n }\r\n\r\n if (!fetchOnExpiryCallback) {\r\n throw new ArgumentNullError(\"fetchOnExpiryCallback\");\r\n }\r\n\r\n this.fetchCallback = fetchCallback;\r\n this.fetchOnExpiryCallback = fetchOnExpiryCallback;\r\n }\r\n\r\n public Fetch = (authFetchEventId: string): Promise => {\r\n return this.fetchCallback(authFetchEventId).OnSuccessContinueWith((token: string) => new AuthInfo(AuthHeader, token));\r\n }\r\n\r\n public FetchOnExpiry = (authFetchEventId: string): Promise => {\r\n return this.fetchOnExpiryCallback(authFetchEventId).OnSuccessContinueWith((token: string) => new AuthInfo(AuthHeader, token));\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech/CognitiveTokenAuthentication.ts","import {\r\n ArgumentNullError,\r\n ConnectionMessage,\r\n ConnectionOpenResponse,\r\n ConnectionState,\r\n CreateNoDashGuid,\r\n Deferred,\r\n Events,\r\n IAudioSource,\r\n IAudioStreamNode,\r\n IConnection,\r\n IDetachable,\r\n IEventSource,\r\n IStreamChunk,\r\n MessageType,\r\n PlatformEvent,\r\n Promise,\r\n PromiseHelper,\r\n PromiseResult,\r\n} from \"../../common/Exports\";\r\nimport { AuthInfo, IAuthentication } from \"./IAuthentication\";\r\nimport { IConnectionFactory } from \"./IConnectionFactory\";\r\nimport {\r\n ConnectingToServiceEvent,\r\n ListeningStartedEvent,\r\n RecognitionCompletionStatus,\r\n RecognitionEndedEvent,\r\n RecognitionStartedEvent,\r\n RecognitionTriggeredEvent,\r\n SpeechDetailedPhraseEvent,\r\n SpeechEndDetectedEvent,\r\n SpeechFragmentEvent,\r\n SpeechHypothesisEvent,\r\n SpeechRecognitionEvent,\r\n SpeechRecognitionResultEvent,\r\n SpeechSimplePhraseEvent,\r\n SpeechStartDetectedEvent,\r\n} from \"./RecognitionEvents\";\r\nimport { RecognitionMode, RecognizerConfig, SpeechResultFormat } from \"./RecognizerConfig\";\r\nimport { ServiceTelemetryListener } from \"./ServiceTelemetryListener.Internal\";\r\nimport { SpeechConnectionMessage } from \"./SpeechConnectionMessage.Internal\";\r\nimport {\r\n IDetailedSpeechPhrase,\r\n ISimpleSpeechPhrase,\r\n ISpeechEndDetectedResult,\r\n ISpeechFragment,\r\n ISpeechStartDetectedResult,\r\n} from \"./SpeechResults\";\r\n\r\nexport class Recognizer {\r\n private authentication: IAuthentication;\r\n private connectionFactory: IConnectionFactory;\r\n private audioSource: IAudioSource;\r\n private recognizerConfig: RecognizerConfig;\r\n private speechConfigConnectionId: string;\r\n private connectionFetchPromise: Promise;\r\n private connectionId: string;\r\n private authFetchEventId: string;\r\n\r\n public constructor(\r\n authentication: IAuthentication,\r\n connectionFactory: IConnectionFactory,\r\n audioSource: IAudioSource,\r\n recognizerConfig: RecognizerConfig) {\r\n\r\n if (!authentication) {\r\n throw new ArgumentNullError(\"authentication\");\r\n }\r\n\r\n if (!connectionFactory) {\r\n throw new ArgumentNullError(\"connectionFactory\");\r\n }\r\n\r\n if (!audioSource) {\r\n throw new ArgumentNullError(\"audioSource\");\r\n }\r\n\r\n if (!recognizerConfig) {\r\n throw new ArgumentNullError(\"recognizerConfig\");\r\n }\r\n\r\n this.authentication = authentication;\r\n this.connectionFactory = connectionFactory;\r\n this.audioSource = audioSource;\r\n this.recognizerConfig = recognizerConfig;\r\n }\r\n\r\n public get AudioSource(): IAudioSource {\r\n return this.audioSource;\r\n }\r\n\r\n public Recognize = (onEventCallback: (event: SpeechRecognitionEvent) => void, speechContextJson?: string): Promise => {\r\n const requestSession = new RequestSession(this.audioSource.Id(), onEventCallback);\r\n requestSession.ListenForServiceTelemetry(this.audioSource.Events);\r\n\r\n return this.audioSource\r\n .Attach(requestSession.AudioNodeId)\r\n .ContinueWithPromise((result: PromiseResult) => {\r\n if (result.IsError) {\r\n requestSession.OnAudioSourceAttachCompleted(null, true, result.Error);\r\n throw new Error(result.Error);\r\n } else {\r\n requestSession.OnAudioSourceAttachCompleted(result.Result, false);\r\n }\r\n\r\n const audioNode = result.Result;\r\n\r\n this.FetchConnection(requestSession)\r\n .OnSuccessContinueWith((connection: IConnection) => {\r\n const messageRetrievalPromise = this.ReceiveMessage(connection, requestSession);\r\n const messageSendPromise = this.SendSpeechConfig(requestSession.RequestId, connection, this.recognizerConfig.SpeechConfig.Serialize())\r\n .OnSuccessContinueWithPromise((_: boolean) => {\r\n return this.SendSpeechContext(requestSession.RequestId, connection, speechContextJson)\r\n .OnSuccessContinueWithPromise((_: boolean) => {\r\n return this.SendAudio(requestSession.RequestId, connection, audioNode, requestSession);\r\n });\r\n });\r\n\r\n const completionPromise = PromiseHelper.WhenAll([messageRetrievalPromise, messageSendPromise]);\r\n\r\n completionPromise.On((r: boolean) => {\r\n requestSession.Dispose();\r\n this.SendTelemetryData(requestSession.RequestId, connection, requestSession.GetTelemetry());\r\n }, (error: string) => {\r\n requestSession.Dispose(error);\r\n this.SendTelemetryData(requestSession.RequestId, connection, requestSession.GetTelemetry());\r\n });\r\n\r\n return completionPromise;\r\n });\r\n\r\n return requestSession.CompletionPromise;\r\n });\r\n }\r\n\r\n private FetchConnection = (requestSession: RequestSession, isUnAuthorized: boolean = false): Promise => {\r\n if (this.connectionFetchPromise) {\r\n if (this.connectionFetchPromise.Result().IsError\r\n || this.connectionFetchPromise.Result().Result.State() === ConnectionState.Disconnected) {\r\n this.connectionId = null;\r\n this.connectionFetchPromise = null;\r\n return this.FetchConnection(requestSession);\r\n } else {\r\n requestSession.OnPreConnectionStart(this.authFetchEventId, this.connectionId);\r\n requestSession.OnConnectionEstablishCompleted(200);\r\n requestSession.ListenForServiceTelemetry(this.connectionFetchPromise.Result().Result.Events);\r\n return this.connectionFetchPromise;\r\n }\r\n }\r\n\r\n this.authFetchEventId = CreateNoDashGuid();\r\n this.connectionId = CreateNoDashGuid();\r\n\r\n requestSession.OnPreConnectionStart(this.authFetchEventId, this.connectionId);\r\n\r\n const authPromise = isUnAuthorized ? this.authentication.FetchOnExpiry(this.authFetchEventId) : this.authentication.Fetch(this.authFetchEventId);\r\n\r\n this.connectionFetchPromise = authPromise\r\n .ContinueWithPromise((result: PromiseResult) => {\r\n if (result.IsError) {\r\n requestSession.OnAuthCompleted(true, result.Error);\r\n throw new Error(result.Error);\r\n } else {\r\n requestSession.OnAuthCompleted(false);\r\n }\r\n\r\n const connection = this.connectionFactory.Create(this.recognizerConfig, result.Result, this.connectionId);\r\n requestSession.ListenForServiceTelemetry(connection.Events);\r\n\r\n return connection.Open().OnSuccessContinueWithPromise((response: ConnectionOpenResponse) => {\r\n if (response.StatusCode === 200) {\r\n requestSession.OnConnectionEstablishCompleted(response.StatusCode);\r\n return PromiseHelper.FromResult(connection);\r\n } else if (response.StatusCode === 403 && !isUnAuthorized) {\r\n return this.FetchConnection(requestSession, true);\r\n } else {\r\n requestSession.OnConnectionEstablishCompleted(response.StatusCode, response.Reason);\r\n return PromiseHelper.FromError(`Unable to contact server. StatusCode: ${response.StatusCode}, Reason: ${response.Reason}`);\r\n }\r\n });\r\n });\r\n\r\n return this.connectionFetchPromise;\r\n }\r\n\r\n private ReceiveMessage = (connection: IConnection, requestSession: RequestSession): Promise => {\r\n return connection\r\n .Read()\r\n .OnSuccessContinueWithPromise((message: ConnectionMessage) => {\r\n const connectionMessage = SpeechConnectionMessage.FromConnectionMessage(message);\r\n if (connectionMessage.RequestId.toLowerCase() === requestSession.RequestId.toLowerCase()) {\r\n switch (connectionMessage.Path.toLowerCase()) {\r\n case \"turn.start\":\r\n requestSession.OnServiceTurnStartResponse(JSON.parse(connectionMessage.TextBody));\r\n break;\r\n case \"speech.startDetected\":\r\n requestSession.OnServiceSpeechStartDetectedResponse(JSON.parse(connectionMessage.TextBody));\r\n break;\r\n case \"speech.hypothesis\":\r\n requestSession.OnServiceSpeechHypothesisResponse(JSON.parse(connectionMessage.TextBody));\r\n break;\r\n case \"speech.fragment\":\r\n requestSession.OnServiceSpeechFragmentResponse(JSON.parse(connectionMessage.TextBody));\r\n break;\r\n case \"speech.enddetected\":\r\n requestSession.OnServiceSpeechEndDetectedResponse(JSON.parse(connectionMessage.TextBody));\r\n break;\r\n case \"speech.phrase\":\r\n if (this.recognizerConfig.IsContinuousRecognition) {\r\n // For continuous recognition telemetry has to be sent for every phrase as per spec.\r\n this.SendTelemetryData(requestSession.RequestId, connection, requestSession.GetTelemetry());\r\n }\r\n if (this.recognizerConfig.Format === SpeechResultFormat.Simple) {\r\n requestSession.OnServiceSimpleSpeechPhraseResponse(JSON.parse(connectionMessage.TextBody));\r\n } else {\r\n requestSession.OnServiceDetailedSpeechPhraseResponse(JSON.parse(connectionMessage.TextBody));\r\n }\r\n break;\r\n case \"turn.end\":\r\n requestSession.OnServiceTurnEndResponse();\r\n return PromiseHelper.FromResult(true);\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return this.ReceiveMessage(connection, requestSession);\r\n });\r\n }\r\n\r\n private SendSpeechConfig = (requestId: string, connection: IConnection, speechConfigJson: string) => {\r\n if (speechConfigJson && this.connectionId !== this.speechConfigConnectionId) {\r\n this.speechConfigConnectionId = this.connectionId;\r\n return connection\r\n .Send(new SpeechConnectionMessage(\r\n MessageType.Text,\r\n \"speech.config\",\r\n requestId,\r\n \"application/json\",\r\n speechConfigJson));\r\n }\r\n\r\n return PromiseHelper.FromResult(true);\r\n }\r\n\r\n private SendSpeechContext = (requestId: string, connection: IConnection, speechContextJson: string) => {\r\n if (speechContextJson) {\r\n return connection\r\n .Send(new SpeechConnectionMessage(\r\n MessageType.Text,\r\n \"speech.context\",\r\n requestId,\r\n \"application/json\",\r\n speechContextJson));\r\n }\r\n return PromiseHelper.FromResult(true);\r\n }\r\n\r\n private SendTelemetryData = (requestId: string, connection: IConnection, telemetryData: string) => {\r\n return connection\r\n .Send(new SpeechConnectionMessage(\r\n MessageType.Text,\r\n \"telemetry\",\r\n requestId,\r\n \"application/json\",\r\n telemetryData));\r\n }\r\n\r\n private SendAudio = (\r\n requestId: string,\r\n connection: IConnection,\r\n audioStreamNode: IAudioStreamNode,\r\n requestSession: RequestSession): Promise => {\r\n // NOTE: Home-baked promises crash ios safari during the invocation\r\n // of the error callback chain (looks like the recursion is way too deep, and\r\n // it blows up the stack). The following construct is a stop-gap that does not\r\n // bubble the error up the callback chain and hence circumvents this problem.\r\n // TODO: rewrite with ES6 promises.\r\n const deferred = new Deferred();\r\n\r\n const readAndUploadCycle = (_: boolean) => {\r\n audioStreamNode.Read().On(\r\n (audioStreamChunk: IStreamChunk) => {\r\n // we have a new audio chunk to upload.\r\n if (requestSession.IsSpeechEnded) {\r\n // If service already recognized audio end then dont send any more audio\r\n deferred.Resolve(true);\r\n return;\r\n }\r\n\r\n const payload = (audioStreamChunk.IsEnd) ? null : audioStreamChunk.Buffer;\r\n const uploaded = connection.Send(\r\n new SpeechConnectionMessage(\r\n MessageType.Binary, \"audio\", requestId, null, payload));\r\n\r\n if (!audioStreamChunk.IsEnd) {\r\n uploaded.OnSuccessContinueWith(readAndUploadCycle);\r\n } else {\r\n // the audio stream has been closed, no need to schedule next\r\n // read-upload cycle.\r\n deferred.Resolve(true);\r\n }\r\n },\r\n (error: string) => {\r\n if (requestSession.IsSpeechEnded) {\r\n // For whatever reason, Reject is used to remove queue subscribers inside\r\n // the Queue.DrainAndDispose invoked from DetachAudioNode down blow, which\r\n // means that sometimes things can be rejected in normal circumstances, without\r\n // any errors.\r\n deferred.Resolve(true); // TODO: remove the argument, it's is completely meaningless.\r\n } else {\r\n // Only reject, if there was a proper error.\r\n deferred.Reject(error);\r\n }\r\n });\r\n };\r\n\r\n readAndUploadCycle(true);\r\n\r\n return deferred.Promise();\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nclass RequestSession {\r\n private isDisposed: boolean = false;\r\n private serviceTelemetryListener: ServiceTelemetryListener;\r\n private detachables: IDetachable[] = new Array();\r\n private requestId: string;\r\n private audioSourceId: string;\r\n private audioNodeId: string;\r\n private audioNode: IAudioStreamNode;\r\n private authFetchEventId: string;\r\n private connectionId: string;\r\n private serviceTag: string;\r\n private isAudioNodeDetached: boolean = false;\r\n private isCompleted: boolean = false;\r\n private onEventCallback: (event: SpeechRecognitionEvent) => void;\r\n\r\n private requestCompletionDeferral: Deferred;\r\n\r\n constructor(audioSourceId: string, onEventCallback: (event: SpeechRecognitionEvent) => void) {\r\n this.audioSourceId = audioSourceId;\r\n this.onEventCallback = onEventCallback;\r\n this.requestId = CreateNoDashGuid();\r\n this.audioNodeId = CreateNoDashGuid();\r\n this.requestCompletionDeferral = new Deferred();\r\n\r\n this.serviceTelemetryListener = new ServiceTelemetryListener(this.requestId, this.audioSourceId, this.audioNodeId);\r\n\r\n this.OnEvent(new RecognitionTriggeredEvent(this.RequestId, this.audioSourceId, this.audioNodeId));\r\n }\r\n\r\n public get RequestId(): string {\r\n return this.requestId;\r\n }\r\n\r\n public get AudioNodeId(): string {\r\n return this.audioNodeId;\r\n }\r\n\r\n public get CompletionPromise(): Promise {\r\n return this.requestCompletionDeferral.Promise();\r\n }\r\n\r\n public get IsSpeechEnded(): boolean {\r\n return this.isAudioNodeDetached;\r\n }\r\n\r\n public get IsCompleted(): boolean {\r\n return this.isCompleted;\r\n }\r\n\r\n public ListenForServiceTelemetry(eventSource: IEventSource): void {\r\n this.detachables.push(eventSource.AttachListener(this.serviceTelemetryListener));\r\n }\r\n\r\n public OnAudioSourceAttachCompleted = (audioNode: IAudioStreamNode, isError: boolean, error?: string): void => {\r\n this.audioNode = audioNode;\r\n if (isError) {\r\n this.OnComplete(RecognitionCompletionStatus.AudioSourceError, error);\r\n } else {\r\n this.OnEvent(new ListeningStartedEvent(this.requestId, this.audioSourceId, this.audioNodeId));\r\n }\r\n }\r\n\r\n public OnPreConnectionStart = (authFetchEventId: string, connectionId: string): void => {\r\n this.authFetchEventId = authFetchEventId;\r\n this.connectionId = connectionId;\r\n this.OnEvent(new ConnectingToServiceEvent(this.requestId, this.authFetchEventId, this.connectionId));\r\n }\r\n\r\n public OnAuthCompleted = (isError: boolean, error?: string): void => {\r\n if (isError) {\r\n this.OnComplete(RecognitionCompletionStatus.AuthTokenFetchError, error);\r\n }\r\n }\r\n\r\n public OnConnectionEstablishCompleted = (statusCode: number, reason?: string): void => {\r\n if (statusCode === 200) {\r\n this.OnEvent(new RecognitionStartedEvent(this.RequestId, this.audioSourceId, this.audioNodeId, this.authFetchEventId, this.connectionId));\r\n return;\r\n } else if (statusCode === 403) {\r\n this.OnComplete(RecognitionCompletionStatus.UnAuthorized, reason);\r\n } else {\r\n this.OnComplete(RecognitionCompletionStatus.ConnectError, reason);\r\n }\r\n }\r\n\r\n public OnServiceTurnStartResponse = (response: ITurnStartResponse): void => {\r\n if (response && response.context && response.context.serviceTag) {\r\n this.serviceTag = response.context.serviceTag;\r\n }\r\n }\r\n\r\n public OnServiceSpeechStartDetectedResponse = (result: ISpeechStartDetectedResult): void => {\r\n this.OnEvent(new SpeechStartDetectedEvent(this.RequestId, result));\r\n }\r\n\r\n public OnServiceSpeechHypothesisResponse = (result: ISpeechFragment): void => {\r\n this.OnEvent(new SpeechHypothesisEvent(this.RequestId, result));\r\n }\r\n\r\n public OnServiceSpeechFragmentResponse = (result: ISpeechFragment): void => {\r\n this.OnEvent(new SpeechFragmentEvent(this.RequestId, result));\r\n }\r\n\r\n public OnServiceSpeechEndDetectedResponse = (result: ISpeechEndDetectedResult): void => {\r\n this.DetachAudioNode();\r\n this.OnEvent(new SpeechEndDetectedEvent(this.RequestId, result));\r\n }\r\n\r\n public OnServiceSimpleSpeechPhraseResponse = (result: ISimpleSpeechPhrase): void => {\r\n this.OnEvent(new SpeechSimplePhraseEvent(this.RequestId, result));\r\n }\r\n\r\n public OnServiceDetailedSpeechPhraseResponse = (result: IDetailedSpeechPhrase): void => {\r\n this.OnEvent(new SpeechDetailedPhraseEvent(this.RequestId, result));\r\n }\r\n\r\n public OnServiceTurnEndResponse = (): void => {\r\n this.OnComplete(RecognitionCompletionStatus.Success);\r\n }\r\n\r\n public OnConnectionError = (error: string): void => {\r\n this.OnComplete(RecognitionCompletionStatus.UnknownError, error);\r\n }\r\n\r\n public Dispose = (error?: string): void => {\r\n if (!this.isDisposed) {\r\n // we should have completed by now. If we did not its an unknown error.\r\n this.OnComplete(RecognitionCompletionStatus.UnknownError, error);\r\n this.isDisposed = true;\r\n for (const detachable of this.detachables) {\r\n detachable.Detach();\r\n }\r\n\r\n this.serviceTelemetryListener.Dispose();\r\n }\r\n }\r\n\r\n public GetTelemetry = (): string => {\r\n return this.serviceTelemetryListener.GetTelemetry();\r\n }\r\n\r\n private OnComplete = (status: RecognitionCompletionStatus, error?: string): void => {\r\n if (!this.isCompleted) {\r\n this.isCompleted = true;\r\n this.DetachAudioNode();\r\n this.OnEvent(new RecognitionEndedEvent(this.RequestId, this.audioSourceId, this.audioNodeId, this.authFetchEventId, this.connectionId, this.serviceTag, status, error ? error : \"\"));\r\n }\r\n }\r\n\r\n private DetachAudioNode = (): void => {\r\n if (!this.isAudioNodeDetached) {\r\n this.isAudioNodeDetached = true;\r\n if (this.audioNode) {\r\n this.audioNode.Detach();\r\n }\r\n }\r\n }\r\n\r\n private OnEvent = (event: SpeechRecognitionEvent): void => {\r\n this.serviceTelemetryListener.OnEvent(event);\r\n Events.Instance.OnEvent(event);\r\n if (this.onEventCallback) {\r\n this.onEventCallback(event);\r\n }\r\n }\r\n}\r\n\r\ninterface ITurnStartResponse {\r\n context: ITurnStartContext;\r\n}\r\n\r\ninterface ITurnStartContext {\r\n serviceTag: string;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech/Recognizer.ts","import {\r\n AudioSourceErrorEvent,\r\n AudioStreamNodeAttachedEvent,\r\n AudioStreamNodeAttachingEvent,\r\n AudioStreamNodeDetachedEvent,\r\n AudioStreamNodeErrorEvent,\r\n ConnectionClosedEvent,\r\n ConnectionEstablishedEvent,\r\n ConnectionEstablishErrorEvent,\r\n ConnectionMessageReceivedEvent,\r\n ConnectionStartEvent,\r\n IEventListener,\r\n IStringDictionary,\r\n PlatformEvent,\r\n} from \"../../common/Exports\";\r\nimport {\r\n ConnectingToServiceEvent,\r\n RecognitionTriggeredEvent,\r\n} from \"./RecognitionEvents\";\r\n\r\ninterface ITelemetry {\r\n Metrics: IMetric[];\r\n ReceivedMessages: IStringDictionary;\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\ninterface IMetric {\r\n End: string;\r\n Error?: string;\r\n Id?: string;\r\n Name: string;\r\n Start: string;\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ServiceTelemetryListener implements IEventListener {\r\n private isDisposed: boolean = false;\r\n\r\n private requestId: string;\r\n private audioSourceId: string;\r\n private audioNodeId: string;\r\n\r\n private listeningTriggerMetric: IMetric = null;\r\n private micMetric: IMetric = null;\r\n private connectionEstablishMetric: IMetric = null;\r\n\r\n private micStartTime: string;\r\n\r\n private connectionId: string;\r\n private connectionStartTime: string;\r\n\r\n private receivedMessages: IStringDictionary;\r\n\r\n constructor(requestId: string, audioSourceId: string, audioNodeId: string) {\r\n this.requestId = requestId;\r\n this.audioSourceId = audioSourceId;\r\n this.audioNodeId = audioNodeId;\r\n\r\n this.receivedMessages = {};\r\n }\r\n\r\n public OnEvent = (e: PlatformEvent): void => {\r\n if (this.isDisposed) {\r\n return;\r\n }\r\n\r\n if (e instanceof RecognitionTriggeredEvent && e.RequestId === this.requestId) {\r\n this.listeningTriggerMetric = {\r\n End: e.EventTime,\r\n Name: \"ListeningTrigger\",\r\n Start: e.EventTime,\r\n };\r\n }\r\n\r\n if (e instanceof AudioStreamNodeAttachingEvent && e.AudioSourceId === this.audioSourceId && e.AudioNodeId === this.audioNodeId) {\r\n this.micStartTime = e.EventTime;\r\n }\r\n\r\n if (e instanceof AudioStreamNodeAttachedEvent && e.AudioSourceId === this.audioSourceId && e.AudioNodeId === this.audioNodeId) {\r\n this.micStartTime = e.EventTime;\r\n }\r\n\r\n if (e instanceof AudioSourceErrorEvent && e.AudioSourceId === this.audioSourceId) {\r\n if (!this.micMetric) {\r\n this.micMetric = {\r\n End: e.EventTime,\r\n Error: e.Error,\r\n Name: \"Microphone\",\r\n Start: this.micStartTime,\r\n };\r\n }\r\n }\r\n\r\n if (e instanceof AudioStreamNodeErrorEvent && e.AudioSourceId === this.audioSourceId && e.AudioNodeId === this.audioNodeId) {\r\n if (!this.micMetric) {\r\n this.micMetric = {\r\n End: e.EventTime,\r\n Error: e.Error,\r\n Name: \"Microphone\",\r\n Start: this.micStartTime,\r\n };\r\n }\r\n }\r\n\r\n if (e instanceof AudioStreamNodeDetachedEvent && e.AudioSourceId === this.audioSourceId && e.AudioNodeId === this.audioNodeId) {\r\n if (!this.micMetric) {\r\n this.micMetric = {\r\n End: e.EventTime,\r\n Name: \"Microphone\",\r\n Start: this.micStartTime,\r\n };\r\n }\r\n }\r\n\r\n if (e instanceof ConnectingToServiceEvent && e.RequestId === this.requestId) {\r\n this.connectionId = e.ConnectionId;\r\n }\r\n\r\n if (e instanceof ConnectionStartEvent && e.ConnectionId === this.connectionId) {\r\n this.connectionStartTime = e.EventTime;\r\n }\r\n\r\n if (e instanceof ConnectionEstablishedEvent && e.ConnectionId === this.connectionId) {\r\n if (!this.connectionEstablishMetric) {\r\n this.connectionEstablishMetric = {\r\n End: e.EventTime,\r\n Id: this.connectionId,\r\n Name: \"Connection\",\r\n Start: this.connectionStartTime,\r\n };\r\n }\r\n }\r\n\r\n if (e instanceof ConnectionEstablishErrorEvent && e.ConnectionId === this.connectionId) {\r\n if (!this.connectionEstablishMetric) {\r\n this.connectionEstablishMetric = {\r\n End: e.EventTime,\r\n Error: this.GetConnectionError(e.StatusCode),\r\n Id: this.connectionId,\r\n Name: \"Connection\",\r\n Start: this.connectionStartTime,\r\n };\r\n }\r\n }\r\n\r\n if (e instanceof ConnectionMessageReceivedEvent && e.ConnectionId === this.connectionId) {\r\n if (e.Message && e.Message.Headers && e.Message.Headers.path) {\r\n if (!this.receivedMessages[e.Message.Headers.path]) {\r\n this.receivedMessages[e.Message.Headers.path] = new Array();\r\n }\r\n\r\n this.receivedMessages[e.Message.Headers.path].push(e.NetworkReceivedTime);\r\n }\r\n }\r\n }\r\n\r\n public GetTelemetry = (): string => {\r\n const metrics = new Array();\r\n\r\n if (this.listeningTriggerMetric) {\r\n metrics.push(this.listeningTriggerMetric);\r\n }\r\n\r\n if (this.micMetric) {\r\n metrics.push(this.micMetric);\r\n }\r\n\r\n if (this.connectionEstablishMetric) {\r\n metrics.push(this.connectionEstablishMetric);\r\n }\r\n\r\n const telemetry: ITelemetry = {\r\n Metrics: metrics,\r\n ReceivedMessages: this.receivedMessages,\r\n };\r\n\r\n const json = JSON.stringify(telemetry);\r\n\r\n // We dont want to send the same telemetry again. So clean those out.\r\n this.receivedMessages = {};\r\n this.listeningTriggerMetric = null;\r\n this.micMetric = null;\r\n this.connectionEstablishMetric = null;\r\n\r\n return json;\r\n }\r\n\r\n public Dispose = (): void => {\r\n this.isDisposed = true;\r\n }\r\n\r\n private GetConnectionError = (statusCode: number): string => {\r\n /*\r\n -- Websocket status codes --\r\n NormalClosure = 1000,\r\n EndpointUnavailable = 1001,\r\n ProtocolError = 1002,\r\n InvalidMessageType = 1003,\r\n Empty = 1005,\r\n InvalidPayloadData = 1007,\r\n PolicyViolation = 1008,\r\n MessageTooBig = 1009,\r\n MandatoryExtension = 1010,\r\n InternalServerError = 1011\r\n */\r\n\r\n switch (statusCode) {\r\n case 400:\r\n case 1002:\r\n case 1003:\r\n case 1005:\r\n case 1007:\r\n case 1008:\r\n case 1009: return \"BadRequest\";\r\n case 401: return \"Unauthorized\";\r\n case 403: return \"Forbidden\";\r\n case 503:\r\n case 1001: return \"ServerUnavailable\";\r\n case 500:\r\n case 1011: return \"ServerError\";\r\n case 408:\r\n case 504: return \"Timeout\";\r\n default: return \"statuscode:\" + statusCode.toString();\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech/ServiceTelemetryListener.Internal.ts","import {\r\n ArgumentNullError,\r\n ConnectionMessage,\r\n IStringDictionary,\r\n MessageType,\r\n} from \"../../common/Exports\";\r\n\r\nconst PathHeaderName: string = \"path\";\r\nconst ContentTypeHeaderName: string = \"content-type\";\r\nconst RequestIdHeaderName: string = \"x-requestid\";\r\nconst RequestTimestampHeaderName: string = \"x-timestamp\";\r\n\r\nexport class SpeechConnectionMessage extends ConnectionMessage {\r\n\r\n private path: string;\r\n private requestId: string;\r\n private contentType: string;\r\n private additionalHeaders: IStringDictionary;\r\n\r\n public constructor(\r\n messageType: MessageType,\r\n path: string,\r\n requestId: string,\r\n contentType: string,\r\n body: any,\r\n additionalHeaders?: IStringDictionary,\r\n id?: string) {\r\n\r\n if (!path) {\r\n throw new ArgumentNullError(\"path\");\r\n }\r\n\r\n if (!requestId) {\r\n throw new ArgumentNullError(\"requestId\");\r\n }\r\n\r\n const headers: IStringDictionary = {};\r\n headers[PathHeaderName] = path;\r\n headers[RequestIdHeaderName] = requestId;\r\n headers[RequestTimestampHeaderName] = new Date().toISOString();\r\n if (contentType) {\r\n headers[ContentTypeHeaderName] = contentType;\r\n }\r\n\r\n if (additionalHeaders) {\r\n for (const headerName in additionalHeaders) {\r\n if (headerName) {\r\n headers[headerName] = additionalHeaders[headerName];\r\n }\r\n\r\n }\r\n }\r\n\r\n if (id) {\r\n super(messageType, body, headers, id);\r\n } else {\r\n super(messageType, body, headers);\r\n }\r\n\r\n this.path = path;\r\n this.requestId = requestId;\r\n this.contentType = contentType;\r\n this.additionalHeaders = additionalHeaders;\r\n }\r\n\r\n public get Path(): string {\r\n return this.path;\r\n }\r\n\r\n public get RequestId(): string {\r\n return this.requestId;\r\n }\r\n\r\n public get ContentType(): string {\r\n return this.contentType;\r\n }\r\n\r\n public get AdditionalHeaders(): IStringDictionary {\r\n return this.additionalHeaders;\r\n }\r\n\r\n public static FromConnectionMessage = (message: ConnectionMessage): SpeechConnectionMessage => {\r\n let path = null;\r\n let requestId = null;\r\n let contentType = null;\r\n let requestTimestamp = null;\r\n const additionalHeaders: IStringDictionary = {};\r\n\r\n if (message.Headers) {\r\n for (const headerName in message.Headers) {\r\n if (headerName) {\r\n if (headerName.toLowerCase() === PathHeaderName.toLowerCase()) {\r\n path = message.Headers[headerName];\r\n } else if (headerName.toLowerCase() === RequestIdHeaderName.toLowerCase()) {\r\n requestId = message.Headers[headerName];\r\n } else if (headerName.toLowerCase() === RequestTimestampHeaderName.toLowerCase()) {\r\n requestTimestamp = message.Headers[headerName];\r\n } else if (headerName.toLowerCase() === ContentTypeHeaderName.toLowerCase()) {\r\n contentType = message.Headers[headerName];\r\n } else {\r\n additionalHeaders[headerName] = message.Headers[headerName];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return new SpeechConnectionMessage(\r\n message.MessageType,\r\n path,\r\n requestId,\r\n contentType,\r\n message.Body,\r\n additionalHeaders,\r\n message.Id);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech/SpeechConnectionMessage.Internal.ts","\r\nexport enum RecognitionStatus {\r\n Success,\r\n NoMatch,\r\n InitialSilenceTimeout,\r\n BabbleTimeout,\r\n Error,\r\n EndOfDictation,\r\n}\r\n\r\nexport interface ISpeechStartDetectedResult {\r\n Offset?: number;\r\n}\r\n\r\nexport interface ISpeechFragment {\r\n Text: string;\r\n Offset?: number;\r\n Duration?: number;\r\n}\r\n\r\nexport interface ISpeechEndDetectedResult {\r\n Offset?: number;\r\n}\r\n\r\nexport interface ISimpleSpeechPhrase {\r\n RecognitionStatus: RecognitionStatus;\r\n DisplayText: string;\r\n Duration?: number;\r\n Offset?: number;\r\n}\r\n\r\nexport interface IDetailedSpeechPhrase {\r\n RecognitionStatus: RecognitionStatus;\r\n NBest: IPhrase[];\r\n Duration?: number;\r\n Offset?: number;\r\n}\r\n\r\nexport interface IPhrase {\r\n Confidence?: number;\r\n Lexical: string;\r\n ITN: string;\r\n MaskedITN: string;\r\n Display: string;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech/SpeechResults.ts","import {\r\n ConnectionMessage,\r\n Deferred,\r\n IStringDictionary,\r\n IWebsocketMessageFormatter,\r\n MessageType,\r\n Promise,\r\n RawWebsocketMessage,\r\n} from \"../../common/Exports\";\r\n\r\nconst CRLF: string = \"\\r\\n\";\r\n\r\nexport class WebsocketMessageFormatter implements IWebsocketMessageFormatter {\r\n\r\n public ToConnectionMessage = (message: RawWebsocketMessage): Promise => {\r\n const deferral = new Deferred();\r\n\r\n try {\r\n if (message.MessageType === MessageType.Text) {\r\n const textMessage: string = message.TextContent;\r\n let headers: IStringDictionary = {};\r\n let body: string = null;\r\n\r\n if (textMessage) {\r\n const headerBodySplit = textMessage.split(\"\\r\\n\\r\\n\");\r\n if (headerBodySplit && headerBodySplit.length > 0) {\r\n headers = this.ParseHeaders(headerBodySplit[0]);\r\n if (headerBodySplit.length > 1) {\r\n body = headerBodySplit[1];\r\n }\r\n }\r\n }\r\n\r\n deferral.Resolve(new ConnectionMessage(message.MessageType, body, headers, message.Id));\r\n } else if (message.MessageType === MessageType.Binary) {\r\n const binaryMessage: ArrayBuffer = message.BinaryContent;\r\n let headers: IStringDictionary = {};\r\n let body: ArrayBuffer = null;\r\n\r\n if (!binaryMessage || binaryMessage.byteLength < 2) {\r\n throw new Error(\"Invalid binary message format. Header length missing.\");\r\n }\r\n\r\n const dataView = new DataView(binaryMessage);\r\n const headerLength = dataView.getInt16(0);\r\n\r\n if (binaryMessage.byteLength < headerLength + 2) {\r\n throw new Error(\"Invalid binary message format. Header content missing.\");\r\n }\r\n\r\n let headersString = \"\";\r\n for (let i = 0; i < headerLength; i++) {\r\n headersString += String.fromCharCode((dataView).getInt8(i + 2));\r\n }\r\n\r\n headers = this.ParseHeaders(headersString);\r\n\r\n if (binaryMessage.byteLength > headerLength + 2) {\r\n body = binaryMessage.slice(2 + headerLength);\r\n }\r\n\r\n deferral.Resolve(new ConnectionMessage(message.MessageType, body, headers, message.Id));\r\n }\r\n } catch (e) {\r\n deferral.Reject(`Error formatting the message. Error: ${e}`);\r\n }\r\n\r\n return deferral.Promise();\r\n }\r\n\r\n public FromConnectionMessage = (message: ConnectionMessage): Promise => {\r\n const deferral = new Deferred();\r\n\r\n try {\r\n if (message.MessageType === MessageType.Text) {\r\n const payload = `${this.MakeHeaders(message)}${CRLF}${message.TextBody ? message.TextBody : \"\"}`;\r\n\r\n deferral.Resolve(new RawWebsocketMessage(MessageType.Text, payload, message.Id));\r\n\r\n } else if (message.MessageType === MessageType.Binary) {\r\n const headersString = this.MakeHeaders(message);\r\n const content = message.BinaryBody;\r\n\r\n const headerInt8Array = new Int8Array(this.StringToArrayBuffer(headersString));\r\n\r\n const payload = new ArrayBuffer(2 + headerInt8Array.byteLength + (content ? content.byteLength : 0));\r\n const dataView = new DataView(payload);\r\n\r\n dataView.setInt16(0, headerInt8Array.length);\r\n\r\n for (let i = 0; i < headerInt8Array.byteLength; i++) {\r\n dataView.setInt8(2 + i, headerInt8Array[i]);\r\n }\r\n\r\n if (content) {\r\n const bodyInt8Array = new Int8Array(content);\r\n for (let i = 0; i < bodyInt8Array.byteLength; i++) {\r\n dataView.setInt8(2 + headerInt8Array.byteLength + i, bodyInt8Array[i]);\r\n }\r\n }\r\n\r\n deferral.Resolve(new RawWebsocketMessage(MessageType.Binary, payload, message.Id));\r\n }\r\n } catch (e) {\r\n deferral.Reject(`Error formatting the message. ${e}`);\r\n }\r\n\r\n return deferral.Promise();\r\n }\r\n\r\n private MakeHeaders = (message: ConnectionMessage): string => {\r\n let headersString: string = \"\";\r\n\r\n if (message.Headers) {\r\n for (const header in message.Headers) {\r\n if (header) {\r\n headersString += `${header}: ${message.Headers[header]}${CRLF}`;\r\n }\r\n }\r\n }\r\n\r\n return headersString;\r\n }\r\n\r\n private ParseHeaders = (headersString: string): IStringDictionary => {\r\n const headers: IStringDictionary = {};\r\n\r\n if (headersString) {\r\n const headerMatches = headersString.match(/[^\\r\\n]+/g);\r\n if (headers) {\r\n for (const header of headerMatches) {\r\n if (header) {\r\n const separatorIndex = header.indexOf(\":\");\r\n const headerName = separatorIndex > 0 ? header.substr(0, separatorIndex).trim().toLowerCase() : header;\r\n const headerValue =\r\n separatorIndex > 0 && header.length > (separatorIndex + 1) ?\r\n header.substr(separatorIndex + 1).trim() :\r\n \"\";\r\n\r\n headers[headerName] = headerValue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n private StringToArrayBuffer = (str: string): ArrayBuffer => {\r\n const buffer = new ArrayBuffer(str.length);\r\n const view = new DataView(buffer);\r\n for (let i = 0; i < str.length; i++) {\r\n view.setUint8(i, str.charCodeAt(i));\r\n }\r\n return buffer;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech/WebsocketMessageFormatter.ts","\r\nexport * from \"./Recognizer\";\r\nexport * from \"./SpeechConnectionFactory\";\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech.browser/Exports.ts","import { FileAudioSource, MicAudioSource, PcmRecorder } from \"../../common.browser/Exports\";\r\nimport { IAudioSource, Promise, Storage } from \"../../common/Exports\";\r\nimport { IAuthentication, Recognizer, RecognizerConfig } from \"../speech/Exports\";\r\nimport { SpeechConnectionFactory } from \"./SpeechConnectionFactory\";\r\n\r\nconst CreateRecognizer = (recognizerConfig: RecognizerConfig, authentication: IAuthentication): Recognizer => {\r\n return CreateRecognizerWithPcmRecorder(\r\n recognizerConfig,\r\n authentication);\r\n};\r\n\r\nconst CreateRecognizerWithPcmRecorder = (recognizerConfig: RecognizerConfig, authentication: IAuthentication): Recognizer => {\r\n return CreateRecognizerWithCustomAudioSource(\r\n recognizerConfig,\r\n authentication,\r\n new MicAudioSource(new PcmRecorder()));\r\n};\r\n\r\nconst CreateRecognizerWithFileAudioSource = (recognizerConfig: RecognizerConfig, authentication: IAuthentication, file: File): Recognizer => {\r\n return CreateRecognizerWithCustomAudioSource(\r\n recognizerConfig,\r\n authentication,\r\n new FileAudioSource(file));\r\n};\r\n\r\nconst CreateRecognizerWithCustomAudioSource = (recognizerConfig: RecognizerConfig, authentication: IAuthentication, audioSource: IAudioSource): Recognizer => {\r\n return new Recognizer (\r\n authentication,\r\n new SpeechConnectionFactory(),\r\n audioSource,\r\n recognizerConfig);\r\n};\r\n\r\nexport { CreateRecognizer, CreateRecognizerWithCustomAudioSource, CreateRecognizerWithFileAudioSource, CreateRecognizerWithPcmRecorder };\r\n\n\n\n// WEBPACK FOOTER //\n// ../src/sdk/speech.browser/Recognizer.ts"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 4ddde8e..4c2cda5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "microsoft-speech-browser-sdk", - "version": "0.0.11", + "version": "0.0.12", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/samples/browser/Sample.html b/samples/browser/Sample.html index b79f56e..dbf3aef 100644 --- a/samples/browser/Sample.html +++ b/samples/browser/Sample.html @@ -37,6 +37,8 @@

Microsoft Cognitive Services

+ +