├── sample.html └── speech.browser.sdk.js /sample.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Speech Sample 5 | 6 | 7 | 8 | 9 | 10 | 11 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 33 | 34 | 35 | 36 | 43 | 44 | 45 | 46 | 52 | 53 | 54 | 55 | 61 | 62 | 63 | 64 | 69 | 70 | 71 | 72 | 88 | 89 | 90 | 91 | 92 | 93 |
12 |

Speech Recognition

13 |

Microsoft Cognitive Services

14 |
Subscription:
Language: 23 | 32 |
Recognition Mode: 37 | 42 |
Format: 47 | 51 |
Input: 56 | 60 |
65 | 66 | 67 | 68 |
73 | 74 | 75 | 76 | 77 | 78 | 79 | 82 | 85 | 86 |
Results:Current hypothesis:
80 | 81 | 83 | 84 |
87 |
Status:
94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 208 | 209 | 210 | 308 | 309 | -------------------------------------------------------------------------------- /speech.browser.sdk.js: -------------------------------------------------------------------------------- 1 | var __extends = (this && this.__extends) || (function () { 2 | var extendStatics = Object.setPrototypeOf || 3 | ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || 4 | function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; 5 | return function (d, b) { 6 | extendStatics(d, b); 7 | function __() { this.constructor = d; } 8 | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 9 | }; 10 | })(); 11 | define("src/common/Guid", ["require", "exports"], function (require, exports) { 12 | "use strict"; 13 | Object.defineProperty(exports, "__esModule", { value: true }); 14 | var CreateGuid = function () { 15 | var d = new Date().getTime(); 16 | var guid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { 17 | var r = (d + Math.random() * 16) % 16 | 0; 18 | d = Math.floor(d / 16); 19 | return (c === "x" ? r : (r & 0x3 | 0x8)).toString(16); 20 | }); 21 | return guid; 22 | }; 23 | exports.CreateGuid = CreateGuid; 24 | var CreateNoDashGuid = function () { 25 | return CreateGuid().replace(new RegExp("-", "g"), "").toUpperCase(); 26 | }; 27 | exports.CreateNoDashGuid = CreateNoDashGuid; 28 | }); 29 | define("src/common/IDictionary", ["require", "exports"], function (require, exports) { 30 | "use strict"; 31 | Object.defineProperty(exports, "__esModule", { value: true }); 32 | }); 33 | define("src/common/PlatformEvent", ["require", "exports", "src/common/Guid"], function (require, exports, Guid_1) { 34 | "use strict"; 35 | Object.defineProperty(exports, "__esModule", { value: true }); 36 | var EventType; 37 | (function (EventType) { 38 | EventType[EventType["Debug"] = 0] = "Debug"; 39 | EventType[EventType["Info"] = 1] = "Info"; 40 | EventType[EventType["Warning"] = 2] = "Warning"; 41 | EventType[EventType["Error"] = 3] = "Error"; 42 | })(EventType = exports.EventType || (exports.EventType = {})); 43 | var PlatformEvent = (function () { 44 | function PlatformEvent(eventName, eventType) { 45 | this.name = eventName; 46 | this.eventId = Guid_1.CreateNoDashGuid(); 47 | this.eventTime = new Date().toISOString(); 48 | this.eventType = eventType; 49 | this.metadata = {}; 50 | } 51 | Object.defineProperty(PlatformEvent.prototype, "Name", { 52 | get: function () { 53 | return this.name; 54 | }, 55 | enumerable: true, 56 | configurable: true 57 | }); 58 | Object.defineProperty(PlatformEvent.prototype, "EventId", { 59 | get: function () { 60 | return this.eventId; 61 | }, 62 | enumerable: true, 63 | configurable: true 64 | }); 65 | Object.defineProperty(PlatformEvent.prototype, "EventTime", { 66 | get: function () { 67 | return this.eventTime; 68 | }, 69 | enumerable: true, 70 | configurable: true 71 | }); 72 | Object.defineProperty(PlatformEvent.prototype, "EventType", { 73 | get: function () { 74 | return this.eventType; 75 | }, 76 | enumerable: true, 77 | configurable: true 78 | }); 79 | Object.defineProperty(PlatformEvent.prototype, "Metadata", { 80 | get: function () { 81 | return this.metadata; 82 | }, 83 | enumerable: true, 84 | configurable: true 85 | }); 86 | return PlatformEvent; 87 | }()); 88 | exports.PlatformEvent = PlatformEvent; 89 | }); 90 | define("src/common/AudioSourceEvents", ["require", "exports", "src/common/PlatformEvent"], function (require, exports, PlatformEvent_1) { 91 | "use strict"; 92 | Object.defineProperty(exports, "__esModule", { value: true }); 93 | var AudioSourceEvent = (function (_super) { 94 | __extends(AudioSourceEvent, _super); 95 | function AudioSourceEvent(eventName, audioSourceId, eventType) { 96 | if (eventType === void 0) { eventType = PlatformEvent_1.EventType.Info; } 97 | var _this = _super.call(this, eventName, eventType) || this; 98 | _this.audioSourceId = audioSourceId; 99 | return _this; 100 | } 101 | Object.defineProperty(AudioSourceEvent.prototype, "AudioSourceId", { 102 | get: function () { 103 | return this.audioSourceId; 104 | }, 105 | enumerable: true, 106 | configurable: true 107 | }); 108 | return AudioSourceEvent; 109 | }(PlatformEvent_1.PlatformEvent)); 110 | exports.AudioSourceEvent = AudioSourceEvent; 111 | var AudioSourceInitializingEvent = (function (_super) { 112 | __extends(AudioSourceInitializingEvent, _super); 113 | function AudioSourceInitializingEvent(audioSourceId) { 114 | return _super.call(this, "AudioSourceInitializingEvent", audioSourceId) || this; 115 | } 116 | return AudioSourceInitializingEvent; 117 | }(AudioSourceEvent)); 118 | exports.AudioSourceInitializingEvent = AudioSourceInitializingEvent; 119 | var AudioSourceReadyEvent = (function (_super) { 120 | __extends(AudioSourceReadyEvent, _super); 121 | function AudioSourceReadyEvent(audioSourceId) { 122 | return _super.call(this, "AudioSourceReadyEvent", audioSourceId) || this; 123 | } 124 | return AudioSourceReadyEvent; 125 | }(AudioSourceEvent)); 126 | exports.AudioSourceReadyEvent = AudioSourceReadyEvent; 127 | var AudioSourceOffEvent = (function (_super) { 128 | __extends(AudioSourceOffEvent, _super); 129 | function AudioSourceOffEvent(audioSourceId) { 130 | return _super.call(this, "AudioSourceOffEvent", audioSourceId) || this; 131 | } 132 | return AudioSourceOffEvent; 133 | }(AudioSourceEvent)); 134 | exports.AudioSourceOffEvent = AudioSourceOffEvent; 135 | var AudioSourceErrorEvent = (function (_super) { 136 | __extends(AudioSourceErrorEvent, _super); 137 | function AudioSourceErrorEvent(audioSourceId, error) { 138 | var _this = _super.call(this, "AudioSourceErrorEvent", audioSourceId, PlatformEvent_1.EventType.Error) || this; 139 | _this.error = error; 140 | return _this; 141 | } 142 | Object.defineProperty(AudioSourceErrorEvent.prototype, "Error", { 143 | get: function () { 144 | return this.error; 145 | }, 146 | enumerable: true, 147 | configurable: true 148 | }); 149 | return AudioSourceErrorEvent; 150 | }(AudioSourceEvent)); 151 | exports.AudioSourceErrorEvent = AudioSourceErrorEvent; 152 | var AudioStreamNodeEvent = (function (_super) { 153 | __extends(AudioStreamNodeEvent, _super); 154 | function AudioStreamNodeEvent(eventName, audioSourceId, audioNodeId) { 155 | var _this = _super.call(this, eventName, audioSourceId) || this; 156 | _this.audioNodeId = audioNodeId; 157 | return _this; 158 | } 159 | Object.defineProperty(AudioStreamNodeEvent.prototype, "AudioNodeId", { 160 | get: function () { 161 | return this.audioNodeId; 162 | }, 163 | enumerable: true, 164 | configurable: true 165 | }); 166 | return AudioStreamNodeEvent; 167 | }(AudioSourceEvent)); 168 | exports.AudioStreamNodeEvent = AudioStreamNodeEvent; 169 | var AudioStreamNodeAttachingEvent = (function (_super) { 170 | __extends(AudioStreamNodeAttachingEvent, _super); 171 | function AudioStreamNodeAttachingEvent(audioSourceId, audioNodeId) { 172 | return _super.call(this, "AudioStreamNodeAttachingEvent", audioSourceId, audioNodeId) || this; 173 | } 174 | return AudioStreamNodeAttachingEvent; 175 | }(AudioStreamNodeEvent)); 176 | exports.AudioStreamNodeAttachingEvent = AudioStreamNodeAttachingEvent; 177 | var AudioStreamNodeAttachedEvent = (function (_super) { 178 | __extends(AudioStreamNodeAttachedEvent, _super); 179 | function AudioStreamNodeAttachedEvent(audioSourceId, audioNodeId) { 180 | return _super.call(this, "AudioStreamNodeAttachedEvent", audioSourceId, audioNodeId) || this; 181 | } 182 | return AudioStreamNodeAttachedEvent; 183 | }(AudioStreamNodeEvent)); 184 | exports.AudioStreamNodeAttachedEvent = AudioStreamNodeAttachedEvent; 185 | var AudioStreamNodeDetachedEvent = (function (_super) { 186 | __extends(AudioStreamNodeDetachedEvent, _super); 187 | function AudioStreamNodeDetachedEvent(audioSourceId, audioNodeId) { 188 | return _super.call(this, "AudioStreamNodeDetachedEvent", audioSourceId, audioNodeId) || this; 189 | } 190 | return AudioStreamNodeDetachedEvent; 191 | }(AudioStreamNodeEvent)); 192 | exports.AudioStreamNodeDetachedEvent = AudioStreamNodeDetachedEvent; 193 | var AudioStreamNodeErrorEvent = (function (_super) { 194 | __extends(AudioStreamNodeErrorEvent, _super); 195 | function AudioStreamNodeErrorEvent(audioSourceId, audioNodeId, error) { 196 | var _this = _super.call(this, "AudioStreamNodeErrorEvent", audioSourceId, audioNodeId) || this; 197 | _this.error = error; 198 | return _this; 199 | } 200 | Object.defineProperty(AudioStreamNodeErrorEvent.prototype, "Error", { 201 | get: function () { 202 | return this.error; 203 | }, 204 | enumerable: true, 205 | configurable: true 206 | }); 207 | return AudioStreamNodeErrorEvent; 208 | }(AudioStreamNodeEvent)); 209 | exports.AudioStreamNodeErrorEvent = AudioStreamNodeErrorEvent; 210 | }); 211 | define("src/common/Error", ["require", "exports"], function (require, exports) { 212 | "use strict"; 213 | Object.defineProperty(exports, "__esModule", { value: true }); 214 | var ArgumentNullError = (function (_super) { 215 | __extends(ArgumentNullError, _super); 216 | function ArgumentNullError(argumentName) { 217 | var _this = _super.call(this, argumentName) || this; 218 | _this.name = "ArgumentNull"; 219 | _this.message = argumentName; 220 | return _this; 221 | } 222 | return ArgumentNullError; 223 | }(Error)); 224 | exports.ArgumentNullError = ArgumentNullError; 225 | var InvalidOperationError = (function (_super) { 226 | __extends(InvalidOperationError, _super); 227 | function InvalidOperationError(error) { 228 | var _this = _super.call(this, error) || this; 229 | _this.name = "InvalidOperation"; 230 | _this.message = error; 231 | return _this; 232 | } 233 | return InvalidOperationError; 234 | }(Error)); 235 | exports.InvalidOperationError = InvalidOperationError; 236 | var ObjectDisposedError = (function (_super) { 237 | __extends(ObjectDisposedError, _super); 238 | function ObjectDisposedError(objectName, error) { 239 | var _this = _super.call(this, error) || this; 240 | _this.name = objectName + "ObjectDisposed"; 241 | _this.message = error; 242 | return _this; 243 | } 244 | return ObjectDisposedError; 245 | }(Error)); 246 | exports.ObjectDisposedError = ObjectDisposedError; 247 | }); 248 | define("src/common/ConnectionMessage", ["require", "exports", "src/common/Error", "src/common/Guid"], function (require, exports, Error_1, Guid_2) { 249 | "use strict"; 250 | Object.defineProperty(exports, "__esModule", { value: true }); 251 | var MessageType; 252 | (function (MessageType) { 253 | MessageType[MessageType["Text"] = 0] = "Text"; 254 | MessageType[MessageType["Binary"] = 1] = "Binary"; 255 | })(MessageType = exports.MessageType || (exports.MessageType = {})); 256 | var ConnectionMessage = (function () { 257 | function ConnectionMessage(messageType, body, headers, id) { 258 | this.body = null; 259 | if (messageType === MessageType.Text && body && !(typeof (body) === "string")) { 260 | throw new Error_1.InvalidOperationError("Payload must be a string"); 261 | } 262 | if (messageType === MessageType.Binary && body && !(body instanceof ArrayBuffer)) { 263 | throw new Error_1.InvalidOperationError("Payload must be ArrayBuffer"); 264 | } 265 | this.messageType = messageType; 266 | this.body = body; 267 | this.headers = headers ? headers : {}; 268 | this.id = id ? id : Guid_2.CreateNoDashGuid(); 269 | } 270 | Object.defineProperty(ConnectionMessage.prototype, "MessageType", { 271 | get: function () { 272 | return this.messageType; 273 | }, 274 | enumerable: true, 275 | configurable: true 276 | }); 277 | Object.defineProperty(ConnectionMessage.prototype, "Headers", { 278 | get: function () { 279 | return this.headers; 280 | }, 281 | enumerable: true, 282 | configurable: true 283 | }); 284 | Object.defineProperty(ConnectionMessage.prototype, "Body", { 285 | get: function () { 286 | return this.body; 287 | }, 288 | enumerable: true, 289 | configurable: true 290 | }); 291 | Object.defineProperty(ConnectionMessage.prototype, "TextBody", { 292 | get: function () { 293 | if (this.messageType === MessageType.Binary) { 294 | throw new Error_1.InvalidOperationError("Not supported for binary message"); 295 | } 296 | return this.body; 297 | }, 298 | enumerable: true, 299 | configurable: true 300 | }); 301 | Object.defineProperty(ConnectionMessage.prototype, "BinaryBody", { 302 | get: function () { 303 | if (this.messageType === MessageType.Text) { 304 | throw new Error_1.InvalidOperationError("Not supported for text message"); 305 | } 306 | return this.body; 307 | }, 308 | enumerable: true, 309 | configurable: true 310 | }); 311 | Object.defineProperty(ConnectionMessage.prototype, "Id", { 312 | get: function () { 313 | return this.id; 314 | }, 315 | enumerable: true, 316 | configurable: true 317 | }); 318 | return ConnectionMessage; 319 | }()); 320 | exports.ConnectionMessage = ConnectionMessage; 321 | }); 322 | define("src/common/ConnectionEvents", ["require", "exports", "src/common/PlatformEvent"], function (require, exports, PlatformEvent_2) { 323 | "use strict"; 324 | Object.defineProperty(exports, "__esModule", { value: true }); 325 | var ConnectionEvent = (function (_super) { 326 | __extends(ConnectionEvent, _super); 327 | function ConnectionEvent(eventName, connectionId, eventType) { 328 | if (eventType === void 0) { eventType = PlatformEvent_2.EventType.Info; } 329 | var _this = _super.call(this, eventName, eventType) || this; 330 | _this.connectionId = connectionId; 331 | return _this; 332 | } 333 | Object.defineProperty(ConnectionEvent.prototype, "ConnectionId", { 334 | get: function () { 335 | return this.connectionId; 336 | }, 337 | enumerable: true, 338 | configurable: true 339 | }); 340 | return ConnectionEvent; 341 | }(PlatformEvent_2.PlatformEvent)); 342 | exports.ConnectionEvent = ConnectionEvent; 343 | var ConnectionStartEvent = (function (_super) { 344 | __extends(ConnectionStartEvent, _super); 345 | function ConnectionStartEvent(connectionId, uri, headers) { 346 | var _this = _super.call(this, "ConnectionStartEvent", connectionId) || this; 347 | _this.uri = uri; 348 | _this.headers = headers; 349 | return _this; 350 | } 351 | Object.defineProperty(ConnectionStartEvent.prototype, "Uri", { 352 | get: function () { 353 | return this.uri; 354 | }, 355 | enumerable: true, 356 | configurable: true 357 | }); 358 | Object.defineProperty(ConnectionStartEvent.prototype, "Headers", { 359 | get: function () { 360 | return this.headers; 361 | }, 362 | enumerable: true, 363 | configurable: true 364 | }); 365 | return ConnectionStartEvent; 366 | }(ConnectionEvent)); 367 | exports.ConnectionStartEvent = ConnectionStartEvent; 368 | var ConnectionEstablishedEvent = (function (_super) { 369 | __extends(ConnectionEstablishedEvent, _super); 370 | function ConnectionEstablishedEvent(connectionId, metadata) { 371 | return _super.call(this, "ConnectionEstablishedEvent", connectionId) || this; 372 | } 373 | return ConnectionEstablishedEvent; 374 | }(ConnectionEvent)); 375 | exports.ConnectionEstablishedEvent = ConnectionEstablishedEvent; 376 | var ConnectionClosedEvent = (function (_super) { 377 | __extends(ConnectionClosedEvent, _super); 378 | function ConnectionClosedEvent(connectionId, statusCode, reason) { 379 | var _this = _super.call(this, "ConnectionClosedEvent", connectionId, PlatformEvent_2.EventType.Warning) || this; 380 | _this.reason = reason; 381 | _this.statusCode = statusCode; 382 | return _this; 383 | } 384 | Object.defineProperty(ConnectionClosedEvent.prototype, "Reason", { 385 | get: function () { 386 | return this.reason; 387 | }, 388 | enumerable: true, 389 | configurable: true 390 | }); 391 | Object.defineProperty(ConnectionClosedEvent.prototype, "StatusCode", { 392 | get: function () { 393 | return this.statusCode; 394 | }, 395 | enumerable: true, 396 | configurable: true 397 | }); 398 | return ConnectionClosedEvent; 399 | }(ConnectionEvent)); 400 | exports.ConnectionClosedEvent = ConnectionClosedEvent; 401 | var ConnectionEstablishErrorEvent = (function (_super) { 402 | __extends(ConnectionEstablishErrorEvent, _super); 403 | function ConnectionEstablishErrorEvent(connectionId, statuscode, reason) { 404 | var _this = _super.call(this, "ConnectionEstablishErrorEvent", connectionId, PlatformEvent_2.EventType.Error) || this; 405 | _this.statusCode = statuscode; 406 | _this.reason = reason; 407 | return _this; 408 | } 409 | Object.defineProperty(ConnectionEstablishErrorEvent.prototype, "Reason", { 410 | get: function () { 411 | return this.reason; 412 | }, 413 | enumerable: true, 414 | configurable: true 415 | }); 416 | Object.defineProperty(ConnectionEstablishErrorEvent.prototype, "StatusCode", { 417 | get: function () { 418 | return this.statusCode; 419 | }, 420 | enumerable: true, 421 | configurable: true 422 | }); 423 | return ConnectionEstablishErrorEvent; 424 | }(ConnectionEvent)); 425 | exports.ConnectionEstablishErrorEvent = ConnectionEstablishErrorEvent; 426 | var ConnectionMessageReceivedEvent = (function (_super) { 427 | __extends(ConnectionMessageReceivedEvent, _super); 428 | function ConnectionMessageReceivedEvent(connectionId, networkReceivedTimeISO, message) { 429 | var _this = _super.call(this, "ConnectionMessageReceivedEvent", connectionId) || this; 430 | _this.networkReceivedTime = networkReceivedTimeISO; 431 | _this.message = message; 432 | return _this; 433 | } 434 | Object.defineProperty(ConnectionMessageReceivedEvent.prototype, "NetworkReceivedTime", { 435 | get: function () { 436 | return this.networkReceivedTime; 437 | }, 438 | enumerable: true, 439 | configurable: true 440 | }); 441 | Object.defineProperty(ConnectionMessageReceivedEvent.prototype, "Message", { 442 | get: function () { 443 | return this.message; 444 | }, 445 | enumerable: true, 446 | configurable: true 447 | }); 448 | return ConnectionMessageReceivedEvent; 449 | }(ConnectionEvent)); 450 | exports.ConnectionMessageReceivedEvent = ConnectionMessageReceivedEvent; 451 | var ConnectionMessageSentEvent = (function (_super) { 452 | __extends(ConnectionMessageSentEvent, _super); 453 | function ConnectionMessageSentEvent(connectionId, networkSentTimeISO, message) { 454 | var _this = _super.call(this, "ConnectionMessageSentEvent", connectionId) || this; 455 | _this.networkSentTime = networkSentTimeISO; 456 | _this.message = message; 457 | return _this; 458 | } 459 | Object.defineProperty(ConnectionMessageSentEvent.prototype, "NetworkSentTime", { 460 | get: function () { 461 | return this.networkSentTime; 462 | }, 463 | enumerable: true, 464 | configurable: true 465 | }); 466 | Object.defineProperty(ConnectionMessageSentEvent.prototype, "Message", { 467 | get: function () { 468 | return this.message; 469 | }, 470 | enumerable: true, 471 | configurable: true 472 | }); 473 | return ConnectionMessageSentEvent; 474 | }(ConnectionEvent)); 475 | exports.ConnectionMessageSentEvent = ConnectionMessageSentEvent; 476 | }); 477 | define("src/common/ConnectionOpenResponse", ["require", "exports"], function (require, exports) { 478 | "use strict"; 479 | Object.defineProperty(exports, "__esModule", { value: true }); 480 | var ConnectionOpenResponse = (function () { 481 | function ConnectionOpenResponse(statusCode, reason) { 482 | this.statusCode = statusCode; 483 | this.reason = reason; 484 | } 485 | Object.defineProperty(ConnectionOpenResponse.prototype, "StatusCode", { 486 | get: function () { 487 | return this.statusCode; 488 | }, 489 | enumerable: true, 490 | configurable: true 491 | }); 492 | Object.defineProperty(ConnectionOpenResponse.prototype, "Reason", { 493 | get: function () { 494 | return this.reason; 495 | }, 496 | enumerable: true, 497 | configurable: true 498 | }); 499 | return ConnectionOpenResponse; 500 | }()); 501 | exports.ConnectionOpenResponse = ConnectionOpenResponse; 502 | }); 503 | define("src/common/IDetachable", ["require", "exports"], function (require, exports) { 504 | "use strict"; 505 | Object.defineProperty(exports, "__esModule", { value: true }); 506 | }); 507 | define("src/common/IDisposable", ["require", "exports"], function (require, exports) { 508 | "use strict"; 509 | Object.defineProperty(exports, "__esModule", { value: true }); 510 | }); 511 | define("src/common/IEventSource", ["require", "exports"], function (require, exports) { 512 | "use strict"; 513 | Object.defineProperty(exports, "__esModule", { value: true }); 514 | }); 515 | define("src/common/EventSource", ["require", "exports", "src/common/Error", "src/common/Guid"], function (require, exports, Error_2, Guid_3) { 516 | "use strict"; 517 | Object.defineProperty(exports, "__esModule", { value: true }); 518 | var EventSource = (function () { 519 | function EventSource(metadata) { 520 | var _this = this; 521 | this.eventListeners = {}; 522 | this.isDisposed = false; 523 | this.OnEvent = function (event) { 524 | if (_this.IsDisposed()) { 525 | throw (new Error_2.ObjectDisposedError("EventSource")); 526 | } 527 | if (_this.Metadata) { 528 | for (var paramName in _this.Metadata) { 529 | if (paramName) { 530 | if (event.Metadata) { 531 | if (!event.Metadata[paramName]) { 532 | event.Metadata[paramName] = _this.Metadata[paramName]; 533 | } 534 | } 535 | } 536 | } 537 | } 538 | for (var eventId in _this.eventListeners) { 539 | if (eventId && _this.eventListeners[eventId]) { 540 | _this.eventListeners[eventId](event); 541 | } 542 | } 543 | }; 544 | this.Attach = function (onEventCallback) { 545 | var id = Guid_3.CreateNoDashGuid(); 546 | _this.eventListeners[id] = onEventCallback; 547 | return { 548 | Detach: function () { 549 | delete _this.eventListeners[id]; 550 | }, 551 | }; 552 | }; 553 | this.AttachListener = function (listener) { 554 | return _this.Attach(listener.OnEvent); 555 | }; 556 | this.IsDisposed = function () { 557 | return _this.isDisposed; 558 | }; 559 | this.Dispose = function () { 560 | _this.eventListeners = null; 561 | _this.isDisposed = true; 562 | }; 563 | this.metadata = metadata; 564 | } 565 | Object.defineProperty(EventSource.prototype, "Metadata", { 566 | get: function () { 567 | return this.metadata; 568 | }, 569 | enumerable: true, 570 | configurable: true 571 | }); 572 | return EventSource; 573 | }()); 574 | exports.EventSource = EventSource; 575 | }); 576 | define("src/common/Events", ["require", "exports", "src/common/Error", "src/common/EventSource"], function (require, exports, Error_3, EventSource_1) { 577 | "use strict"; 578 | Object.defineProperty(exports, "__esModule", { value: true }); 579 | var Events = (function () { 580 | function Events() { 581 | } 582 | Object.defineProperty(Events, "Instance", { 583 | get: function () { 584 | return Events.instance; 585 | }, 586 | enumerable: true, 587 | configurable: true 588 | }); 589 | Events.instance = new EventSource_1.EventSource(); 590 | Events.SetEventSource = function (eventSource) { 591 | if (!eventSource) { 592 | throw new Error_3.ArgumentNullError("eventSource"); 593 | } 594 | Events.instance = eventSource; 595 | }; 596 | return Events; 597 | }()); 598 | exports.Events = Events; 599 | }); 600 | define("src/common/Promise", ["require", "exports", "src/common/Error"], function (require, exports, Error_4) { 601 | "use strict"; 602 | Object.defineProperty(exports, "__esModule", { value: true }); 603 | var PromiseState; 604 | (function (PromiseState) { 605 | PromiseState[PromiseState["None"] = 0] = "None"; 606 | PromiseState[PromiseState["Resolved"] = 1] = "Resolved"; 607 | PromiseState[PromiseState["Rejected"] = 2] = "Rejected"; 608 | })(PromiseState = exports.PromiseState || (exports.PromiseState = {})); 609 | var PromiseResult = (function () { 610 | function PromiseResult(promiseResultEventSource) { 611 | var _this = this; 612 | this.ThrowIfError = function () { 613 | if (_this.IsError) { 614 | throw _this.Error; 615 | } 616 | }; 617 | promiseResultEventSource.On(function (result) { 618 | if (!_this.isCompleted) { 619 | _this.isCompleted = true; 620 | _this.isError = false; 621 | _this.result = result; 622 | } 623 | }, function (error) { 624 | if (!_this.isCompleted) { 625 | _this.isCompleted = true; 626 | _this.isError = true; 627 | _this.error = error; 628 | } 629 | }); 630 | } 631 | Object.defineProperty(PromiseResult.prototype, "IsCompleted", { 632 | get: function () { 633 | return this.isCompleted; 634 | }, 635 | enumerable: true, 636 | configurable: true 637 | }); 638 | Object.defineProperty(PromiseResult.prototype, "IsError", { 639 | get: function () { 640 | return this.isError; 641 | }, 642 | enumerable: true, 643 | configurable: true 644 | }); 645 | Object.defineProperty(PromiseResult.prototype, "Error", { 646 | get: function () { 647 | return this.error; 648 | }, 649 | enumerable: true, 650 | configurable: true 651 | }); 652 | Object.defineProperty(PromiseResult.prototype, "Result", { 653 | get: function () { 654 | return this.result; 655 | }, 656 | enumerable: true, 657 | configurable: true 658 | }); 659 | return PromiseResult; 660 | }()); 661 | exports.PromiseResult = PromiseResult; 662 | var PromiseResultEventSource = (function () { 663 | function PromiseResultEventSource() { 664 | var _this = this; 665 | this.SetResult = function (result) { 666 | _this.onSetResult(result); 667 | }; 668 | this.SetError = function (error) { 669 | _this.onSetError(error); 670 | }; 671 | this.On = function (onSetResult, onSetError) { 672 | _this.onSetResult = onSetResult; 673 | _this.onSetError = onSetError; 674 | }; 675 | } 676 | return PromiseResultEventSource; 677 | }()); 678 | exports.PromiseResultEventSource = PromiseResultEventSource; 679 | var PromiseHelper = (function () { 680 | function PromiseHelper() { 681 | } 682 | PromiseHelper.WhenAll = function (promises) { 683 | if (!promises || promises.length === 0) { 684 | throw new Error_4.ArgumentNullError("promises"); 685 | } 686 | var deferred = new Deferred(); 687 | var errors = []; 688 | var completedPromises = 0; 689 | var checkForCompletion = function () { 690 | completedPromises++; 691 | if (completedPromises === promises.length) { 692 | if (errors.length === 0) { 693 | deferred.Resolve(true); 694 | } 695 | else { 696 | deferred.Reject(errors.join(", ")); 697 | } 698 | } 699 | }; 700 | for (var _i = 0, promises_1 = promises; _i < promises_1.length; _i++) { 701 | var promise = promises_1[_i]; 702 | promise.On(function (r) { 703 | checkForCompletion(); 704 | }, function (e) { 705 | errors.push(e); 706 | checkForCompletion(); 707 | }); 708 | } 709 | return deferred.Promise(); 710 | }; 711 | PromiseHelper.FromResult = function (result) { 712 | var deferred = new Deferred(); 713 | deferred.Resolve(result); 714 | return deferred.Promise(); 715 | }; 716 | PromiseHelper.FromError = function (error) { 717 | var deferred = new Deferred(); 718 | deferred.Reject(error); 719 | return deferred.Promise(); 720 | }; 721 | return PromiseHelper; 722 | }()); 723 | exports.PromiseHelper = PromiseHelper; 724 | var Promise = (function () { 725 | function Promise(sink) { 726 | var _this = this; 727 | this.Result = function () { 728 | return _this.sink.Result; 729 | }; 730 | this.ContinueWith = function (continuationCallback) { 731 | if (!continuationCallback) { 732 | throw new Error_4.ArgumentNullError("continuationCallback"); 733 | } 734 | var continuationDeferral = new Deferred(); 735 | _this.sink.on(function (r) { 736 | try { 737 | var coninuationResult = continuationCallback(_this.sink.Result); 738 | continuationDeferral.Resolve(coninuationResult); 739 | } 740 | catch (e) { 741 | continuationDeferral.Reject("'Unhandled callback error: " + e + "'"); 742 | } 743 | }, function (error) { 744 | try { 745 | var coninuationResult = continuationCallback(_this.sink.Result); 746 | continuationDeferral.Resolve(coninuationResult); 747 | } 748 | catch (e) { 749 | continuationDeferral.Reject("'Unhandled callback error: " + e + ". InnerError: " + error + "'"); 750 | } 751 | }); 752 | return continuationDeferral.Promise(); 753 | }; 754 | this.OnSuccessContinueWith = function (continuationCallback) { 755 | if (!continuationCallback) { 756 | throw new Error_4.ArgumentNullError("continuationCallback"); 757 | } 758 | var continuationDeferral = new Deferred(); 759 | _this.sink.on(function (r) { 760 | try { 761 | var coninuationResult = continuationCallback(r); 762 | continuationDeferral.Resolve(coninuationResult); 763 | } 764 | catch (e) { 765 | continuationDeferral.Reject("'Unhandled callback error: " + e + "'"); 766 | } 767 | }, function (error) { 768 | continuationDeferral.Reject("'Unhandled callback error: " + error + "'"); 769 | }); 770 | return continuationDeferral.Promise(); 771 | }; 772 | this.ContinueWithPromise = function (continuationCallback) { 773 | if (!continuationCallback) { 774 | throw new Error_4.ArgumentNullError("continuationCallback"); 775 | } 776 | var continuationDeferral = new Deferred(); 777 | _this.sink.on(function (r) { 778 | try { 779 | var continuationPromise = continuationCallback(_this.sink.Result); 780 | if (!continuationPromise) { 781 | throw new Error("'Contuniation callback did not return promise'"); 782 | } 783 | continuationPromise.On(function (coninuationResult) { 784 | continuationDeferral.Resolve(coninuationResult); 785 | }, function (e) { 786 | continuationDeferral.Reject(e); 787 | }); 788 | } 789 | catch (e) { 790 | continuationDeferral.Reject("'Unhandled callback error: " + e + "'"); 791 | } 792 | }, function (error) { 793 | try { 794 | var continuationPromise = continuationCallback(_this.sink.Result); 795 | if (!continuationPromise) { 796 | throw new Error("Contuniation callback did not return promise"); 797 | } 798 | continuationPromise.On(function (coninuationResult) { 799 | continuationDeferral.Resolve(coninuationResult); 800 | }, function (e) { 801 | continuationDeferral.Reject(e); 802 | }); 803 | } 804 | catch (e) { 805 | continuationDeferral.Reject("'Unhandled callback error: " + e + ". InnerError: " + error + "'"); 806 | } 807 | }); 808 | return continuationDeferral.Promise(); 809 | }; 810 | this.OnSuccessContinueWithPromise = function (continuationCallback) { 811 | if (!continuationCallback) { 812 | throw new Error_4.ArgumentNullError("continuationCallback"); 813 | } 814 | var continuationDeferral = new Deferred(); 815 | _this.sink.on(function (r) { 816 | try { 817 | var continuationPromise = continuationCallback(r); 818 | if (!continuationPromise) { 819 | throw new Error("Contuniation callback did not return promise"); 820 | } 821 | continuationPromise.On(function (coninuationResult) { 822 | continuationDeferral.Resolve(coninuationResult); 823 | }, function (e) { 824 | continuationDeferral.Reject(e); 825 | }); 826 | } 827 | catch (e) { 828 | continuationDeferral.Reject("'Unhandled callback error: " + e + "'"); 829 | } 830 | }, function (error) { 831 | continuationDeferral.Reject("'Unhandled callback error: " + error + ".'"); 832 | }); 833 | return continuationDeferral.Promise(); 834 | }; 835 | this.On = function (successCallback, errorCallback) { 836 | if (!successCallback) { 837 | throw new Error_4.ArgumentNullError("successCallback"); 838 | } 839 | if (!errorCallback) { 840 | throw new Error_4.ArgumentNullError("errorCallback"); 841 | } 842 | _this.sink.on(successCallback, errorCallback); 843 | return _this; 844 | }; 845 | this.Finally = function (callback) { 846 | if (!callback) { 847 | throw new Error_4.ArgumentNullError("callback"); 848 | } 849 | var callbackWrapper = function (_) { 850 | callback(); 851 | }; 852 | return _this.On(callbackWrapper, callbackWrapper); 853 | }; 854 | this.sink = sink; 855 | } 856 | return Promise; 857 | }()); 858 | exports.Promise = Promise; 859 | var Deferred = (function () { 860 | function Deferred() { 861 | var _this = this; 862 | this.State = function () { 863 | return _this.sink.State; 864 | }; 865 | this.Promise = function () { 866 | return _this.promise; 867 | }; 868 | this.Resolve = function (result) { 869 | _this.sink.Resolve(result); 870 | return _this; 871 | }; 872 | this.Reject = function (error) { 873 | _this.sink.Reject(error); 874 | return _this; 875 | }; 876 | this.sink = new Sink(); 877 | this.promise = new Promise(this.sink); 878 | } 879 | return Deferred; 880 | }()); 881 | exports.Deferred = Deferred; 882 | var Sink = (function () { 883 | function Sink() { 884 | var _this = this; 885 | this.state = PromiseState.None; 886 | this.promiseResult = null; 887 | this.promiseResultEvents = null; 888 | this.successHandlers = []; 889 | this.errorHandlers = []; 890 | this.Resolve = function (result) { 891 | if (_this.state !== PromiseState.None) { 892 | throw new Error("'Cannot resolve a completed promise'"); 893 | } 894 | _this.state = PromiseState.Resolved; 895 | _this.promiseResultEvents.SetResult(result); 896 | for (var i = 0; i < _this.successHandlers.length; i++) { 897 | _this.ExecuteSuccessCallback(result, _this.successHandlers[i], _this.errorHandlers[i]); 898 | } 899 | _this.DetachHandlers(); 900 | }; 901 | this.Reject = function (error) { 902 | if (_this.state !== PromiseState.None) { 903 | throw new Error("'Cannot reject a completed promise'"); 904 | } 905 | _this.state = PromiseState.Rejected; 906 | _this.promiseResultEvents.SetError(error); 907 | for (var _i = 0, _a = _this.errorHandlers; _i < _a.length; _i++) { 908 | var errorHandler = _a[_i]; 909 | _this.ExecuteErrorCallback(error, errorHandler); 910 | } 911 | _this.DetachHandlers(); 912 | }; 913 | this.on = function (successCallback, errorCallback) { 914 | if (successCallback == null) { 915 | successCallback = function (r) { return; }; 916 | } 917 | if (_this.state === PromiseState.None) { 918 | _this.successHandlers.push(successCallback); 919 | _this.errorHandlers.push(errorCallback); 920 | } 921 | else { 922 | if (_this.state === PromiseState.Resolved) { 923 | _this.ExecuteSuccessCallback(_this.promiseResult.Result, successCallback, errorCallback); 924 | } 925 | else if (_this.state === PromiseState.Rejected) { 926 | _this.ExecuteErrorCallback(_this.promiseResult.Error, errorCallback); 927 | } 928 | _this.DetachHandlers(); 929 | } 930 | }; 931 | this.ExecuteSuccessCallback = function (result, successCallback, errorCallback) { 932 | try { 933 | successCallback(result); 934 | } 935 | catch (e) { 936 | _this.ExecuteErrorCallback("'Unhandled callback error: " + e + "'", errorCallback); 937 | } 938 | }; 939 | this.ExecuteErrorCallback = function (error, errorCallback) { 940 | if (errorCallback) { 941 | try { 942 | errorCallback(error); 943 | } 944 | catch (e) { 945 | throw new Error("'Unhandled callback error: " + e + ". InnerError: " + error + "'"); 946 | } 947 | } 948 | else { 949 | throw new Error("'Unhandled error: " + error + "'"); 950 | } 951 | }; 952 | this.DetachHandlers = function () { 953 | _this.errorHandlers = []; 954 | _this.successHandlers = []; 955 | }; 956 | this.promiseResultEvents = new PromiseResultEventSource(); 957 | this.promiseResult = new PromiseResult(this.promiseResultEvents); 958 | } 959 | Object.defineProperty(Sink.prototype, "State", { 960 | get: function () { 961 | return this.state; 962 | }, 963 | enumerable: true, 964 | configurable: true 965 | }); 966 | Object.defineProperty(Sink.prototype, "Result", { 967 | get: function () { 968 | return this.promiseResult; 969 | }, 970 | enumerable: true, 971 | configurable: true 972 | }); 973 | return Sink; 974 | }()); 975 | exports.Sink = Sink; 976 | }); 977 | define("src/common/List", ["require", "exports", "src/common/Error"], function (require, exports, Error_5) { 978 | "use strict"; 979 | Object.defineProperty(exports, "__esModule", { value: true }); 980 | var List = (function () { 981 | function List(list) { 982 | var _this = this; 983 | this.subscriptionIdCounter = 0; 984 | this.addSubscriptions = {}; 985 | this.removeSubscriptions = {}; 986 | this.disposedSubscriptions = {}; 987 | this.disposeReason = null; 988 | this.Get = function (itemIndex) { 989 | _this.ThrowIfDisposed(); 990 | return _this.list[itemIndex]; 991 | }; 992 | this.First = function () { 993 | return _this.Get(0); 994 | }; 995 | this.Last = function () { 996 | return _this.Get(_this.Length() - 1); 997 | }; 998 | this.Add = function (item) { 999 | _this.ThrowIfDisposed(); 1000 | _this.InsertAt(_this.list.length, item); 1001 | }; 1002 | this.InsertAt = function (index, item) { 1003 | _this.ThrowIfDisposed(); 1004 | if (index === 0) { 1005 | _this.list.unshift(item); 1006 | } 1007 | else if (index === _this.list.length) { 1008 | _this.list.push(item); 1009 | } 1010 | else { 1011 | _this.list.splice(index, 0, item); 1012 | } 1013 | _this.TriggerSubscriptions(_this.addSubscriptions); 1014 | }; 1015 | this.RemoveFirst = function () { 1016 | _this.ThrowIfDisposed(); 1017 | return _this.RemoveAt(0); 1018 | }; 1019 | this.RemoveLast = function () { 1020 | _this.ThrowIfDisposed(); 1021 | return _this.RemoveAt(_this.Length() - 1); 1022 | }; 1023 | this.RemoveAt = function (index) { 1024 | _this.ThrowIfDisposed(); 1025 | return _this.Remove(index, 1)[0]; 1026 | }; 1027 | this.Remove = function (index, count) { 1028 | _this.ThrowIfDisposed(); 1029 | var removedElements = _this.list.splice(index, count); 1030 | _this.TriggerSubscriptions(_this.removeSubscriptions); 1031 | return removedElements; 1032 | }; 1033 | this.Clear = function () { 1034 | _this.ThrowIfDisposed(); 1035 | _this.Remove(0, _this.Length()); 1036 | }; 1037 | this.Length = function () { 1038 | _this.ThrowIfDisposed(); 1039 | return _this.list.length; 1040 | }; 1041 | this.OnAdded = function (addedCallback) { 1042 | _this.ThrowIfDisposed(); 1043 | var subscriptionId = _this.subscriptionIdCounter++; 1044 | _this.addSubscriptions[subscriptionId] = addedCallback; 1045 | return { 1046 | Detach: function () { 1047 | delete _this.addSubscriptions[subscriptionId]; 1048 | }, 1049 | }; 1050 | }; 1051 | this.OnRemoved = function (removedCallback) { 1052 | _this.ThrowIfDisposed(); 1053 | var subscriptionId = _this.subscriptionIdCounter++; 1054 | _this.removeSubscriptions[subscriptionId] = removedCallback; 1055 | return { 1056 | Detach: function () { 1057 | delete _this.removeSubscriptions[subscriptionId]; 1058 | }, 1059 | }; 1060 | }; 1061 | this.OnDisposed = function (disposedCallback) { 1062 | _this.ThrowIfDisposed(); 1063 | var subscriptionId = _this.subscriptionIdCounter++; 1064 | _this.disposedSubscriptions[subscriptionId] = disposedCallback; 1065 | return { 1066 | Detach: function () { 1067 | delete _this.disposedSubscriptions[subscriptionId]; 1068 | }, 1069 | }; 1070 | }; 1071 | this.Join = function (seperator) { 1072 | _this.ThrowIfDisposed(); 1073 | return _this.list.join(seperator); 1074 | }; 1075 | this.ToArray = function () { 1076 | var cloneCopy = Array(); 1077 | _this.list.forEach(function (val) { 1078 | cloneCopy.push(val); 1079 | }); 1080 | return cloneCopy; 1081 | }; 1082 | this.Any = function (callback) { 1083 | _this.ThrowIfDisposed(); 1084 | if (callback) { 1085 | return _this.Where(callback).Length() > 0; 1086 | } 1087 | else { 1088 | return _this.Length() > 0; 1089 | } 1090 | }; 1091 | this.All = function (callback) { 1092 | _this.ThrowIfDisposed(); 1093 | return _this.Where(callback).Length() === _this.Length(); 1094 | }; 1095 | this.ForEach = function (callback) { 1096 | _this.ThrowIfDisposed(); 1097 | for (var i = 0; i < _this.Length(); i++) { 1098 | callback(_this.list[i], i); 1099 | } 1100 | }; 1101 | this.Select = function (callback) { 1102 | _this.ThrowIfDisposed(); 1103 | var selectList = []; 1104 | for (var i = 0; i < _this.list.length; i++) { 1105 | selectList.push(callback(_this.list[i], i)); 1106 | } 1107 | return new List(selectList); 1108 | }; 1109 | this.Where = function (callback) { 1110 | _this.ThrowIfDisposed(); 1111 | var filteredList = new List(); 1112 | for (var i = 0; i < _this.list.length; i++) { 1113 | if (callback(_this.list[i], i)) { 1114 | filteredList.Add(_this.list[i]); 1115 | } 1116 | } 1117 | return filteredList; 1118 | }; 1119 | this.OrderBy = function (compareFn) { 1120 | _this.ThrowIfDisposed(); 1121 | var clonedArray = _this.ToArray(); 1122 | var orderedArray = clonedArray.sort(compareFn); 1123 | return new List(orderedArray); 1124 | }; 1125 | this.OrderByDesc = function (compareFn) { 1126 | _this.ThrowIfDisposed(); 1127 | return _this.OrderBy(function (a, b) { return compareFn(b, a); }); 1128 | }; 1129 | this.Clone = function () { 1130 | _this.ThrowIfDisposed(); 1131 | return new List(_this.ToArray()); 1132 | }; 1133 | this.Concat = function (list) { 1134 | _this.ThrowIfDisposed(); 1135 | return new List(_this.list.concat(list.ToArray())); 1136 | }; 1137 | this.ConcatArray = function (array) { 1138 | _this.ThrowIfDisposed(); 1139 | return new List(_this.list.concat(array)); 1140 | }; 1141 | this.IsDisposed = function () { 1142 | return _this.list == null; 1143 | }; 1144 | this.Dispose = function (reason) { 1145 | if (!_this.IsDisposed()) { 1146 | _this.disposeReason = reason; 1147 | _this.list = null; 1148 | _this.addSubscriptions = null; 1149 | _this.removeSubscriptions = null; 1150 | _this.TriggerSubscriptions(_this.disposedSubscriptions); 1151 | } 1152 | }; 1153 | this.ThrowIfDisposed = function () { 1154 | if (_this.IsDisposed()) { 1155 | throw new Error_5.ObjectDisposedError("List", _this.disposeReason); 1156 | } 1157 | }; 1158 | this.TriggerSubscriptions = function (subscriptions) { 1159 | if (subscriptions) { 1160 | for (var subscriptionId in subscriptions) { 1161 | if (subscriptionId) { 1162 | subscriptions[subscriptionId](); 1163 | } 1164 | } 1165 | } 1166 | }; 1167 | this.list = []; 1168 | if (list) { 1169 | for (var _i = 0, list_1 = list; _i < list_1.length; _i++) { 1170 | var item = list_1[_i]; 1171 | this.list.push(item); 1172 | } 1173 | } 1174 | } 1175 | return List; 1176 | }()); 1177 | exports.List = List; 1178 | }); 1179 | define("src/common/Queue", ["require", "exports", "src/common/Error", "src/common/List", "src/common/Promise"], function (require, exports, Error_6, List_1, Promise_1) { 1180 | "use strict"; 1181 | Object.defineProperty(exports, "__esModule", { value: true }); 1182 | var SubscriberType; 1183 | (function (SubscriberType) { 1184 | SubscriberType[SubscriberType["Dequeue"] = 0] = "Dequeue"; 1185 | SubscriberType[SubscriberType["Peek"] = 1] = "Peek"; 1186 | })(SubscriberType || (SubscriberType = {})); 1187 | var Queue = (function () { 1188 | function Queue(list) { 1189 | var _this = this; 1190 | this.promiseStore = new List_1.List(); 1191 | this.isDrainInProgress = false; 1192 | this.isDisposing = false; 1193 | this.disposeReason = null; 1194 | this.Enqueue = function (item) { 1195 | _this.ThrowIfDispose(); 1196 | _this.EnqueueFromPromise(Promise_1.PromiseHelper.FromResult(item)); 1197 | }; 1198 | this.EnqueueFromPromise = function (promise) { 1199 | _this.ThrowIfDispose(); 1200 | _this.promiseStore.Add(promise); 1201 | promise.Finally(function () { 1202 | while (_this.promiseStore.Length() > 0) { 1203 | if (!_this.promiseStore.First().Result().IsCompleted) { 1204 | break; 1205 | } 1206 | else { 1207 | var p = _this.promiseStore.RemoveFirst(); 1208 | if (!p.Result().IsError) { 1209 | _this.list.Add(p.Result().Result); 1210 | } 1211 | else { 1212 | } 1213 | } 1214 | } 1215 | }); 1216 | }; 1217 | this.Dequeue = function () { 1218 | _this.ThrowIfDispose(); 1219 | var deferredSubscriber = new Promise_1.Deferred(); 1220 | _this.subscribers.Add({ deferral: deferredSubscriber, type: SubscriberType.Dequeue }); 1221 | _this.Drain(); 1222 | return deferredSubscriber.Promise(); 1223 | }; 1224 | this.Peek = function () { 1225 | _this.ThrowIfDispose(); 1226 | var deferredSubscriber = new Promise_1.Deferred(); 1227 | _this.subscribers.Add({ deferral: deferredSubscriber, type: SubscriberType.Peek }); 1228 | _this.Drain(); 1229 | return deferredSubscriber.Promise(); 1230 | }; 1231 | this.Length = function () { 1232 | _this.ThrowIfDispose(); 1233 | return _this.list.Length(); 1234 | }; 1235 | this.IsDisposed = function () { 1236 | return _this.subscribers == null; 1237 | }; 1238 | this.DrainAndDispose = function (pendingItemProcessor, reason) { 1239 | if (!_this.IsDisposed() && !_this.isDisposing) { 1240 | _this.disposeReason = reason; 1241 | _this.isDisposing = true; 1242 | while (_this.subscribers.Length() > 0) { 1243 | var subscriber = _this.subscribers.RemoveFirst(); 1244 | subscriber.deferral.Reject("Disposed"); 1245 | } 1246 | for (var _i = 0, _a = _this.detachables; _i < _a.length; _i++) { 1247 | var detachable = _a[_i]; 1248 | detachable.Detach(); 1249 | } 1250 | if (_this.promiseStore.Length() > 0 && pendingItemProcessor) { 1251 | return Promise_1.PromiseHelper 1252 | .WhenAll(_this.promiseStore.ToArray()) 1253 | .ContinueWith(function () { 1254 | _this.subscribers = null; 1255 | _this.list.ForEach(function (item, index) { 1256 | pendingItemProcessor(item); 1257 | }); 1258 | _this.list = null; 1259 | return true; 1260 | }); 1261 | } 1262 | else { 1263 | _this.subscribers = null; 1264 | _this.list = null; 1265 | } 1266 | } 1267 | return Promise_1.PromiseHelper.FromResult(true); 1268 | }; 1269 | this.Dispose = function (reason) { 1270 | _this.DrainAndDispose(null, reason); 1271 | }; 1272 | this.Drain = function () { 1273 | if (!_this.isDrainInProgress && !_this.isDisposing) { 1274 | _this.isDrainInProgress = true; 1275 | while (_this.list.Length() > 0 && _this.subscribers.Length() > 0 && !_this.isDisposing) { 1276 | var subscriber = _this.subscribers.RemoveFirst(); 1277 | if (subscriber.type === SubscriberType.Peek) { 1278 | subscriber.deferral.Resolve(_this.list.First()); 1279 | } 1280 | else { 1281 | var dequeuedItem = _this.list.RemoveFirst(); 1282 | subscriber.deferral.Resolve(dequeuedItem); 1283 | } 1284 | } 1285 | _this.isDrainInProgress = false; 1286 | } 1287 | }; 1288 | this.ThrowIfDispose = function () { 1289 | if (_this.IsDisposed()) { 1290 | if (_this.disposeReason) { 1291 | throw new Error_6.InvalidOperationError(_this.disposeReason); 1292 | } 1293 | throw new Error_6.ObjectDisposedError("Queue"); 1294 | } 1295 | else if (_this.isDisposing) { 1296 | throw new Error_6.InvalidOperationError("Queue disposing"); 1297 | } 1298 | }; 1299 | this.list = list ? list : new List_1.List(); 1300 | this.detachables = []; 1301 | this.subscribers = new List_1.List(); 1302 | this.detachables.push(this.list.OnAdded(this.Drain)); 1303 | } 1304 | return Queue; 1305 | }()); 1306 | exports.Queue = Queue; 1307 | }); 1308 | define("src/common/Stream", ["require", "exports", "src/common/Error", "src/common/Guid", "src/common/Queue"], function (require, exports, Error_7, Guid_4, Queue_1) { 1309 | "use strict"; 1310 | Object.defineProperty(exports, "__esModule", { value: true }); 1311 | var Stream = (function () { 1312 | function Stream(streamId) { 1313 | var _this = this; 1314 | this.readerIdCounter = 1; 1315 | this.isEnded = false; 1316 | this.Write = function (buffer) { 1317 | _this.ThrowIfClosed(); 1318 | _this.WriteStreamChunk({ 1319 | Buffer: buffer, 1320 | IsEnd: false, 1321 | }); 1322 | }; 1323 | this.GetReader = function () { 1324 | var readerId = _this.readerIdCounter; 1325 | _this.readerIdCounter++; 1326 | var readerQueue = new Queue_1.Queue(); 1327 | var currentLength = _this.streambuffer.length; 1328 | _this.readerQueues[readerId] = readerQueue; 1329 | for (var i = 0; i < currentLength; i++) { 1330 | readerQueue.Enqueue(_this.streambuffer[i]); 1331 | } 1332 | return new StreamReader(_this.id, readerQueue, function () { 1333 | delete _this.readerQueues[readerId]; 1334 | }); 1335 | }; 1336 | this.Close = function () { 1337 | if (!_this.isEnded) { 1338 | _this.WriteStreamChunk({ 1339 | Buffer: null, 1340 | IsEnd: true, 1341 | }); 1342 | _this.isEnded = true; 1343 | } 1344 | }; 1345 | this.WriteStreamChunk = function (streamChunk) { 1346 | _this.ThrowIfClosed(); 1347 | _this.streambuffer.push(streamChunk); 1348 | for (var readerId in _this.readerQueues) { 1349 | if (!_this.readerQueues[readerId].IsDisposed()) { 1350 | try { 1351 | _this.readerQueues[readerId].Enqueue(streamChunk); 1352 | } 1353 | catch (e) { 1354 | } 1355 | } 1356 | } 1357 | }; 1358 | this.ThrowIfClosed = function () { 1359 | if (_this.isEnded) { 1360 | throw new Error_7.InvalidOperationError("Stream closed"); 1361 | } 1362 | }; 1363 | this.id = streamId ? streamId : Guid_4.CreateNoDashGuid(); 1364 | this.streambuffer = []; 1365 | this.readerQueues = {}; 1366 | } 1367 | Object.defineProperty(Stream.prototype, "IsClosed", { 1368 | get: function () { 1369 | return this.isEnded; 1370 | }, 1371 | enumerable: true, 1372 | configurable: true 1373 | }); 1374 | Object.defineProperty(Stream.prototype, "Id", { 1375 | get: function () { 1376 | return this.id; 1377 | }, 1378 | enumerable: true, 1379 | configurable: true 1380 | }); 1381 | return Stream; 1382 | }()); 1383 | exports.Stream = Stream; 1384 | var StreamReader = (function () { 1385 | function StreamReader(streamId, readerQueue, onClose) { 1386 | var _this = this; 1387 | this.isClosed = false; 1388 | this.Read = function () { 1389 | if (_this.IsClosed) { 1390 | throw new Error_7.InvalidOperationError("StreamReader closed"); 1391 | } 1392 | return _this.readerQueue 1393 | .Dequeue() 1394 | .OnSuccessContinueWith(function (streamChunk) { 1395 | if (streamChunk.IsEnd) { 1396 | _this.readerQueue.Dispose("End of stream reached"); 1397 | } 1398 | return streamChunk; 1399 | }); 1400 | }; 1401 | this.Close = function () { 1402 | if (!_this.isClosed) { 1403 | _this.isClosed = true; 1404 | _this.readerQueue.Dispose("StreamReader closed"); 1405 | _this.onClose(); 1406 | } 1407 | }; 1408 | this.readerQueue = readerQueue; 1409 | this.onClose = onClose; 1410 | this.streamId = streamId; 1411 | } 1412 | Object.defineProperty(StreamReader.prototype, "IsClosed", { 1413 | get: function () { 1414 | return this.isClosed; 1415 | }, 1416 | enumerable: true, 1417 | configurable: true 1418 | }); 1419 | Object.defineProperty(StreamReader.prototype, "StreamId", { 1420 | get: function () { 1421 | return this.streamId; 1422 | }, 1423 | enumerable: true, 1424 | configurable: true 1425 | }); 1426 | return StreamReader; 1427 | }()); 1428 | exports.StreamReader = StreamReader; 1429 | }); 1430 | define("src/common/IAudioSource", ["require", "exports"], function (require, exports) { 1431 | "use strict"; 1432 | Object.defineProperty(exports, "__esModule", { value: true }); 1433 | }); 1434 | define("src/common/IConnection", ["require", "exports"], function (require, exports) { 1435 | "use strict"; 1436 | Object.defineProperty(exports, "__esModule", { value: true }); 1437 | var ConnectionState; 1438 | (function (ConnectionState) { 1439 | ConnectionState[ConnectionState["None"] = 0] = "None"; 1440 | ConnectionState[ConnectionState["Connected"] = 1] = "Connected"; 1441 | ConnectionState[ConnectionState["Connecting"] = 2] = "Connecting"; 1442 | ConnectionState[ConnectionState["Disconnected"] = 3] = "Disconnected"; 1443 | })(ConnectionState = exports.ConnectionState || (exports.ConnectionState = {})); 1444 | }); 1445 | define("src/common/IKeyValueStorage", ["require", "exports"], function (require, exports) { 1446 | "use strict"; 1447 | Object.defineProperty(exports, "__esModule", { value: true }); 1448 | }); 1449 | define("src/common/InMemoryStorage", ["require", "exports", "src/common/Error"], function (require, exports, Error_8) { 1450 | "use strict"; 1451 | Object.defineProperty(exports, "__esModule", { value: true }); 1452 | var InMemoryStorage = (function () { 1453 | function InMemoryStorage() { 1454 | var _this = this; 1455 | this.store = {}; 1456 | this.Get = function (key) { 1457 | if (!key) { 1458 | throw new Error_8.ArgumentNullError("key"); 1459 | } 1460 | return _this.store[key]; 1461 | }; 1462 | this.GetOrAdd = function (key, valueToAdd) { 1463 | if (!key) { 1464 | throw new Error_8.ArgumentNullError("key"); 1465 | } 1466 | if (_this.store[key] === undefined) { 1467 | _this.store[key] = valueToAdd; 1468 | } 1469 | return _this.store[key]; 1470 | }; 1471 | this.Set = function (key, value) { 1472 | if (!key) { 1473 | throw new Error_8.ArgumentNullError("key"); 1474 | } 1475 | _this.store[key] = value; 1476 | }; 1477 | this.Remove = function (key) { 1478 | if (!key) { 1479 | throw new Error_8.ArgumentNullError("key"); 1480 | } 1481 | if (_this.store[key] !== undefined) { 1482 | delete _this.store[key]; 1483 | } 1484 | }; 1485 | } 1486 | return InMemoryStorage; 1487 | }()); 1488 | exports.InMemoryStorage = InMemoryStorage; 1489 | }); 1490 | define("src/common/ITimer", ["require", "exports"], function (require, exports) { 1491 | "use strict"; 1492 | Object.defineProperty(exports, "__esModule", { value: true }); 1493 | }); 1494 | define("src/common/RawWebsocketMessage", ["require", "exports", "src/common/ConnectionMessage", "src/common/Error", "src/common/Guid"], function (require, exports, ConnectionMessage_1, Error_9, Guid_5) { 1495 | "use strict"; 1496 | Object.defineProperty(exports, "__esModule", { value: true }); 1497 | var RawWebsocketMessage = (function () { 1498 | function RawWebsocketMessage(messageType, payload, id) { 1499 | this.payload = null; 1500 | if (!payload) { 1501 | throw new Error_9.ArgumentNullError("payload"); 1502 | } 1503 | if (messageType === ConnectionMessage_1.MessageType.Binary && !(payload instanceof ArrayBuffer)) { 1504 | throw new Error_9.InvalidOperationError("Payload must be ArrayBuffer"); 1505 | } 1506 | if (messageType === ConnectionMessage_1.MessageType.Text && !(typeof (payload) === "string")) { 1507 | throw new Error_9.InvalidOperationError("Payload must be a string"); 1508 | } 1509 | this.messageType = messageType; 1510 | this.payload = payload; 1511 | this.id = id ? id : Guid_5.CreateNoDashGuid(); 1512 | } 1513 | Object.defineProperty(RawWebsocketMessage.prototype, "MessageType", { 1514 | get: function () { 1515 | return this.messageType; 1516 | }, 1517 | enumerable: true, 1518 | configurable: true 1519 | }); 1520 | Object.defineProperty(RawWebsocketMessage.prototype, "Payload", { 1521 | get: function () { 1522 | return this.payload; 1523 | }, 1524 | enumerable: true, 1525 | configurable: true 1526 | }); 1527 | Object.defineProperty(RawWebsocketMessage.prototype, "TextContent", { 1528 | get: function () { 1529 | if (this.messageType === ConnectionMessage_1.MessageType.Binary) { 1530 | throw new Error_9.InvalidOperationError("Not supported for binary message"); 1531 | } 1532 | return this.payload; 1533 | }, 1534 | enumerable: true, 1535 | configurable: true 1536 | }); 1537 | Object.defineProperty(RawWebsocketMessage.prototype, "BinaryContent", { 1538 | get: function () { 1539 | if (this.messageType === ConnectionMessage_1.MessageType.Text) { 1540 | throw new Error_9.InvalidOperationError("Not supported for text message"); 1541 | } 1542 | return this.payload; 1543 | }, 1544 | enumerable: true, 1545 | configurable: true 1546 | }); 1547 | Object.defineProperty(RawWebsocketMessage.prototype, "Id", { 1548 | get: function () { 1549 | return this.id; 1550 | }, 1551 | enumerable: true, 1552 | configurable: true 1553 | }); 1554 | return RawWebsocketMessage; 1555 | }()); 1556 | exports.RawWebsocketMessage = RawWebsocketMessage; 1557 | }); 1558 | define("src/common/IWebsocketMessageFormatter", ["require", "exports"], function (require, exports) { 1559 | "use strict"; 1560 | Object.defineProperty(exports, "__esModule", { value: true }); 1561 | }); 1562 | define("src/common/RiffPcmEncoder", ["require", "exports"], function (require, exports) { 1563 | "use strict"; 1564 | Object.defineProperty(exports, "__esModule", { value: true }); 1565 | var RiffPcmEncoder = (function () { 1566 | function RiffPcmEncoder(actualSampleRate, desiredSampleRate) { 1567 | var _this = this; 1568 | this.channelCount = 1; 1569 | this.Encode = function (isFirstAudioFrame, actualAudioFrame) { 1570 | var audioFrame = _this.DownSampleAudioFrame(actualAudioFrame, _this.actualSampleRate, _this.desiredSampleRate); 1571 | var audioLength = audioFrame.length * 2; 1572 | if (!isFirstAudioFrame) { 1573 | var buffer_1 = new ArrayBuffer(audioLength); 1574 | var view_1 = new DataView(buffer_1); 1575 | _this.FloatTo16BitPCM(view_1, 0, audioFrame); 1576 | return buffer_1; 1577 | } 1578 | var buffer = new ArrayBuffer(44 + audioLength); 1579 | var bitsPerSample = 16; 1580 | var bytesPerSample = bitsPerSample / 8; 1581 | var fileLength = 0; 1582 | var view = new DataView(buffer); 1583 | _this.SetString(view, 0, "RIFF"); 1584 | view.setUint32(4, fileLength, true); 1585 | _this.SetString(view, 8, "WAVEfmt "); 1586 | view.setUint32(16, 16, true); 1587 | view.setUint16(20, 1, true); 1588 | view.setUint16(22, _this.channelCount, true); 1589 | view.setUint32(24, _this.desiredSampleRate, true); 1590 | view.setUint32(28, _this.desiredSampleRate * _this.channelCount * bytesPerSample, true); 1591 | view.setUint16(32, _this.channelCount * bytesPerSample, true); 1592 | view.setUint16(34, bitsPerSample, true); 1593 | _this.SetString(view, 36, "data"); 1594 | view.setUint32(40, fileLength, true); 1595 | _this.FloatTo16BitPCM(view, 44, audioFrame); 1596 | return buffer; 1597 | }; 1598 | this.SetString = function (view, offset, str) { 1599 | for (var i = 0; i < str.length; i++) { 1600 | view.setUint8(offset + i, str.charCodeAt(i)); 1601 | } 1602 | }; 1603 | this.FloatTo16BitPCM = function (view, offset, input) { 1604 | for (var i = 0; i < input.length; i++, offset += 2) { 1605 | var s = Math.max(-1, Math.min(1, input[i])); 1606 | view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7FFF, true); 1607 | } 1608 | }; 1609 | this.DownSampleAudioFrame = function (audioFrame, actualSampleRate, desiredSamplerate) { 1610 | if (desiredSamplerate === actualSampleRate || desiredSamplerate > actualSampleRate) { 1611 | return audioFrame; 1612 | } 1613 | var sampleRateRatio = actualSampleRate / desiredSamplerate; 1614 | var newLength = Math.round(audioFrame.length / sampleRateRatio); 1615 | var downSampledAudioFrame = new Float32Array(newLength); 1616 | var offsetResult = 0; 1617 | var offsetBuffer = 0; 1618 | while (offsetResult < downSampledAudioFrame.length) { 1619 | var nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio); 1620 | var accum = 0; 1621 | var count = 0; 1622 | for (var i = offsetBuffer; i < nextOffsetBuffer && i < audioFrame.length; i++) { 1623 | accum += audioFrame[i]; 1624 | count++; 1625 | } 1626 | downSampledAudioFrame[offsetResult] = accum / count; 1627 | offsetResult++; 1628 | offsetBuffer = nextOffsetBuffer; 1629 | } 1630 | return downSampledAudioFrame; 1631 | }; 1632 | this.actualSampleRate = actualSampleRate; 1633 | this.desiredSampleRate = desiredSampleRate; 1634 | } 1635 | return RiffPcmEncoder; 1636 | }()); 1637 | exports.RiffPcmEncoder = RiffPcmEncoder; 1638 | }); 1639 | define("src/common/Storage", ["require", "exports", "src/common/Error", "src/common/InMemoryStorage"], function (require, exports, Error_10, InMemoryStorage_1) { 1640 | "use strict"; 1641 | Object.defineProperty(exports, "__esModule", { value: true }); 1642 | var Storage = (function () { 1643 | function Storage() { 1644 | } 1645 | Object.defineProperty(Storage, "Session", { 1646 | get: function () { 1647 | return Storage.sessionStorage; 1648 | }, 1649 | enumerable: true, 1650 | configurable: true 1651 | }); 1652 | Object.defineProperty(Storage, "Local", { 1653 | get: function () { 1654 | return Storage.localStorage; 1655 | }, 1656 | enumerable: true, 1657 | configurable: true 1658 | }); 1659 | Storage.sessionStorage = new InMemoryStorage_1.InMemoryStorage(); 1660 | Storage.localStorage = new InMemoryStorage_1.InMemoryStorage(); 1661 | Storage.SetSessionStorage = function (sessionStorage) { 1662 | if (!sessionStorage) { 1663 | throw new Error_10.ArgumentNullError("sessionStorage"); 1664 | } 1665 | Storage.sessionStorage = sessionStorage; 1666 | }; 1667 | Storage.SetLocalStorage = function (localStorage) { 1668 | if (!localStorage) { 1669 | throw new Error_10.ArgumentNullError("localStorage"); 1670 | } 1671 | Storage.localStorage = localStorage; 1672 | }; 1673 | return Storage; 1674 | }()); 1675 | exports.Storage = Storage; 1676 | }); 1677 | define("src/common/Exports", ["require", "exports", "src/common/AudioSourceEvents", "src/common/ConnectionEvents", "src/common/ConnectionMessage", "src/common/ConnectionOpenResponse", "src/common/Error", "src/common/Events", "src/common/EventSource", "src/common/Guid", "src/common/IConnection", "src/common/InMemoryStorage", "src/common/List", "src/common/PlatformEvent", "src/common/Promise", "src/common/Queue", "src/common/RawWebsocketMessage", "src/common/RiffPcmEncoder", "src/common/Storage", "src/common/Stream"], function (require, exports, AudioSourceEvents_1, ConnectionEvents_1, ConnectionMessage_2, ConnectionOpenResponse_1, Error_11, Events_1, EventSource_2, Guid_6, IConnection_1, InMemoryStorage_2, List_2, PlatformEvent_3, Promise_2, Queue_2, RawWebsocketMessage_1, RiffPcmEncoder_1, Storage_1, Stream_1) { 1678 | "use strict"; 1679 | function __export(m) { 1680 | for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; 1681 | } 1682 | Object.defineProperty(exports, "__esModule", { value: true }); 1683 | __export(AudioSourceEvents_1); 1684 | __export(ConnectionEvents_1); 1685 | __export(ConnectionMessage_2); 1686 | __export(ConnectionOpenResponse_1); 1687 | __export(Error_11); 1688 | __export(Events_1); 1689 | __export(EventSource_2); 1690 | __export(Guid_6); 1691 | __export(IConnection_1); 1692 | __export(InMemoryStorage_2); 1693 | __export(List_2); 1694 | __export(PlatformEvent_3); 1695 | __export(Promise_2); 1696 | __export(Queue_2); 1697 | __export(RawWebsocketMessage_1); 1698 | __export(RiffPcmEncoder_1); 1699 | __export(Storage_1); 1700 | __export(Stream_1); 1701 | }); 1702 | define("src/common.browser/ConsoleLoggingListener", ["require", "exports", "src/common/Exports"], function (require, exports, Exports_1) { 1703 | "use strict"; 1704 | Object.defineProperty(exports, "__esModule", { value: true }); 1705 | var ConsoleLoggingListener = (function () { 1706 | function ConsoleLoggingListener(logLevelFilter) { 1707 | if (logLevelFilter === void 0) { logLevelFilter = Exports_1.EventType.Warning; } 1708 | var _this = this; 1709 | this.OnEvent = function (event) { 1710 | if (event.EventType >= _this.logLevelFilter) { 1711 | var log = _this.ToString(event); 1712 | switch (event.EventType) { 1713 | case Exports_1.EventType.Debug: 1714 | console.debug(log); 1715 | break; 1716 | case Exports_1.EventType.Info: 1717 | console.info(log); 1718 | break; 1719 | case Exports_1.EventType.Warning: 1720 | console.warn(log); 1721 | break; 1722 | case Exports_1.EventType.Error: 1723 | console.error(log); 1724 | break; 1725 | default: 1726 | console.log(log); 1727 | break; 1728 | } 1729 | } 1730 | }; 1731 | this.ToString = function (event) { 1732 | var logFragments = [ 1733 | "" + event.EventTime, 1734 | "" + event.Name, 1735 | ]; 1736 | for (var prop in event) { 1737 | if (prop && event.hasOwnProperty(prop) && prop !== "eventTime" && prop !== "eventType" && prop !== "eventId" && prop !== "name" && prop !== "constructor") { 1738 | var value = event[prop]; 1739 | var valueToLog = ""; 1740 | if (value !== undefined && value !== null) { 1741 | if (typeof (value) === "number" || typeof (value) === "string") { 1742 | valueToLog = value.toString(); 1743 | } 1744 | else { 1745 | valueToLog = JSON.stringify(value); 1746 | } 1747 | } 1748 | logFragments.push(prop + ": " + valueToLog); 1749 | } 1750 | } 1751 | return logFragments.join(" | "); 1752 | }; 1753 | this.logLevelFilter = logLevelFilter; 1754 | } 1755 | return ConsoleLoggingListener; 1756 | }()); 1757 | exports.ConsoleLoggingListener = ConsoleLoggingListener; 1758 | }); 1759 | define("src/common.browser/IRecorder", ["require", "exports"], function (require, exports) { 1760 | "use strict"; 1761 | Object.defineProperty(exports, "__esModule", { value: true }); 1762 | }); 1763 | define("src/common.browser/LocalStorage", ["require", "exports", "src/common/Exports"], function (require, exports, Exports_2) { 1764 | "use strict"; 1765 | Object.defineProperty(exports, "__esModule", { value: true }); 1766 | var LocalStorage = (function () { 1767 | function LocalStorage() { 1768 | this.Get = function (key) { 1769 | if (!key) { 1770 | throw new Exports_2.ArgumentNullError("key"); 1771 | } 1772 | return localStorage.getItem(key); 1773 | }; 1774 | this.GetOrAdd = function (key, valueToAdd) { 1775 | if (!key) { 1776 | throw new Exports_2.ArgumentNullError("key"); 1777 | } 1778 | var value = localStorage.getItem(key); 1779 | if (value === null || value === undefined) { 1780 | localStorage.setItem(key, valueToAdd); 1781 | } 1782 | return localStorage.getItem(key); 1783 | }; 1784 | this.Set = function (key, value) { 1785 | if (!key) { 1786 | throw new Exports_2.ArgumentNullError("key"); 1787 | } 1788 | localStorage.setItem(key, value); 1789 | }; 1790 | this.Remove = function (key) { 1791 | if (!key) { 1792 | throw new Exports_2.ArgumentNullError("key"); 1793 | } 1794 | localStorage.removeItem(key); 1795 | }; 1796 | } 1797 | return LocalStorage; 1798 | }()); 1799 | exports.LocalStorage = LocalStorage; 1800 | }); 1801 | define("src/common.browser/MicAudioSource", ["require", "exports", "src/common/Exports"], function (require, exports, Exports_3) { 1802 | "use strict"; 1803 | Object.defineProperty(exports, "__esModule", { value: true }); 1804 | var MicAudioSource = (function () { 1805 | function MicAudioSource(recorder, audioSourceId) { 1806 | var _this = this; 1807 | this.streams = {}; 1808 | this.TurnOn = function () { 1809 | if (_this.initializeDeferral) { 1810 | return _this.initializeDeferral.Promise(); 1811 | } 1812 | _this.initializeDeferral = new Exports_3.Deferred(); 1813 | var nav = window.navigator; 1814 | window.navigator.getUserMedia = (window.navigator.getUserMedia || 1815 | window.navigator.webkitGetUserMedia || 1816 | window.navigator.mozGetUserMedia || 1817 | window.navigator.msGetUserMedia); 1818 | if (!window.navigator.getUserMedia) { 1819 | var errorMsg = "Browser does not support getUserMedia."; 1820 | _this.initializeDeferral.Reject(errorMsg); 1821 | _this.OnEvent(new Exports_3.AudioSourceErrorEvent(errorMsg, "")); 1822 | } 1823 | else { 1824 | _this.OnEvent(new Exports_3.AudioSourceInitializingEvent(_this.id)); 1825 | window.navigator.getUserMedia({ audio: true }, function (mediaStream) { 1826 | _this.mediaStream = mediaStream; 1827 | _this.OnEvent(new Exports_3.AudioSourceReadyEvent(_this.id)); 1828 | _this.initializeDeferral.Resolve(true); 1829 | }, function (error) { 1830 | var errorMsg = "Error occurred processing the user media stream. " + error; 1831 | var tmp = _this.initializeDeferral; 1832 | _this.initializeDeferral = null; 1833 | tmp.Reject(errorMsg); 1834 | _this.OnEvent(new Exports_3.AudioSourceErrorEvent(_this.id, errorMsg)); 1835 | }); 1836 | } 1837 | return _this.initializeDeferral.Promise(); 1838 | }; 1839 | this.Id = function () { 1840 | return _this.id; 1841 | }; 1842 | this.Attach = function (audioNodeId) { 1843 | _this.OnEvent(new Exports_3.AudioStreamNodeAttachingEvent(_this.id, audioNodeId)); 1844 | return _this.Listen(audioNodeId).OnSuccessContinueWith(function (streamReader) { 1845 | _this.OnEvent(new Exports_3.AudioStreamNodeAttachedEvent(_this.id, audioNodeId)); 1846 | return { 1847 | Detach: function () { 1848 | streamReader.Close(); 1849 | delete _this.streams[audioNodeId]; 1850 | _this.OnEvent(new Exports_3.AudioStreamNodeDetachedEvent(_this.id, audioNodeId)); 1851 | _this.TurnOff(); 1852 | }, 1853 | Id: function () { 1854 | return audioNodeId; 1855 | }, 1856 | Read: function () { 1857 | return streamReader.Read(); 1858 | }, 1859 | }; 1860 | }); 1861 | }; 1862 | this.Detach = function (audioNodeId) { 1863 | if (audioNodeId && _this.streams[audioNodeId]) { 1864 | _this.streams[audioNodeId].Close(); 1865 | delete _this.streams[audioNodeId]; 1866 | _this.OnEvent(new Exports_3.AudioStreamNodeDetachedEvent(_this.id, audioNodeId)); 1867 | } 1868 | }; 1869 | this.TurnOff = function () { 1870 | for (var streamId in _this.streams) { 1871 | if (streamId) { 1872 | var stream = _this.streams[streamId]; 1873 | if (stream) { 1874 | stream.Close(); 1875 | } 1876 | } 1877 | } 1878 | _this.recorder.ReleaseMediaResources(); 1879 | _this.OnEvent(new Exports_3.AudioSourceOffEvent(_this.id)); 1880 | _this.initializeDeferral = null; 1881 | return Exports_3.PromiseHelper.FromResult(true); 1882 | }; 1883 | this.Listen = function (audioNodeId) { 1884 | return _this.TurnOn() 1885 | .OnSuccessContinueWith(function (_) { 1886 | var stream = new Exports_3.Stream(audioNodeId); 1887 | _this.streams[audioNodeId] = stream; 1888 | try { 1889 | _this.recorder.Record(_this.mediaStream, stream); 1890 | } 1891 | catch (error) { 1892 | _this.OnEvent(new Exports_3.AudioStreamNodeErrorEvent(_this.id, audioNodeId, error)); 1893 | throw error; 1894 | } 1895 | return stream.GetReader(); 1896 | }); 1897 | }; 1898 | this.OnEvent = function (event) { 1899 | _this.events.OnEvent(event); 1900 | Exports_3.Events.Instance.OnEvent(event); 1901 | }; 1902 | this.id = audioSourceId ? audioSourceId : Exports_3.CreateNoDashGuid(); 1903 | this.events = new Exports_3.EventSource(); 1904 | this.recorder = recorder; 1905 | } 1906 | Object.defineProperty(MicAudioSource.prototype, "Events", { 1907 | get: function () { 1908 | return this.events; 1909 | }, 1910 | enumerable: true, 1911 | configurable: true 1912 | }); 1913 | return MicAudioSource; 1914 | }()); 1915 | exports.MicAudioSource = MicAudioSource; 1916 | }); 1917 | define("src/common.browser/FileAudioSource", ["require", "exports", "src/common/Exports", "src/common.browser/Exports"], function (require, exports, Exports_4, Exports_5) { 1918 | "use strict"; 1919 | Object.defineProperty(exports, "__esModule", { value: true }); 1920 | var FileAudioSource = (function () { 1921 | function FileAudioSource(file, audioSourceId) { 1922 | var _this = this; 1923 | this.streams = {}; 1924 | this.TurnOn = function () { 1925 | if (typeof FileReader === "undefined") { 1926 | var errorMsg = "Browser does not support FileReader."; 1927 | _this.OnEvent(new Exports_4.AudioSourceErrorEvent(errorMsg, "")); 1928 | return Exports_4.PromiseHelper.FromError(errorMsg); 1929 | } 1930 | else if (_this.file.name.lastIndexOf(".wav") !== _this.file.name.length - 4) { 1931 | var errorMsg = _this.file.name + " is not supported. Only WAVE files are allowed at the moment."; 1932 | _this.OnEvent(new Exports_4.AudioSourceErrorEvent(errorMsg, "")); 1933 | return Exports_4.PromiseHelper.FromError(errorMsg); 1934 | } 1935 | else if (_this.file.size > FileAudioSource.MAX_SIZE) { 1936 | var errorMsg = _this.file.name + " exceeds the maximum allowed file size (" + FileAudioSource.MAX_SIZE + ")."; 1937 | _this.OnEvent(new Exports_4.AudioSourceErrorEvent(errorMsg, "")); 1938 | return Exports_4.PromiseHelper.FromError(errorMsg); 1939 | } 1940 | _this.OnEvent(new Exports_4.AudioSourceInitializingEvent(_this.id)); 1941 | _this.OnEvent(new Exports_4.AudioSourceReadyEvent(_this.id)); 1942 | return Exports_4.PromiseHelper.FromResult(true); 1943 | }; 1944 | this.Id = function () { 1945 | return _this.id; 1946 | }; 1947 | this.Attach = function (audioNodeId) { 1948 | _this.OnEvent(new Exports_4.AudioStreamNodeAttachingEvent(_this.id, audioNodeId)); 1949 | return _this.Upload(audioNodeId).OnSuccessContinueWith(function (streamReader) { 1950 | _this.OnEvent(new Exports_4.AudioStreamNodeAttachedEvent(_this.id, audioNodeId)); 1951 | return { 1952 | Detach: function () { 1953 | streamReader.Close(); 1954 | delete _this.streams[audioNodeId]; 1955 | _this.OnEvent(new Exports_4.AudioStreamNodeDetachedEvent(_this.id, audioNodeId)); 1956 | _this.TurnOff(); 1957 | }, 1958 | Id: function () { 1959 | return audioNodeId; 1960 | }, 1961 | Read: function () { 1962 | return streamReader.Read(); 1963 | }, 1964 | }; 1965 | }); 1966 | }; 1967 | this.Detach = function (audioNodeId) { 1968 | if (audioNodeId && _this.streams[audioNodeId]) { 1969 | _this.streams[audioNodeId].Close(); 1970 | delete _this.streams[audioNodeId]; 1971 | _this.OnEvent(new Exports_4.AudioStreamNodeDetachedEvent(_this.id, audioNodeId)); 1972 | } 1973 | }; 1974 | this.TurnOff = function () { 1975 | for (var streamId in _this.streams) { 1976 | if (streamId) { 1977 | var stream = _this.streams[streamId]; 1978 | if (stream && !stream.IsClosed) { 1979 | stream.Close(); 1980 | } 1981 | } 1982 | } 1983 | _this.OnEvent(new Exports_4.AudioSourceOffEvent(_this.id)); 1984 | return Exports_4.PromiseHelper.FromResult(true); 1985 | }; 1986 | this.Upload = function (audioNodeId) { 1987 | return _this.TurnOn() 1988 | .OnSuccessContinueWith(function (_) { 1989 | var stream = new Exports_4.Stream(audioNodeId); 1990 | _this.streams[audioNodeId] = stream; 1991 | var reader = new FileReader(); 1992 | var startOffset = 0; 1993 | var endOffset = FileAudioSource.CHUNK_SIZE; 1994 | var lastWriteTimestamp = 0; 1995 | var processNextChunk = function (event) { 1996 | if (stream.IsClosed) { 1997 | return; 1998 | } 1999 | if (lastWriteTimestamp !== 0) { 2000 | var delay = Date.now() - lastWriteTimestamp; 2001 | if (delay < FileAudioSource.UPLOAD_INTERVAL) { 2002 | new Exports_5.Timer(FileAudioSource.UPLOAD_INTERVAL - delay, processNextChunk).start(); 2003 | return; 2004 | } 2005 | } 2006 | stream.Write(reader.result); 2007 | lastWriteTimestamp = Date.now(); 2008 | if (endOffset < _this.file.size) { 2009 | startOffset = endOffset; 2010 | endOffset = Math.min(endOffset + FileAudioSource.CHUNK_SIZE, _this.file.size); 2011 | var chunk_1 = _this.file.slice(startOffset, endOffset); 2012 | reader.readAsArrayBuffer(chunk_1); 2013 | } 2014 | else { 2015 | stream.Close(); 2016 | } 2017 | }; 2018 | reader.onload = processNextChunk; 2019 | reader.onerror = function (event) { 2020 | var errorMsg = "Error occurred while processing '" + _this.file.name + "'. " + event.error; 2021 | _this.OnEvent(new Exports_4.AudioStreamNodeErrorEvent(_this.id, audioNodeId, event.error)); 2022 | throw new Error(errorMsg); 2023 | }; 2024 | var chunk = _this.file.slice(startOffset, endOffset); 2025 | reader.readAsArrayBuffer(chunk); 2026 | return stream.GetReader(); 2027 | }); 2028 | }; 2029 | this.OnEvent = function (event) { 2030 | _this.events.OnEvent(event); 2031 | Exports_4.Events.Instance.OnEvent(event); 2032 | }; 2033 | this.id = audioSourceId ? audioSourceId : Exports_4.CreateNoDashGuid(); 2034 | this.events = new Exports_4.EventSource(); 2035 | this.file = file; 2036 | } 2037 | Object.defineProperty(FileAudioSource.prototype, "Events", { 2038 | get: function () { 2039 | return this.events; 2040 | }, 2041 | enumerable: true, 2042 | configurable: true 2043 | }); 2044 | FileAudioSource.SAMPLE_RATE = 16000 * 2; 2045 | FileAudioSource.CHUNK_SIZE = FileAudioSource.SAMPLE_RATE * 2 / 5; 2046 | FileAudioSource.UPLOAD_INTERVAL = 200; 2047 | FileAudioSource.MAX_SIZE = FileAudioSource.SAMPLE_RATE * 600 + 44; 2048 | return FileAudioSource; 2049 | }()); 2050 | exports.FileAudioSource = FileAudioSource; 2051 | }); 2052 | define("src/common.browser/OpusRecorder", ["require", "exports"], function (require, exports) { 2053 | "use strict"; 2054 | Object.defineProperty(exports, "__esModule", { value: true }); 2055 | var OpusRecorder = (function () { 2056 | function OpusRecorder(options) { 2057 | var _this = this; 2058 | this.Record = function (mediaStream, outputStream) { 2059 | var mediaRecorder = new MediaRecorder(mediaStream, _this.mediaRecorderOptions); 2060 | var timeslice = 100; 2061 | mediaRecorder.ondataavailable = function (dataAvailableEvent) { 2062 | if (outputStream) { 2063 | var reader_1 = new FileReader(); 2064 | reader_1.readAsArrayBuffer(dataAvailableEvent.data); 2065 | reader_1.onloadend = function (event) { 2066 | outputStream.Write(reader_1.result); 2067 | }; 2068 | } 2069 | }; 2070 | _this.mediaResources = { 2071 | recorder: mediaRecorder, 2072 | stream: mediaStream, 2073 | }; 2074 | mediaRecorder.start(timeslice); 2075 | }; 2076 | this.ReleaseMediaResources = function () { 2077 | if (_this.mediaResources.recorder.state !== "inactive") { 2078 | _this.mediaResources.recorder.stop(); 2079 | } 2080 | _this.mediaResources.stream.getTracks().forEach(function (track) { return track.stop(); }); 2081 | }; 2082 | this.mediaRecorderOptions = options; 2083 | } 2084 | return OpusRecorder; 2085 | }()); 2086 | exports.OpusRecorder = OpusRecorder; 2087 | }); 2088 | define("src/common.browser/PCMRecorder", ["require", "exports", "src/common/Exports"], function (require, exports, Exports_6) { 2089 | "use strict"; 2090 | Object.defineProperty(exports, "__esModule", { value: true }); 2091 | var PcmRecorder = (function () { 2092 | function PcmRecorder() { 2093 | var _this = this; 2094 | this.Record = function (mediaStream, outputStream) { 2095 | var contextCtor = (window.AudioContext) 2096 | || (window.webkitAudioContext) 2097 | || false; 2098 | if (!contextCtor) { 2099 | throw new Error("Browser does not support Web Audio API (AudioContext is not available)."); 2100 | } 2101 | var audioContext = new contextCtor(); 2102 | var mediaStreamSource = audioContext.createMediaStreamSource(mediaStream); 2103 | var desiredSampleRate = 16000; 2104 | var bufferSize = 2048; 2105 | var isFirstFrameWritten = false; 2106 | if (desiredSampleRate * 4 <= mediaStreamSource.context.sampleRate) { 2107 | bufferSize = 8192; 2108 | } 2109 | else if (desiredSampleRate * 2 <= mediaStreamSource.context.sampleRate) { 2110 | bufferSize = 4096; 2111 | } 2112 | var scriptNode = mediaStreamSource.context.createScriptProcessor(bufferSize, 1, 1); 2113 | var waveStreamEncoder = new Exports_6.RiffPcmEncoder(mediaStreamSource.context.sampleRate, desiredSampleRate); 2114 | scriptNode.onaudioprocess = function (audioProcessingEvent) { 2115 | var monoAudioChunk = audioProcessingEvent.inputBuffer.getChannelData(0); 2116 | var encodedAudioFrameWithRiffHeader; 2117 | var encodedAudioFrame; 2118 | if (outputStream) { 2119 | if (isFirstFrameWritten) { 2120 | if (!encodedAudioFrame) { 2121 | encodedAudioFrame = waveStreamEncoder.Encode(false, monoAudioChunk); 2122 | } 2123 | outputStream.Write(encodedAudioFrame); 2124 | } 2125 | else { 2126 | if (!encodedAudioFrameWithRiffHeader) { 2127 | encodedAudioFrameWithRiffHeader = 2128 | waveStreamEncoder.Encode(true, monoAudioChunk); 2129 | } 2130 | outputStream.Write(encodedAudioFrameWithRiffHeader); 2131 | isFirstFrameWritten = true; 2132 | } 2133 | } 2134 | }; 2135 | _this.mediaResources = { 2136 | context: audioContext, 2137 | scriptProcessorNode: scriptNode, 2138 | source: mediaStreamSource, 2139 | stream: mediaStream, 2140 | }; 2141 | mediaStreamSource.connect(scriptNode); 2142 | scriptNode.connect(mediaStreamSource.context.destination); 2143 | }; 2144 | this.ReleaseMediaResources = function () { 2145 | if (_this.mediaResources) { 2146 | if (_this.mediaResources.scriptProcessorNode) { 2147 | _this.mediaResources.scriptProcessorNode.disconnect(); 2148 | _this.mediaResources.scriptProcessorNode = null; 2149 | } 2150 | if (_this.mediaResources.source) { 2151 | _this.mediaResources.source.disconnect(); 2152 | _this.mediaResources.stream.getTracks().forEach(function (track) { return track.stop(); }); 2153 | _this.mediaResources.source = null; 2154 | } 2155 | if (_this.mediaResources.context && _this.mediaResources.context.state !== "closed") { 2156 | _this.mediaResources.context.close(); 2157 | } 2158 | } 2159 | }; 2160 | } 2161 | return PcmRecorder; 2162 | }()); 2163 | exports.PcmRecorder = PcmRecorder; 2164 | }); 2165 | define("src/common.browser/SessionStorage", ["require", "exports", "src/common/Exports"], function (require, exports, Exports_7) { 2166 | "use strict"; 2167 | Object.defineProperty(exports, "__esModule", { value: true }); 2168 | var SessionStorage = (function () { 2169 | function SessionStorage() { 2170 | this.Get = function (key) { 2171 | if (!key) { 2172 | throw new Exports_7.ArgumentNullError("key"); 2173 | } 2174 | return sessionStorage.getItem(key); 2175 | }; 2176 | this.GetOrAdd = function (key, valueToAdd) { 2177 | if (!key) { 2178 | throw new Exports_7.ArgumentNullError("key"); 2179 | } 2180 | var value = sessionStorage.getItem(key); 2181 | if (value === null || value === undefined) { 2182 | sessionStorage.setItem(key, valueToAdd); 2183 | } 2184 | return sessionStorage.getItem(key); 2185 | }; 2186 | this.Set = function (key, value) { 2187 | if (!key) { 2188 | throw new Exports_7.ArgumentNullError("key"); 2189 | } 2190 | sessionStorage.setItem(key, value); 2191 | }; 2192 | this.Remove = function (key) { 2193 | if (!key) { 2194 | throw new Exports_7.ArgumentNullError("key"); 2195 | } 2196 | sessionStorage.removeItem(key); 2197 | }; 2198 | } 2199 | return SessionStorage; 2200 | }()); 2201 | exports.SessionStorage = SessionStorage; 2202 | }); 2203 | define("src/common.browser/Timer", ["require", "exports"], function (require, exports) { 2204 | "use strict"; 2205 | Object.defineProperty(exports, "__esModule", { value: true }); 2206 | var Timer = (function () { 2207 | function Timer(delayInMillisec, successCallback) { 2208 | var _this = this; 2209 | this.start = function () { 2210 | var params = []; 2211 | for (var _i = 0; _i < arguments.length; _i++) { 2212 | params[_i] = arguments[_i]; 2213 | } 2214 | if (_this.timerId) { 2215 | _this.stop(); 2216 | } 2217 | _this.timerId = setTimeout(_this.successCallback, _this.delayInMillisec, params); 2218 | }; 2219 | this.stop = function () { 2220 | clearTimeout(_this.timerId); 2221 | }; 2222 | this.delayInMillisec = delayInMillisec; 2223 | this.successCallback = successCallback; 2224 | } 2225 | return Timer; 2226 | }()); 2227 | exports.Timer = Timer; 2228 | }); 2229 | define("src/common.browser/WebsocketMessageAdapter", ["require", "exports", "src/common/Exports"], function (require, exports, Exports_8) { 2230 | "use strict"; 2231 | Object.defineProperty(exports, "__esModule", { value: true }); 2232 | var WebsocketMessageAdapter = (function () { 2233 | function WebsocketMessageAdapter(uri, connectionId, messageFormatter) { 2234 | var _this = this; 2235 | this.Open = function () { 2236 | if (_this.connectionState === Exports_8.ConnectionState.Disconnected) { 2237 | return Exports_8.PromiseHelper.FromError("Cannot open a connection that is in " + _this.connectionState + " state"); 2238 | } 2239 | if (_this.connectionEstablishDeferral) { 2240 | return _this.connectionEstablishDeferral.Promise(); 2241 | } 2242 | _this.connectionEstablishDeferral = new Exports_8.Deferred(); 2243 | _this.connectionState = Exports_8.ConnectionState.Connecting; 2244 | _this.websocketClient = new WebSocket(_this.uri); 2245 | _this.receivingMessageQueue = new Exports_8.Queue(); 2246 | _this.disconnectDeferral = new Exports_8.Deferred(); 2247 | _this.sendMessageQueue = new Exports_8.Queue(); 2248 | _this.ProcessSendQueue(); 2249 | _this.OnEvent(new Exports_8.ConnectionStartEvent(_this.connectionId, _this.uri)); 2250 | _this.websocketClient.onopen = function (e) { 2251 | _this.connectionState = Exports_8.ConnectionState.Connected; 2252 | _this.OnEvent(new Exports_8.ConnectionEstablishedEvent(_this.connectionId)); 2253 | _this.connectionEstablishDeferral.Resolve(new Exports_8.ConnectionOpenResponse(200, "")); 2254 | }; 2255 | _this.websocketClient.onerror = function (e) { 2256 | if (_this.connectionState !== Exports_8.ConnectionState.Connecting) { 2257 | } 2258 | }; 2259 | _this.websocketClient.onclose = function (e) { 2260 | if (_this.connectionState === Exports_8.ConnectionState.Connecting) { 2261 | _this.connectionState = Exports_8.ConnectionState.Disconnected; 2262 | _this.OnEvent(new Exports_8.ConnectionEstablishErrorEvent(_this.connectionId, e.code, e.reason)); 2263 | _this.connectionEstablishDeferral.Resolve(new Exports_8.ConnectionOpenResponse(e.code, e.reason)); 2264 | } 2265 | else { 2266 | _this.OnEvent(new Exports_8.ConnectionClosedEvent(_this.connectionId, e.code, e.reason)); 2267 | } 2268 | _this.OnClose(e.code, e.reason); 2269 | }; 2270 | _this.websocketClient.onmessage = function (e) { 2271 | var networkReceivedTime = new Date().toISOString(); 2272 | if (_this.connectionState === Exports_8.ConnectionState.Connected) { 2273 | var deferred_1 = new Exports_8.Deferred(); 2274 | _this.receivingMessageQueue.EnqueueFromPromise(deferred_1.Promise()); 2275 | if (e.data instanceof Blob) { 2276 | var fileReader_1 = new FileReader(); 2277 | fileReader_1.onload = function (le) { 2278 | var rawMessage = new Exports_8.RawWebsocketMessage(Exports_8.MessageType.Binary, fileReader_1.result); 2279 | _this.messageFormatter 2280 | .ToConnectionMessage(rawMessage) 2281 | .On(function (connectionMessage) { 2282 | _this.OnEvent(new Exports_8.ConnectionMessageReceivedEvent(_this.connectionId, networkReceivedTime, connectionMessage)); 2283 | deferred_1.Resolve(connectionMessage); 2284 | }, function (error) { 2285 | deferred_1.Reject("Invalid binary message format. Error: " + error); 2286 | }); 2287 | }; 2288 | fileReader_1.onerror = function (ev) { 2289 | deferred_1.Reject("Binary message parse error"); 2290 | }; 2291 | fileReader_1.readAsArrayBuffer(e.data); 2292 | } 2293 | else { 2294 | var rawMessage = new Exports_8.RawWebsocketMessage(Exports_8.MessageType.Text, e.data); 2295 | _this.messageFormatter 2296 | .ToConnectionMessage(rawMessage) 2297 | .On(function (connectionMessage) { 2298 | _this.OnEvent(new Exports_8.ConnectionMessageReceivedEvent(_this.connectionId, networkReceivedTime, connectionMessage)); 2299 | deferred_1.Resolve(connectionMessage); 2300 | }, function (error) { 2301 | deferred_1.Reject("Invalid text message format. Error: " + error); 2302 | }); 2303 | } 2304 | } 2305 | }; 2306 | return _this.connectionEstablishDeferral.Promise(); 2307 | }; 2308 | this.Send = function (message) { 2309 | if (_this.connectionState !== Exports_8.ConnectionState.Connected) { 2310 | return Exports_8.PromiseHelper.FromError("Cannot send on connection that is in " + _this.connectionState + " state"); 2311 | } 2312 | var messageSendStatusDeferral = new Exports_8.Deferred(); 2313 | var messageSendDeferral = new Exports_8.Deferred(); 2314 | _this.sendMessageQueue.EnqueueFromPromise(messageSendDeferral.Promise()); 2315 | _this.messageFormatter 2316 | .FromConnectionMessage(message) 2317 | .On(function (rawMessage) { 2318 | messageSendDeferral.Resolve({ 2319 | Message: message, 2320 | RawWebsocketMessage: rawMessage, 2321 | SendStatusDeferral: messageSendStatusDeferral, 2322 | }); 2323 | }, function (error) { 2324 | messageSendDeferral.Reject("Error formatting the message. " + error); 2325 | }); 2326 | return messageSendStatusDeferral.Promise(); 2327 | }; 2328 | this.Read = function () { 2329 | if (_this.connectionState !== Exports_8.ConnectionState.Connected) { 2330 | return Exports_8.PromiseHelper.FromError("Cannot read on connection that is in " + _this.connectionState + " state"); 2331 | } 2332 | return _this.receivingMessageQueue.Dequeue(); 2333 | }; 2334 | this.Close = function (reason) { 2335 | if (_this.websocketClient) { 2336 | if (_this.connectionState !== Exports_8.ConnectionState.Connected) { 2337 | _this.websocketClient.close(1000, reason ? reason : "Normal closure by client"); 2338 | } 2339 | } 2340 | else { 2341 | var deferral = new Exports_8.Deferred(); 2342 | deferral.Resolve(true); 2343 | return deferral.Promise(); 2344 | } 2345 | return _this.disconnectDeferral.Promise(); 2346 | }; 2347 | this.SendRawMessage = function (sendItem) { 2348 | try { 2349 | _this.OnEvent(new Exports_8.ConnectionMessageSentEvent(_this.connectionId, new Date().toISOString(), sendItem.Message)); 2350 | _this.websocketClient.send(sendItem.RawWebsocketMessage.Payload); 2351 | return Exports_8.PromiseHelper.FromResult(true); 2352 | } 2353 | catch (e) { 2354 | return Exports_8.PromiseHelper.FromError("websocket send error: " + e); 2355 | } 2356 | }; 2357 | this.OnClose = function (code, reason) { 2358 | var closeReason = "Connection closed. " + code + ": " + reason; 2359 | _this.connectionState = Exports_8.ConnectionState.Disconnected; 2360 | _this.disconnectDeferral.Resolve(true); 2361 | _this.receivingMessageQueue.Dispose(reason); 2362 | _this.receivingMessageQueue.DrainAndDispose(function (pendingReceiveItem) { 2363 | }, closeReason); 2364 | _this.sendMessageQueue.DrainAndDispose(function (pendingSendItem) { 2365 | pendingSendItem.SendStatusDeferral.Reject(closeReason); 2366 | }, closeReason); 2367 | }; 2368 | this.ProcessSendQueue = function () { 2369 | _this.sendMessageQueue 2370 | .Dequeue() 2371 | .On(function (sendItem) { 2372 | _this.SendRawMessage(sendItem) 2373 | .On(function (result) { 2374 | sendItem.SendStatusDeferral.Resolve(result); 2375 | _this.ProcessSendQueue(); 2376 | }, function (sendError) { 2377 | sendItem.SendStatusDeferral.Reject(sendError); 2378 | _this.ProcessSendQueue(); 2379 | }); 2380 | }, function (error) { 2381 | }); 2382 | }; 2383 | this.OnEvent = function (event) { 2384 | _this.connectionEvents.OnEvent(event); 2385 | Exports_8.Events.Instance.OnEvent(event); 2386 | }; 2387 | if (!uri) { 2388 | throw new Exports_8.ArgumentNullError("uri"); 2389 | } 2390 | if (!messageFormatter) { 2391 | throw new Exports_8.ArgumentNullError("messageFormatter"); 2392 | } 2393 | this.connectionEvents = new Exports_8.EventSource(); 2394 | this.connectionId = connectionId; 2395 | this.messageFormatter = messageFormatter; 2396 | this.connectionState = Exports_8.ConnectionState.None; 2397 | this.uri = uri; 2398 | } 2399 | Object.defineProperty(WebsocketMessageAdapter.prototype, "State", { 2400 | get: function () { 2401 | return this.connectionState; 2402 | }, 2403 | enumerable: true, 2404 | configurable: true 2405 | }); 2406 | Object.defineProperty(WebsocketMessageAdapter.prototype, "Events", { 2407 | get: function () { 2408 | return this.connectionEvents; 2409 | }, 2410 | enumerable: true, 2411 | configurable: true 2412 | }); 2413 | return WebsocketMessageAdapter; 2414 | }()); 2415 | exports.WebsocketMessageAdapter = WebsocketMessageAdapter; 2416 | }); 2417 | define("src/common.browser/WebsocketConnection", ["require", "exports", "src/common/Exports", "src/common.browser/WebsocketMessageAdapter"], function (require, exports, Exports_9, WebsocketMessageAdapter_1) { 2418 | "use strict"; 2419 | Object.defineProperty(exports, "__esModule", { value: true }); 2420 | var WebsocketConnection = (function () { 2421 | function WebsocketConnection(uri, queryParameters, headers, messageFormatter, connectionId) { 2422 | var _this = this; 2423 | this.isDisposed = false; 2424 | this.Dispose = function () { 2425 | _this.isDisposed = true; 2426 | if (_this.connectionMessageAdapter) { 2427 | _this.connectionMessageAdapter.Close(); 2428 | } 2429 | }; 2430 | this.IsDisposed = function () { 2431 | return _this.isDisposed; 2432 | }; 2433 | this.State = function () { 2434 | return _this.connectionMessageAdapter.State; 2435 | }; 2436 | this.Open = function () { 2437 | return _this.connectionMessageAdapter.Open(); 2438 | }; 2439 | this.Send = function (message) { 2440 | return _this.connectionMessageAdapter.Send(message); 2441 | }; 2442 | this.Read = function () { 2443 | return _this.connectionMessageAdapter.Read(); 2444 | }; 2445 | if (!uri) { 2446 | throw new Exports_9.ArgumentNullError("uri"); 2447 | } 2448 | if (!messageFormatter) { 2449 | throw new Exports_9.ArgumentNullError("messageFormatter"); 2450 | } 2451 | this.messageFormatter = messageFormatter; 2452 | var queryParams = ""; 2453 | var i = 0; 2454 | if (queryParameters) { 2455 | for (var paramName in queryParameters) { 2456 | if (paramName) { 2457 | queryParams += i === 0 ? "?" : "&"; 2458 | var val = encodeURIComponent(queryParameters[paramName]); 2459 | queryParams += paramName + "=" + val; 2460 | i++; 2461 | } 2462 | } 2463 | } 2464 | if (headers) { 2465 | for (var headerName in headers) { 2466 | if (headerName) { 2467 | queryParams += i === 0 ? "?" : "&"; 2468 | var val = encodeURIComponent(headers[headerName]); 2469 | queryParams += headerName + "=" + val; 2470 | i++; 2471 | } 2472 | } 2473 | } 2474 | this.uri = uri + queryParams; 2475 | this.id = connectionId ? connectionId : Exports_9.CreateNoDashGuid(); 2476 | this.connectionMessageAdapter = new WebsocketMessageAdapter_1.WebsocketMessageAdapter(this.uri, this.Id, this.messageFormatter); 2477 | } 2478 | Object.defineProperty(WebsocketConnection.prototype, "Id", { 2479 | get: function () { 2480 | return this.id; 2481 | }, 2482 | enumerable: true, 2483 | configurable: true 2484 | }); 2485 | Object.defineProperty(WebsocketConnection.prototype, "Events", { 2486 | get: function () { 2487 | return this.connectionMessageAdapter.Events; 2488 | }, 2489 | enumerable: true, 2490 | configurable: true 2491 | }); 2492 | return WebsocketConnection; 2493 | }()); 2494 | exports.WebsocketConnection = WebsocketConnection; 2495 | }); 2496 | define("src/common.browser/Exports", ["require", "exports", "src/common.browser/ConsoleLoggingListener", "src/common.browser/LocalStorage", "src/common.browser/MicAudioSource", "src/common.browser/FileAudioSource", "src/common.browser/OpusRecorder", "src/common.browser/PCMRecorder", "src/common.browser/SessionStorage", "src/common.browser/Timer", "src/common.browser/WebsocketConnection", "src/common.browser/WebsocketMessageAdapter"], function (require, exports, ConsoleLoggingListener_1, LocalStorage_1, MicAudioSource_1, FileAudioSource_1, OpusRecorder_1, PCMRecorder_1, SessionStorage_1, Timer_1, WebsocketConnection_1, WebsocketMessageAdapter_2) { 2497 | "use strict"; 2498 | function __export(m) { 2499 | for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; 2500 | } 2501 | Object.defineProperty(exports, "__esModule", { value: true }); 2502 | __export(ConsoleLoggingListener_1); 2503 | __export(LocalStorage_1); 2504 | __export(MicAudioSource_1); 2505 | __export(FileAudioSource_1); 2506 | __export(OpusRecorder_1); 2507 | __export(PCMRecorder_1); 2508 | __export(SessionStorage_1); 2509 | __export(Timer_1); 2510 | __export(WebsocketConnection_1); 2511 | __export(WebsocketMessageAdapter_2); 2512 | }); 2513 | define("src/sdk/speech/IAuthentication", ["require", "exports"], function (require, exports) { 2514 | "use strict"; 2515 | Object.defineProperty(exports, "__esModule", { value: true }); 2516 | var AuthInfo = (function () { 2517 | function AuthInfo(headerName, token) { 2518 | this.headerName = headerName; 2519 | this.token = token; 2520 | } 2521 | Object.defineProperty(AuthInfo.prototype, "HeaderName", { 2522 | get: function () { 2523 | return this.headerName; 2524 | }, 2525 | enumerable: true, 2526 | configurable: true 2527 | }); 2528 | Object.defineProperty(AuthInfo.prototype, "Token", { 2529 | get: function () { 2530 | return this.token; 2531 | }, 2532 | enumerable: true, 2533 | configurable: true 2534 | }); 2535 | return AuthInfo; 2536 | }()); 2537 | exports.AuthInfo = AuthInfo; 2538 | }); 2539 | define("src/sdk/speech/CognitiveSubscriptionKeyAuthentication", ["require", "exports", "src/common/Exports", "src/sdk/speech/IAuthentication"], function (require, exports, Exports_10, IAuthentication_1) { 2540 | "use strict"; 2541 | Object.defineProperty(exports, "__esModule", { value: true }); 2542 | var AuthHeader = "Ocp-Apim-Subscription-Key"; 2543 | var CognitiveSubscriptionKeyAuthentication = (function () { 2544 | function CognitiveSubscriptionKeyAuthentication(subscriptionKey) { 2545 | var _this = this; 2546 | this.Fetch = function (authFetchEventId) { 2547 | return Exports_10.PromiseHelper.FromResult(_this.authInfo); 2548 | }; 2549 | this.FetchOnExpiry = function (authFetchEventId) { 2550 | return Exports_10.PromiseHelper.FromResult(_this.authInfo); 2551 | }; 2552 | if (!subscriptionKey) { 2553 | throw new Exports_10.ArgumentNullError("subscriptionKey"); 2554 | } 2555 | this.authInfo = new IAuthentication_1.AuthInfo(AuthHeader, subscriptionKey); 2556 | } 2557 | return CognitiveSubscriptionKeyAuthentication; 2558 | }()); 2559 | exports.CognitiveSubscriptionKeyAuthentication = CognitiveSubscriptionKeyAuthentication; 2560 | }); 2561 | define("src/sdk/speech/CognitiveTokenAuthentication", ["require", "exports", "src/common/Exports", "src/sdk/speech/IAuthentication"], function (require, exports, Exports_11, IAuthentication_2) { 2562 | "use strict"; 2563 | Object.defineProperty(exports, "__esModule", { value: true }); 2564 | var AuthHeader = "Authorization"; 2565 | var CognitiveTokenAuthentication = (function () { 2566 | function CognitiveTokenAuthentication(fetchCallback, fetchOnExpiryCallback) { 2567 | var _this = this; 2568 | this.Fetch = function (authFetchEventId) { 2569 | return _this.fetchCallback(authFetchEventId).OnSuccessContinueWith(function (token) { return new IAuthentication_2.AuthInfo(AuthHeader, token); }); 2570 | }; 2571 | this.FetchOnExpiry = function (authFetchEventId) { 2572 | return _this.fetchOnExpiryCallback(authFetchEventId).OnSuccessContinueWith(function (token) { return new IAuthentication_2.AuthInfo(AuthHeader, token); }); 2573 | }; 2574 | if (!fetchCallback) { 2575 | throw new Exports_11.ArgumentNullError("fetchCallback"); 2576 | } 2577 | if (!fetchOnExpiryCallback) { 2578 | throw new Exports_11.ArgumentNullError("fetchOnExpiryCallback"); 2579 | } 2580 | this.fetchCallback = fetchCallback; 2581 | this.fetchOnExpiryCallback = fetchOnExpiryCallback; 2582 | } 2583 | return CognitiveTokenAuthentication; 2584 | }()); 2585 | exports.CognitiveTokenAuthentication = CognitiveTokenAuthentication; 2586 | }); 2587 | define("src/sdk/speech/RecognizerConfig", ["require", "exports"], function (require, exports) { 2588 | "use strict"; 2589 | Object.defineProperty(exports, "__esModule", { value: true }); 2590 | var RecognitionMode; 2591 | (function (RecognitionMode) { 2592 | RecognitionMode[RecognitionMode["Interactive"] = 0] = "Interactive"; 2593 | RecognitionMode[RecognitionMode["Conversation"] = 1] = "Conversation"; 2594 | RecognitionMode[RecognitionMode["Dictation"] = 2] = "Dictation"; 2595 | })(RecognitionMode = exports.RecognitionMode || (exports.RecognitionMode = {})); 2596 | var SpeechResultFormat; 2597 | (function (SpeechResultFormat) { 2598 | SpeechResultFormat[SpeechResultFormat["Simple"] = 0] = "Simple"; 2599 | SpeechResultFormat[SpeechResultFormat["Detailed"] = 1] = "Detailed"; 2600 | })(SpeechResultFormat = exports.SpeechResultFormat || (exports.SpeechResultFormat = {})); 2601 | var RecognizerConfig = (function () { 2602 | function RecognizerConfig(platformConfig, recognitionMode, language, format) { 2603 | if (recognitionMode === void 0) { recognitionMode = RecognitionMode.Interactive; } 2604 | if (language === void 0) { language = "en-us"; } 2605 | if (format === void 0) { format = SpeechResultFormat.Simple; } 2606 | this.recognitionMode = RecognitionMode.Interactive; 2607 | this.speechConfig = platformConfig ? platformConfig : new SpeechConfig(new Context(null, null)); 2608 | this.recognitionMode = recognitionMode; 2609 | this.language = language; 2610 | this.format = format; 2611 | this.recognitionActivityTimeout = recognitionMode === RecognitionMode.Interactive ? 8000 : 25000; 2612 | } 2613 | Object.defineProperty(RecognizerConfig.prototype, "RecognitionMode", { 2614 | get: function () { 2615 | return this.recognitionMode; 2616 | }, 2617 | enumerable: true, 2618 | configurable: true 2619 | }); 2620 | Object.defineProperty(RecognizerConfig.prototype, "Language", { 2621 | get: function () { 2622 | return this.language; 2623 | }, 2624 | enumerable: true, 2625 | configurable: true 2626 | }); 2627 | Object.defineProperty(RecognizerConfig.prototype, "Format", { 2628 | get: function () { 2629 | return this.format; 2630 | }, 2631 | enumerable: true, 2632 | configurable: true 2633 | }); 2634 | Object.defineProperty(RecognizerConfig.prototype, "SpeechConfig", { 2635 | get: function () { 2636 | return this.speechConfig; 2637 | }, 2638 | enumerable: true, 2639 | configurable: true 2640 | }); 2641 | Object.defineProperty(RecognizerConfig.prototype, "RecognitionActivityTimeout", { 2642 | get: function () { 2643 | return this.recognitionActivityTimeout; 2644 | }, 2645 | enumerable: true, 2646 | configurable: true 2647 | }); 2648 | Object.defineProperty(RecognizerConfig.prototype, "IsContinuousRecognition", { 2649 | get: function () { 2650 | return this.recognitionMode !== RecognitionMode.Interactive; 2651 | }, 2652 | enumerable: true, 2653 | configurable: true 2654 | }); 2655 | return RecognizerConfig; 2656 | }()); 2657 | exports.RecognizerConfig = RecognizerConfig; 2658 | var SpeechConfig = (function () { 2659 | function SpeechConfig(context) { 2660 | var _this = this; 2661 | this.Serialize = function () { 2662 | return JSON.stringify(_this, function (key, value) { 2663 | if (value && typeof value === "object") { 2664 | var replacement = {}; 2665 | for (var k in value) { 2666 | if (Object.hasOwnProperty.call(value, k)) { 2667 | replacement[k && k.charAt(0).toLowerCase() + k.substring(1)] = value[k]; 2668 | } 2669 | } 2670 | return replacement; 2671 | } 2672 | return value; 2673 | }); 2674 | }; 2675 | this.context = context; 2676 | } 2677 | Object.defineProperty(SpeechConfig.prototype, "Context", { 2678 | get: function () { 2679 | return this.context; 2680 | }, 2681 | enumerable: true, 2682 | configurable: true 2683 | }); 2684 | return SpeechConfig; 2685 | }()); 2686 | exports.SpeechConfig = SpeechConfig; 2687 | var Context = (function () { 2688 | function Context(os, device) { 2689 | this.system = new System(); 2690 | this.os = os; 2691 | this.device = device; 2692 | } 2693 | Object.defineProperty(Context.prototype, "System", { 2694 | get: function () { 2695 | return this.system; 2696 | }, 2697 | enumerable: true, 2698 | configurable: true 2699 | }); 2700 | Object.defineProperty(Context.prototype, "OS", { 2701 | get: function () { 2702 | return this.os; 2703 | }, 2704 | enumerable: true, 2705 | configurable: true 2706 | }); 2707 | Object.defineProperty(Context.prototype, "Device", { 2708 | get: function () { 2709 | return this.device; 2710 | }, 2711 | enumerable: true, 2712 | configurable: true 2713 | }); 2714 | return Context; 2715 | }()); 2716 | exports.Context = Context; 2717 | var System = (function () { 2718 | function System() { 2719 | this.version = "1.0.00000"; 2720 | } 2721 | Object.defineProperty(System.prototype, "Version", { 2722 | get: function () { 2723 | return this.version; 2724 | }, 2725 | enumerable: true, 2726 | configurable: true 2727 | }); 2728 | return System; 2729 | }()); 2730 | exports.System = System; 2731 | var OS = (function () { 2732 | function OS(platform, name, version) { 2733 | this.platform = platform; 2734 | this.name = name; 2735 | this.version = version; 2736 | } 2737 | Object.defineProperty(OS.prototype, "Platform", { 2738 | get: function () { 2739 | return this.platform; 2740 | }, 2741 | enumerable: true, 2742 | configurable: true 2743 | }); 2744 | Object.defineProperty(OS.prototype, "Name", { 2745 | get: function () { 2746 | return this.name; 2747 | }, 2748 | enumerable: true, 2749 | configurable: true 2750 | }); 2751 | Object.defineProperty(OS.prototype, "Version", { 2752 | get: function () { 2753 | return this.version; 2754 | }, 2755 | enumerable: true, 2756 | configurable: true 2757 | }); 2758 | return OS; 2759 | }()); 2760 | exports.OS = OS; 2761 | var Device = (function () { 2762 | function Device(manufacturer, model, version) { 2763 | this.manufacturer = manufacturer; 2764 | this.model = model; 2765 | this.version = version; 2766 | } 2767 | Object.defineProperty(Device.prototype, "Manufacturer", { 2768 | get: function () { 2769 | return this.manufacturer; 2770 | }, 2771 | enumerable: true, 2772 | configurable: true 2773 | }); 2774 | Object.defineProperty(Device.prototype, "Model", { 2775 | get: function () { 2776 | return this.model; 2777 | }, 2778 | enumerable: true, 2779 | configurable: true 2780 | }); 2781 | Object.defineProperty(Device.prototype, "Version", { 2782 | get: function () { 2783 | return this.version; 2784 | }, 2785 | enumerable: true, 2786 | configurable: true 2787 | }); 2788 | return Device; 2789 | }()); 2790 | exports.Device = Device; 2791 | }); 2792 | define("src/sdk/speech/IConnectionFactory", ["require", "exports"], function (require, exports) { 2793 | "use strict"; 2794 | Object.defineProperty(exports, "__esModule", { value: true }); 2795 | }); 2796 | define("src/sdk/speech/SpeechResults", ["require", "exports"], function (require, exports) { 2797 | "use strict"; 2798 | Object.defineProperty(exports, "__esModule", { value: true }); 2799 | var RecognitionStatus; 2800 | (function (RecognitionStatus) { 2801 | RecognitionStatus[RecognitionStatus["Success"] = 0] = "Success"; 2802 | RecognitionStatus[RecognitionStatus["NoMatch"] = 1] = "NoMatch"; 2803 | RecognitionStatus[RecognitionStatus["InitialSilenceTimeout"] = 2] = "InitialSilenceTimeout"; 2804 | RecognitionStatus[RecognitionStatus["BabbleTimeout"] = 3] = "BabbleTimeout"; 2805 | RecognitionStatus[RecognitionStatus["Error"] = 4] = "Error"; 2806 | RecognitionStatus[RecognitionStatus["EndOfDictation"] = 5] = "EndOfDictation"; 2807 | })(RecognitionStatus = exports.RecognitionStatus || (exports.RecognitionStatus = {})); 2808 | }); 2809 | define("src/sdk/speech/RecognitionEvents", ["require", "exports", "src/common/Exports"], function (require, exports, Exports_12) { 2810 | "use strict"; 2811 | Object.defineProperty(exports, "__esModule", { value: true }); 2812 | var SpeechRecognitionEvent = (function (_super) { 2813 | __extends(SpeechRecognitionEvent, _super); 2814 | function SpeechRecognitionEvent(eventName, requestId, eventType) { 2815 | if (eventType === void 0) { eventType = Exports_12.EventType.Info; } 2816 | var _this = _super.call(this, eventName, eventType) || this; 2817 | _this.requestId = requestId; 2818 | return _this; 2819 | } 2820 | Object.defineProperty(SpeechRecognitionEvent.prototype, "RequestId", { 2821 | get: function () { 2822 | return this.requestId; 2823 | }, 2824 | enumerable: true, 2825 | configurable: true 2826 | }); 2827 | return SpeechRecognitionEvent; 2828 | }(Exports_12.PlatformEvent)); 2829 | exports.SpeechRecognitionEvent = SpeechRecognitionEvent; 2830 | var SpeechRecognitionResultEvent = (function (_super) { 2831 | __extends(SpeechRecognitionResultEvent, _super); 2832 | function SpeechRecognitionResultEvent(eventName, requestId, result) { 2833 | var _this = _super.call(this, eventName, requestId) || this; 2834 | _this.result = result; 2835 | return _this; 2836 | } 2837 | Object.defineProperty(SpeechRecognitionResultEvent.prototype, "Result", { 2838 | get: function () { 2839 | return this.result; 2840 | }, 2841 | enumerable: true, 2842 | configurable: true 2843 | }); 2844 | return SpeechRecognitionResultEvent; 2845 | }(SpeechRecognitionEvent)); 2846 | exports.SpeechRecognitionResultEvent = SpeechRecognitionResultEvent; 2847 | var RecognitionTriggeredEvent = (function (_super) { 2848 | __extends(RecognitionTriggeredEvent, _super); 2849 | function RecognitionTriggeredEvent(requestId, audioSourceId, audioNodeId) { 2850 | var _this = _super.call(this, "RecognitionTriggeredEvent", requestId) || this; 2851 | _this.audioSourceId = audioSourceId; 2852 | _this.audioNodeId = audioNodeId; 2853 | return _this; 2854 | } 2855 | Object.defineProperty(RecognitionTriggeredEvent.prototype, "AudioSourceId", { 2856 | get: function () { 2857 | return this.audioSourceId; 2858 | }, 2859 | enumerable: true, 2860 | configurable: true 2861 | }); 2862 | Object.defineProperty(RecognitionTriggeredEvent.prototype, "AudioNodeId", { 2863 | get: function () { 2864 | return this.audioNodeId; 2865 | }, 2866 | enumerable: true, 2867 | configurable: true 2868 | }); 2869 | return RecognitionTriggeredEvent; 2870 | }(SpeechRecognitionEvent)); 2871 | exports.RecognitionTriggeredEvent = RecognitionTriggeredEvent; 2872 | var ListeningStartedEvent = (function (_super) { 2873 | __extends(ListeningStartedEvent, _super); 2874 | function ListeningStartedEvent(requestId, audioSourceId, audioNodeId) { 2875 | var _this = _super.call(this, "ListeningStartedEvent", requestId) || this; 2876 | _this.audioSourceId = audioSourceId; 2877 | _this.audioNodeId = audioNodeId; 2878 | return _this; 2879 | } 2880 | Object.defineProperty(ListeningStartedEvent.prototype, "AudioSourceId", { 2881 | get: function () { 2882 | return this.audioSourceId; 2883 | }, 2884 | enumerable: true, 2885 | configurable: true 2886 | }); 2887 | Object.defineProperty(ListeningStartedEvent.prototype, "AudioNodeId", { 2888 | get: function () { 2889 | return this.audioNodeId; 2890 | }, 2891 | enumerable: true, 2892 | configurable: true 2893 | }); 2894 | return ListeningStartedEvent; 2895 | }(SpeechRecognitionEvent)); 2896 | exports.ListeningStartedEvent = ListeningStartedEvent; 2897 | var ConnectingToServiceEvent = (function (_super) { 2898 | __extends(ConnectingToServiceEvent, _super); 2899 | function ConnectingToServiceEvent(requestId, authFetchEventid, connectionId) { 2900 | var _this = _super.call(this, "ConnectingToServiceEvent", requestId) || this; 2901 | _this.authFetchEventid = authFetchEventid; 2902 | _this.connectionId = connectionId; 2903 | return _this; 2904 | } 2905 | Object.defineProperty(ConnectingToServiceEvent.prototype, "AuthFetchEventid", { 2906 | get: function () { 2907 | return this.authFetchEventid; 2908 | }, 2909 | enumerable: true, 2910 | configurable: true 2911 | }); 2912 | Object.defineProperty(ConnectingToServiceEvent.prototype, "ConnectionId", { 2913 | get: function () { 2914 | return this.connectionId; 2915 | }, 2916 | enumerable: true, 2917 | configurable: true 2918 | }); 2919 | return ConnectingToServiceEvent; 2920 | }(SpeechRecognitionEvent)); 2921 | exports.ConnectingToServiceEvent = ConnectingToServiceEvent; 2922 | var RecognitionStartedEvent = (function (_super) { 2923 | __extends(RecognitionStartedEvent, _super); 2924 | function RecognitionStartedEvent(requestId, audioSourceId, audioNodeId, authFetchEventId, connectionId) { 2925 | var _this = _super.call(this, "RecognitionStartedEvent", requestId) || this; 2926 | _this.audioSourceId = audioSourceId; 2927 | _this.audioNodeId = audioNodeId; 2928 | _this.authFetchEventId = authFetchEventId; 2929 | _this.connectionId = connectionId; 2930 | return _this; 2931 | } 2932 | Object.defineProperty(RecognitionStartedEvent.prototype, "AudioSourceId", { 2933 | get: function () { 2934 | return this.audioSourceId; 2935 | }, 2936 | enumerable: true, 2937 | configurable: true 2938 | }); 2939 | Object.defineProperty(RecognitionStartedEvent.prototype, "AudioNodeId", { 2940 | get: function () { 2941 | return this.audioNodeId; 2942 | }, 2943 | enumerable: true, 2944 | configurable: true 2945 | }); 2946 | Object.defineProperty(RecognitionStartedEvent.prototype, "AuthFetchEventId", { 2947 | get: function () { 2948 | return this.authFetchEventId; 2949 | }, 2950 | enumerable: true, 2951 | configurable: true 2952 | }); 2953 | Object.defineProperty(RecognitionStartedEvent.prototype, "ConnectionId", { 2954 | get: function () { 2955 | return this.connectionId; 2956 | }, 2957 | enumerable: true, 2958 | configurable: true 2959 | }); 2960 | return RecognitionStartedEvent; 2961 | }(SpeechRecognitionEvent)); 2962 | exports.RecognitionStartedEvent = RecognitionStartedEvent; 2963 | var SpeechStartDetectedEvent = (function (_super) { 2964 | __extends(SpeechStartDetectedEvent, _super); 2965 | function SpeechStartDetectedEvent(requestId, result) { 2966 | return _super.call(this, "SpeechStartDetectedEvent", requestId, result) || this; 2967 | } 2968 | return SpeechStartDetectedEvent; 2969 | }(SpeechRecognitionResultEvent)); 2970 | exports.SpeechStartDetectedEvent = SpeechStartDetectedEvent; 2971 | var SpeechHypothesisEvent = (function (_super) { 2972 | __extends(SpeechHypothesisEvent, _super); 2973 | function SpeechHypothesisEvent(requestId, result) { 2974 | return _super.call(this, "SpeechHypothesisEvent", requestId, result) || this; 2975 | } 2976 | return SpeechHypothesisEvent; 2977 | }(SpeechRecognitionResultEvent)); 2978 | exports.SpeechHypothesisEvent = SpeechHypothesisEvent; 2979 | var SpeechFragmentEvent = (function (_super) { 2980 | __extends(SpeechFragmentEvent, _super); 2981 | function SpeechFragmentEvent(requestId, result) { 2982 | return _super.call(this, "SpeechFragmentEvent", requestId, result) || this; 2983 | } 2984 | return SpeechFragmentEvent; 2985 | }(SpeechRecognitionResultEvent)); 2986 | exports.SpeechFragmentEvent = SpeechFragmentEvent; 2987 | var SpeechEndDetectedEvent = (function (_super) { 2988 | __extends(SpeechEndDetectedEvent, _super); 2989 | function SpeechEndDetectedEvent(requestId, result) { 2990 | return _super.call(this, "SpeechEndDetectedEvent", requestId, result) || this; 2991 | } 2992 | return SpeechEndDetectedEvent; 2993 | }(SpeechRecognitionResultEvent)); 2994 | exports.SpeechEndDetectedEvent = SpeechEndDetectedEvent; 2995 | var SpeechSimplePhraseEvent = (function (_super) { 2996 | __extends(SpeechSimplePhraseEvent, _super); 2997 | function SpeechSimplePhraseEvent(requestId, result) { 2998 | return _super.call(this, "SpeechSimplePhraseEvent", requestId, result) || this; 2999 | } 3000 | return SpeechSimplePhraseEvent; 3001 | }(SpeechRecognitionResultEvent)); 3002 | exports.SpeechSimplePhraseEvent = SpeechSimplePhraseEvent; 3003 | var SpeechDetailedPhraseEvent = (function (_super) { 3004 | __extends(SpeechDetailedPhraseEvent, _super); 3005 | function SpeechDetailedPhraseEvent(requestId, result) { 3006 | return _super.call(this, "SpeechDetailedPhraseEvent", requestId, result) || this; 3007 | } 3008 | return SpeechDetailedPhraseEvent; 3009 | }(SpeechRecognitionResultEvent)); 3010 | exports.SpeechDetailedPhraseEvent = SpeechDetailedPhraseEvent; 3011 | var RecognitionCompletionStatus; 3012 | (function (RecognitionCompletionStatus) { 3013 | RecognitionCompletionStatus[RecognitionCompletionStatus["Success"] = 0] = "Success"; 3014 | RecognitionCompletionStatus[RecognitionCompletionStatus["AudioSourceError"] = 1] = "AudioSourceError"; 3015 | RecognitionCompletionStatus[RecognitionCompletionStatus["AudioSourceTimeout"] = 2] = "AudioSourceTimeout"; 3016 | RecognitionCompletionStatus[RecognitionCompletionStatus["AuthTokenFetchError"] = 3] = "AuthTokenFetchError"; 3017 | RecognitionCompletionStatus[RecognitionCompletionStatus["AuthTokenFetchTimeout"] = 4] = "AuthTokenFetchTimeout"; 3018 | RecognitionCompletionStatus[RecognitionCompletionStatus["UnAuthorized"] = 5] = "UnAuthorized"; 3019 | RecognitionCompletionStatus[RecognitionCompletionStatus["ConnectTimeout"] = 6] = "ConnectTimeout"; 3020 | RecognitionCompletionStatus[RecognitionCompletionStatus["ConnectError"] = 7] = "ConnectError"; 3021 | RecognitionCompletionStatus[RecognitionCompletionStatus["ClientRecognitionActivityTimeout"] = 8] = "ClientRecognitionActivityTimeout"; 3022 | RecognitionCompletionStatus[RecognitionCompletionStatus["UnknownError"] = 9] = "UnknownError"; 3023 | })(RecognitionCompletionStatus = exports.RecognitionCompletionStatus || (exports.RecognitionCompletionStatus = {})); 3024 | var RecognitionEndedEvent = (function (_super) { 3025 | __extends(RecognitionEndedEvent, _super); 3026 | function RecognitionEndedEvent(requestId, audioSourceId, audioNodeId, authFetchEventId, connectionId, serviceTag, status, error) { 3027 | var _this = _super.call(this, "RecognitionEndedEvent", requestId, status === RecognitionCompletionStatus.Success ? Exports_12.EventType.Info : Exports_12.EventType.Error) || this; 3028 | _this.audioSourceId = audioSourceId; 3029 | _this.audioNodeId = audioNodeId; 3030 | _this.connectionId = connectionId; 3031 | _this.authFetchEventId = authFetchEventId; 3032 | _this.status = status; 3033 | _this.error = error; 3034 | _this.serviceTag = serviceTag; 3035 | return _this; 3036 | } 3037 | Object.defineProperty(RecognitionEndedEvent.prototype, "AudioSourceId", { 3038 | get: function () { 3039 | return this.audioSourceId; 3040 | }, 3041 | enumerable: true, 3042 | configurable: true 3043 | }); 3044 | Object.defineProperty(RecognitionEndedEvent.prototype, "AudioNodeId", { 3045 | get: function () { 3046 | return this.audioNodeId; 3047 | }, 3048 | enumerable: true, 3049 | configurable: true 3050 | }); 3051 | Object.defineProperty(RecognitionEndedEvent.prototype, "AuthFetchEventId", { 3052 | get: function () { 3053 | return this.authFetchEventId; 3054 | }, 3055 | enumerable: true, 3056 | configurable: true 3057 | }); 3058 | Object.defineProperty(RecognitionEndedEvent.prototype, "ConnectionId", { 3059 | get: function () { 3060 | return this.connectionId; 3061 | }, 3062 | enumerable: true, 3063 | configurable: true 3064 | }); 3065 | Object.defineProperty(RecognitionEndedEvent.prototype, "ServiceTag", { 3066 | get: function () { 3067 | return this.serviceTag; 3068 | }, 3069 | enumerable: true, 3070 | configurable: true 3071 | }); 3072 | Object.defineProperty(RecognitionEndedEvent.prototype, "Status", { 3073 | get: function () { 3074 | return this.status; 3075 | }, 3076 | enumerable: true, 3077 | configurable: true 3078 | }); 3079 | Object.defineProperty(RecognitionEndedEvent.prototype, "Error", { 3080 | get: function () { 3081 | return this.error; 3082 | }, 3083 | enumerable: true, 3084 | configurable: true 3085 | }); 3086 | return RecognitionEndedEvent; 3087 | }(SpeechRecognitionEvent)); 3088 | exports.RecognitionEndedEvent = RecognitionEndedEvent; 3089 | }); 3090 | define("src/sdk/speech/ServiceTelemetryListener.Internal", ["require", "exports", "src/common/Exports", "src/sdk/speech/RecognitionEvents"], function (require, exports, Exports_13, RecognitionEvents_1) { 3091 | "use strict"; 3092 | Object.defineProperty(exports, "__esModule", { value: true }); 3093 | var ServiceTelemetryListener = (function () { 3094 | function ServiceTelemetryListener(requestId, audioSourceId, audioNodeId) { 3095 | var _this = this; 3096 | this.isDisposed = false; 3097 | this.listeningTriggerMetric = null; 3098 | this.micMetric = null; 3099 | this.connectionEstablishMetric = null; 3100 | this.OnEvent = function (e) { 3101 | if (_this.isDisposed) { 3102 | return; 3103 | } 3104 | if (e instanceof RecognitionEvents_1.RecognitionTriggeredEvent && e.RequestId === _this.requestId) { 3105 | _this.listeningTriggerMetric = { 3106 | End: e.EventTime, 3107 | Name: "ListeningTrigger", 3108 | Start: e.EventTime, 3109 | }; 3110 | } 3111 | if (e instanceof Exports_13.AudioStreamNodeAttachingEvent && e.AudioSourceId === _this.audioSourceId && e.AudioNodeId === _this.audioNodeId) { 3112 | _this.micStartTime = e.EventTime; 3113 | } 3114 | if (e instanceof Exports_13.AudioStreamNodeAttachedEvent && e.AudioSourceId === _this.audioSourceId && e.AudioNodeId === _this.audioNodeId) { 3115 | _this.micStartTime = e.EventTime; 3116 | } 3117 | if (e instanceof Exports_13.AudioSourceErrorEvent && e.AudioSourceId === _this.audioSourceId) { 3118 | if (!_this.micMetric) { 3119 | _this.micMetric = { 3120 | End: e.EventTime, 3121 | Error: e.Error, 3122 | Name: "Microphone", 3123 | Start: _this.micStartTime, 3124 | }; 3125 | } 3126 | } 3127 | if (e instanceof Exports_13.AudioStreamNodeErrorEvent && e.AudioSourceId === _this.audioSourceId && e.AudioNodeId === _this.audioNodeId) { 3128 | if (!_this.micMetric) { 3129 | _this.micMetric = { 3130 | End: e.EventTime, 3131 | Error: e.Error, 3132 | Name: "Microphone", 3133 | Start: _this.micStartTime, 3134 | }; 3135 | } 3136 | } 3137 | if (e instanceof Exports_13.AudioStreamNodeDetachedEvent && e.AudioSourceId === _this.audioSourceId && e.AudioNodeId === _this.audioNodeId) { 3138 | if (!_this.micMetric) { 3139 | _this.micMetric = { 3140 | End: e.EventTime, 3141 | Name: "Microphone", 3142 | Start: _this.micStartTime, 3143 | }; 3144 | } 3145 | } 3146 | if (e instanceof RecognitionEvents_1.ConnectingToServiceEvent && e.RequestId === _this.requestId) { 3147 | _this.connectionId = e.ConnectionId; 3148 | } 3149 | if (e instanceof Exports_13.ConnectionStartEvent && e.ConnectionId === _this.connectionId) { 3150 | _this.connectionStartTime = e.EventTime; 3151 | } 3152 | if (e instanceof Exports_13.ConnectionEstablishedEvent && e.ConnectionId === _this.connectionId) { 3153 | if (!_this.connectionEstablishMetric) { 3154 | _this.connectionEstablishMetric = { 3155 | End: e.EventTime, 3156 | Id: _this.connectionId, 3157 | Name: "Connection", 3158 | Start: _this.connectionStartTime, 3159 | }; 3160 | } 3161 | } 3162 | if (e instanceof Exports_13.ConnectionEstablishErrorEvent && e.ConnectionId === _this.connectionId) { 3163 | if (!_this.connectionEstablishMetric) { 3164 | _this.connectionEstablishMetric = { 3165 | End: e.EventTime, 3166 | Error: _this.GetConnectionError(e.StatusCode), 3167 | Id: _this.connectionId, 3168 | Name: "Connection", 3169 | Start: _this.connectionStartTime, 3170 | }; 3171 | } 3172 | } 3173 | if (e instanceof Exports_13.ConnectionMessageReceivedEvent && e.ConnectionId === _this.connectionId) { 3174 | if (e.Message && e.Message.Headers && e.Message.Headers.path) { 3175 | if (!_this.receivedMessages[e.Message.Headers.path]) { 3176 | _this.receivedMessages[e.Message.Headers.path] = new Array(); 3177 | } 3178 | _this.receivedMessages[e.Message.Headers.path].push(e.NetworkReceivedTime); 3179 | } 3180 | } 3181 | }; 3182 | this.GetTelemetry = function () { 3183 | var metrics = new Array(); 3184 | if (_this.listeningTriggerMetric) { 3185 | metrics.push(_this.listeningTriggerMetric); 3186 | } 3187 | if (_this.micMetric) { 3188 | metrics.push(_this.micMetric); 3189 | } 3190 | if (_this.connectionEstablishMetric) { 3191 | metrics.push(_this.connectionEstablishMetric); 3192 | } 3193 | var telemetry = { 3194 | Metrics: metrics, 3195 | ReceivedMessages: _this.receivedMessages, 3196 | }; 3197 | var json = JSON.stringify(telemetry); 3198 | _this.receivedMessages = {}; 3199 | _this.listeningTriggerMetric = null; 3200 | _this.micMetric = null; 3201 | _this.connectionEstablishMetric = null; 3202 | return json; 3203 | }; 3204 | this.Dispose = function () { 3205 | _this.isDisposed = true; 3206 | }; 3207 | this.GetConnectionError = function (statusCode) { 3208 | switch (statusCode) { 3209 | case 400: 3210 | case 1002: 3211 | case 1003: 3212 | case 1005: 3213 | case 1007: 3214 | case 1008: 3215 | case 1009: return "BadRequest"; 3216 | case 401: return "Unauthorized"; 3217 | case 403: return "Forbidden"; 3218 | case 503: 3219 | case 1001: return "ServerUnavailable"; 3220 | case 500: 3221 | case 1011: return "ServerError"; 3222 | case 408: 3223 | case 504: return "Timeout"; 3224 | default: return "statuscode:" + statusCode.toString(); 3225 | } 3226 | }; 3227 | this.requestId = requestId; 3228 | this.audioSourceId = audioSourceId; 3229 | this.audioNodeId = audioNodeId; 3230 | this.receivedMessages = {}; 3231 | } 3232 | return ServiceTelemetryListener; 3233 | }()); 3234 | exports.ServiceTelemetryListener = ServiceTelemetryListener; 3235 | }); 3236 | define("src/sdk/speech/SpeechConnectionMessage.Internal", ["require", "exports", "src/common/Exports"], function (require, exports, Exports_14) { 3237 | "use strict"; 3238 | Object.defineProperty(exports, "__esModule", { value: true }); 3239 | var PathHeaderName = "path"; 3240 | var ContentTypeHeaderName = "content-type"; 3241 | var RequestIdHeaderName = "x-requestid"; 3242 | var RequestTimestampHeaderName = "x-timestamp"; 3243 | var SpeechConnectionMessage = (function (_super) { 3244 | __extends(SpeechConnectionMessage, _super); 3245 | function SpeechConnectionMessage(messageType, path, requestId, contentType, body, additionalHeaders, id) { 3246 | var _this = this; 3247 | if (!path) { 3248 | throw new Exports_14.ArgumentNullError("path"); 3249 | } 3250 | if (!requestId) { 3251 | throw new Exports_14.ArgumentNullError("requestId"); 3252 | } 3253 | var headers = {}; 3254 | headers[PathHeaderName] = path; 3255 | headers[RequestIdHeaderName] = requestId; 3256 | headers[RequestTimestampHeaderName] = new Date().toISOString(); 3257 | if (contentType) { 3258 | headers[ContentTypeHeaderName] = contentType; 3259 | } 3260 | if (additionalHeaders) { 3261 | for (var headerName in additionalHeaders) { 3262 | if (headerName) { 3263 | headers[headerName] = additionalHeaders[headerName]; 3264 | } 3265 | } 3266 | } 3267 | if (id) { 3268 | _this = _super.call(this, messageType, body, headers, id) || this; 3269 | } 3270 | else { 3271 | _this = _super.call(this, messageType, body, headers) || this; 3272 | } 3273 | _this.path = path; 3274 | _this.requestId = requestId; 3275 | _this.contentType = contentType; 3276 | _this.additionalHeaders = additionalHeaders; 3277 | return _this; 3278 | } 3279 | Object.defineProperty(SpeechConnectionMessage.prototype, "Path", { 3280 | get: function () { 3281 | return this.path; 3282 | }, 3283 | enumerable: true, 3284 | configurable: true 3285 | }); 3286 | Object.defineProperty(SpeechConnectionMessage.prototype, "RequestId", { 3287 | get: function () { 3288 | return this.requestId; 3289 | }, 3290 | enumerable: true, 3291 | configurable: true 3292 | }); 3293 | Object.defineProperty(SpeechConnectionMessage.prototype, "ContentType", { 3294 | get: function () { 3295 | return this.contentType; 3296 | }, 3297 | enumerable: true, 3298 | configurable: true 3299 | }); 3300 | Object.defineProperty(SpeechConnectionMessage.prototype, "AdditionalHeaders", { 3301 | get: function () { 3302 | return this.additionalHeaders; 3303 | }, 3304 | enumerable: true, 3305 | configurable: true 3306 | }); 3307 | SpeechConnectionMessage.FromConnectionMessage = function (message) { 3308 | var path = null; 3309 | var requestId = null; 3310 | var contentType = null; 3311 | var requestTimestamp = null; 3312 | var additionalHeaders = {}; 3313 | if (message.Headers) { 3314 | for (var headerName in message.Headers) { 3315 | if (headerName) { 3316 | if (headerName.toLowerCase() === PathHeaderName.toLowerCase()) { 3317 | path = message.Headers[headerName]; 3318 | } 3319 | else if (headerName.toLowerCase() === RequestIdHeaderName.toLowerCase()) { 3320 | requestId = message.Headers[headerName]; 3321 | } 3322 | else if (headerName.toLowerCase() === RequestTimestampHeaderName.toLowerCase()) { 3323 | requestTimestamp = message.Headers[headerName]; 3324 | } 3325 | else if (headerName.toLowerCase() === ContentTypeHeaderName.toLowerCase()) { 3326 | contentType = message.Headers[headerName]; 3327 | } 3328 | else { 3329 | additionalHeaders[headerName] = message.Headers[headerName]; 3330 | } 3331 | } 3332 | } 3333 | } 3334 | return new SpeechConnectionMessage(message.MessageType, path, requestId, contentType, message.Body, additionalHeaders, message.Id); 3335 | }; 3336 | return SpeechConnectionMessage; 3337 | }(Exports_14.ConnectionMessage)); 3338 | exports.SpeechConnectionMessage = SpeechConnectionMessage; 3339 | }); 3340 | define("src/sdk/speech/Recognizer", ["require", "exports", "src/common/Exports", "src/sdk/speech/RecognitionEvents", "src/sdk/speech/RecognizerConfig", "src/sdk/speech/ServiceTelemetryListener.Internal", "src/sdk/speech/SpeechConnectionMessage.Internal"], function (require, exports, Exports_15, RecognitionEvents_2, RecognizerConfig_1, ServiceTelemetryListener_Internal_1, SpeechConnectionMessage_Internal_1) { 3341 | "use strict"; 3342 | Object.defineProperty(exports, "__esModule", { value: true }); 3343 | var Recognizer = (function () { 3344 | function Recognizer(authentication, connectionFactory, audioSource, recognizerConfig) { 3345 | var _this = this; 3346 | this.Recognize = function (onEventCallback, speechContextJson) { 3347 | var requestSession = new RequestSession(_this.audioSource.Id(), onEventCallback); 3348 | requestSession.ListenForServiceTelemetry(_this.audioSource.Events); 3349 | return _this.audioSource 3350 | .Attach(requestSession.AudioNodeId) 3351 | .ContinueWithPromise(function (result) { 3352 | if (result.IsError) { 3353 | requestSession.OnAudioSourceAttachCompleted(null, true, result.Error); 3354 | throw new Error(result.Error); 3355 | } 3356 | else { 3357 | requestSession.OnAudioSourceAttachCompleted(result.Result, false); 3358 | } 3359 | var audioNode = result.Result; 3360 | _this.FetchConnection(requestSession) 3361 | .OnSuccessContinueWith(function (connection) { 3362 | var messageRetrievalPromise = _this.ReceiveMessage(connection, requestSession); 3363 | var messageSendPromise = _this.SendSpeechConfig(requestSession.RequestId, connection, _this.recognizerConfig.SpeechConfig.Serialize()) 3364 | .OnSuccessContinueWithPromise(function (_) { 3365 | return _this.SendSpeechContext(requestSession.RequestId, connection, speechContextJson) 3366 | .OnSuccessContinueWithPromise(function (_) { 3367 | return _this.SendAudio(requestSession.RequestId, connection, audioNode, requestSession); 3368 | }); 3369 | }); 3370 | var completionPromise = Exports_15.PromiseHelper.WhenAll([messageRetrievalPromise, messageSendPromise]); 3371 | completionPromise.On(function (r) { 3372 | requestSession.Dispose(); 3373 | _this.SendTelemetryData(requestSession.RequestId, connection, requestSession.GetTelemetry()); 3374 | }, function (error) { 3375 | requestSession.Dispose(error); 3376 | _this.SendTelemetryData(requestSession.RequestId, connection, requestSession.GetTelemetry()); 3377 | }); 3378 | return completionPromise; 3379 | }); 3380 | return requestSession.CompletionPromise; 3381 | }); 3382 | }; 3383 | this.FetchConnection = function (requestSession, isUnAuthorized) { 3384 | if (isUnAuthorized === void 0) { isUnAuthorized = false; } 3385 | if (_this.connectionFetchPromise) { 3386 | if (_this.connectionFetchPromise.Result().IsError 3387 | || _this.connectionFetchPromise.Result().Result.State() === Exports_15.ConnectionState.Disconnected) { 3388 | _this.connectionId = null; 3389 | _this.connectionFetchPromise = null; 3390 | return _this.FetchConnection(requestSession); 3391 | } 3392 | else { 3393 | requestSession.OnPreConnectionStart(_this.authFetchEventId, _this.connectionId); 3394 | requestSession.OnConnectionEstablishCompleted(200); 3395 | requestSession.ListenForServiceTelemetry(_this.connectionFetchPromise.Result().Result.Events); 3396 | return _this.connectionFetchPromise; 3397 | } 3398 | } 3399 | _this.authFetchEventId = Exports_15.CreateNoDashGuid(); 3400 | _this.connectionId = Exports_15.CreateNoDashGuid(); 3401 | requestSession.OnPreConnectionStart(_this.authFetchEventId, _this.connectionId); 3402 | var authPromise = isUnAuthorized ? _this.authentication.FetchOnExpiry(_this.authFetchEventId) : _this.authentication.Fetch(_this.authFetchEventId); 3403 | _this.connectionFetchPromise = authPromise 3404 | .ContinueWithPromise(function (result) { 3405 | if (result.IsError) { 3406 | requestSession.OnAuthCompleted(true, result.Error); 3407 | throw new Error(result.Error); 3408 | } 3409 | else { 3410 | requestSession.OnAuthCompleted(false); 3411 | } 3412 | var connection = _this.connectionFactory.Create(_this.recognizerConfig, result.Result, _this.connectionId); 3413 | requestSession.ListenForServiceTelemetry(connection.Events); 3414 | return connection.Open().OnSuccessContinueWithPromise(function (response) { 3415 | if (response.StatusCode === 200) { 3416 | requestSession.OnConnectionEstablishCompleted(response.StatusCode); 3417 | return Exports_15.PromiseHelper.FromResult(connection); 3418 | } 3419 | else if (response.StatusCode === 403 && !isUnAuthorized) { 3420 | return _this.FetchConnection(requestSession, true); 3421 | } 3422 | else { 3423 | requestSession.OnConnectionEstablishCompleted(response.StatusCode, response.Reason); 3424 | return Exports_15.PromiseHelper.FromError("Unable to contact server. StatusCode: " + response.StatusCode + ", Reason: " + response.Reason); 3425 | } 3426 | }); 3427 | }); 3428 | return _this.connectionFetchPromise; 3429 | }; 3430 | this.ReceiveMessage = function (connection, requestSession) { 3431 | return connection 3432 | .Read() 3433 | .OnSuccessContinueWithPromise(function (message) { 3434 | var connectionMessage = SpeechConnectionMessage_Internal_1.SpeechConnectionMessage.FromConnectionMessage(message); 3435 | if (connectionMessage.RequestId.toLowerCase() === requestSession.RequestId.toLowerCase()) { 3436 | switch (connectionMessage.Path.toLowerCase()) { 3437 | case "turn.start": 3438 | requestSession.OnServiceTurnStartResponse(JSON.parse(connectionMessage.TextBody)); 3439 | break; 3440 | case "speech.startDetected": 3441 | requestSession.OnServiceSpeechStartDetectedResponse(JSON.parse(connectionMessage.TextBody)); 3442 | break; 3443 | case "speech.hypothesis": 3444 | requestSession.OnServiceSpeechHypothesisResponse(JSON.parse(connectionMessage.TextBody)); 3445 | break; 3446 | case "speech.fragment": 3447 | requestSession.OnServiceSpeechFragmentResponse(JSON.parse(connectionMessage.TextBody)); 3448 | break; 3449 | case "speech.enddetected": 3450 | requestSession.OnServiceSpeechEndDetectedResponse(JSON.parse(connectionMessage.TextBody)); 3451 | break; 3452 | case "speech.phrase": 3453 | if (_this.recognizerConfig.IsContinuousRecognition) { 3454 | _this.SendTelemetryData(requestSession.RequestId, connection, requestSession.GetTelemetry()); 3455 | } 3456 | if (_this.recognizerConfig.Format === RecognizerConfig_1.SpeechResultFormat.Simple) { 3457 | requestSession.OnServiceSimpleSpeechPhraseResponse(JSON.parse(connectionMessage.TextBody)); 3458 | } 3459 | else { 3460 | requestSession.OnServiceDetailedSpeechPhraseResponse(JSON.parse(connectionMessage.TextBody)); 3461 | } 3462 | break; 3463 | case "turn.end": 3464 | requestSession.OnServiceTurnEndResponse(); 3465 | return Exports_15.PromiseHelper.FromResult(true); 3466 | default: 3467 | break; 3468 | } 3469 | } 3470 | return _this.ReceiveMessage(connection, requestSession); 3471 | }); 3472 | }; 3473 | this.SendSpeechConfig = function (requestId, connection, speechConfigJson) { 3474 | if (speechConfigJson && _this.connectionId !== _this.speechConfigConnectionId) { 3475 | _this.speechConfigConnectionId = _this.connectionId; 3476 | return connection 3477 | .Send(new SpeechConnectionMessage_Internal_1.SpeechConnectionMessage(Exports_15.MessageType.Text, "speech.config", requestId, "application/json", speechConfigJson)); 3478 | } 3479 | return Exports_15.PromiseHelper.FromResult(true); 3480 | }; 3481 | this.SendSpeechContext = function (requestId, connection, speechContextJson) { 3482 | if (speechContextJson) { 3483 | return connection 3484 | .Send(new SpeechConnectionMessage_Internal_1.SpeechConnectionMessage(Exports_15.MessageType.Text, "speech.context", requestId, "application/json", speechContextJson)); 3485 | } 3486 | return Exports_15.PromiseHelper.FromResult(true); 3487 | }; 3488 | this.SendTelemetryData = function (requestId, connection, telemetryData) { 3489 | return connection 3490 | .Send(new SpeechConnectionMessage_Internal_1.SpeechConnectionMessage(Exports_15.MessageType.Text, "telemetry", requestId, "application/json", telemetryData)); 3491 | }; 3492 | this.SendAudio = function (requestId, connection, audioStreamNode, requestSession) { 3493 | return audioStreamNode 3494 | .Read() 3495 | .OnSuccessContinueWithPromise(function (audioStreamChunk) { 3496 | if (requestSession.IsSpeechEnded) { 3497 | return Exports_15.PromiseHelper.FromResult(true); 3498 | } 3499 | else if (audioStreamChunk.IsEnd) { 3500 | return connection 3501 | .Send(new SpeechConnectionMessage_Internal_1.SpeechConnectionMessage(Exports_15.MessageType.Binary, "audio", requestId, null, null)); 3502 | } 3503 | else { 3504 | return connection 3505 | .Send(new SpeechConnectionMessage_Internal_1.SpeechConnectionMessage(Exports_15.MessageType.Binary, "audio", requestId, null, audioStreamChunk.Buffer)) 3506 | .OnSuccessContinueWithPromise(function (_) { 3507 | return _this.SendAudio(requestId, connection, audioStreamNode, requestSession); 3508 | }); 3509 | } 3510 | }); 3511 | }; 3512 | if (!authentication) { 3513 | throw new Exports_15.ArgumentNullError("authentication"); 3514 | } 3515 | if (!connectionFactory) { 3516 | throw new Exports_15.ArgumentNullError("connectionFactory"); 3517 | } 3518 | if (!audioSource) { 3519 | throw new Exports_15.ArgumentNullError("audioSource"); 3520 | } 3521 | if (!recognizerConfig) { 3522 | throw new Exports_15.ArgumentNullError("recognizerConfig"); 3523 | } 3524 | this.authentication = authentication; 3525 | this.connectionFactory = connectionFactory; 3526 | this.audioSource = audioSource; 3527 | this.recognizerConfig = recognizerConfig; 3528 | } 3529 | Object.defineProperty(Recognizer.prototype, "AudioSource", { 3530 | get: function () { 3531 | return this.audioSource; 3532 | }, 3533 | enumerable: true, 3534 | configurable: true 3535 | }); 3536 | return Recognizer; 3537 | }()); 3538 | exports.Recognizer = Recognizer; 3539 | var RequestSession = (function () { 3540 | function RequestSession(audioSourceId, onEventCallback) { 3541 | var _this = this; 3542 | this.isDisposed = false; 3543 | this.detachables = new Array(); 3544 | this.isAudioNodeDetached = false; 3545 | this.isCompleted = false; 3546 | this.OnAudioSourceAttachCompleted = function (audioNode, isError, error) { 3547 | _this.audioNode = audioNode; 3548 | if (isError) { 3549 | _this.OnComplete(RecognitionEvents_2.RecognitionCompletionStatus.AudioSourceError, error); 3550 | } 3551 | else { 3552 | _this.OnEvent(new RecognitionEvents_2.ListeningStartedEvent(_this.requestId, _this.audioSourceId, _this.audioNodeId)); 3553 | } 3554 | }; 3555 | this.OnPreConnectionStart = function (authFetchEventId, connectionId) { 3556 | _this.authFetchEventId = authFetchEventId; 3557 | _this.connectionId = connectionId; 3558 | _this.OnEvent(new RecognitionEvents_2.ConnectingToServiceEvent(_this.requestId, _this.authFetchEventId, _this.connectionId)); 3559 | }; 3560 | this.OnAuthCompleted = function (isError, error) { 3561 | if (isError) { 3562 | _this.OnComplete(RecognitionEvents_2.RecognitionCompletionStatus.AuthTokenFetchError, error); 3563 | } 3564 | }; 3565 | this.OnConnectionEstablishCompleted = function (statusCode, reason) { 3566 | if (statusCode === 200) { 3567 | _this.OnEvent(new RecognitionEvents_2.RecognitionStartedEvent(_this.RequestId, _this.audioSourceId, _this.audioNodeId, _this.authFetchEventId, _this.connectionId)); 3568 | return; 3569 | } 3570 | else if (statusCode === 403) { 3571 | _this.OnComplete(RecognitionEvents_2.RecognitionCompletionStatus.UnAuthorized, reason); 3572 | } 3573 | else { 3574 | _this.OnComplete(RecognitionEvents_2.RecognitionCompletionStatus.ConnectError, reason); 3575 | } 3576 | }; 3577 | this.OnServiceTurnStartResponse = function (response) { 3578 | if (response && response.context && response.context.serviceTag) { 3579 | _this.serviceTag = response.context.serviceTag; 3580 | } 3581 | }; 3582 | this.OnServiceSpeechStartDetectedResponse = function (result) { 3583 | _this.OnEvent(new RecognitionEvents_2.SpeechStartDetectedEvent(_this.RequestId, result)); 3584 | }; 3585 | this.OnServiceSpeechHypothesisResponse = function (result) { 3586 | _this.OnEvent(new RecognitionEvents_2.SpeechHypothesisEvent(_this.RequestId, result)); 3587 | }; 3588 | this.OnServiceSpeechFragmentResponse = function (result) { 3589 | _this.OnEvent(new RecognitionEvents_2.SpeechFragmentEvent(_this.RequestId, result)); 3590 | }; 3591 | this.OnServiceSpeechEndDetectedResponse = function (result) { 3592 | _this.DetachAudioNode(); 3593 | _this.OnEvent(new RecognitionEvents_2.SpeechEndDetectedEvent(_this.RequestId, result)); 3594 | }; 3595 | this.OnServiceSimpleSpeechPhraseResponse = function (result) { 3596 | _this.OnEvent(new RecognitionEvents_2.SpeechSimplePhraseEvent(_this.RequestId, result)); 3597 | }; 3598 | this.OnServiceDetailedSpeechPhraseResponse = function (result) { 3599 | _this.OnEvent(new RecognitionEvents_2.SpeechDetailedPhraseEvent(_this.RequestId, result)); 3600 | }; 3601 | this.OnServiceTurnEndResponse = function () { 3602 | _this.OnComplete(RecognitionEvents_2.RecognitionCompletionStatus.Success); 3603 | }; 3604 | this.OnConnectionError = function (error) { 3605 | _this.OnComplete(RecognitionEvents_2.RecognitionCompletionStatus.UnknownError, error); 3606 | }; 3607 | this.Dispose = function (error) { 3608 | if (!_this.isDisposed) { 3609 | _this.OnComplete(RecognitionEvents_2.RecognitionCompletionStatus.UnknownError, error); 3610 | _this.isDisposed = true; 3611 | for (var _i = 0, _a = _this.detachables; _i < _a.length; _i++) { 3612 | var detachable = _a[_i]; 3613 | detachable.Detach(); 3614 | } 3615 | _this.serviceTelemetryListener.Dispose(); 3616 | } 3617 | }; 3618 | this.GetTelemetry = function () { 3619 | return _this.serviceTelemetryListener.GetTelemetry(); 3620 | }; 3621 | this.OnComplete = function (status, error) { 3622 | if (!_this.isCompleted) { 3623 | _this.isCompleted = true; 3624 | _this.DetachAudioNode(); 3625 | _this.OnEvent(new RecognitionEvents_2.RecognitionEndedEvent(_this.RequestId, _this.audioSourceId, _this.audioNodeId, _this.authFetchEventId, _this.connectionId, _this.serviceTag, status, error ? error : "")); 3626 | } 3627 | }; 3628 | this.DetachAudioNode = function () { 3629 | if (!_this.isAudioNodeDetached) { 3630 | _this.isAudioNodeDetached = true; 3631 | if (_this.audioNode) { 3632 | _this.audioNode.Detach(); 3633 | } 3634 | } 3635 | }; 3636 | this.OnEvent = function (event) { 3637 | _this.serviceTelemetryListener.OnEvent(event); 3638 | Exports_15.Events.Instance.OnEvent(event); 3639 | if (_this.onEventCallback) { 3640 | _this.onEventCallback(event); 3641 | } 3642 | }; 3643 | this.audioSourceId = audioSourceId; 3644 | this.onEventCallback = onEventCallback; 3645 | this.requestId = Exports_15.CreateNoDashGuid(); 3646 | this.audioNodeId = Exports_15.CreateNoDashGuid(); 3647 | this.requestCompletionDeferral = new Exports_15.Deferred(); 3648 | this.serviceTelemetryListener = new ServiceTelemetryListener_Internal_1.ServiceTelemetryListener(this.requestId, this.audioSourceId, this.audioNodeId); 3649 | this.OnEvent(new RecognitionEvents_2.RecognitionTriggeredEvent(this.RequestId, this.audioSourceId, this.audioNodeId)); 3650 | } 3651 | Object.defineProperty(RequestSession.prototype, "RequestId", { 3652 | get: function () { 3653 | return this.requestId; 3654 | }, 3655 | enumerable: true, 3656 | configurable: true 3657 | }); 3658 | Object.defineProperty(RequestSession.prototype, "AudioNodeId", { 3659 | get: function () { 3660 | return this.audioNodeId; 3661 | }, 3662 | enumerable: true, 3663 | configurable: true 3664 | }); 3665 | Object.defineProperty(RequestSession.prototype, "CompletionPromise", { 3666 | get: function () { 3667 | return this.requestCompletionDeferral.Promise(); 3668 | }, 3669 | enumerable: true, 3670 | configurable: true 3671 | }); 3672 | Object.defineProperty(RequestSession.prototype, "IsSpeechEnded", { 3673 | get: function () { 3674 | return this.isAudioNodeDetached; 3675 | }, 3676 | enumerable: true, 3677 | configurable: true 3678 | }); 3679 | Object.defineProperty(RequestSession.prototype, "IsCompleted", { 3680 | get: function () { 3681 | return this.isCompleted; 3682 | }, 3683 | enumerable: true, 3684 | configurable: true 3685 | }); 3686 | RequestSession.prototype.ListenForServiceTelemetry = function (eventSource) { 3687 | this.detachables.push(eventSource.AttachListener(this.serviceTelemetryListener)); 3688 | }; 3689 | return RequestSession; 3690 | }()); 3691 | }); 3692 | define("src/sdk/speech/WebsocketMessageFormatter", ["require", "exports", "src/common/Exports"], function (require, exports, Exports_16) { 3693 | "use strict"; 3694 | Object.defineProperty(exports, "__esModule", { value: true }); 3695 | var CRLF = "\r\n"; 3696 | var WebsocketMessageFormatter = (function () { 3697 | function WebsocketMessageFormatter() { 3698 | var _this = this; 3699 | this.ToConnectionMessage = function (message) { 3700 | var deferral = new Exports_16.Deferred(); 3701 | try { 3702 | if (message.MessageType === Exports_16.MessageType.Text) { 3703 | var textMessage = message.TextContent; 3704 | var headers = {}; 3705 | var body = null; 3706 | if (textMessage) { 3707 | var headerBodySplit = textMessage.split("\r\n\r\n"); 3708 | if (headerBodySplit && headerBodySplit.length > 0) { 3709 | headers = _this.ParseHeaders(headerBodySplit[0]); 3710 | if (headerBodySplit.length > 1) { 3711 | body = headerBodySplit[1]; 3712 | } 3713 | } 3714 | } 3715 | deferral.Resolve(new Exports_16.ConnectionMessage(message.MessageType, body, headers, message.Id)); 3716 | } 3717 | else if (message.MessageType === Exports_16.MessageType.Binary) { 3718 | var binaryMessage = message.BinaryContent; 3719 | var headers = {}; 3720 | var body = null; 3721 | if (!binaryMessage || binaryMessage.byteLength < 2) { 3722 | throw new Error("Invalid binary message format. Header length missing."); 3723 | } 3724 | var dataView = new DataView(binaryMessage); 3725 | var headerLength = dataView.getInt16(0); 3726 | if (binaryMessage.byteLength < headerLength + 2) { 3727 | throw new Error("Invalid binary message format. Header content missing."); 3728 | } 3729 | var headersString = ""; 3730 | for (var i = 0; i < headerLength; i++) { 3731 | headersString += String.fromCharCode((dataView).getInt8(i + 2)); 3732 | } 3733 | headers = _this.ParseHeaders(headersString); 3734 | if (binaryMessage.byteLength > headerLength + 2) { 3735 | body = binaryMessage.slice(2 + headerLength); 3736 | } 3737 | deferral.Resolve(new Exports_16.ConnectionMessage(message.MessageType, body, headers, message.Id)); 3738 | } 3739 | } 3740 | catch (e) { 3741 | deferral.Reject("Error formatting the message. Error: " + e); 3742 | } 3743 | return deferral.Promise(); 3744 | }; 3745 | this.FromConnectionMessage = function (message) { 3746 | var deferral = new Exports_16.Deferred(); 3747 | try { 3748 | if (message.MessageType === Exports_16.MessageType.Text) { 3749 | var payload = "" + _this.MakeHeaders(message) + CRLF + (message.TextBody ? message.TextBody : ""); 3750 | deferral.Resolve(new Exports_16.RawWebsocketMessage(Exports_16.MessageType.Text, payload, message.Id)); 3751 | } 3752 | else if (message.MessageType === Exports_16.MessageType.Binary) { 3753 | var headersString = _this.MakeHeaders(message); 3754 | var content_1 = message.BinaryBody; 3755 | var fr_1 = new FileReader(); 3756 | fr_1.onload = function () { 3757 | var headerInt8Array = new Int8Array(fr_1.result); 3758 | var payload = new ArrayBuffer(2 + headerInt8Array.byteLength + (content_1 ? content_1.byteLength : 0)); 3759 | var dataView = new DataView(payload); 3760 | dataView.setInt16(0, headerInt8Array.length); 3761 | for (var i = 0; i < headerInt8Array.byteLength; i++) { 3762 | dataView.setInt8(2 + i, headerInt8Array[i]); 3763 | } 3764 | if (content_1) { 3765 | var bodyInt8Array = new Int8Array(content_1); 3766 | for (var i = 0; i < bodyInt8Array.byteLength; i++) { 3767 | dataView.setInt8(2 + headerInt8Array.byteLength + i, bodyInt8Array[i]); 3768 | } 3769 | } 3770 | deferral.Resolve(new Exports_16.RawWebsocketMessage(Exports_16.MessageType.Binary, payload, message.Id)); 3771 | }; 3772 | fr_1.onerror = function () { 3773 | deferral.Reject("failed to load headers into file reader"); 3774 | }; 3775 | fr_1.readAsArrayBuffer(new Blob([headersString])); 3776 | } 3777 | } 3778 | catch (e) { 3779 | deferral.Reject("Error formatting the message. " + e); 3780 | } 3781 | return deferral.Promise(); 3782 | }; 3783 | this.MakeHeaders = function (message) { 3784 | var headersString = ""; 3785 | if (message.Headers) { 3786 | for (var header in message.Headers) { 3787 | if (header) { 3788 | headersString += header + ": " + message.Headers[header] + CRLF; 3789 | } 3790 | } 3791 | } 3792 | return headersString; 3793 | }; 3794 | this.ParseHeaders = function (headersString) { 3795 | var headers = {}; 3796 | if (headersString) { 3797 | var headerMatches = headersString.match(/[^\r\n]+/g); 3798 | if (headers) { 3799 | for (var _i = 0, headerMatches_1 = headerMatches; _i < headerMatches_1.length; _i++) { 3800 | var header = headerMatches_1[_i]; 3801 | if (header) { 3802 | var separatorIndex = header.indexOf(":"); 3803 | var headerName = separatorIndex > 0 ? header.substr(0, separatorIndex).trim().toLowerCase() : header; 3804 | var headerValue = separatorIndex > 0 && header.length > (separatorIndex + 1) ? 3805 | header.substr(separatorIndex + 1).trim() : 3806 | ""; 3807 | headers[headerName] = headerValue; 3808 | } 3809 | } 3810 | } 3811 | } 3812 | return headers; 3813 | }; 3814 | } 3815 | return WebsocketMessageFormatter; 3816 | }()); 3817 | exports.WebsocketMessageFormatter = WebsocketMessageFormatter; 3818 | }); 3819 | define("src/sdk/speech/Exports", ["require", "exports", "src/sdk/speech/CognitiveSubscriptionKeyAuthentication", "src/sdk/speech/CognitiveTokenAuthentication", "src/sdk/speech/IAuthentication", "src/sdk/speech/RecognitionEvents", "src/sdk/speech/Recognizer", "src/sdk/speech/RecognizerConfig", "src/sdk/speech/SpeechResults", "src/sdk/speech/WebsocketMessageFormatter"], function (require, exports, CognitiveSubscriptionKeyAuthentication_1, CognitiveTokenAuthentication_1, IAuthentication_3, RecognitionEvents_3, Recognizer_1, RecognizerConfig_2, SpeechResults_1, WebsocketMessageFormatter_1) { 3820 | "use strict"; 3821 | function __export(m) { 3822 | for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; 3823 | } 3824 | Object.defineProperty(exports, "__esModule", { value: true }); 3825 | __export(CognitiveSubscriptionKeyAuthentication_1); 3826 | __export(CognitiveTokenAuthentication_1); 3827 | __export(IAuthentication_3); 3828 | __export(RecognitionEvents_3); 3829 | __export(Recognizer_1); 3830 | __export(RecognizerConfig_2); 3831 | __export(SpeechResults_1); 3832 | __export(WebsocketMessageFormatter_1); 3833 | }); 3834 | define("src/sdk/speech.browser/SpeechConnectionFactory", ["require", "exports", "src/common.browser/Exports", "src/common/Exports", "src/sdk/speech/Exports"], function (require, exports, Exports_17, Exports_18, Exports_19) { 3835 | "use strict"; 3836 | Object.defineProperty(exports, "__esModule", { value: true }); 3837 | var TestHooksParamName = "testhooks"; 3838 | var ConnectionIdHeader = "X-ConnectionId"; 3839 | var SpeechConnectionFactory = (function () { 3840 | function SpeechConnectionFactory() { 3841 | var _this = this; 3842 | this.Create = function (config, authInfo, connectionId) { 3843 | var endpoint = ""; 3844 | switch (config.RecognitionMode) { 3845 | case Exports_19.RecognitionMode.Conversation: 3846 | endpoint = _this.Host + _this.ConversationRelativeUri; 3847 | break; 3848 | case Exports_19.RecognitionMode.Dictation: 3849 | endpoint = _this.Host + _this.DictationRelativeUri; 3850 | break; 3851 | default: 3852 | endpoint = _this.Host + _this.InteractiveRelativeUri; 3853 | break; 3854 | } 3855 | var queryParams = { 3856 | format: Exports_19.SpeechResultFormat[config.Format].toString().toLowerCase(), 3857 | language: config.Language, 3858 | }; 3859 | if (_this.IsDebugModeEnabled) { 3860 | queryParams[TestHooksParamName] = "1"; 3861 | } 3862 | var headers = {}; 3863 | headers[authInfo.HeaderName] = authInfo.Token; 3864 | headers[ConnectionIdHeader] = connectionId; 3865 | return new Exports_17.WebsocketConnection(endpoint, queryParams, headers, new Exports_19.WebsocketMessageFormatter(), connectionId); 3866 | }; 3867 | } 3868 | Object.defineProperty(SpeechConnectionFactory.prototype, "Host", { 3869 | get: function () { 3870 | return Exports_18.Storage.Local.GetOrAdd("Host", "wss://speech.platform.bing.com"); 3871 | }, 3872 | enumerable: true, 3873 | configurable: true 3874 | }); 3875 | Object.defineProperty(SpeechConnectionFactory.prototype, "InteractiveRelativeUri", { 3876 | get: function () { 3877 | return Exports_18.Storage.Local.GetOrAdd("InteractiveRelativeUri", "/speech/recognition/interactive/cognitiveservices/v1"); 3878 | }, 3879 | enumerable: true, 3880 | configurable: true 3881 | }); 3882 | Object.defineProperty(SpeechConnectionFactory.prototype, "ConversationRelativeUri", { 3883 | get: function () { 3884 | return Exports_18.Storage.Local.GetOrAdd("ConversationRelativeUri", "/speech/recognition/conversation/cognitiveservices/v1"); 3885 | }, 3886 | enumerable: true, 3887 | configurable: true 3888 | }); 3889 | Object.defineProperty(SpeechConnectionFactory.prototype, "DictationRelativeUri", { 3890 | get: function () { 3891 | return Exports_18.Storage.Local.GetOrAdd("DictationRelativeUri", "/speech/recognition/dictation/cognitiveservices/v1"); 3892 | }, 3893 | enumerable: true, 3894 | configurable: true 3895 | }); 3896 | Object.defineProperty(SpeechConnectionFactory.prototype, "IsDebugModeEnabled", { 3897 | get: function () { 3898 | var value = Exports_18.Storage.Local.GetOrAdd("IsDebugModeEnabled", "false"); 3899 | return value.toLowerCase() === "true"; 3900 | }, 3901 | enumerable: true, 3902 | configurable: true 3903 | }); 3904 | return SpeechConnectionFactory; 3905 | }()); 3906 | exports.SpeechConnectionFactory = SpeechConnectionFactory; 3907 | }); 3908 | define("src/sdk/speech.browser/Recognizer", ["require", "exports", "src/common.browser/Exports", "src/sdk/speech/Exports", "src/sdk/speech.browser/SpeechConnectionFactory"], function (require, exports, Exports_20, Exports_21, SpeechConnectionFactory_1) { 3909 | "use strict"; 3910 | Object.defineProperty(exports, "__esModule", { value: true }); 3911 | var CreateRecognizer = function (recognizerConfig, authentication) { 3912 | return CreateRecognizerWithPcmRecorder(recognizerConfig, authentication); 3913 | }; 3914 | exports.CreateRecognizer = CreateRecognizer; 3915 | var CreateRecognizerWithPcmRecorder = function (recognizerConfig, authentication) { 3916 | return CreateRecognizerWithCustomAudioSource(recognizerConfig, authentication, new Exports_20.MicAudioSource(new Exports_20.PcmRecorder())); 3917 | }; 3918 | exports.CreateRecognizerWithPcmRecorder = CreateRecognizerWithPcmRecorder; 3919 | var CreateRecognizerWithFileAudioSource = function (recognizerConfig, authentication, file) { 3920 | return CreateRecognizerWithCustomAudioSource(recognizerConfig, authentication, new Exports_20.FileAudioSource(file)); 3921 | }; 3922 | exports.CreateRecognizerWithFileAudioSource = CreateRecognizerWithFileAudioSource; 3923 | var CreateRecognizerWithCustomAudioSource = function (recognizerConfig, authentication, audioSource) { 3924 | return new Exports_21.Recognizer(authentication, new SpeechConnectionFactory_1.SpeechConnectionFactory(), audioSource, recognizerConfig); 3925 | }; 3926 | exports.CreateRecognizerWithCustomAudioSource = CreateRecognizerWithCustomAudioSource; 3927 | }); 3928 | define("src/sdk/speech.browser/Exports", ["require", "exports", "src/sdk/speech.browser/Recognizer", "src/sdk/speech.browser/SpeechConnectionFactory"], function (require, exports, Recognizer_2, SpeechConnectionFactory_2) { 3929 | "use strict"; 3930 | function __export(m) { 3931 | for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; 3932 | } 3933 | Object.defineProperty(exports, "__esModule", { value: true }); 3934 | __export(Recognizer_2); 3935 | __export(SpeechConnectionFactory_2); 3936 | }); 3937 | define("Speech.Browser.Sdk", ["require", "exports", "src/common.browser/Exports", "src/common/Exports", "src/common/Exports", "src/common.browser/Exports", "src/sdk/speech/Exports", "src/sdk/speech.browser/Exports"], function (require, exports, Exports_22, Exports_23, Exports_24, Exports_25, Exports_26, Exports_27) { 3938 | "use strict"; 3939 | function __export(m) { 3940 | for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; 3941 | } 3942 | Object.defineProperty(exports, "__esModule", { value: true }); 3943 | Exports_23.Events.Instance.AttachListener(new Exports_22.ConsoleLoggingListener()); 3944 | __export(Exports_24); 3945 | __export(Exports_25); 3946 | __export(Exports_26); 3947 | __export(Exports_27); 3948 | }); --------------------------------------------------------------------------------