(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.jiboCommandLibrary = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 400 ? 'Error' : 'Success' }; if (data) { if (responseCode >= 400) { response.ErrorDetail = data; } else { response.ResponseBody = data; } } event = { ResponseHeader: header, Response: response }; } return event; } static createEvent(version, transactionId, sessionId, data) { let event; if (version === '1.0') { const header = { RobotID: CommandUtil.robotId, TransactionID: transactionId, SessionID: sessionId, Timestamp: CommandUtil.getNetworkTime() }; event = { EventHeader: header, EventBody: data }; } return event; } static getNetworkTime() { return Date.now(); } static getVersion(data, version = "1.0") { switch (version) { case '1.0': if (data.ClientHeader) { return data.ClientHeader.Version; } break; } return null; } static getTransactionId(data, version = '1.0') { switch (version) { case '1.0': if (data.ClientHeader) { return data.ClientHeader.TransactionID; } break; } return null; } static getSessionId(data, version = '1.0') { switch (version) { case '1.0': if (data.ClientHeader) { return data.ClientHeader.SessionID; } break; } return null; } static getCommandType(data, version = '1.0') { switch (version) { case '1.0': if (data.Command) { return data.Command.Type; } break; } return null; } } CommandUtil.robotId = ''; CommandUtil.LISTEN_COLORS = [0.05, 0.73, 0.94]; exports.default = CommandUtil; },{"jibo-command-protocol":undefined}],6:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function formatCommandErrors(errors) { const filtered = errors.filter(isCommandSpecific); return formatGeneralErrors(filtered.length ? filtered : errors); } exports.formatCommandErrors = formatCommandErrors; function isCommandSpecific(error) { if (error.data && error.data.Type) { const type = error.data.Type; if (error.parentSchema && error.parentSchema.properties && error.parentSchema.properties.Type && error.parentSchema.properties.Type.enum && error.parentSchema.properties.Type.enum[0] === type) { return true; } } return false; } function formatGeneralErrors(errors) { return errors.map(formatError).join('\n'); } function formatError(error) { let output = error.dataPath + ' ' + error.message; if (error.keyword === 'additionalProperties') { output += ' - found property ' + error.params.additionalProperty; } return output; } },{}],7:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("./core"); const jibo_command_protocol_1 = require("jibo-command-protocol"); const components_1 = require("./components"); const components_2 = require("./components"); class CommandCreator { constructor(engine, permissions) { this._engine = engine; this._permissions = permissions; this.version = permissions.version; } commandFromRequestProtocol(data) { let commandEntity = new core_1.Entity(); let request = new components_1.RequestCommand(data); request.version = this.version; commandEntity.name = request.id; commandEntity.add(request); let body = data.Command; switch (body.Type) { case jibo_command_protocol_1.CommandTypes.StartSession: this.createSession(commandEntity, request, body); break; case jibo_command_protocol_1.CommandTypes.Cancel: this.createInterrupt(commandEntity, request, body); break; case jibo_command_protocol_1.CommandTypes.LookAt: this.createLookAt(commandEntity, request, body); break; case jibo_command_protocol_1.CommandTypes.Say: this.createPlay(commandEntity, request, body); break; case jibo_command_protocol_1.CommandTypes.SetAttention: this.createAttention(commandEntity, request, body); break; case jibo_command_protocol_1.CommandTypes.Subscribe: switch (body.StreamType) { case jibo_command_protocol_1.StreamTypes.Entity: this.createPersonStream(commandEntity, request, body); break; case jibo_command_protocol_1.StreamTypes.HotWord: this.createHotWord(commandEntity, request, body); break; case jibo_command_protocol_1.StreamTypes.ScreenGesture: this.createScreenGesture(commandEntity, request, body); break; case jibo_command_protocol_1.StreamTypes.Motion: this.createMotionStream(commandEntity, request, body); break; case jibo_command_protocol_1.StreamTypes.HeadTouch: this.createHeadTouch(commandEntity, request, body); break; } break; case jibo_command_protocol_1.CommandTypes.TakePhoto: this.createTakePhoto(commandEntity, request, body); break; case jibo_command_protocol_1.CommandTypes.Video: this.createPhotoStream(commandEntity, request, body); break; case jibo_command_protocol_1.CommandTypes.SetConfig: this.createSetConfig(commandEntity, request, body); break; case jibo_command_protocol_1.CommandTypes.GetConfig: this.createGetConfig(commandEntity, request, body); break; case jibo_command_protocol_1.CommandTypes.Display: this.createDisplay(commandEntity, request, body); break; case jibo_command_protocol_1.CommandTypes.FetchAsset: this.createFetchAsset(commandEntity, request, body); break; case jibo_command_protocol_1.CommandTypes.UnloadAsset: this.createUnloadAsset(commandEntity, request, body); break; case jibo_command_protocol_1.CommandTypes.Listen: this.createListen(commandEntity, request, body); break; default: if (body.Type === 'Test') { this.createTest(commandEntity, request, body); break; } request.setAcknowledge(jibo_command_protocol_1.ResponseCode.NotFound, true); break; } return commandEntity; } createSession(commandEntity, request, body) { const session = new components_1.Session(); session.inactivityTimeout = this._permissions.inactivityTimeout / 1000; session.reconnectTimeout = 10; if (this._permissions.headTouchStopTime) { session.headTouchStopTime = this._permissions.headTouchStopTime; } commandEntity.add(session); } createInterrupt(commandEntity, request, body) { commandEntity.add(new components_1.Interrupt(body.ID)); } createLookAt(commandEntity, request, body) { if (this._permissions.lookAt) { commandEntity.add(new components_1.LookAt(body.TrackFlag, body.LevelHeadFlag)); commandEntity.add(new components_1.Target(body.LookAtTarget)); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createPlay(commandEntity, request, body) { if (this._permissions.play) { commandEntity.add(new components_1.Play(body.ESML, body.SpeakOptions, body.AutoRuleConfig)); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createAttention(commandEntity, request, body) { commandEntity.add(new components_1.Attention(body.Mode)); } createPersonStream(commandEntity, request, body) { if (this._permissions.personStream) { commandEntity.add(new components_1.PersonStream()); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createHotWord(commandEntity, request, body) { if (this._permissions.hotWord) { commandEntity.add(new components_1.HotWord()); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createScreenGesture(commandEntity, request, body) { if (this._permissions.screenGesture) { commandEntity.add(new components_1.ScreenGesture()); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createMotionStream(commandEntity, request, body) { if (this._permissions.motionStream) { commandEntity.add(new components_1.MotionStream()); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createHeadTouch(commandEntity, request, body) { if (this._permissions.headTouch) { commandEntity.add(new components_1.HeadTouch()); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createTakePhoto(commandEntity, request, body) { if (this._permissions.takePhoto) { commandEntity.add(new components_1.TakePhoto(body.Distortion, body.Camera, body.Resolution)); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createPhotoStream(commandEntity, request, body) { if (this._permissions.video) { commandEntity.add(new components_1.PhotoStream(body.VideoType)); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createSetConfig(commandEntity, request, body) { if (this._permissions.setConfig) { commandEntity.add(new components_1.SetConfig(body.Options)); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createGetConfig(commandEntity, request, body) { if (this._permissions.getConfig) { commandEntity.add(new components_1.GetConfig()); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createDisplay(commandEntity, request, body) { if (this._permissions.display) { commandEntity.add(new components_1.Display(body.View)); commandEntity.add(new components_1.DisplayChange()); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createFetchAsset(commandEntity, request, body) { if (this._permissions.fetchAsset) { commandEntity.add(new components_1.FetchAsset(body.Name, body.URI)); commandEntity.add(this._engine.getEntityByName("assetCache").get(components_1.AssetCache)); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createUnloadAsset(commandEntity, request, body) { if (this._permissions.fetchAsset) { commandEntity.add(new components_1.UnloadAsset(body.Name)); commandEntity.add(this._engine.getEntityByName("assetCache").get(components_1.AssetCache)); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createListen(commandEntity, request, body) { if (this._permissions.listen) { commandEntity.add(new components_1.Listen(body.LanguageCode, body.MaxNoSpeechTimeout, body.MaxSpeechTimeout)); commandEntity.add(new components_1.LightRing()); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } createTest(commandEntity, request, body) { if (this._permissions.test) { commandEntity.add(new components_2.Test(body)); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Forbidden, true); } } } exports.default = CommandCreator; },{"./components":35,"./core":46,"jibo-command-protocol":undefined}],8:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const events_1 = require("events"); const log_1 = require("../log"); const EntityManager_1 = require("./EntityManager"); class CommandManager extends events_1.EventEmitter { constructor(permissions) { super(); this._permissions = permissions; this.log = log_1.default.createChild('command-manager'); this.init(); } init() { this.entityManager = new EntityManager_1.EntityManager(this._permissions); } reset() { this.entityManager.reset(); this.init(); } dispose() { this.entityManager.dispose(); } onCommand(data) { return this.entityManager.addCommand(data); } startSession(sessionEntity) { if (!this.entityManager.active) { this.entityManager.addSessionSystems(sessionEntity); this.entityManager.start(); } else { this.log.warn('startSession() called but entity engine is already active'); } } } exports.default = CommandManager; },{"../log":101,"./EntityManager":9,"events":undefined}],9:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("./core"); const CommandCreator_1 = require("./CommandCreator"); const SystemPriorities_1 = require("./systems/SystemPriorities"); const AttentionSystem_1 = require("./systems/AttentionSystem"); const CommandSystem_1 = require("./systems/CommandSystem"); const DisplaySystem_1 = require("./systems/DisplaySystem"); const HotWordSystem_1 = require("./systems/HotWordSystem"); const InterruptSystem_1 = require("./systems/InterruptSystem"); const JiboTickProvider_1 = require("./core/tick/JiboTickProvider"); const LookAtSystem_1 = require("./systems/LookAtSystem"); const PlaySystem_1 = require("./systems/PlaySystem"); const TakePhotoSystem_1 = require("./systems/TakePhotoSystem"); const PhotoStreamSystem_1 = require("./systems/PhotoStreamSystem"); const PersonStreamSystem_1 = require("./systems/PersonStreamSystem"); const SetConfigSystem_1 = require("./systems/SetConfigSystem"); const GetConfigSystem_1 = require("./systems/GetConfigSystem"); const MotionStreamSystem_1 = require("./systems/MotionStreamSystem"); const LoadAssetSystem_1 = require("./systems/LoadAssetSystem"); const UnloadAssetSystem_1 = require("./systems/UnloadAssetSystem"); const RemoteIndicatorSystem_1 = require("./systems/RemoteIndicatorSystem"); const HeadTouchSystem_1 = require("./systems/HeadTouchSystem"); const ScreenTouchSystem_1 = require("./systems/ScreenTouchSystem"); const ListenSystem_1 = require("./systems/ListenSystem"); const SessionSystem_1 = require("./systems/SessionSystem"); const LightRingSystem_1 = require("./systems/LightRingSystem"); const TestSystem_1 = require("./systems/TestSystem"); const components_1 = require("./components"); const jibo_command_protocol_1 = require("jibo-command-protocol"); var Resource; (function (Resource) { Resource["LIGHT_RING"] = "LIGHT_RING"; })(Resource = exports.Resource || (exports.Resource = {})); class EntityManager { constructor(permissions) { this._active = false; this._permissions = permissions; this.prepare(); } get active() { return this._active; } prepare() { this.engine = new core_1.Engine(); this._commandCreator = new CommandCreator_1.default(this.engine, this._permissions); } addSessionSystems(sessionEntity) { this.engine.addSystem(new CommandSystem_1.default(), SystemPriorities_1.SystemPriorities.response); this.engine.addSystem(new InterruptSystem_1.default(), SystemPriorities_1.SystemPriorities.interrupt); this.engine.addSystem(new SessionSystem_1.default(), SystemPriorities_1.SystemPriorities.session); let useLightRing = false; if (this._permissions.test) { this.engine.addSystem(new TestSystem_1.default(), SystemPriorities_1.SystemPriorities.update); } if (this._permissions.play) { this.engine.addSystem(new PlaySystem_1.default(), SystemPriorities_1.SystemPriorities.update); } if (this._permissions.display) { this.engine.addSystem(new DisplaySystem_1.default(), SystemPriorities_1.SystemPriorities.update); } if (this._permissions.lookAt) { this.engine.addSystem(new LookAtSystem_1.default(), SystemPriorities_1.SystemPriorities.update); } if (this._permissions.takePhoto) { this.engine.addSystem(new TakePhotoSystem_1.default(), SystemPriorities_1.SystemPriorities.update); } if (this._permissions.video) { this.engine.addSystem(new PhotoStreamSystem_1.default(), SystemPriorities_1.SystemPriorities.update); } if (this._permissions.personStream) { this.engine.addSystem(new PersonStreamSystem_1.default(), SystemPriorities_1.SystemPriorities.lps); } if (this._permissions.motionStream) { this.engine.addSystem(new MotionStreamSystem_1.default(), SystemPriorities_1.SystemPriorities.lps); } if (this._permissions.headTouch) { this.engine.addSystem(new HeadTouchSystem_1.default(), SystemPriorities_1.SystemPriorities.update); } if (this._permissions.setConfig) { this.engine.addSystem(new SetConfigSystem_1.default(), SystemPriorities_1.SystemPriorities.load); } if (this._permissions.getConfig) { this.engine.addSystem(new GetConfigSystem_1.default(), SystemPriorities_1.SystemPriorities.update); } if (this._permissions.listen) { this.engine.addSystem(new ListenSystem_1.default(), SystemPriorities_1.SystemPriorities.update); useLightRing = true; } if (this._permissions.screenGesture) { this.engine.addSystem(new ScreenTouchSystem_1.default(), SystemPriorities_1.SystemPriorities.update); } this.engine.addSystem(new HotWordSystem_1.default(this._permissions.hotWord), SystemPriorities_1.SystemPriorities.update); if (this._permissions.hotWord) { useLightRing = true; } this.engine.addSystem(new AttentionSystem_1.default(), SystemPriorities_1.SystemPriorities.lps); if (!this._permissions.attention) { let attention = new components_1.Attention(); attention.mode = jibo_command_protocol_1.AttentionMode.Off; sessionEntity.add(attention); } if (this._permissions.fetchAsset) { this.engine.addSystem(new LoadAssetSystem_1.default(), SystemPriorities_1.SystemPriorities.load); this.engine.addSystem(new UnloadAssetSystem_1.default(), SystemPriorities_1.SystemPriorities.load); let assetCache = new core_1.Entity('assetCache'); assetCache.add(new components_1.AssetCache()); this.engine.addEntity(assetCache); } if (this._permissions.hideRemoteIndicator) { } else { this.engine.addSystem(new RemoteIndicatorSystem_1.default(), SystemPriorities_1.SystemPriorities.update); sessionEntity.add(new components_1.RemoteIndicator()); sessionEntity.add(new components_1.LightRing()); useLightRing = true; } if (useLightRing) { this.engine.addSystem(new LightRingSystem_1.default(), SystemPriorities_1.SystemPriorities.light); } } addCommand(data) { let entity = this._commandCreator.commandFromRequestProtocol(data); this.engine.addEntity(entity); return entity; } start() { this._active = true; if (!this._tickProvider) { this._tickProvider = new JiboTickProvider_1.default(); this._tickProvider.add(delta => this.engine.update(delta)); } this._tickProvider.start(); this.engine.update(0); } stop() { this._active = false; this._tickProvider.stop(); } reset() { this.stop(); this._tickProvider.removeAll(); this.engine.updateComplete.removeAll(); this.engine.removeAllEntities(); this.engine.removeAllSystems(); } dispose() { this.reset(); this.engine = null; this._tickProvider = null; } } exports.EntityManager = EntityManager; },{"./CommandCreator":7,"./components":35,"./core":46,"./core/tick/JiboTickProvider":53,"./systems/AttentionSystem":77,"./systems/CommandSystem":78,"./systems/DisplaySystem":79,"./systems/GetConfigSystem":80,"./systems/HeadTouchSystem":81,"./systems/HotWordSystem":82,"./systems/InterruptSystem":83,"./systems/LightRingSystem":84,"./systems/ListenSystem":85,"./systems/LoadAssetSystem":86,"./systems/LookAtSystem":87,"./systems/MotionStreamSystem":88,"./systems/PersonStreamSystem":89,"./systems/PhotoStreamSystem":90,"./systems/PlaySystem":91,"./systems/RemoteIndicatorSystem":92,"./systems/ScreenTouchSystem":93,"./systems/SessionSystem":94,"./systems/SetConfigSystem":95,"./systems/SystemPriorities":96,"./systems/TakePhotoSystem":97,"./systems/TestSystem":98,"./systems/UnloadAssetSystem":99,"jibo-command-protocol":undefined}],10:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class AssetCache { constructor() { this.assetTokens = new Map(); } } exports.AssetCache = AssetCache; },{}],11:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Attention { constructor(mode) { this.active = false; if (mode) { this.mode = mode; } } } exports.Attention = Attention; },{}],12:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Display { constructor(view) { if (view) { this.view = view; } } } exports.Display = Display; },{}],13:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class DisplayChange { constructor() { this.type = 'Swap'; this.isActive = false; } } exports.DisplayChange = DisplayChange; },{}],14:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class FetchAsset { constructor(name, uri) { if (name) { this.name = name; } if (uri) { this.uri = uri; } } } exports.FetchAsset = FetchAsset; },{}],15:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class GetConfig { } exports.GetConfig = GetConfig; },{}],16:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class HeadTouch { constructor() { this.isActive = false; } } exports.HeadTouch = HeadTouch; },{}],17:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class HotWord { constructor() { this.hjHeard = false; this.coolDown = 0; this.coolDownMax = .4; } } exports.HotWord = HotWord; },{}],18:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Interrupt { constructor(id) { this.interruptId = ''; this.interruptAll = false; if (id) { this.interruptId = id; } } } exports.Interrupt = Interrupt; },{}],19:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class LightRing { constructor() { this.isActive = false; this.isDirty = false; this._color = [0, 0, 0]; } get color() { return this._color; } setColor(color) { this.isDirty = true; this._color[0] = this._color[0]; this._color[1] = this._color[1]; this._color[2] = this._color[2]; } setColors(r, g, b) { this.isDirty = true; this._color[0] = r; this._color[1] = g; this._color[2] = b; } } exports.LightRing = LightRing; },{}],20:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Listen { constructor(language = "en-US", maxNoSpeechTimeout = 15000, maxSpeechTimeout = 15000) { this.isActive = false; this.language = language; this.maxSpeechTimeout = maxSpeechTimeout; this.maxNoSpeechTimeout = maxNoSpeechTimeout; } onMimEnd(results) { if (results.asrResults.state === "match") { this.speech = results.asrResults; } else { this.speech = null; } } } exports.Listen = Listen; },{}],21:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class LookAt { constructor(trackFlag = false, levelHeadFlag = false) { this.isActive = false; this.interrupted = false; this.trackFlag = false; this.levelHeadFlag = false; this.trackFlag = trackFlag; this.levelHeadFlag = levelHeadFlag; } } exports.LookAt = LookAt; },{}],22:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class MotionStream { constructor() { this.isActive = false; } } exports.MotionStream = MotionStream; },{}],23:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class PersonStream { constructor() { this.isActive = false; } } exports.PersonStream = PersonStream; },{}],24:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class PhotoStream { constructor(photoType) { this.isActive = false; this.assetUrl = null; this.photoType = 'NORMAL'; if (photoType) { this.photoType = photoType; } } } exports.PhotoStream = PhotoStream; },{}],25:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Play { constructor(textInESML, speakOptions, autoRuleConfig) { this.textInESML = null; this.speakOptions = null; this.autoRuleConfig = null; this.activated = false; this.completed = false; this.audioId = null; if (textInESML) { this.textInESML = textInESML; } if (speakOptions) { this.speakOptions = speakOptions; } if (autoRuleConfig) { this.autoRuleConfig = autoRuleConfig; } } } exports.Play = Play; },{}],26:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class RemoteIndicator { constructor() { this.dotColor = '0xFF00FF'; this.dotRadius = 15; this.horizontalOffset = 45; this.verticalOffset = 45; this.minAlpha = 0.3; this.maxAlpha = 1; this.duration = 2; this.minHexColor = '0x330033'; this.maxHexColor = '0xFF00FF'; this.minLEDColor = [0, 0, 0]; this.maxLEDColor = [0, 0, 0]; this.deltaInColor = [0, 0, 0]; this.deltaAlpha = 0; this.lerpIsRising = true; this.timer = 0; this.icon = null; } } exports.RemoteIndicator = RemoteIndicator; },{}],27:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const jibo_command_protocol_1 = require("jibo-command-protocol"); class RequestCommand { constructor(data) { this.acknowledged = false; this._acknowledgeCode = jibo_command_protocol_1.ResponseCode.Accepted; this._isDirty = true; this._complete = false; this._responses = []; if (data) { this.applyData(data); } } get acknowledgeCode() { return this._acknowledgeCode; } get acknowledgeData() { return this._acknowledgeData; } get complete() { return this._complete; } get isDirty() { return this._isDirty; } get responses() { return this._responses; } applyData(data) { this.id = data.ClientHeader.TransactionID; } setAcknowledge(code, isComplete = false, data) { this._acknowledgeCode = code; this._isDirty = true; if (isComplete) { this._complete = true; } if (data) { this._acknowledgeData = data; } } addResponse(data, isComplete = false) { this._responses.push(data); this._isDirty = true; if (isComplete) { this._complete = true; } } setComplete() { this._isDirty = true; this._complete = true; } clean() { this._isDirty = false; this._responses.length = 0; } } exports.RequestCommand = RequestCommand; },{"jibo-command-protocol":undefined}],28:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class ScreenGesture { } exports.ScreenGesture = ScreenGesture; },{}],29:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Session { constructor(id, sendMethod, reconnectTimeout = 1000, inactivityTimeout = 0) { this.waitingOnReconnect = false; this.reconnection = false; this.reconnectDuration = 0; this.inactivityDuration = 0; this._hasConnection = true; this.storedEvents = []; if (id) { this.id = id; } if (sendMethod) { this.sendMethod = sendMethod; } if (reconnectTimeout) { this.reconnectTimeout = reconnectTimeout; } if (inactivityTimeout) { this.inactivityTimeout = inactivityTimeout; } } get hasConnection() { return this._hasConnection; } set hasConnection(connected) { this._hasConnection = connected; if (connected) { if (this.waitingOnReconnect) { this.reconnection = true; } this.waitingOnReconnect = false; this.reconnectDuration = 0; } else { if (!this.waitingOnReconnect) { this.waitingOnReconnect = true; } } } } exports.Session = Session; },{}],30:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class SetConfig { constructor(options) { this.isActive = false; if (options) { this.options = options; } } } exports.SetConfig = SetConfig; },{}],31:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class TakePhoto { constructor(distortion, camera, resolution) { this.isActive = false; this.assetUrl = null; this.distortion = false; this.assetUrl = null; this.distortion = distortion; this.camera = camera; this.resolution = resolution; } } exports.TakePhoto = TakePhoto; },{}],32:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Target { constructor(target) { if (target) { this.lookAtTarget = target; } } } exports.Target = Target; },{}],33:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Test { constructor(data) { this.message = data.Message; } } exports.Test = Test; },{}],34:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class UnloadAsset { constructor(name, uri) { if (name) { this.name = name; } } } exports.UnloadAsset = UnloadAsset; },{}],35:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Attention_1 = require("./Attention"); exports.Attention = Attention_1.Attention; var Display_1 = require("./Display"); exports.Display = Display_1.Display; var DisplayChange_1 = require("./DisplayChange"); exports.DisplayChange = DisplayChange_1.DisplayChange; var HeadTouch_1 = require("./HeadTouch"); exports.HeadTouch = HeadTouch_1.HeadTouch; var HotWord_1 = require("./HotWord"); exports.HotWord = HotWord_1.HotWord; var Interrupt_1 = require("./Interrupt"); exports.Interrupt = Interrupt_1.Interrupt; var LightRing_1 = require("./LightRing"); exports.LightRing = LightRing_1.LightRing; var Listen_1 = require("./Listen"); exports.Listen = Listen_1.Listen; var LookAt_1 = require("./LookAt"); exports.LookAt = LookAt_1.LookAt; var MotionStream_1 = require("./MotionStream"); exports.MotionStream = MotionStream_1.MotionStream; var PersonStream_1 = require("./PersonStream"); exports.PersonStream = PersonStream_1.PersonStream; var Play_1 = require("./Play"); exports.Play = Play_1.Play; var TakePhoto_1 = require("./TakePhoto"); exports.TakePhoto = TakePhoto_1.TakePhoto; var Target_1 = require("./Target"); exports.Target = Target_1.Target; var PhotoStream_1 = require("./PhotoStream"); exports.PhotoStream = PhotoStream_1.PhotoStream; var RequestCommand_1 = require("./RequestCommand"); exports.RequestCommand = RequestCommand_1.RequestCommand; var RemoteIndicator_1 = require("./RemoteIndicator"); exports.RemoteIndicator = RemoteIndicator_1.RemoteIndicator; var SetConfig_1 = require("./SetConfig"); exports.SetConfig = SetConfig_1.SetConfig; var GetConfig_1 = require("./GetConfig"); exports.GetConfig = GetConfig_1.GetConfig; var FetchAsset_1 = require("./FetchAsset"); exports.FetchAsset = FetchAsset_1.FetchAsset; var UnloadAsset_1 = require("./UnloadAsset"); exports.UnloadAsset = UnloadAsset_1.UnloadAsset; var AssetCache_1 = require("./AssetCache"); exports.AssetCache = AssetCache_1.AssetCache; var ScreenGesture_1 = require("./ScreenGesture"); exports.ScreenGesture = ScreenGesture_1.ScreenGesture; var Session_1 = require("./Session"); exports.Session = Session_1.Session; var Test_1 = require("./Test"); exports.Test = Test_1.Test; },{"./AssetCache":10,"./Attention":11,"./Display":12,"./DisplayChange":13,"./FetchAsset":14,"./GetConfig":15,"./HeadTouch":16,"./HotWord":17,"./Interrupt":18,"./LightRing":19,"./Listen":20,"./LookAt":21,"./MotionStream":22,"./PersonStream":23,"./PhotoStream":24,"./Play":25,"./RemoteIndicator":26,"./RequestCommand":27,"./ScreenGesture":28,"./Session":29,"./SetConfig":30,"./TakePhoto":31,"./Target":32,"./Test":33,"./UnloadAsset":34}],36:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Dictionary_1 = require("./Dictionary"); const NodeList_1 = require("./NodeList"); const NodePool_1 = require("./NodePool"); class ComponentMatchingFamily { constructor(nodeClass, engine) { this.releaseNodePoolCache = () => { this.engine.updateComplete.remove(this.releaseNodePoolCache); this.nodePool.releaseCache(); }; this.nodeClass = nodeClass; this.engine = engine; this.init(); } get nodeList() { return this.nodes; } newEntity(entity) { this.addIfMatch(entity); } componentAddedToEntity(entity, componentClass) { this.addIfMatch(entity); } componentRemovedFromEntity(entity, componentClass) { if (this.components.has(componentClass)) { this.removeIfMatch(entity); } } removeEntity(entity) { this.removeIfMatch(entity); } cleanUp() { for (let node = this.nodes.head; node; node = node.next) { this.entities.remove(node.entity); } this.nodes.removeAll(); } init() { this.nodes = new NodeList_1.NodeList(); this.entities = new Dictionary_1.default(); this.components = new Dictionary_1.default(); this.nodePool = new NodePool_1.NodePool(this.nodeClass, this.components); let dummyNode = this.nodePool.get(); this.nodePool.dispose(dummyNode); let types = dummyNode.constructor['__ash_types__']; for (let type in types) { if (types.hasOwnProperty(type)) { this.components.set(types[type], type); } } } addIfMatch(entity) { if (!this.entities.has(entity)) { for (let componentClass of this.components.keys()) { if (!entity.has(componentClass)) { return; } } let node = this.nodePool.get(); node.entity = entity; for (let componentClass of this.components.keys()) { node[this.components.get(componentClass)] = entity.get(componentClass); } this.entities.set(entity, node); this.nodes.add(node); } } removeIfMatch(entity) { if (this.entities.has(entity)) { let node = this.entities.get(entity); this.entities.remove(entity); this.nodes.remove(node); if (this.engine.updating) { this.nodePool.cache(node); this.engine.updateComplete.add(this.releaseNodePoolCache); } else { this.nodePool.dispose(node); } } } } exports.default = ComponentMatchingFamily; },{"./Dictionary":37,"./NodeList":42,"./NodePool":43}],37:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Dictionary { constructor() { this._keys = []; this._values = []; } set(key, value) { let index = this._keys.indexOf(key); if (index < 0) { let len = this._keys.length; this._keys[len] = key; this._values[len] = value; } else { this._values[index] = value; } return value; } get(key) { let index = this._keys.indexOf(key); if (index < 0) { return null; } else { return this._values[index]; } } has(key) { return !(this._keys.indexOf(key) < 0); } remove(key) { let index = this._keys.indexOf(key); if (index < 0) { return null; } else { this._keys.splice(index, 1); return this._values.splice(index, 1)[0]; } } keys() { return this._keys; } values() { return this._values; } } exports.default = Dictionary; },{}],38:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Signal0_1 = require("./signals/Signal0"); const Dictionary_1 = require("./Dictionary"); const EntityList_1 = require("./EntityList"); const SystemList_1 = require("./SystemList"); const ComponentMatchingFamily_1 = require("./ComponentMatchingFamily"); const log_1 = require("../../log"); class Engine { constructor() { this.familyClass = ComponentMatchingFamily_1.default; this.entityNameChanged = (entity, oldName) => { if (this._entityNames[oldName] === entity) { this._entityNames[oldName] = null; this._entityNames[entity.name] = entity; } }; this.componentAdded = (entity, componentClass) => { for (let family of this._families.values()) { family.componentAddedToEntity(entity, componentClass); } }; this.componentRemoved = (entity, componentClass) => { for (let family of this._families.values()) { family.componentRemovedFromEntity(entity, componentClass); } }; this._entityList = new EntityList_1.default(); this._entityNames = []; this._systemList = new SystemList_1.default(); this._families = new Dictionary_1.default(); this.updateComplete = new Signal0_1.Signal0(); this.log = log_1.default.createChild('engine'); } addEntity(entity) { if (this._entityNames[entity.name]) { this.log.error(`The entity name ${entity.name} is already in use by another entity. Not adding to engine.`); return; } this._entityList.add(entity); this._entityNames[entity.name] = entity; entity.componentAdded.add(this.componentAdded); entity.componentRemoved.add(this.componentRemoved); entity.nameChanged.add(this.entityNameChanged); for (let family of this._families.values()) { family.newEntity(entity); } } removeEntity(entity) { entity.componentAdded.remove(this.componentAdded); entity.componentRemoved.remove(this.componentRemoved); entity.nameChanged.remove(this.entityNameChanged); for (let family of this._families.values()) { family.removeEntity(entity); } this._entityNames[entity.name] = null; this._entityList.remove(entity); } getEntityByName(name) { return this._entityNames[name]; } removeAllEntities() { while (this._entityList.head) { this.removeEntity(this._entityList.head); } } get entities() { let entities = []; for (let entity = this._entityList.head; entity; entity = entity.next) { entities[entities.length] = entity; } return entities; } getNodeList(nodeClass) { if (this._families.has(nodeClass)) { return this._families.get(nodeClass).nodeList; } let family = new this.familyClass(nodeClass, this); this._families.set(nodeClass, family); for (let entity = this._entityList.head; entity; entity = entity.next) { family.newEntity(entity); } return family.nodeList; } releaseNodeList(nodeClass) { if (this._families.has(nodeClass)) { this._families.get(nodeClass).cleanUp(); } this._families.remove(nodeClass); } addSystem(system, priority) { system.priority = priority; system.addToEngine(this); this._systemList.add(system); } getSystem(type) { return this._systemList.get(type); } get systems() { let systems = []; for (let system = this._systemList.head; system; system = system.next) { systems[systems.length] = system; } return systems; } removeSystem(system) { this._systemList.remove(system); system.removeFromEngine(this); } removeAllSystems() { while (this._systemList.head) { let system = this._systemList.head; this._systemList.head = this._systemList.head.next; system.previous = null; system.next = null; system.removeFromEngine(this); } this._systemList.tail = null; } requestUpdate() { } update(time) { this.updating = true; for (let system = this._systemList.head; system; system = system.next) { system.update(time); } this.updating = false; this.updateComplete.dispatch(); } } exports.Engine = Engine; },{"../../log":101,"./ComponentMatchingFamily":36,"./Dictionary":37,"./EntityList":40,"./SystemList":45,"./signals/Signal0":49}],39:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Signal2_1 = require("./signals/Signal2"); const Dictionary_1 = require("./Dictionary"); class Entity { constructor(name = '') { this.componentAdded = new Signal2_1.Signal2(); this.componentRemoved = new Signal2_1.Signal2(); this.nameChanged = new Signal2_1.Signal2(); this.components = new Dictionary_1.default(); if (name) { this._name = name; } else { this._name = '_entity' + (++Entity.nameCount); } } get name() { return this._name; } set name(value) { if (this._name !== value) { let previous = this._name; this._name = value; this.nameChanged.dispatch(this, previous); } } add(component, componentClass = null) { if (!componentClass) { componentClass = component.constructor.prototype.constructor; } if (this.components.has(componentClass)) { this.remove(componentClass); } this.components.set(componentClass, component); this.componentAdded.dispatch(this, componentClass); return this; } remove(componentClass) { let component = this.components.get(componentClass); if (component) { this.components.remove(componentClass); this.componentRemoved.dispatch(this, componentClass); return component; } return null; } get(componentClass) { return this.components.get(componentClass); } getAll() { let componentArray = []; for (let value of this.components.values()) { componentArray[componentArray.length] = value; } return componentArray; } has(componentClass) { return this.components.has(componentClass); } } Entity.nameCount = 0; exports.Entity = Entity; },{"./Dictionary":37,"./signals/Signal2":51}],40:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class EntityList { add(entity) { if (!this.head) { this.head = this.tail = entity; entity.next = entity.previous = null; } else { this.tail.next = entity; entity.previous = this.tail; entity.next = null; this.tail = entity; } } remove(entity) { if (this.head === entity) { this.head = this.head.next; } if (this.tail === entity) { this.tail = this.tail.previous; } if (entity.previous) { entity.previous.next = entity.next; } if (entity.next) { entity.next.previous = entity.previous; } } removeAll() { while (this.head) { let entity = this.head; this.head = this.head.next; entity.previous = null; entity.next = null; } this.tail = null; } } exports.default = EntityList; },{}],41:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class Node { constructor() { this.entity = null; this.previous = null; this.next = null; } } exports.Node = Node; function keep(type) { return (target, propertyKey, descriptor) => { let ctor = target.constructor; let map; let ashProp = '__ash_types__'; if (ctor.hasOwnProperty(ashProp)) { map = ctor[ashProp]; } else { map = {}; Object.defineProperty(ctor, ashProp, { enumerable: true, value: map }); } map[propertyKey] = type; return descriptor; }; } exports.keep = keep; },{}],42:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Signal1_1 = require("./signals/Signal1"); class NodeList { constructor() { this.nodeAdded = new Signal1_1.Signal1(); this.nodeRemoved = new Signal1_1.Signal1(); } add(node) { if (!this.head) { this.head = this.tail = node; node.next = node.previous = null; } else { this.tail.next = node; node.previous = this.tail; node.next = null; this.tail = node; } this.nodeAdded.dispatch(node); } remove(node) { if (this.head === node) { this.head = this.head.next; } if (this.tail === node) { this.tail = this.tail.previous; } if (node.previous) { node.previous.next = node.next; } if (node.next) { node.next.previous = node.previous; } this.nodeRemoved.dispatch(node); } removeAll() { while (this.head) { let node = this.head; this.head = node.next; node.previous = null; node.next = null; this.nodeRemoved.dispatch(node); } this.tail = null; } get empty() { return this.head === null; } swap(node1, node2) { if (node1.previous === node2) { node1.previous = node2.previous; node2.previous = node1; node2.next = node1.next; node1.next = node2; } else if (node2.previous === node1) { node2.previous = node1.previous; node1.previous = node2; node1.next = node2.next; node2.next = node1; } else { let temp = node1.previous; node1.previous = node2.previous; node2.previous = temp; temp = node1.next; node1.next = node2.next; node2.next = temp; } if (this.head === node1) { this.head = node2; } else if (this.head === node2) { this.head = node1; } if (this.tail === node1) { this.tail = node2; } else if (this.tail === node2) { this.tail = node1; } if (node1.previous) { node1.previous.next = node1; } if (node2.previous) { node2.previous.next = node2; } if (node1.next) { node1.next.previous = node1; } if (node2.next) { node2.next.previous = node2; } } insertionSort(sortFunction) { if (this.head === this.tail) { return; } let remains = this.head.next; for (let node = remains; node; node = remains) { let other; remains = node.next; for (other = node.previous; other; other = other.previous) { if (sortFunction(node, other) >= 0) { if (node !== other.next) { if (this.tail === node) { this.tail = node.previous; } node.previous.next = node.next; if (node.next) { node.next.previous = node.previous; } node.next = other.next; node.previous = other; node.next.previous = node; other.next = node; } break; } } if (!other) { if (this.tail === node) { this.tail = node.previous; } node.previous.next = node.next; if (node.next) { node.next.previous = node.previous; } node.next = this.head; this.head.previous = node; node.previous = null; this.head = node; } } } mergeSort(sortFunction) { if (this.head === this.tail) { return; } let lists = []; let start = this.head; let end; while (start) { end = start; while (end.next && sortFunction(end, end.next) <= 0) { end = end.next; } let next = end.next; start.previous = end.next = null; lists[lists.length] = start; start = next; } while (lists.length > 1) { lists.push(this.merge(lists.shift(), lists.shift(), sortFunction)); } this.tail = this.head = lists[0]; while (this.tail.next) { this.tail = this.tail.next; } } merge(head1, head2, sortFunction) { let node; let head; if (sortFunction(head1, head2) <= 0) { head = node = head1; head1 = head1.next; } else { head = node = head2; head2 = head2.next; } while (head1 && head2) { if (sortFunction(head1, head2) <= 0) { node.next = head1; head1.previous = node; node = head1; head1 = head1.next; } else { node.next = head2; head2.previous = node; node = head2; head2 = head2.next; } } if (head1) { node.next = head1; head1.previous = node; } else { node.next = head2; head2.previous = node; } return head; } } exports.NodeList = NodeList; },{"./signals/Signal1":50}],43:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class NodePool { constructor(nodeClass, components) { this.nodeClass = nodeClass; this.components = components; } get() { if (this.tail) { let node = this.tail; this.tail = this.tail.previous; node.previous = null; return node; } else { return new this.nodeClass(); } } dispose(node) { for (let val of this.components.values()) { node[val] = null; } node.entity = null; node.next = null; node.previous = this.tail; this.tail = node; } cache(node) { node.previous = this.cacheTail; this.cacheTail = node; } releaseCache() { while (this.cacheTail) { let node = this.cacheTail; this.cacheTail = node.previous; this.dispose(node); } } } exports.NodePool = NodePool; },{}],44:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class System { constructor() { this.priority = 0; } } exports.System = System; },{}],45:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class SystemList { add(system) { if (!this.head) { this.head = this.tail = system; system.next = system.previous = null; } else { let node; for (node = this.tail; node; node = node.previous) { if (node.priority <= system.priority) { break; } } if (node === this.tail) { this.tail.next = system; system.previous = this.tail; system.next = null; this.tail = system; } else if (!node) { system.next = this.head; system.previous = null; this.head.previous = system; this.head = system; } else { system.next = node.next; system.previous = node; node.next.previous = system; node.next = system; } } } remove(system) { if (this.head === system) { this.head = this.head.next; } if (this.tail === system) { this.tail = this.tail.previous; } if (system.previous) { system.previous.next = system.next; } if (system.next) { system.next.previous = system.previous; } } removeAll() { while (this.head) { let system = this.head; this.head = this.head.next; system.previous = null; system.next = null; } this.tail = null; } get(type) { for (let system = this.head; system; system = system.next) { if (system instanceof type) { return system; } } return null; } } exports.default = SystemList; },{}],46:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Engine_1 = require("./Engine"); exports.Engine = Engine_1.Engine; var NodeList_1 = require("./NodeList"); exports.NodeList = NodeList_1.NodeList; var Node_1 = require("./Node"); exports.Node = Node_1.Node; var System_1 = require("./System"); exports.System = System_1.System; var Entity_1 = require("./Entity"); exports.Entity = Entity_1.Entity; var Node_2 = require("./Node"); exports.keep = Node_2.keep; },{"./Engine":38,"./Entity":39,"./Node":41,"./NodeList":42,"./System":44}],47:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class ListenerNode { } exports.ListenerNode = ListenerNode; },{}],48:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ListenerNode_1 = require("./ListenerNode"); class ListenerNodePool { get() { if (this.tail) { let node = this.tail; this.tail = this.tail.previous; node.previous = null; return node; } else { return new ListenerNode_1.ListenerNode(); } } dispose(node) { node.listener = null; node.once = false; node.next = null; node.previous = this.tail; this.tail = node; } cache(node) { node.listener = null; node.previous = this.cacheTail; this.cacheTail = node; } releaseCache() { while (this.cacheTail) { let node = this.cacheTail; this.cacheTail = node.previous; node.next = null; node.previous = this.tail; this.tail = node; } } } exports.ListenerNodePool = ListenerNodePool; },{"./ListenerNode":47}],49:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const SignalBase_1 = require("./SignalBase"); class Signal0 extends SignalBase_1.SignalBase { dispatch() { this.startDispatch(); let node; for (node = this.head; node; node = node.next) { node.listener.call(node); if (node.once) { this.remove(node.listener); } } this.endDispatch(); } } exports.Signal0 = Signal0; },{"./SignalBase":52}],50:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const SignalBase_1 = require("./SignalBase"); class Signal1 extends SignalBase_1.SignalBase { dispatch(object) { this.startDispatch(); let node; for (node = this.head; node; node = node.next) { node.listener.call(node, object); if (node.once) { this.remove(node.listener); } } this.endDispatch(); } } exports.Signal1 = Signal1; },{"./SignalBase":52}],51:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const SignalBase_1 = require("./SignalBase"); class Signal2 extends SignalBase_1.SignalBase { dispatch(object1, object2) { this.startDispatch(); let node; for (node = this.head; node; node = node.next) { node.listener.call(node, object1, object2); if (node.once) { this.remove(node.listener); } } this.endDispatch(); } } exports.Signal2 = Signal2; },{"./SignalBase":52}],52:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Dictionary_1 = require("../Dictionary"); const ListenerNodePool_1 = require("./ListenerNodePool"); class SignalBase { constructor() { this._numListeners = 0; this.nodes = new Dictionary_1.default(); this.listenerNodePool = new ListenerNodePool_1.ListenerNodePool(); } startDispatch() { this.dispatching = true; } endDispatch() { this.dispatching = false; if (this.toAddHead) { if (!this.head) { this.head = this.toAddHead; this.tail = this.toAddTail; } else { this.tail.next = this.toAddHead; this.toAddHead.previous = this.tail; this.tail = this.toAddTail; } this.toAddHead = null; this.toAddTail = null; } this.listenerNodePool.releaseCache(); } get numListeners() { return this._numListeners; } add(listener) { if (this.nodes.has(listener)) { return; } let node = this.listenerNodePool.get(); node.listener = listener; this.nodes.set(listener, node); this.addNode(node); } addOnce(listener) { if (this.nodes.has(listener)) { return; } let node = this.listenerNodePool.get(); node.listener = listener; node.once = true; this.nodes.set(listener, node); this.addNode(node); } addNode(node) { if (this.dispatching) { if (!this.toAddHead) { this.toAddHead = this.toAddTail = node; } else { this.toAddTail.next = node; node.previous = this.toAddTail; this.toAddTail = node; } } else { if (!this.head) { this.head = this.tail = node; } else { this.tail.next = node; node.previous = this.tail; this.tail = node; } } this._numListeners++; } remove(listener) { let node = this.nodes.get(listener); if (node) { if (this.head === node) { this.head = this.head.next; } if (this.tail === node) { this.tail = this.tail.previous; } if (this.toAddHead === node) { this.toAddHead = this.toAddHead.next; } if (this.toAddTail === node) { this.toAddTail = this.toAddTail.previous; } if (node.previous) { node.previous.next = node.next; } if (node.next) { node.next.previous = node.previous; } this.nodes.remove(listener); if (this.dispatching) { this.listenerNodePool.cache(node); } else { this.listenerNodePool.dispose(node); } this._numListeners--; } } removeAll() { while (this.head) { let node = this.head; this.head = this.head.next; this.nodes.remove(node.listener); this.listenerNodePool.dispose(node); } this.tail = null; this.toAddHead = null; this.toAddTail = null; this._numListeners = 0; } } exports.SignalBase = SignalBase; },{"../Dictionary":37,"./ListenerNodePool":48}],53:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Signal1_1 = require("../signals/Signal1"); class JiboTickProvider extends Signal1_1.Signal1 { constructor() { super(); this.DESIRED_FREQ = 20; this.update = () => { this._rafId = requestAnimationFrame(this.update); let time = performance.now(); let timeDiff = (time - this._previousTime); if (timeDiff > this._minTimeDiff) { this.dispatch((time - this._previousTime) / 1000); this._previousTime = time; } }; } start() { this._previousTime = performance.now(); this.playing = true; this._rafId = requestAnimationFrame(this.update); this._minTimeDiff = 1 / this.DESIRED_FREQ * 1000; } stop() { cancelAnimationFrame(this._rafId); } } exports.default = JiboTickProvider; },{"../signals/Signal1":50}],54:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class AttentionNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.Attention) ], AttentionNode.prototype, "attention", void 0); exports.AttentionNode = AttentionNode; },{"../components":35,"../core/Node":41}],55:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class DisplayNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], DisplayNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.Display) ], DisplayNode.prototype, "display", void 0); __decorate([ Node_1.keep(components_1.DisplayChange) ], DisplayNode.prototype, "displayChange", void 0); exports.DisplayNode = DisplayNode; },{"../components":35,"../core/Node":41}],56:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class FetchAssetNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], FetchAssetNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.FetchAsset) ], FetchAssetNode.prototype, "fetchAsset", void 0); __decorate([ Node_1.keep(components_1.AssetCache) ], FetchAssetNode.prototype, "assetCache", void 0); exports.FetchAssetNode = FetchAssetNode; },{"../components":35,"../core/Node":41}],57:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class GetConfigNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], GetConfigNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.GetConfig) ], GetConfigNode.prototype, "getConfig", void 0); exports.GetConfigNode = GetConfigNode; },{"../components":35,"../core/Node":41}],58:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class HeadTouchNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], HeadTouchNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.HeadTouch) ], HeadTouchNode.prototype, "headTouch", void 0); exports.HeadTouchNode = HeadTouchNode; },{"../components":35,"../core/Node":41}],59:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class HotWordNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.HotWord) ], HotWordNode.prototype, "hotWord", void 0); __decorate([ Node_1.keep(components_1.RequestCommand) ], HotWordNode.prototype, "request", void 0); exports.HotWordNode = HotWordNode; },{"../components":35,"../core/Node":41}],60:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class InterruptNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.Interrupt) ], InterruptNode.prototype, "interrupt", void 0); __decorate([ Node_1.keep(components_1.RequestCommand) ], InterruptNode.prototype, "request", void 0); exports.InterruptNode = InterruptNode; },{"../components":35,"../core/Node":41}],61:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class LightRingNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.LightRing) ], LightRingNode.prototype, "lightRing", void 0); __decorate([ Node_1.keep(components_1.RequestCommand) ], LightRingNode.prototype, "request", void 0); exports.LightRingNode = LightRingNode; },{"../components":35,"../core/Node":41}],62:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class ListenNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.Listen) ], ListenNode.prototype, "listen", void 0); __decorate([ Node_1.keep(components_1.RequestCommand) ], ListenNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.LightRing) ], ListenNode.prototype, "lightRing", void 0); exports.ListenNode = ListenNode; },{"../components":35,"../core/Node":41}],63:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class LookAtNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], LookAtNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.LookAt) ], LookAtNode.prototype, "lookAt", void 0); __decorate([ Node_1.keep(components_1.Target) ], LookAtNode.prototype, "target", void 0); exports.LookAtNode = LookAtNode; },{"../components":35,"../core/Node":41}],64:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class MotionStreamNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], MotionStreamNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.MotionStream) ], MotionStreamNode.prototype, "motion", void 0); exports.MotionStreamNode = MotionStreamNode; },{"../components":35,"../core/Node":41}],65:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class PersonStreamNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], PersonStreamNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.PersonStream) ], PersonStreamNode.prototype, "lps", void 0); exports.PersonStreamNode = PersonStreamNode; },{"../components":35,"../core/Node":41}],66:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class PhotoStreamNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], PhotoStreamNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.PhotoStream) ], PhotoStreamNode.prototype, "stream", void 0); exports.PhotoStreamNode = PhotoStreamNode; },{"../components":35,"../core/Node":41}],67:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class PlayNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], PlayNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.Play) ], PlayNode.prototype, "play", void 0); exports.PlayNode = PlayNode; },{"../components":35,"../core/Node":41}],68:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class RemoteIndicatorNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RemoteIndicator) ], RemoteIndicatorNode.prototype, "indicator", void 0); __decorate([ Node_1.keep(components_1.LightRing) ], RemoteIndicatorNode.prototype, "lightRing", void 0); exports.RemoteIndicatorNode = RemoteIndicatorNode; },{"../components":35,"../core/Node":41}],69:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class RequestCommandNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], RequestCommandNode.prototype, "request", void 0); exports.RequestCommandNode = RequestCommandNode; },{"../components":35,"../core/Node":41}],70:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class ScreenGestureNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], ScreenGestureNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.ScreenGesture) ], ScreenGestureNode.prototype, "gesture", void 0); exports.ScreenGestureNode = ScreenGestureNode; },{"../components":35,"../core/Node":41}],71:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class SessionNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], SessionNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.Session) ], SessionNode.prototype, "session", void 0); exports.SessionNode = SessionNode; },{"../components":35,"../core/Node":41}],72:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class SetConfigNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], SetConfigNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.SetConfig) ], SetConfigNode.prototype, "setConfig", void 0); exports.SetConfigNode = SetConfigNode; },{"../components":35,"../core/Node":41}],73:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class TakePhotoNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], TakePhotoNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.TakePhoto) ], TakePhotoNode.prototype, "photoData", void 0); exports.TakePhotoNode = TakePhotoNode; },{"../components":35,"../core/Node":41}],74:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class TestNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], TestNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.Test) ], TestNode.prototype, "test", void 0); exports.TestNode = TestNode; },{"../components":35,"../core/Node":41}],75:[function(require,module,exports){ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../core/Node"); const components_1 = require("../components"); class UnloadAssetNode extends Node_1.Node { } __decorate([ Node_1.keep(components_1.RequestCommand) ], UnloadAssetNode.prototype, "request", void 0); __decorate([ Node_1.keep(components_1.UnloadAsset) ], UnloadAssetNode.prototype, "unloadAsset", void 0); __decorate([ Node_1.keep(components_1.AssetCache) ], UnloadAssetNode.prototype, "assetCache", void 0); exports.UnloadAssetNode = UnloadAssetNode; },{"../components":35,"../core/Node":41}],76:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var AttentionNode_1 = require("./AttentionNode"); exports.AttentionNode = AttentionNode_1.AttentionNode; var DisplayNode_1 = require("./DisplayNode"); exports.DisplayNode = DisplayNode_1.DisplayNode; var FetchAssetNode_1 = require("./FetchAssetNode"); exports.FetchAssetNode = FetchAssetNode_1.FetchAssetNode; var UnloadAssetNode_1 = require("./UnloadAssetNode"); exports.UnloadAssetNode = UnloadAssetNode_1.UnloadAssetNode; var GetConfigNode_1 = require("./GetConfigNode"); exports.GetConfigNode = GetConfigNode_1.GetConfigNode; var HeadTouchNode_1 = require("./HeadTouchNode"); exports.HeadTouchNode = HeadTouchNode_1.HeadTouchNode; var HotWordNode_1 = require("./HotWordNode"); exports.HotWordNode = HotWordNode_1.HotWordNode; var InterruptNode_1 = require("./InterruptNode"); exports.InterruptNode = InterruptNode_1.InterruptNode; var LightRingNode_1 = require("./LightRingNode"); exports.LightRingNode = LightRingNode_1.LightRingNode; var ListenNode_1 = require("./ListenNode"); exports.ListenNode = ListenNode_1.ListenNode; var LookAtNode_1 = require("./LookAtNode"); exports.LookAtNode = LookAtNode_1.LookAtNode; var MotionStreamNode_1 = require("./MotionStreamNode"); exports.MotionStreamNode = MotionStreamNode_1.MotionStreamNode; var PersonStreamNode_1 = require("./PersonStreamNode"); exports.PersonStreamNode = PersonStreamNode_1.PersonStreamNode; var PhotoStreamNode_1 = require("./PhotoStreamNode"); exports.PhotoStreamNode = PhotoStreamNode_1.PhotoStreamNode; var PlayNode_1 = require("./PlayNode"); exports.PlayNode = PlayNode_1.PlayNode; var RemoteIndicatorNode_1 = require("./RemoteIndicatorNode"); exports.RemoteIndicatorNode = RemoteIndicatorNode_1.RemoteIndicatorNode; var RequestCommandNode_1 = require("./RequestCommandNode"); exports.RequestCommandNode = RequestCommandNode_1.RequestCommandNode; var ScreenGestureNode_1 = require("./ScreenGestureNode"); exports.ScreenGestureNode = ScreenGestureNode_1.ScreenGestureNode; var SessionNode_1 = require("./SessionNode"); exports.SessionNode = SessionNode_1.SessionNode; var SetConfigNode_1 = require("./SetConfigNode"); exports.SetConfigNode = SetConfigNode_1.SetConfigNode; var TakePhotoNode_1 = require("./TakePhotoNode"); exports.TakePhotoNode = TakePhotoNode_1.TakePhotoNode; var TestNode_1 = require("./TestNode"); exports.TestNode = TestNode_1.TestNode; },{"./AttentionNode":54,"./DisplayNode":55,"./FetchAssetNode":56,"./GetConfigNode":57,"./HeadTouchNode":58,"./HotWordNode":59,"./InterruptNode":60,"./LightRingNode":61,"./ListenNode":62,"./LookAtNode":63,"./MotionStreamNode":64,"./PersonStreamNode":65,"./PhotoStreamNode":66,"./PlayNode":67,"./RemoteIndicatorNode":68,"./RequestCommandNode":69,"./ScreenGestureNode":70,"./SessionNode":71,"./SetConfigNode":72,"./TakePhotoNode":73,"./TestNode":74,"./UnloadAssetNode":75}],77:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const nodes_1 = require("../nodes"); const jibo_1 = require("../../jibo"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class AttentionSystem extends core_1.System { constructor() { super(); this.onRemoved = (node) => { this.releaseAttention(node.attention); }; } addToEngine(engine) { this.nodes = engine.getNodeList(nodes_1.AttentionNode); this.nodes.nodeRemoved.add(this.onRemoved); } update(time) { let node = this.nodes.head; for (node; node; node = node.next) { if (node.next) { this.releaseAttention(node.attention); if (node.request) { if (node.request.acknowledged) { let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Error, EventError: { ErrorString: "Attention mode overwritten", ErrorCode: 1 } }; node.request.addResponse(response, true); } else { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Conflict, true); } } } else if (!node.attention.active) { let attention = node.attention; attention.active = true; jibo_1.jiboRef.jibo.expression.pushAttentionMode(this.convertMode(attention.mode)) .then((handle) => { if (attention.active) { attention.handle = handle; } else { handle.release() .then(() => { }); } }); if (node.request) { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Created, true); } } } } removeFromEngine(engine) { this.nodes = null; } convertMode(mode) { return String(mode); } releaseAttention(attention) { if (attention.active) { attention.active = false; if (attention.handle) { attention.handle.release() .then(() => { attention.handle = null; }); } } } } exports.default = AttentionSystem; },{"../../jibo":100,"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],78:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const nodes_1 = require("../nodes"); const CommandUtil_1 = require("../../CommandUtil"); class CommandSystem extends core_1.System { constructor() { super(); } addToEngine(engine) { this.engine = engine; this.commandNodes = engine.getNodeList(nodes_1.RequestCommandNode); this.sessionNodes = engine.getNodeList(nodes_1.SessionNode); } update(time) { let node = this.commandNodes.head; const sessionNode = this.sessionNodes.tail; if (sessionNode) { if (sessionNode.session.reconnection) { for (let i = 0; i < sessionNode.session.storedEvents.length; i++) { sessionNode.session.sendMethod(sessionNode.session.storedEvents[i]); } sessionNode.session.storedEvents.length = 0; sessionNode.session.reconnection = false; } for (node; node; node = node.next) { if (node.request.isDirty) { if (!node.request.acknowledged) { this.sendEvent(sessionNode.session, this.createAcknowledgement(sessionNode.session, node.request)); node.request.acknowledged = true; } if (node.request.responses.length > 0) { this.sendMessages(node.request, sessionNode.session); } if (node.request.complete) { this.engine.removeEntity(node.entity); } else { node.request.clean(); } } } } } removeFromEngine(engine) { this.commandNodes = null; this.engine = engine; } sendEvent(session, data) { if (session.hasConnection) { session.sendMethod(data); } else { session.storedEvents.push(data); } } sendMessages(request, session) { for (let i = 0; i < request.responses.length; i++) { this.sendEvent(session, this.createEvent(session, request, request.responses[i])); } request.responses.length = 0; } createAcknowledgement(ses, req) { return CommandUtil_1.default.createAcknowledgement(req.version, req.id, ses.id, req.acknowledgeCode, req.acknowledgeData); } createEvent(ses, req, data) { return CommandUtil_1.default.createEvent(req.version, req.id, ses.id, data); } } exports.default = CommandSystem; },{"../../CommandUtil":5,"../core":46,"../nodes":76}],79:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const nodes_1 = require("../nodes"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class DisplaySystem extends core_1.System { constructor() { super(); this.onAdded = (node) => { }; this.onRemoved = (node) => { if (node.displayChange.isActive) { this.removeView().then((view) => { console.log('onRemoved : remove view succeeded'); }) .catch(() => { console.log('onRemoved : remove view failed'); }); } }; } addToEngine(engine) { this.nodes = engine.getNodeList(nodes_1.DisplayNode); for (let node = this.nodes.head; node; node = node.next) { this.onAdded(node); } this.nodes.nodeAdded.add(this.onAdded); this.nodes.nodeRemoved.add(this.onRemoved); } update(time) { let node = this.nodes.tail; while (node) { let displayChange = node.displayChange; if (!displayChange.isActive) { displayChange.isActive = true; let request = node.request; switch (displayChange.type) { case jibo_command_protocol_1.DisplayChangeType.Swap: let view = this.createView(node.display.view); if (view) { this.swapViews(view) .then((view) => { let response = { Event: jibo_command_protocol_1.DisplayEvents.ViewStateChange, State: jibo_command_protocol_1.ViewStates.Opened }; request.addResponse(response, false); }) .catch(() => { console.log('update : swap view failed'); displayChange.isActive = false; let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Stop, }; request.addResponse(response, true); }); } else { console.log('update : invalid view data'); displayChange.isActive = false; let code = jibo_command_protocol_1.ResponseCode.BadRequest; let message = jibo_command_protocol_1.DisplayErrorDetails.MissingValues; request.setAcknowledge(code, true, message); node = node.previous; break; } } } node = node.previous; for (node; node; node = node.previous) { if (!node.displayChange.isActive) { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Conflict, true, 'active view change in process'); } else { node.displayChange.isActive = false; let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Stop, }; node.request.addResponse(response, true); } } node = null; } } removeFromEngine(engine) { this.nodes = null; } swapViews(view) { return new Promise((resolve, reject) => { if (view) { jibo_1.jiboRef.jibo.face.views.changeView({ remove: true, addView: view }, resolve, reject); } }); } removeView() { return new Promise((resolve, reject) => { jibo_1.jiboRef.jibo.face.views.changeView({ remove: true }, resolve, reject); }); } createView(viewRequest) { try { if (viewRequest) { let view; switch (viewRequest.Type) { case jibo_command_protocol_1.DisplayViewType.Eye: let eyeView = new jibo_1.jiboRef.jibo.face.views.EyeView(); this.setViewDefaults(eyeView, viewRequest); return eyeView; case jibo_command_protocol_1.DisplayViewType.Text: view = this.setViewDefaults(new jibo_1.jiboRef.jibo.face.views.View(), viewRequest); let label = new jibo_1.jiboRef.jibo.face.views.Label(); label.text = viewRequest.Text; label.setTargetAnchor(.5, .5); label.setTargetPosition(jibo_1.jiboRef.jibo.face.width / 2, jibo_1.jiboRef.jibo.face.height / 2); view.addComponent(label); return view; case jibo_command_protocol_1.DisplayViewType.Image: view = this.setViewDefaults(new jibo_1.jiboRef.jibo.face.views.View(), viewRequest); let clip = new jibo_1.jiboRef.jibo.face.views.Clip(); clip.addAssetDescriptor(viewRequest.Image.name, viewRequest.Image.src, 'texture'); view.addComponent(clip); return view; } } else { console.log('swapViews : given view request was null'); } } catch (err) { console.log('swapViews : error encountered creating view', err); } return null; } setViewDefaults(view, viewRequest) { view.id = viewRequest.Name; view.closeOnSwipeDown = false; return view; } } exports.default = DisplaySystem; },{"../../jibo":100,"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],80:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const nodes_1 = require("../nodes"); const jibo_1 = require("../../jibo"); const jibo_common_types_1 = require("jibo-common-types"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class GetConfigSystem extends core_1.System { constructor() { super(); this.onRemoved = (node) => { }; } addToEngine(engine) { this.nodes = engine.getNodeList(nodes_1.GetConfigNode); this.nodes.nodeRemoved.add(this.onRemoved); } update(time) { let node = this.nodes.head; for (node; node; node = node.next) { console.log("got node"); let request = node.request; if (!request.acknowledged) { let getConfig = node.getConfig; this.getConfigState(getConfig).then((response) => { request.addResponse(response, true); }); } } } removeFromEngine(engine) { this.nodes = null; } getConfigState(getConfig) { return new Promise((resolve, reject) => { let config; let bs = new jibo_common_types_1.BodyState(); let battery = { Settable: false, Capacity: bs.powerState.battery.capacity, Max_capacity: bs.powerState.battery.max_capacity, Charge_rate: bs.powerState.battery.charge_rate }; let wifi = { Settable: false, Strength: 0, }; let mixers = { Settable: true, Master: null }; const head = jibo_1.jiboRef.jibo.expression.features.head; let actualPosition = head.direction.clone().add(head.position); let position = { WorldPosition: [actualPosition.x, actualPosition.y, actualPosition.z], AnglePosition: this.XYZ2Angles(actualPosition) }; mixers.Master = jibo_1.jiboRef.jibo.volume.currentVolume / 10; jibo_1.jiboRef.jibo.wifi.getCurrentNetwork((err, net) => { wifi.Strength = net.strength; config = { Event: jibo_command_protocol_1.ConfigEvents.onConfig, Battery: battery, Wifi: wifi, Mixers: mixers, Position: position }; resolve(config); }); }); } XYZ2Angles(actualPosition) { return [0, 0]; } } exports.default = GetConfigSystem; },{"../../jibo":100,"../core":46,"../nodes":76,"jibo-command-protocol":undefined,"jibo-common-types":undefined}],81:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const nodes_1 = require("../nodes"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class HeadTouchSystem extends core_1.System { constructor() { super(); this.headPads = [false, false, false, false, false, false]; } addToEngine(engine) { this.engine = engine; this.nodes = this.engine.getNodeList(nodes_1.HeadTouchNode); } removeFromEngine(engine) { this.nodes = null; } update(time) { let node = this.nodes.tail; if (node) { let request = node.request; this.updatePads(); if (this.hasBeenTouched === true) { let response = { Event: jibo_command_protocol_1.HeadTouchEvents.HeadTouched, Pads: this.headPads }; request.addResponse(response, false); } for (node = node.previous; node; node = node.previous) { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Conflict, true); } } } updatePads() { let headTouchData = jibo_1.jiboRef.jibo.system.getTouchState(); this.headPads = headTouchData.pad_state; this.hasBeenTouched = headTouchData.touched; } } exports.default = HeadTouchSystem; },{"../../jibo":100,"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],82:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const nodes_1 = require("../nodes"); const components_1 = require("../components"); const CommandUtil_1 = require("../../CommandUtil"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class HotWordSystem extends core_1.System { constructor(enable = true) { super(); this.hjHeard = false; this.hjEnable = enable; this.onHJHeard = this.onHJHeard.bind(this); } addToEngine(engine) { if (this.hjEnable) { this.resetHJHeard(); jibo_1.jiboRef.jibo.jetstream.events.hjHeard.on(this.onHJHeard); this.nodes = engine.getNodeList(nodes_1.HotWordNode); } this.enableHJ(this.hjEnable); } update(time) { if (this.nodes) { let node = this.nodes.head; for (node; node; node = node.next) { let request = node.request; if (node.next) { if (request.acknowledged) { let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Error, EventError: { ErrorString: "HotWord Subscribe overwritten", ErrorCode: 1 } }; request.addResponse(response, true); node.entity.remove(components_1.LightRing); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Conflict, true); } } else { const hotWord = node.hotWord; if (hotWord.coolDown > 0) { hotWord.coolDown -= time; if (hotWord.coolDown <= 0) { hotWord.coolDown = 0; node.entity.remove(components_1.LightRing); } } else if (this.hjHeard) { const response = { Event: jibo_command_protocol_1.HotWordEvents.HotWordHeard, Speaker: this.speaker }; request.addResponse(response); hotWord.coolDown = hotWord.coolDownMax; const lightRing = new components_1.LightRing(); lightRing.setColor(CommandUtil_1.default.LISTEN_COLORS); node.entity.add(lightRing); } } } this.resetHJHeard(); } } removeFromEngine(engine) { this.nodes = null; if (this.hjEnable) { jibo_1.jiboRef.jibo.jetstream.events.hjHeard.off(this.onHJHeard); } this.resetHJHeard(); if (this.hjToken) { this.hjToken.release().catch((err) => { }).then(() => { this.hjToken = null; }); } } enableHJ(enable) { if (enable) { if (!this.hjToken) { this.hjToken = jibo_1.jiboRef.jibo.jetstream.setHotwordMode(jibo_1.jiboRef.jibo.jetstream.types.HotwordListenMode.HJ_Only); } else { } return this.hjToken.activated.catch((err) => { }); } else { if (!this.hjToken) { this.hjToken = jibo_1.jiboRef.jibo.jetstream.setHotwordMode(jibo_1.jiboRef.jibo.jetstream.types.HotwordListenMode.Disabled); } else { } return this.hjToken.activated.catch((err) => { }); } } onHJHeard(data) { this.hjHeard = true; let stubSpeaker = { LPSPosition: { Position: [0, 0, 0], AngleVector: [0, 0], Confidence: 0 }, SpeakerID: { Type: jibo_command_protocol_1.EntityType.Unknown, Confidence: 0 } }; this.speaker = stubSpeaker; } resetHJHeard() { if (this.hjHeard) { jibo_1.jiboRef.jibo.embodied.listen.waitForIdle(true); jibo_1.jiboRef.jibo.globalEvents.shared.hjOnly.emit(); } this.hjHeard = false; this.speaker = null; } } exports.default = HotWordSystem; },{"../../CommandUtil":5,"../../jibo":100,"../components":35,"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],83:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const nodes_1 = require("../nodes"); const components_1 = require("../components"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class InterruptSystem extends core_1.System { constructor() { super(); } addToEngine(engine) { this.interrupts = engine.getNodeList(nodes_1.InterruptNode); this.requests = engine.getNodeList(nodes_1.RequestCommandNode); } update(time) { for (let node = this.interrupts.head; node; node = node.next) { if (node.interrupt.interruptAll) { this.interruptAllCommands(); return; } else { let interruptId = node.interrupt.interruptId; if (interruptId) { if (this.interruptCommandById(interruptId)) { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.OK, true, interruptId); } else { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.OK, true, 'No command found with id: ' + interruptId); } } else { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.NotAcceptable, true, 'Id not provided'); } } } } removeFromEngine(engine) { this.interrupts = null; this.requests = null; } interruptAllCommands() { let node = this.requests.head; for (node; node; node = node.next) { if (!node.entity.has(components_1.Interrupt)) { this.interruptEntity(node); } else { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.OK, true); } } } interruptCommandById(id) { let node = this.requests.head; for (node; node; node = node.next) { if (node.request.id === id) { this.interruptEntity(node); return true; } } return false; } interruptEntity(node) { let components = node.entity.getAll(); for (let i = components.length - 1; i >= 0; i--) { let componentClass = components[i].constructor.prototype.constructor; if (componentClass !== components_1.RequestCommand) { node.entity.remove(componentClass); } } node.request.acknowledged = true; node.request.setComplete(); } } exports.default = InterruptSystem; },{"../components":35,"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],84:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const nodes_1 = require("../nodes"); class ListenRingSystem extends core_1.System { constructor() { super(); this.onRemoved = (node) => { if (node.lightRing.isActive) { if (node.previous) { jibo_1.jiboRef.jibo.expression.setLEDColor(node.previous.lightRing.color); node.previous.lightRing.isActive = true; } else { jibo_1.jiboRef.jibo.expression.setLEDColor([0, 0, 0]); } } }; } addToEngine(engine) { this.nodes = engine.getNodeList(nodes_1.LightRingNode); this.nodes.nodeRemoved.add(this.onRemoved); } update(time) { let node = this.nodes.head; for (node; node; node = node.next) { let lightRing = node.lightRing; if (node.next) { lightRing.isActive = false; } else { lightRing.isActive = true; if (lightRing.isDirty) { jibo_1.jiboRef.jibo.expression.setLEDColor(node.lightRing.color); lightRing.isDirty = false; } } } } removeFromEngine(engine) { this.nodes = null; jibo_1.jiboRef.jibo.expression.setLEDColor([0, 0, 0]); } } exports.default = ListenRingSystem; },{"../../jibo":100,"../core":46,"../nodes":76}],85:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const nodes_1 = require("../nodes"); const CommandUtil_1 = require("../../CommandUtil"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class ListenSystem extends core_1.System { constructor() { super(); this.onRemoved = (node) => { if (node.listen.isActive) { if (node.listen.mim) { node.listen.mim.stopAndDestroy(); node.listen.mim = null; } node.listen.isActive = false; } }; } addToEngine(engine) { this.nodes = engine.getNodeList(nodes_1.ListenNode); this.nodes.nodeRemoved.add(this.onRemoved); } update(time) { let node = this.nodes.head; for (node; node; node = node.next) { let request = node.request; if (node.next) { if (request.acknowledged) { let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Error, EventError: { ErrorString: "Listen overwritten", ErrorCode: 1 } }; request.addResponse(response, true); } else { request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Conflict, true); } } else { let listen = node.listen; if (!listen.mim) { this.createMim(listen); listen.isActive = true; node.lightRing.setColor(CommandUtil_1.default.LISTEN_COLORS); } else { let status = listen.mim.update(); if (status !== jibo_1.jiboRef.jibo.bt.Status.IN_PROGRESS) { if (status === jibo_1.jiboRef.jibo.bt.Status.INTERRUPTED) { let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Stop, StopReason: jibo_command_protocol_1.ListenStopReasons.Interrupted, }; request.addResponse(response, true); } else { if (node.listen.speech === null) { let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Stop, StopReason: jibo_command_protocol_1.ListenStopReasons.NoInput, }; request.addResponse(response, true); } else { if (node.listen.speech.text === "") { let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Stop, StopReason: jibo_command_protocol_1.ListenStopReasons.NoMatch, }; request.addResponse(response, true); } else { let response = { Event: jibo_command_protocol_1.ListenEvents.ListenResult, LanguageCode: "en-US", Speech: listen.speech.text }; request.addResponse(response, true); } } } listen.isActive = false; } } } } } removeFromEngine(engine) { this.nodes = null; } createMim(listen) { let mimConfig = { mim_id: "Listen System", mim_type: "optional-response", rule_name: "shared/wildcard", timeout: listen.maxNoSpeechTimeout, barge_in: false, prompts: [ { prompt_category: "Entry-Core", prompt_sub_category: "AN", index: 1, condition: "", prompt: "", media: "silence", prompt_id: "" } ], num_tries_for_gui: 0, es_auto_tagging: true, ignore_no_match: true }; let mimOptions = { onSuccess: listen.onMimEnd.bind(listen), mimConfig: mimConfig, assetPack: "jibo", onFailure: listen.onMimEnd.bind(listen), onPositionalSelect: null, mimPath: null, guiConfig: null, getPromptData: null, asrMetadata: { skill: "remote" }, isMenu: false }; listen.mim = new jibo_1.jiboRef.jibo.bt.behaviors.Mim(mimOptions); listen.mim.start(); } } exports.default = ListenSystem; },{"../../CommandUtil":5,"../../jibo":100,"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],86:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const nodes_1 = require("../nodes"); const components_1 = require("../components"); const jibo_command_protocol_1 = require("jibo-command-protocol"); const os = require("os"); exports.MIN_FREE_MEM_RATE = 0.05; class LoadAssetSystem extends core_1.System { constructor() { super(); this.onAdded = (node) => { }; this.onRemoved = (node) => { }; } addToEngine(engine) { this.engine = engine; this.nodes = this.engine.getNodeList(nodes_1.FetchAssetNode); for (let node = this.nodes.head; node; node = node.next) { this.onAdded(node); } this.nodes.nodeAdded.add(this.onAdded); this.nodes.nodeRemoved.add(this.onRemoved); } update(time) { let node = this.nodes.head; for (node; node; node = node.next) { let fetchAsset = node.fetchAsset; let request = node.request; if (!request.acknowledged) { if (!this.thereIsFreeMemory()) { let code = jibo_command_protocol_1.ResponseCode.NotAcceptable; request.setAcknowledge(code, true, jibo_command_protocol_1.FetchAssetErrorDetails.OutOfMemory); } else { let assetToken = jibo_1.jiboRef.jibo.loader.load(this.buildAsset(fetchAsset), (err, res) => { let response; if (err) { response = { Event: jibo_command_protocol_1.FetchAssetEvents.AssetFailed, Detail: err }; } else { response = { Event: jibo_command_protocol_1.FetchAssetEvents.AssetReady, Detail: fetchAsset.name }; } request.addResponse(response, true); }); node.assetCache.assetTokens.set(fetchAsset.name, assetToken); } } } } removeFromEngine(engine) { let entityCache = engine.getEntityByName("assetCache"); if (entityCache) { let assetCache = entityCache.get(components_1.AssetCache); let removeAssetToken = (value, key, map) => { jibo_1.jiboRef.jibo.loader.unload(value); map.delete(key); }; assetCache.assetTokens.forEach(removeAssetToken); } this.nodes = null; } thereIsFreeMemory() { if (jibo_1.jiboRef.jibo.runMode === jibo_1.jiboRef.jibo.RunMode.ON_ROBOT) { return (os.freemem() / os.totalmem() > exports.MIN_FREE_MEM_RATE); } return true; } buildAsset(fetchAsset) { if (fetchAsset.uri.endsWith(".wav") || fetchAsset.uri.endsWith(".mp3")) { return { id: fetchAsset.name, src: fetchAsset.uri, type: "sound", block: false, volume: 1, panning: 0, loop: false, autoPlay: false, cache: jibo_1.jiboRef.jibo.loader.activeCache, complete: function (err, sound) { } }; } else if (fetchAsset.uri.endsWith(".png") || fetchAsset.uri.endsWith(".jpg") || fetchAsset.uri.endsWith(".jpeg")) { return { id: fetchAsset.name, src: fetchAsset.uri, type: "texture", upload: false, cache: jibo_1.jiboRef.jibo.loader.activeCache, complete: function (err, texture) { } }; } else { return null; } } } exports.default = LoadAssetSystem; },{"../../jibo":100,"../components":35,"../core":46,"../nodes":76,"jibo-command-protocol":undefined,"os":undefined}],87:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const THREE = require("@jibo/three"); const nodes_1 = require("../nodes"); const jibo_command_protocol_1 = require("jibo-command-protocol"); const jibo_command_protocol_2 = require("jibo-command-protocol"); class LookAtSystem extends core_1.System { constructor() { super(); this.screenSize = [640, 360]; this.onRemoved = (node) => { if (node.lookAt.isActive && !node.lookAt.interrupted) { let actualPosition = jibo_1.jiboRef.jibo.expression.features.head.direction.clone().add(jibo_1.jiboRef.jibo.expression.features.head.position); jibo_1.jiboRef.jibo.expression.acquireTarget({ position: actualPosition }); } }; this.getCameraParameters(); } addToEngine(engine) { this.nodes = engine.getNodeList(nodes_1.LookAtNode); this.nodes.nodeRemoved.add(this.onRemoved); } update(time) { let node = this.nodes.head; for (node; node; node = node.next) { let lookAt = node.lookAt; let request = node.request; if (node.next) { if (request.acknowledged) { let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Error, EventError: { ErrorString: "Target overwritten", ErrorCode: 1 } }; request.addResponse(response, true); } else { let code; code = jibo_command_protocol_1.ResponseCode.Conflict; request.setAcknowledge(code, true); } node.lookAt.interrupted = true; } else { if (!lookAt.isActive) { let target = { position: null }; const lookAtTarget = node.target.lookAtTarget; if (jibo_command_protocol_2.typeguards.isPositionTarget(lookAtTarget)) { target.position = { x: lookAtTarget.Position[0], y: lookAtTarget.Position[1], z: lookAtTarget.Position[2] }; } else if (jibo_command_protocol_2.typeguards.isAngleTarget(lookAtTarget)) { target.position = this.angles2XYZ(lookAtTarget.Angle); } else if (jibo_command_protocol_2.typeguards.isCameraTarget(lookAtTarget)) { target.position = this.screencords2XYZ(lookAtTarget); } else if (jibo_command_protocol_2.typeguards.isEntityTarget(lookAtTarget)) { target.position = this.entity2XYZ(lookAtTarget.Entity); } if (target.position) { lookAt.isActive = true; jibo_1.jiboRef.jibo.expression.acquireTarget(target).then((acquireHandle) => { acquireHandle.promise.then((result) => { let response; if (result === "SUCCEEDED") { response = { Event: jibo_command_protocol_1.LookAtEvents.LookAtAchieved, PositionTarget: [0, 0, 0], AngleTarget: [0, 0] }; } else { response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Error, EventError: { ErrorString: "Target overwritten", ErrorCode: 1 } }; } request.addResponse(response, true); }); }); } else { let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Error, EventError: { ErrorString: "Bad target", ErrorCode: 2 } }; request.addResponse(response, true); } } } } } removeFromEngine(engine) { this.nodes = null; } entity2XYZ(lookAtEntity) { let lpsData = jibo_1.jiboRef.jibo.lps.motionData; for (let entity of lpsData.entities) { if (entity.description = "person") { let hasParts = entity.parts.some((part) => { return ((part.key === "head") || (part.key === "face")); }); if (hasParts) { if (lookAtEntity === entity.id) { return entity.position; } } } } return null; } angles2XYZ(angles) { const head = jibo_1.jiboRef.jibo.expression.features.head; let actualPosition = head.direction.clone().add(head.position); let up = new THREE.Vector3(0, 0, 1); let perpendicular = actualPosition.clone().cross(up); let auxVector = actualPosition.clone().applyAxisAngle(up, angles[0]); let target = auxVector.clone().applyAxisAngle(perpendicular.clone().applyAxisAngle(up, angles[0]), angles[1]); return target; } screencords2XYZ(target) { let screencords = [null, null]; let cx = this.cameraParameters.center.x; let cy = this.cameraParameters.center.y; let fx = this.cameraParameters.focalLength.x; let fy = this.cameraParameters.focalLength.y; if (target.ScreenSize) { screencords[0] = target.ScreenCoords[0] * this.cameraParameters.width / target.ScreenSize[0]; screencords[1] = target.ScreenCoords[1] * this.cameraParameters.height / target.ScreenSize[1]; } else { screencords[0] = target.ScreenCoords[0] * this.cameraParameters.width / this.screenSize[0]; screencords[1] = target.ScreenCoords[1] * this.cameraParameters.height / this.screenSize[1]; } let n_pix = [(screencords[0] - cx) / fx, (screencords[1] - cy) / fy]; let k1 = this.cameraParameters.distortion[0]; let k2 = this.cameraParameters.distortion[1]; let k3 = this.cameraParameters.distortion[4]; let p1 = this.cameraParameters.distortion[2]; let p2 = this.cameraParameters.distortion[3]; let nd_pix = [n_pix[0], n_pix[1]]; for (let i = 0; i < 20; i++) { let r_2 = Math.pow(nd_pix[0], 2) + Math.pow(nd_pix[1], 2); let r_4 = r_2 * r_2; let r_6 = r_2 * r_4; let k_radial = 1 + k1 * r_2 + k2 * r_4 + k3 * r_6; let delta_x = 2 * p1 * nd_pix[0] * nd_pix[1] + p2 * (r_2 + 2 * Math.pow(nd_pix[0], 2)); let delta_y = p1 * (r_2 + 2 * Math.pow(nd_pix[1], 2)) + 2 * p2 * nd_pix[0] * nd_pix[1]; nd_pix[0] = (n_pix[0] - delta_x) / k_radial; nd_pix[1] = (n_pix[1] - delta_y) / k_radial; } let u_pix = [nd_pix[0] * fx + cx, nd_pix[1] * fy + cy]; let theta = Math.atan((u_pix[0] - cx) / fx); let psi = -Math.atan((u_pix[1] - cy) / fy); let angles = [theta, psi]; return this.angles2XYZ(angles); } getCameraParameters() { this.cameraParameters = { width: 1280, height: 720, center: { x: 657.3223266601562, y: 378.8253479003906 }, focalLength: { x: 783.9614868164062, y: 784.0986328125 }, distortion: [ -0.36631643772125244, 0.1101401150226593, 0.0009784416761249304, 0.0012007149634882808, 0 ] }; try { jibo_1.jiboRef.jibo.lps.getCameraParameters(0, (err, data) => { if (data && this.isCameraParameters(data)) { this.cameraParameters = data; } }); } catch (e) { } } isCameraParameters(data) { return typeof data === 'object' && 'focalLength' in data; } } exports.default = LookAtSystem; },{"../../jibo":100,"../core":46,"../nodes":76,"@jibo/three":undefined,"jibo-command-protocol":undefined}],88:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const nodes_1 = require("../nodes"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class MotionStreamSystem extends core_1.System { constructor() { super(); this.detectedMotions = []; } addToEngine(engine) { this.engine = engine; this.nodes = this.engine.getNodeList(nodes_1.MotionStreamNode); } removeFromEngine(engine) { this.nodes = null; this.detectedMotions = null; } update(time) { let node = this.nodes.tail; if (node) { let request = node.request; this.detectMotion(); if (this.detectedMotions.length > 0) { let response = { Event: jibo_command_protocol_1.MotionEvents.MotionDetected, Motions: this.detectedMotions }; request.addResponse(response, false); } for (node = node.previous; node; node = node.previous) { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Conflict, true); } } } detectMotion() { let lpsData = jibo_1.jiboRef.jibo.lps.motionData; this.detectedMotions.length = 0; let detectedMotion = { Intensity: null, WorldCoords: null, ScreenCoords: null }; for (let entity of lpsData.entities) { if (entity.description = "motion") { detectedMotion.Intensity = entity.intensity; detectedMotion.WorldCoords = [entity.position.x, entity.position.y, entity.position.z]; if (entity.parts.length > 0) { if (entity.parts[0].value.trackers.length > 0) { let rectangle = entity.parts[0].value.trackers[0].rectangle; let x = rectangle.left; let y = rectangle.top; let width = rectangle.right - rectangle.left; let height = rectangle.bottom - rectangle.top; detectedMotion.ScreenCoords = [x, y, width, height]; this.detectedMotions.push(detectedMotion); } } } } } } exports.default = MotionStreamSystem; },{"../../jibo":100,"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],89:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const nodes_1 = require("../nodes"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class PersonStreamSystem extends core_1.System { constructor() { super(); this.detectedEntities = []; this.lostEntities = []; this.updatedEntities = []; } addToEngine(engine) { this.engine = engine; this.nodes = this.engine.getNodeList(nodes_1.PersonStreamNode); } removeFromEngine(engine) { this.nodes = null; } update(time) { let node = this.nodes.head; if (node) { let request = node.request; this.updateLPS(); if (this.detectedEntities.length > 0) { let response = { Event: jibo_command_protocol_1.EntityTrackEvents.TrackGained, Tracks: this.detectedEntities }; request.addResponse(response, false); } let response = { Event: jibo_command_protocol_1.EntityTrackEvents.TrackUpdate, Tracks: this.updatedEntities }; request.addResponse(response, false); if (this.lostEntities.length > 0) { let response = { Event: jibo_command_protocol_1.EntityTrackEvents.TrackLost, Tracks: this.lostEntities }; request.addResponse(response, false); } for (node = node.next; node; node = node.next) { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Conflict, true); } } } updateLPS() { let lpsData = jibo_1.jiboRef.jibo.lps.motionData; let prevUpdatedEntities = this.updatedEntities.slice().concat(this.detectedEntities.slice()); this.detectedEntities.length = 0; this.lostEntities.length = 0; this.updatedEntities.length = 0; for (let entity of lpsData.entities) { if (entity.description = "person") { let hasParts = entity.parts.some((part) => { return ((part.key === "head") || (part.key === "face")); }); if (hasParts) { let trackedEntity = { EntityID: null, Type: null, Confidence: null, WorldCoords: null, ScreenCoords: null }; trackedEntity.Type = jibo_command_protocol_1.EntityType.Person; trackedEntity.Confidence = entity.confidence; trackedEntity.EntityID = entity.id; trackedEntity.WorldCoords = [entity.position.x, entity.position.y, entity.position.z]; let rectangle = entity.parts[0].value.trackers[0].rectangle; let x = rectangle.left; let y = rectangle.top; let width = rectangle.right - rectangle.left; let height = rectangle.bottom - rectangle.top; trackedEntity.ScreenCoords = [x, y, width, height]; if (!this.checkOldEntity(trackedEntity, prevUpdatedEntities)) { this.detectedEntities.push(trackedEntity); } else { this.updatedEntities.push(trackedEntity); } } } } this.lostEntities = this.checkLostEntities(prevUpdatedEntities); } checkOldEntity(trackedEntity, prevUpdatedEntities) { if (prevUpdatedEntities.length > 0) { return prevUpdatedEntities.some((entity) => { return entity.EntityID === trackedEntity.EntityID; }); } else { return false; } } checkLostEntities(prevUpdatedEntities) { return prevUpdatedEntities.filter((prevEntity) => { let exist = this.updatedEntities.some((entity) => { return entity.EntityID === prevEntity.EntityID; }); return !exist; }); } } exports.default = PersonStreamSystem; },{"../../jibo":100,"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],90:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const uuid = require("uuid"); const jibo_command_protocol_1 = require("jibo-command-protocol"); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const nodes_1 = require("../nodes"); exports.ASSET_PATH = '/assets/'; class PhotoStreamSystem extends core_1.System { constructor() { super(); this.onRemoved = (node) => { if (node.stream.isActive) { jibo_1.jiboRef.jibo.remote.cancelAsset(node.stream.assetUrl); } }; } addToEngine(engine) { this.engine = engine; this.nodes = this.engine.getNodeList(nodes_1.PhotoStreamNode); this.nodes.nodeRemoved.add(this.onRemoved); } update(time) { let node = this.nodes.head; if (node) { let stream = node.stream; if (!stream.isActive) { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Accepted, false); stream.isActive = true; const url = stream.assetUrl = exports.ASSET_PATH + uuid.v4(); jibo_1.jiboRef.jibo.remote.handleVideo(url, stream.photoType); const response = { Event: jibo_command_protocol_1.VideoEvents.VideoReady, URI: url }; node.request.addResponse(response); } for (node = node.next; node; node = node.next) { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Conflict, true); } } } removeFromEngine(engine) { this.nodes = null; } } exports.default = PhotoStreamSystem; },{"../../jibo":100,"../core":46,"../nodes":76,"jibo-command-protocol":undefined,"uuid":undefined}],91:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const nodes_1 = require("../nodes"); const jibo_command_protocol_1 = require("jibo-command-protocol"); const jibo_node_xml_1 = require("jibo-node-xml"); class PlaySystem extends core_1.System { constructor() { super(); this.onAdded = (node) => { }; this.onRemoved = (node) => { if (node.play.activated && !node.play.completed) { if (jibo_1.jiboRef.jibo.embodied.speech.isActive()) { jibo_1.jiboRef.jibo.embodied.speech.stop() .then(() => { }); } if (node.play.audioId) { jibo_1.jiboRef.jibo.sound.stop(node.play.audioId); } } }; } addToEngine(engine) { this.engine = engine; this.nodes = this.engine.getNodeList(nodes_1.PlayNode); for (let node = this.nodes.head; node; node = node.next) { this.onAdded(node); } this.nodes.nodeAdded.add(this.onAdded); this.nodes.nodeRemoved.add(this.onRemoved); } update(time) { let node = this.nodes.head; for (node; node; node = node.next) { let play = node.play; if (!play.activated) { if (play.textInESML) { play.activated = true; play.audioId = this.getAudioFile(play.textInESML); let request = node.request; this.playESML(play).then((response) => { play.completed = true; request.addResponse(response, true); }); } else { let code; code = jibo_command_protocol_1.ResponseCode.BadRequest; node.request.setAcknowledge(code, true); } } } } removeFromEngine(engine) { this.nodes = null; } getAudioFile(esml) { let esmlParsed = jibo_node_xml_1.Parser.parseXML(esml); let allNodes = esmlParsed.gatherChildren(); if (allNodes.length === 1) { let tagNode = esmlParsed.findFirstChildType('audio'); if (tagNode) { let path = tagNode.getAttribute('path'); if (path) { return String(path); } } } return null; } playESML(play) { return new Promise((resolve) => { let jibo = jibo_1.jiboRef.jibo; if (play.audioId) { if (jibo.sound.exists(play.audioId)) { jibo.sound.play(play.audioId, () => { let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Stop }; resolve(response); }); } else { let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Error, EventError: { ErrorString: "No sound matching alias '" + play.audioId + "'", ErrorCode: 2 } }; resolve(response); } } else { jibo.embodied.speech.speak(play.textInESML, play.speakOptions, play.autoRuleConfig) .then(() => { let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Stop }; resolve(response); }) .catch((err) => { let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Error, EventError: { ErrorString: err.message ? err.message : String(err), ErrorCode: 1 } }; resolve(response); }); } }); } } exports.default = PlaySystem; },{"../../jibo":100,"../core":46,"../nodes":76,"jibo-command-protocol":undefined,"jibo-node-xml":undefined}],92:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const nodes_1 = require("../nodes"); const jibo_1 = require("../../jibo"); class RemoteIndicatorSystem extends core_1.System { constructor() { super(); this.onAdded = (node) => { let indicator = node.indicator; indicator.maxLEDColor = this.hexToLightRing(indicator.maxHexColor); indicator.minLEDColor = this.hexToLightRing(indicator.minHexColor); indicator.deltaInColor[0] = indicator.maxLEDColor[0] - indicator.minLEDColor[0]; indicator.deltaInColor[1] = indicator.maxLEDColor[1] - indicator.minLEDColor[1]; indicator.deltaInColor[2] = indicator.maxLEDColor[2] - indicator.minLEDColor[2]; indicator.deltaAlpha = indicator.maxAlpha - indicator.minAlpha; let graphic = new PIXI.Graphics(); graphic.beginFill(parseInt(indicator.dotColor)); graphic.drawCircle(0, 0, indicator.dotRadius); let icon = new PIXI.Container(); icon.alpha = indicator.maxAlpha; indicator.timer = indicator.duration; indicator.lerpIsRising = true; icon.x = jibo_1.jiboRef.jibo.face.width - indicator.horizontalOffset; icon.y = jibo_1.jiboRef.jibo.face.height - indicator.verticalOffset; icon.addChild(graphic); jibo_1.jiboRef.jibo.face.views.addWatermark(icon); node.indicator.icon = icon; }; this.onRemoved = (node) => { if (node.indicator.icon) { jibo_1.jiboRef.jibo.face.views.removeWatermark(); } }; } addToEngine(engine) { this.nodes = engine.getNodeList(nodes_1.RemoteIndicatorNode); for (let node = this.nodes.head; node; node = node.next) { this.onAdded(node); } this.nodes.nodeAdded.add(this.onAdded); this.nodes.nodeRemoved.add(this.onRemoved); } update(time) { let node = this.nodes.head; if (node) { let indicator = node.indicator; if (indicator.lerpIsRising) { indicator.timer += time; if (indicator.timer >= indicator.duration) { indicator.timer = indicator.duration; indicator.lerpIsRising = !indicator.lerpIsRising; } } else { indicator.timer -= time; if (indicator.timer <= 0) { indicator.timer = 0; indicator.lerpIsRising = !indicator.lerpIsRising; } } const lerpVal = Math.sin(indicator.timer / indicator.duration); node.lightRing.setColors(indicator.minLEDColor[0] + (lerpVal * indicator.deltaInColor[0]), indicator.minLEDColor[1] + (lerpVal * indicator.deltaInColor[1]), indicator.minLEDColor[2] + (lerpVal * indicator.deltaInColor[2])); indicator.icon.alpha = indicator.minAlpha + (lerpVal * (indicator.deltaAlpha)); } } removeFromEngine(engine) { this.nodes = null; } hexToLightRing(hex) { let hexNum = /0x([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i.exec(hex); return [parseInt(hexNum[1], 16) / 255, parseInt(hexNum[2], 16) / 255, parseInt(hexNum[3], 16) / 255]; } } exports.default = RemoteIndicatorSystem; },{"../../jibo":100,"../core":46,"../nodes":76}],93:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const nodes_1 = require("../nodes"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class ScreenTouchSystem extends core_1.System { constructor() { super(); this.screenCoordsArray = []; this.responses = []; this.onMouseDown = this.onMouseDown.bind(this); this.onMouseUp = this.onMouseUp.bind(this); this.onMouseMove = this.onMouseMove.bind(this); } addToEngine(engine) { this.engine = engine; this.nodes = this.engine.getNodeList(nodes_1.ScreenGestureNode); document.addEventListener('mousedown', this.onMouseDown); document.addEventListener('mousemove', this.onMouseMove); document.addEventListener('mouseup', this.onMouseUp); } removeFromEngine(engine) { this.nodes = null; document.removeEventListener('mousedown', this.onMouseDown); document.removeEventListener('mousemove', this.onMouseMove); document.removeEventListener('mouseup', this.onMouseUp); } update(time) { let node = this.nodes.head; for (node; node; node = node.next) { for (let response of this.responses) { node.request.addResponse(response, false); } } this.responses.length = 0; } onMouseDown(event) { this.screenCoordsArray.push([event.x, event.y]); } onMouseMove(event) { this.screenCoordsArray.push([event.x, event.y]); } onMouseUp(event) { this.getGesture(); this.screenCoordsArray.length = 0; } getGesture() { let xMax = 0; let xMin = 1280; let yMax = 0; let yMin = 720; const tolerance = 50; const first = this.screenCoordsArray[0]; const last = this.screenCoordsArray[this.screenCoordsArray.length - 1]; const xStart = first[0]; const xEnd = last[0]; const yStart = first[1]; const yEnd = last[1]; for (const point of this.screenCoordsArray) { if (point[0] < xMin) { xMin = point[0]; } if (point[0] > xMax) { xMax = point[0]; } if (point[1] < yMin) { yMin = point[1]; } if (point[1] > yMax) { yMax = point[1]; } } if ((yMax - yMin) > (xMax - xMin) && (yMax - yMin) > tolerance) { if ((yStart - yEnd) > 0) { let response = { Event: jibo_command_protocol_1.ScreenGestureEvents.Swipe, Direction: jibo_command_protocol_1.SwipeDirection.Up }; this.responses.push(response); } else { let response = { Event: jibo_command_protocol_1.ScreenGestureEvents.Swipe, Direction: jibo_command_protocol_1.SwipeDirection.Down }; this.responses.push(response); } } else if ((xMax - xMin) > (yMax - yMin) && (xMax - xMin) > tolerance) { if ((xStart - xEnd) > 0) { let response = { Event: jibo_command_protocol_1.ScreenGestureEvents.Swipe, Direction: jibo_command_protocol_1.SwipeDirection.Left }; this.responses.push(response); } else { let response = { Event: jibo_command_protocol_1.ScreenGestureEvents.Swipe, Direction: jibo_command_protocol_1.SwipeDirection.Right }; this.responses.push(response); } } else if ((xMax - xMin) < tolerance && (yMax - yMin) < tolerance) { let response = { Event: jibo_command_protocol_1.ScreenGestureEvents.Tap, Coordinate: [xEnd, yEnd] }; this.responses.push(response); } } } exports.default = ScreenTouchSystem; },{"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],94:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const nodes_1 = require("../nodes"); const jibo_command_protocol_1 = require("jibo-command-protocol"); const jibo_1 = require("../../jibo"); class SessionSystem extends core_1.System { constructor() { super(); this.onRemoved = (node) => { node.session.storedEvents = null; node.session.sendMethod = null; node.session.endSessionMethod = null; jibo_1.jiboRef.jibo.action.resetHoldToQuitTime(); }; } addToEngine(engine) { this.nodes = engine.getNodeList(nodes_1.SessionNode); this.nodes.nodeRemoved.add(this.onRemoved); } removeFromEngine(engine) { this.nodes = null; } update(time) { let node = this.nodes.head; for (node; node; node = node.next) { if (node.next) { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Conflict, true); } else { const session = node.session; const request = node.request; if (request.acknowledged) { if (session.waitingOnReconnect) { session.reconnectDuration += time; if (session.reconnectDuration > session.reconnectTimeout) { session.endSessionMethod(jibo_command_protocol_1.DisconnectCode.ReconnectTimeout); request.setComplete(); } } else { session.inactivityDuration += time; if (session.inactivityDuration > session.inactivityTimeout) { session.hasConnection = false; session.endSessionMethod(jibo_command_protocol_1.DisconnectCode.InactivityTimeout); request.setComplete(); } } } else { const body = { SessionID: session.id, Version: request.version }; request.setAcknowledge(jibo_command_protocol_1.ResponseCode.OK, false, body); if (node.session.headTouchStopTime) { jibo_1.jiboRef.jibo.action.setHoldHeadToQuitDuration(node.session.headTouchStopTime); } } } } } } exports.default = SessionSystem; },{"../../jibo":100,"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],95:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const nodes_1 = require("../nodes"); const jibo_1 = require("../../jibo"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class SetConfigSystem extends core_1.System { constructor() { super(); } addToEngine(engine) { this.nodes = engine.getNodeList(nodes_1.SetConfigNode); } update(time) { let node = this.nodes.head; for (node; node; node = node.next) { let request = node.request; if (!request.acknowledged) { let setConfig = node.setConfig; this.setConfigOptions(setConfig.options).then((response) => { request.addResponse(response, true); }); } } } removeFromEngine(engine) { this.nodes = null; } setConfigOptions(options) { return new Promise((resolve, reject) => { jibo_1.jiboRef.jibo.volume.changeVolume('volumeToValue', options.Mixer * 10); let response = { Event: jibo_command_protocol_1.AsyncCommandEvent.Stop }; resolve(response); }); } } exports.default = SetConfigSystem; },{"../../jibo":100,"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],96:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var SystemPriorities; (function (SystemPriorities) { SystemPriorities[SystemPriorities["interrupt"] = 1] = "interrupt"; SystemPriorities[SystemPriorities["load"] = 2] = "load"; SystemPriorities[SystemPriorities["lps"] = 3] = "lps"; SystemPriorities[SystemPriorities["update"] = 4] = "update"; SystemPriorities[SystemPriorities["light"] = 5] = "light"; SystemPriorities[SystemPriorities["session"] = 6] = "session"; SystemPriorities[SystemPriorities["response"] = 7] = "response"; })(SystemPriorities = exports.SystemPriorities || (exports.SystemPriorities = {})); },{}],97:[function(require,module,exports){ "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const uuid = require("uuid"); const jibo_command_protocol_1 = require("jibo-command-protocol"); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const nodes_1 = require("../nodes"); const jibo_cai_utils_1 = require("jibo-cai-utils"); exports.ASSET_PATH = '/assets/'; class TakePhotoSystem extends core_1.System { constructor() { super(); this.onRemoved = (node) => { if (node.photoData.isActive) { jibo_1.jiboRef.jibo.remote.cancelAsset(node.photoData.assetUrl); node.photoData.isActive = false; } }; } addToEngine(engine) { this.engine = engine; this.nodes = this.engine.getNodeList(nodes_1.TakePhotoNode); this.nodes.nodeRemoved.add(this.onRemoved); } update(time) { let node = this.nodes.head; if (node) { let photoData = node.photoData; if (!photoData.isActive && !photoData.assetUrl) { const media = jibo_1.jiboRef.jibo.media; photoData.isActive = true; let options = { undistort: photoData.distortion }; switch (photoData.camera) { case jibo_command_protocol_1.Camera.Left: options.camera = media.CameraID.LEFT; break; case jibo_command_protocol_1.Camera.Right: options.camera = media.CameraID.RIGHT; break; } switch (photoData.resolution) { case jibo_command_protocol_1.CameraResolution.HighRes: options.photoType = media.PhotoType.FOUR_MP; break; case jibo_command_protocol_1.CameraResolution.MedRes: options.photoType = media.PhotoType.FULL; break; case jibo_command_protocol_1.CameraResolution.LowRes: options.photoType = media.PhotoType.FULL; break; case jibo_command_protocol_1.CameraResolution.MicroRes: options.photoType = media.PhotoType.PREVIEW; break; } const activeNode = node; this._playSound(); jibo_1.jiboRef.jibo.media.takePhoto(options, (err, response) => { if (!activeNode.photoData || !activeNode.photoData.isActive) { return; } if (err) { const event = { Event: jibo_command_protocol_1.AsyncCommandEvent.Error, EventError: { ErrorString: err.message, ErrorCode: 1 } }; activeNode.request.addResponse(event, true); return; } const url = photoData.assetUrl = exports.ASSET_PATH + uuid.v4(); jibo_1.jiboRef.jibo.remote.handlePhoto(url, response.url); const event = { Event: jibo_command_protocol_1.PhotoEvents.TakePhoto, Name: '', URI: url, AngleTarget: [0, 0], PositionTarget: [0, 0, 0] }; activeNode.request.addResponse(event, true); activeNode.photoData.isActive = false; this.engine.requestUpdate(); }); } for (node = node.next; node; node = node.next) { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Conflict, true); } } } _playSound() { return __awaiter(this, void 0, void 0, function* () { yield new Promise((resolve, reject) => { if (!jibo_cai_utils_1.CacheUtils.initialized) { reject(new Error(`Global cache not initialized`)); return; } const sound = jibo_1.jiboRef.jibo.loader.cached('photo', 'global-gui'); if (sound) { sound.play(); resolve(); } else { reject(); } }); }); } removeFromEngine(engine) { this.nodes = null; } } exports.default = TakePhotoSystem; },{"../../jibo":100,"../core":46,"../nodes":76,"jibo-cai-utils":undefined,"jibo-command-protocol":undefined,"uuid":undefined}],98:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const nodes_1 = require("../nodes"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class TestSystem extends core_1.System { constructor() { super(); this.isBlocking = false; this.onAdded = (node) => { }; this.onRemoved = (node) => { }; } addToEngine(engine) { this.engine = engine; this.nodes = this.engine.getNodeList(nodes_1.TestNode); for (let node = this.nodes.head; node; node = node.next) { this.onAdded(node); } this.nodes.nodeAdded.add(this.onAdded); this.nodes.nodeRemoved.add(this.onRemoved); } update(time) { let node = this.nodes.head; if (!this.isBlocking) { for (node; node; node = node.next) { } } else { node = node.next; for (node; node; node = node.next) { node.request.setAcknowledge(jibo_command_protocol_1.ResponseCode.Conflict, true); } } } removeFromEngine(engine) { this.nodes = null; } } exports.default = TestSystem; },{"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],99:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("../core"); const jibo_1 = require("../../jibo"); const nodes_1 = require("../nodes"); const jibo_command_protocol_1 = require("jibo-command-protocol"); class UnloadAssetsSystem extends core_1.System { constructor() { super(); } addToEngine(engine) { this.engine = engine; this.nodes = this.engine.getNodeList(nodes_1.UnloadAssetNode); } update(time) { let node = this.nodes.head; for (node; node; node = node.next) { let unloadAsset = node.unloadAsset; let request = node.request; if (!request.acknowledged) { if (!unloadAsset.name || !node.assetCache.assetTokens.has(unloadAsset.name)) { const code = jibo_command_protocol_1.ResponseCode.NotAcceptable; request.setAcknowledge(code, true, jibo_command_protocol_1.UnloadAssetErrorDetails.InvalidName); } else { let assetToken = node.assetCache.assetTokens.get(unloadAsset.name); if (assetToken) { jibo_1.jiboRef.jibo.loader.unload(assetToken.assetToken); node.assetCache.assetTokens.delete(unloadAsset.name); let response; response = { Event: jibo_command_protocol_1.UnloadAssetEvents.UnloadAssetDone, Detail: unloadAsset.name }; request.addResponse(response, true); } } } } } removeFromEngine(engine) { } } exports.default = UnloadAssetsSystem; },{"../../jibo":100,"../core":46,"../nodes":76,"jibo-command-protocol":undefined}],100:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); let _jibo; class jiboRef { static get jibo() { return _jibo; } } exports.jiboRef = jiboRef; (function (jiboRef) { function setJibo(value) { _jibo = value; } jiboRef.setJibo = setJibo; })(jiboRef = exports.jiboRef || (exports.jiboRef = {})); },{}],101:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const jibo_log_1 = require("jibo-log"); exports.default = new jibo_log_1.Log('Jibo.Remote'); },{"jibo-log":undefined}],102:[function(require,module,exports){ "use strict"; function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } Object.defineProperty(exports, "__esModule", { value: true }); const Ajv = require("ajv"); const ErrorFormatting_1 = require("./ErrorFormatting"); const jibo_1 = require("./jibo"); const log_1 = require("./log"); const CommandConnector_1 = require("./CommandConnector"); const CommandProxy_1 = require("./CommandProxy"); const CommandUtil_1 = require("./CommandUtil"); const CommandSessionManager_1 = require("./CommandSessionManager"); const jibo_command_protocol_1 = require("jibo-command-protocol"); const timer = require("application-metrics"); __export(require("./CommandConnector")); __export(require("./commander/components")); var AttentionSystem_1 = require("./commander/systems/AttentionSystem"); exports.AttentionSystem = AttentionSystem_1.default; var CommandSystem_1 = require("./commander/systems/CommandSystem"); exports.CommandSystem = CommandSystem_1.default; var LoadAssetSystem_1 = require("./commander/systems/LoadAssetSystem"); exports.LoadAssetSystem = LoadAssetSystem_1.default; var DisplaySystem_1 = require("./commander/systems/DisplaySystem"); exports.DisplaySystem = DisplaySystem_1.default; var HotWordSystem_1 = require("./commander/systems/HotWordSystem"); exports.HotWordSystem = HotWordSystem_1.default; var InterruptSystem_1 = require("./commander/systems/InterruptSystem"); exports.InterruptSystem = InterruptSystem_1.default; var RemoteIndicatorSystem_1 = require("./commander/systems/RemoteIndicatorSystem"); exports.RemoteIndicatorSystem = RemoteIndicatorSystem_1.default; var TestSystem_1 = require("./commander/systems/TestSystem"); exports.TestSystem = TestSystem_1.default; var MotionStreamSystem_1 = require("./commander/systems/MotionStreamSystem"); exports.MotionStreamSystem = MotionStreamSystem_1.default; var PersonStreamSystem_1 = require("./commander/systems/PersonStreamSystem"); exports.PersonStreamSystem = PersonStreamSystem_1.default; var HeadTouchSystem_1 = require("./commander/systems/HeadTouchSystem"); exports.HeadTouchSystem = HeadTouchSystem_1.default; var ListenSystem_1 = require("./commander/systems/ListenSystem"); exports.ListenSystem = ListenSystem_1.default; var LightRingSystem_1 = require("./commander/systems/LightRingSystem"); exports.LightRingSystem = LightRingSystem_1.default; var SessionSystem_1 = require("./commander/systems/SessionSystem"); exports.SessionSystem = SessionSystem_1.default; var CommandUtil_2 = require("./CommandUtil"); exports.CommandUtil = CommandUtil_2.default; const INACTIVITY_TIMEOUT = 60 * 1000; const KEEP_ALIVE_TIMEOUT = 10 * 1000; const RECOVERY_TIMEOUT = 20 * 1000; const SLOW_COMMAND = 5; class CommandLibrary { constructor(jibo, validate = true) { if (CommandLibrary._instance) { log_1.default.warn('CommandLibrary Singleton has already been initialized, use CommandLibrary.instance to access'); return; } jibo_1.jiboRef.setJibo(jibo); this.connect = this.connect.bind(this); this.messageReceived = this.messageReceived.bind(this); this.awaitReconnect = this.awaitReconnect.bind(this); this.startSession = this.startSession.bind(this); this.endSession = this.endSession.bind(this); this.disconnect = this.disconnect.bind(this); this.responseFailed = this.responseFailed.bind(this); CommandLibrary._instance = this; this._connections = new Map(); this._sessionManager = new CommandSessionManager_1.default(); this._validateMessages = validate; this.createValidators(); this._validVersions = Object.keys(jibo_command_protocol_1.ProtocolVersions).map(key => (jibo_command_protocol_1.ProtocolVersions[key])); } static createInstance(jibo, validate = true) { CommandLibrary._instance = new CommandLibrary(jibo); } static get instance() { if (!CommandLibrary._instance) { log_1.default.info("CommandLibrary hasn't been constructed, call constructor first."); } return CommandLibrary._instance; } destroy() { CommandLibrary._instance = null; this._connections = null; this._sessionManager = null; this._activeConnection = null; this._activeProxy = null; this._activeVersion = null; this._activeSourceId = ''; this._validator = null; this._validators = null; } createCommandConnector(id, startReady = true) { let commandConnect = this._connections.get(id); if (!commandConnect) { commandConnect = new CommandConnector_1.CommandConnector(id, this, startReady); this._connections.set(id, commandConnect); } return commandConnect; } removeCommandConnector(connector) { if (this._activeConnection === connector) { this.disconnect(jibo_command_protocol_1.DisconnectCode.NewConnection); } this._connections.delete(connector.id); } removeCommandConnectorById(id) { let connector = this._connections.get(id); if (connector) { this.removeCommandConnector(connector); } } connect(commandConnection) { let permissions = this.createPermissionsFromACO(commandConnection.aco); const sourceId = commandConnection.aco.sourceId; if (!this.isValidVersion(permissions.version)) { log_1.default.info(`version not accepted ${permissions.version}, connection denied`); return; } if (this._activeConnection) { if (this._activeConnection === commandConnection) { if (this._activeConnection.isConnected) { if (this._activeSourceId !== sourceId) { log_1.default.info('source ids differ, new connection interrupts previous connection'); this.disconnect(jibo_command_protocol_1.DisconnectCode.NewConnection); } else { log_1.default.info('attempting connection to same source, but already connected'); return; } } else if (this._activeConnection.isAwaitingReconnect) { if (this._activeSourceId !== sourceId) { log_1.default.info('source ids differ, new connection interrupts previous connection'); this.disconnect(jibo_command_protocol_1.DisconnectCode.NewConnection); } else { log_1.default.info('attempting reconnection from same source, wait for session request to restore current session'); return; } } } else { log_1.default.info(`interrupting connector ${this._activeConnection.id} with connection from connector ${commandConnection.id}`); this.disconnect(jibo_command_protocol_1.DisconnectCode.NewConnection); } } jibo_1.jiboRef.jibo.analytics.track('Remote Connected', { app_id: sourceId }); let commandProxy = new CommandProxy_1.default(); commandProxy.onMessage.on(this.messageReceived); commandProxy.onAwaitReconnect.on(this.awaitReconnect); commandProxy.onEndSession.on(this.endSession); commandProxy.onResponseFailed.on(this.responseFailed); commandConnection.applyProxy(commandProxy); this._activeProxy = commandProxy; this._activeConnection = commandConnection; this._activeVersion = permissions.version; this._activeSourceId = sourceId; this._validator = this._validators.get(this._activeVersion); this._activeConnection.version = permissions.version; this._sessionManager.permissions = permissions; } awaitUpdate() { return new Promise((resolve) => { let engine = this.getEngine(); if (engine) { engine.updateComplete.addOnce(resolve); } else { resolve(); } }); } getEngine() { if (this._sessionManager.session) { return this._sessionManager.session.commandManager.entityManager.engine; } return null; } set robotId(robotId) { CommandUtil_1.default.robotId = robotId; } messageReceived(data) { if (this._validateMessages) { if (!this.validateProtocol(data)) { return; } if (!this.checkVersion(data)) { return; } } const sessionMismatch = this._sessionManager.checkSessionMismatch(CommandUtil_1.default.getSessionId(data, this._activeVersion)); if (this._sessionManager.checkSessionCommand(data)) { timer.start('sessionStart'); if (sessionMismatch) { log_1.default.info('messageReceived : new session causing previous session end', data); this._sessionManager.endSession(); } if (this._activeConnection.isReady) { this.startSession(); } else { this._activeConnection.onReady.on(this.startSession); } return; } else if (!this._sessionManager.session) { this.sendAcknowledgement(data, jibo_command_protocol_1.ResponseCode.ServiceUnavailable); return; } if (sessionMismatch) { log_1.default.info('messageReceived : session mismatch for data', data); this.sendAcknowledgement(data, jibo_command_protocol_1.ResponseCode.Forbidden); return; } this._sessionManager.resetInactivityTimeout(); timer.start('startCommand'); this._sessionManager.startCommand(data); let debugTime = timer.stop('startCommand'); if (debugTime > SLOW_COMMAND) { log_1.default.debug(`Command Performance : time to add command ${data.Command.Type} : ${debugTime} ms`); } } responseFailed(message) { if (!this._sessionManager.handleFailedResponse(message)) { } } startSession() { this._activeConnection.onReady.off(this.startSession); this._sessionManager.startSession(this._activeProxy.response, this.disconnect); this._activeProxy.sessionStarted(this._sessionManager.sessionId); log_1.default.debug('Command Performance : time to start session : ' + timer.stop('sessionStart') + 'ms'); } awaitReconnect() { if (!this._sessionManager.handleDisconnection()) { this.disconnect(jibo_command_protocol_1.DisconnectCode.ReconnectError); } } disconnect(code) { this._activeConnection.disconnect(code); } endSession() { jibo_1.jiboRef.jibo.analytics.track('Remote Disconnected', { app_id: this._activeSourceId }); this._sessionManager.endSession(); this._activeProxy = null; if (this._activeConnection) { this._activeConnection.onReady.off(this.startSession); this._activeConnection = null; } } createPermissionsFromACO(aco) { let permissions; if (aco.version === 'v0') { log_1.default.warn(`Protocol version ${aco.version} is no longer a valid version, use 1.0 instead.`); aco.version = jibo_command_protocol_1.ProtocolVersions.v1; } if (aco.version === jibo_command_protocol_1.ProtocolVersions.v1) { permissions = { version: aco.version, attention: aco.commandSet.indexOf(jibo_command_protocol_1.CommandTypes.SetAttention) !== -1, display: aco.commandSet.indexOf(jibo_command_protocol_1.CommandTypes.Display) !== -1, getConfig: aco.commandSet.indexOf(jibo_command_protocol_1.CommandTypes.GetConfig) !== -1, fetchAsset: aco.commandSet.indexOf(jibo_command_protocol_1.CommandTypes.FetchAsset) !== -1, listen: aco.commandSet.indexOf(jibo_command_protocol_1.CommandTypes.Listen) !== -1, lookAt: aco.commandSet.indexOf(jibo_command_protocol_1.CommandTypes.LookAt) !== -1, video: aco.commandSet.indexOf(jibo_command_protocol_1.CommandTypes.Video) !== -1, play: aco.commandSet.indexOf(jibo_command_protocol_1.CommandTypes.Say) !== -1, setConfig: aco.commandSet.indexOf(jibo_command_protocol_1.CommandTypes.SetConfig) !== -1, takePhoto: aco.commandSet.indexOf(jibo_command_protocol_1.CommandTypes.TakePhoto) !== -1, personStream: aco.streamSet.indexOf(jibo_command_protocol_1.StreamTypes.Entity) !== -1, motionStream: aco.streamSet.indexOf(jibo_command_protocol_1.StreamTypes.Motion) !== -1, hotWord: aco.streamSet.indexOf(jibo_command_protocol_1.StreamTypes.HotWord) !== -1, screenGesture: aco.streamSet.indexOf(jibo_command_protocol_1.StreamTypes.ScreenGesture) !== -1, headTouch: aco.streamSet.indexOf(jibo_command_protocol_1.StreamTypes.HeadTouch) !== -1, keepAliveTimeout: aco.keepAliveTimeout || KEEP_ALIVE_TIMEOUT, recoveryTimeout: aco.recoveryTimeout || RECOVERY_TIMEOUT, headTouchStopTime: aco.remoteConfig && aco.remoteConfig.headTouchStopTime, hideRemoteIndicator: !(aco.remoteConfig && !aco.remoteConfig.hideVisualCue), inactivityTimeout: aco.remoteConfig.inactivityTimeout || INACTIVITY_TIMEOUT, test: aco.test, }; } else { log_1.default.error(`Protocol version not supported: ${aco.version}`); return null; } return permissions; } createValidators() { this._validators = new Map(); let schema = require('@types/jibo-command-protocol/commandSchema.json'); let ajv = new Ajv({ allErrors: true }); ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-04.json')); let validator = ajv.compile(schema); this._validators.set(jibo_command_protocol_1.ProtocolVersions.v1, validator); } validateProtocol(data) { if (!this._validator(data)) { let error = ErrorFormatting_1.formatCommandErrors(this._validator.errors); log_1.default.warn('Invalid protocol: ', error); this.sendAcknowledgement(data, jibo_command_protocol_1.ResponseCode.BadRequest, error); return false; } return true; } checkVersion(data) { const version = CommandUtil_1.default.getVersion(data); if (version !== this._activeVersion) { log_1.default.warn('Version conflict, version given: ' + version); this.sendAcknowledgement(data, this.isValidVersion(version) ? jibo_command_protocol_1.ResponseCode.VersionConflict : jibo_command_protocol_1.ResponseCode.VersionNotSupported); return false; } return true; } isValidVersion(version) { return this._validVersions.indexOf(version) !== -1; } sendAcknowledgement(command, code, data) { const response = CommandUtil_1.default.createAcknowledgement(this._activeVersion, CommandUtil_1.default.getTransactionId(command, this._activeVersion), CommandUtil_1.default.getSessionId(command, this._activeVersion), code, data); this._activeProxy.response(response); } } exports.default = CommandLibrary; },{"./CommandConnector":1,"./CommandProxy":2,"./CommandSessionManager":4,"./CommandUtil":5,"./ErrorFormatting":6,"./commander/components":35,"./commander/systems/AttentionSystem":77,"./commander/systems/CommandSystem":78,"./commander/systems/DisplaySystem":79,"./commander/systems/HeadTouchSystem":81,"./commander/systems/HotWordSystem":82,"./commander/systems/InterruptSystem":83,"./commander/systems/LightRingSystem":84,"./commander/systems/ListenSystem":85,"./commander/systems/LoadAssetSystem":86,"./commander/systems/MotionStreamSystem":88,"./commander/systems/PersonStreamSystem":89,"./commander/systems/RemoteIndicatorSystem":92,"./commander/systems/SessionSystem":94,"./commander/systems/TestSystem":98,"./jibo":100,"./log":101,"@types/jibo-command-protocol/commandSchema.json":undefined,"ajv":undefined,"ajv/lib/refs/json-schema-draft-04.json":undefined,"application-metrics":undefined,"jibo-command-protocol":undefined}]},{},[102])(102) }); //# sourceMappingURL=jibo-command-library.js.map