UNPKG

diffusion

Version:

Diffusion JavaScript client

874 lines (873 loc) 41 kB
"use strict"; /** * @module ClientControl */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 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) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ClientControlImpl = void 0; var error_reason_1 = require("./../../errors/error-reason"); var errors_1 = require("./../../errors/errors"); var error_reason_2 = require("./../client/error-reason"); var registration_1 = require("./../control/registration"); var session_fetch_request_1 = require("./../features/clients/session-fetch-request"); var Services = require("./../services/client-control-services"); var change_authorisation_roles_filter_request_1 = require("./../services/control/change-authorisation-roles-filter-request"); var change_authorisation_roles_request_1 = require("./../services/control/change-authorisation-roles-request"); var session_properties_event_type_1 = require("./../services/control/session-properties-event-type"); var set_client_conflation_filter_request_1 = require("./../services/control/set-client-conflation-filter-request"); var set_client_conflation_request_1 = require("./../services/control/set-client-conflation-request"); var set_session_properties_filter_request_1 = require("./../services/control/set-session-properties-filter-request"); var session_id_1 = require("./../session/session-id"); var logger = require("./../util/logger"); var require_non_null_1 = require("./../util/require-non-null"); var response_success_1 = require("./../util/response-success"); var Long = require("long"); var client_control_1 = require("../../features/client-control"); var session_event_listener_registration_request_1 = require("../services/control/session-event-listener-registration-request"); var validate_selection_scope_1 = require("../util/validate-selection-scope"); var topics_1 = require("./topics"); var log = logger.create('Session.Clients'); function sessionStateFromSessionPropertiesEvent(event) { switch (event.type) { case session_properties_event_type_1.SessionPropertiesEventType.CLOSE: return client_control_1.SessionState.CLOSED; case session_properties_event_type_1.SessionPropertiesEventType.OPEN: return client_control_1.SessionState.ACTIVE; case session_properties_event_type_1.SessionPropertiesEventType.UPDATE: default: switch (event.updateType) { // eslint-disable-next-line deprecation/deprecation case client_control_1.SessionEventType.DISCONNECTED: return client_control_1.SessionState.DISCONNECTED; // eslint-disable-next-line deprecation/deprecation case client_control_1.SessionEventType.FAILED_OVER: return client_control_1.SessionState.FAILED_OVER; // eslint-disable-next-line deprecation/deprecation case client_control_1.SessionEventType.RECONNECTED: return client_control_1.SessionState.RECONNECTED; // eslint-disable-next-line deprecation/deprecation case client_control_1.SessionEventType.UPDATED: default: return client_control_1.SessionState.ACTIVE; } } } function sessionEventFromSessionPropertiesEvent(event) { return { sessionId: event.sessionId, type: event.type === session_properties_event_type_1.SessionPropertiesEventType.UPDATE ? client_control_1.SessionEventStreamEventType.PROPERTIES : client_control_1.SessionEventStreamEventType.STATE, properties: event.type !== session_properties_event_type_1.SessionPropertiesEventType.UPDATE ? event.oldProperties : event.newProperties, state: sessionStateFromSessionPropertiesEvent(event), changedProperties: event.type === session_properties_event_type_1.SessionPropertiesEventType.UPDATE ? event.oldProperties : {}, closeReason: event.type === session_properties_event_type_1.SessionPropertiesEventType.CLOSE ? event.closeReason : undefined, isOpenEvent: function () { return this.type === client_control_1.SessionEventStreamEventType.STATE && this.state === client_control_1.SessionState.ACTIVE; } }; } /** * Implementation of the {@link ClientControl} feature */ var ClientControlImpl = /** @class */ (function () { /** * Create a new ClientControlImpl instance * * @param internal the internal session */ function ClientControlImpl(internal) { /** * Exporting the {@link SessionEventType} */ // eslint-disable-next-line @typescript-eslint/naming-convention, deprecation/deprecation this.SessionEventType = client_control_1.SessionEventType; this.internal = internal; this.serviceLocator = internal.getServiceLocator(); this.SET_CLIENT_CONFLATION = this.serviceLocator.obtain(Services.SET_CLIENT_CONFLATION); this.SET_CLIENT_CONFLATION_FILTER = this.serviceLocator.obtain(Services.SET_CLIENT_CONFLATION_FILTER); this.GET_SESSION_PROPERTIES = this.serviceLocator.obtain(Services.GET_SESSION_PROPERTIES); this.SESSION_PROPERTIES_REGISTRATION = this.serviceLocator.obtain(Services.SESSION_PROPERTIES_REGISTRATION_2); this.CHANGE_AUTHORISATION_ROLES = this.serviceLocator.obtain(Services.CHANGE_AUTHORISATION_ROLES); this.CHANGE_AUTHORISATION_ROLES_FILTER = this.serviceLocator.obtain(Services.CHANGE_AUTHORISATION_ROLES_FILTER); this.SET_SESSION_PROPERTIES_FILTER = this.serviceLocator.obtain(Services.SET_SESSION_PROPERTIES_FILTER); this.SESSION_EVENT_REGISTRATION = this.serviceLocator.obtain(Services.SESSION_EVENT_REGISTRATION); this.SESSION_EVENT_DEREGISTRATION = this.serviceLocator.obtain(Services.SESSION_EVENT_DEREGISTRATION); this.GET_SESSION_LOCK = this.serviceLocator.obtain(Services.GET_SESSION_LOCK); this.GET_SESSION_LOCKS = this.serviceLocator.obtain(Services.GET_SESSION_LOCKS); this.internal.getServiceRegistry().add(Services.SESSION_PROPERTIES_EVENT_2, { onRequest: function (internalSession, message, callback) { internalSession.getConversationSet().respondIfPresent(message.cid, message); callback.respond(); } }); } /** * @inheritdoc */ ClientControlImpl.prototype.close = function (sessions) { var _this = this; return new Promise(function (resolve, reject) { try { require_non_null_1.requireNonNull(sessions, 'sessions'); } catch (e) { reject(e); return; } if (_this.internal.checkConnected(reject)) { var sessionID = session_id_1.SessionId.validate(sessions); if (sessionID) { _this.serviceLocator.obtain(Services.CLOSE_CLIENT).send({ sessionID: sessionID }, function (err, response) { if (err) { reject(err); } else { resolve(1); } }); } else if (typeof sessions === 'string') { _this.serviceLocator.obtain(Services.CLOSE_CLIENT_FILTER).send(sessions, function (err, response) { if (!response_success_1.responseSuccess(err, response)) { reject(err); } else if (response.errors.length > 0) { reject(response.errors); } else { resolve(response.count); } }); } else { reject(new Error("Invalid SessionID: " + sessions)); } } }); }; /** * @inheritdoc */ ClientControlImpl.prototype.subscribe = function (session, path, scope) { var _this = this; if (scope === void 0) { scope = topics_1.DEFAULT_TOPIC_SELECTION_SCOPE; } return new Promise(function (resolve, reject) { try { require_non_null_1.requireNonNull(session, 'SessionID or Session Filter'); require_non_null_1.requireNonNull(path, 'Topic Selector'); validate_selection_scope_1.validateSelectionScope(scope); } catch (e) { reject(e); return; } if (_this.internal.checkConnected(reject)) { var selector = void 0; try { selector = _this.internal.getContext().parseSelector(path); } catch (e) { reject(e); return; } var sessionID = session_id_1.SessionId.validate(session); if (sessionID) { _this.serviceLocator.obtain(Services.SUBSCRIBE_CLIENT).send({ sessionID: sessionID, selector: selector, scope: scope }, function (err) { if (err) { reject(err); } else { resolve(); } }); } else { _this.serviceLocator.obtain(Services.FILTER_SUBSCRIBE).send({ filter: session, selector: selector, scope: scope }, function (err, response) { if (!response_success_1.responseSuccess(err, response)) { reject(err); } else if (response.isSuccess()) { resolve(response.selected); } else { reject(response.errors); } }); } } }); }; /** * @inheritdoc */ ClientControlImpl.prototype.unsubscribe = function (session, path, scope) { var _this = this; if (scope === void 0) { scope = topics_1.DEFAULT_TOPIC_SELECTION_SCOPE; } return new Promise(function (resolve, reject) { try { require_non_null_1.requireNonNull(session, 'SessionID or Session Filter'); require_non_null_1.requireNonNull(path, 'Topic Selector'); validate_selection_scope_1.validateSelectionScope(scope); } catch (e) { reject(e); return; } if (_this.internal.checkConnected(reject)) { var selector = void 0; try { selector = _this.internal.getContext().parseSelector(path); } catch (e) { reject(e); return; } var sessionID = session_id_1.SessionId.validate(session); if (sessionID) { _this.serviceLocator.obtain(Services.UNSUBSCRIBE_CLIENT).send({ sessionID: sessionID, selector: selector, scope: scope }, function (err) { if (err) { reject(err); } else { resolve(); } }); } else { _this.serviceLocator.obtain(Services.FILTER_UNSUBSCRIBE).send({ filter: session, selector: selector, scope: scope }, function (err, response) { if (!response_success_1.responseSuccess(err, response)) { reject(err); } else if (response.isSuccess()) { resolve(response.selected); } else { reject(response.errors); } }); } } }); }; /** * @inheritdoc */ ClientControlImpl.prototype.unsubscribeAllScopes = function (session, path) { var _this = this; var parseSelector = this.internal.getContext().parseSelector; return new Promise(function (resolve, reject) { require_non_null_1.requireNonNull(session, 'SessionID or Session Filter'); require_non_null_1.requireNonNull(path, 'Topic Selector'); if (_this.internal.checkConnected(reject)) { var selector = void 0; try { selector = parseSelector(path); } catch (e) { reject(e); return; } log.debug('Unsubscribing from all scopes', path); var sessionID = session_id_1.SessionId.validate(session); if (sessionID) { _this.serviceLocator.obtain(Services.UNSUBSCRIBE_ALL_CONTROL).send({ sessionId: sessionID, selectorExpression: selector.expression }, function (err) { if (err) { log.debug('Unsubscribe failed', path); reject(err); } else { log.debug('Unsubscribe complete', path); resolve(); } }); } else { _this.serviceLocator.obtain(Services.UNSUBSCRIBE_ALL_BY_FILTER).send({ sessionFilter: session, selectorExpression: selector.expression }, function (err) { if (err) { log.debug('Unsubscribe failed', path); reject(err); } else { log.debug('Unsubscribe complete', path); resolve(); } }); } } }); }; /** * @inheritdoc */ ClientControlImpl.prototype.getTopicSelections = function (session) { var _this = this; return new Promise(function (resolve, reject) { require_non_null_1.requireNonNull(session, 'session'); if (_this.internal.checkConnected(reject)) { _this.serviceLocator.obtain(Services.GET_SELECTORS).send(session, function (err, response) { var parseSelector = _this.internal.getContext().parseSelector; if (!response_success_1.responseSuccess(err, response)) { reject(err); } else { resolve(Object.keys(response.scopeMap).reduce(function (acc, value) { var topicSelectionArr = response.scopeMap[value]; acc[value] = topicSelectionArr.map(function (topicSelection) { return { selector: parseSelector(topicSelection.selectorExpression), selectionType: topicSelection.selectionType }; }); return acc; }, {})); } }); } }); }; /** * @inheritdoc */ ClientControlImpl.prototype.getSessionProperties = function (sid, propertyKeys) { var _this = this; if (propertyKeys === void 0) { propertyKeys = []; } return new Promise(function (resolve, reject) { if (typeof sid === 'string') { sid = session_id_1.SessionId.fromString(sid); } if (_this.internal.checkConnected(reject)) { _this.GET_SESSION_PROPERTIES.send({ sessionID: sid, propertyKeys: propertyKeys }, function (err, response) { if (!response_success_1.responseSuccess(err, response)) { reject(err); } else { if (response === null) { reject(new Error('Invalid session ID')); } else { resolve(response.properties); } } }); } }); }; /** * @inheritdoc */ ClientControlImpl.prototype.setSessionProperties = function (sessionId, sessionProperties) { var _this = this; return new Promise(function (resolve, reject) { try { require_non_null_1.requireNonNull(sessionId, 'sessionId'); require_non_null_1.requireNonNull(sessionProperties, 'properties'); } catch (e) { reject(e); return; } if (typeof sessionId === 'string') { sessionId = session_id_1.SessionId.fromString(sessionId); } if (_this.internal.checkConnected(reject)) { var overwriteProperties = {}; var removeProperties = []; _this.extractOverwriteAndRemoveProperties(overwriteProperties, removeProperties, sessionProperties); _this.serviceLocator.obtain(Services.SET_SESSION_PROPERTIES).send({ sessionID: sessionId, overwriteProperties: overwriteProperties, removeProperties: removeProperties }, function (err, response) { if (!response_success_1.responseSuccess(err, response)) { reject(err); } else { resolve(response.properties); } }); } }); }; /** * Place a property into the overwrite object or the remove array, depending * on the property value * * @param overwriteProperties the key-value object that will contain the * properties to modify * @param removeProperties the array will contain the list of properties * that should be removed * @param key the property name * @param property the property value */ ClientControlImpl.prototype.setOverwriteOrRemoveProperty = function (overwriteProperties, removeProperties, key, property) { if (property === null) { removeProperties.push(key); } else { overwriteProperties[key] = property; } }; /** * Extract the properties that should be modified and those that should be * removed and place them into separate data structures. * * @param overwriteProperties the key-value object that will contain the * properties to modify * @param removeProperties the array will contain the list of properties * that should be removed * @param sessionProperties the user supplied session properties */ ClientControlImpl.prototype.extractOverwriteAndRemoveProperties = function (overwriteProperties, removeProperties, sessionProperties) { var e_1, _a; var _this = this; if (sessionProperties.forEach instanceof Function) { sessionProperties.forEach(function (property, key) { _this.setOverwriteOrRemoveProperty(overwriteProperties, removeProperties, key, property); }); } else { try { for (var _b = __values(Object.getOwnPropertyNames(sessionProperties)), _c = _b.next(); !_c.done; _c = _b.next()) { var key = _c.value; this.setOverwriteOrRemoveProperty(overwriteProperties, removeProperties, key, sessionProperties[key]); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } } }; /** * @inheritdoc */ ClientControlImpl.prototype.setSessionPropertiesByFilter = function (filter, sessionProperties) { var _this = this; return new Promise(function (resolve, reject) { try { require_non_null_1.requireNonNull(filter, 'filter'); require_non_null_1.requireNonNull(sessionProperties, 'properties'); } catch (e) { reject(e); return; } if (_this.internal.checkConnected(reject)) { var overwriteProperties = {}; var removeProperties = []; var request = new set_session_properties_filter_request_1.SetSessionPropertiesFilterRequest(filter, overwriteProperties, removeProperties); _this.extractOverwriteAndRemoveProperties(overwriteProperties, removeProperties, sessionProperties); _this.SET_SESSION_PROPERTIES_FILTER.send(request, function (err, response) { if (!response_success_1.responseSuccess(err, response)) { reject(err); } else if (response.errors.length > 0) { reject(response.errors); } else { resolve(response.count); } }); } }); }; /** * @inheritdoc */ // eslint-disable-next-line deprecation/deprecation ClientControlImpl.prototype.setSessionPropertiesListener = function (requiredProperties, handler) { var _this = this; // eslint-disable-next-line no-async-promise-executor return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { var adapter, conversationSet, cid; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!handler) { reject(new Error('Session Properties listener is null or undefined')); } if (!this.internal.checkConnected(reject)) return [3 /*break*/, 2]; log.debug('Adding Session Properties Listener'); adapter = { active: function (close) { log.debug('Session Properties Listener active'); handler.onActive(close); }, respond: function (message) { var e_2, _a; try { for (var _b = __values(message.events), _c = _b.next(); !_c.done; _c = _b.next()) { var event_1 = _c.value; switch (event_1.type) { case session_properties_event_type_1.SessionPropertiesEventType.OPEN: handler.onSessionOpen(event_1.sessionId, event_1.oldProperties); break; case session_properties_event_type_1.SessionPropertiesEventType.UPDATE: handler.onSessionEvent(event_1.sessionId, event_1.updateType, event_1.newProperties, event_1.oldProperties); break; case session_properties_event_type_1.SessionPropertiesEventType.CLOSE: handler.onSessionClose(event_1.sessionId, event_1.oldProperties, event_1.closeReason); break; default: log.debug('Unknown event type received for session properties listener', event_1.type); } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_2) throw e_2.error; } } return false; }, close: function (err) { log.debug('Session Properties Listener closed'); if (err) { handler.onError(err); } else { handler.onClose(); } } }; conversationSet = this.internal.getConversationSet(); return [4 /*yield*/, conversationSet.newConversation(registration_1.responseHandler(this.internal, adapter, function (conversationId, callback) { _this.SESSION_PROPERTIES_REGISTRATION.send({ cid: conversationId }, callback); }))]; case 1: cid = _a.sent(); this.SESSION_PROPERTIES_REGISTRATION.send({ cid: cid, properties: requiredProperties }, registration_1.registrationCallback(conversationSet, cid, resolve, reject)); _a.label = 2; case 2: return [2 /*return*/]; } }); }); }); }; /** * @inheritdoc */ ClientControlImpl.prototype.addSessionEventListener = function (listener, parameters) { var _this = this; // eslint-disable-next-line no-async-promise-executor return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { var adapter, conversationSet_1, cid_1; var _this = this; var _a; return __generator(this, function (_b) { switch (_b.label) { case 0: if (!listener) { reject(new errors_1.NullValueError('listener is null or undefined')); return [2 /*return*/]; } if (!parameters) { reject(new errors_1.NullValueError('parameters is null or undefined')); return [2 /*return*/]; } if (!this.internal.checkConnected(reject)) return [3 /*break*/, 2]; log.debug('Adding Session Event Listener'); adapter = { active: function (close) { log.debug('Session Event Listener active'); resolve({ close: close }); }, respond: function (message) { var e_3, _a; try { for (var _b = __values(message.events), _c = _b.next(); !_c.done; _c = _b.next()) { var event_2 = _c.value; listener.onSessionEvent(sessionEventFromSessionPropertiesEvent(event_2)); } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_3) throw e_3.error; } } return false; }, close: function (err) { log.debug('Session Properties Listener closed'); if (err) { listener.onError(err instanceof error_reason_2.ErrorReason ? err : error_reason_1.ErrorReason.COMMUNICATION_FAILURE); } else { listener.onClose(); } } }; conversationSet_1 = this.internal.getConversationSet(); return [4 /*yield*/, conversationSet_1.newConversation(registration_1.responseHandler(this.internal, adapter, function (conversationId, callback) { _this.SESSION_EVENT_DEREGISTRATION.send(cid_1, callback); }))]; case 1: cid_1 = _b.sent(); this.SESSION_EVENT_REGISTRATION.send(new session_event_listener_registration_request_1.SessionEventListenerRegistrationRequest(true, parameters.filter, parameters.properties, Long.fromNumber((_a = parameters.after) !== null && _a !== void 0 ? _a : 0), cid_1), function (err, response) { if (err) { conversationSet_1.discard(cid_1, err); reject(err); } else { if (response === null || response === void 0 ? void 0 : response.errors.length) { conversationSet_1.discard(cid_1, response.errors); reject(new Error('Session filter is invalid')); } else { conversationSet_1.respondIfPresent(cid_1, registration_1.ResponseHandlerState.ACTIVE); } } }); _b.label = 2; case 2: return [2 /*return*/]; } }); }); }); }; /** * @inheritdoc */ ClientControlImpl.prototype.changeRoles = function (sessions, rolesToRemove, rolesToAdd) { var _this = this; var rolesToRemoveArray = Array.isArray(rolesToRemove) ? rolesToRemove : __spreadArray([], __read(rolesToRemove)); var rolesToAddArray = Array.isArray(rolesToAdd) ? rolesToAdd : __spreadArray([], __read(rolesToAdd)); if (rolesToRemoveArray.length === 0 && rolesToAddArray.length === 0) { throw new errors_1.IllegalArgumentError('rolesToRemove and rolesToAdd cannot both be empty'); } require_non_null_1.requireNonNull(sessions, 'sessions'); var sessionId = session_id_1.SessionId.validate(sessions); return new Promise(function (resolve, reject) { if (_this.internal.checkConnected(reject)) { if (sessionId === false) { var request = new change_authorisation_roles_filter_request_1.ChangeAuthorisationRolesFilterRequest(sessions, rolesToRemoveArray, rolesToAddArray); _this.CHANGE_AUTHORISATION_ROLES_FILTER.send(request, function (err, response) { if (err) { reject(err); } else if (response.errors.length > 0) { reject(response.errors); } else { resolve(response.count); } }); } else { var request = new change_authorisation_roles_request_1.ChangeAuthorisationRolesRequest(sessionId, rolesToRemoveArray, rolesToAddArray); _this.CHANGE_AUTHORISATION_ROLES.send(request, function (err) { if (err) { reject(err); } else { resolve(1); } }); } } }); }; /** * @inheritdoc */ ClientControlImpl.prototype.getSessionLock = function (lockName) { var _this = this; return new Promise(function (resolve, reject) { try { require_non_null_1.requireNonNull(lockName, 'lockName'); } catch (e) { reject(e); return; } if (_this.internal.checkConnected(reject)) { _this.GET_SESSION_LOCK.send(lockName, function (err, response) { var _a; if (err) { reject(err); } else { resolve((_a = response.sessionLockDetails) !== null && _a !== void 0 ? _a : null); } }); } }); }; /** * @inheritdoc */ ClientControlImpl.prototype.getSessionLocks = function () { var _this = this; return new Promise(function (resolve, reject) { if (_this.internal.checkConnected(reject)) { _this.GET_SESSION_LOCKS.send(null, function (err, response) { if (err) { reject(err); } else { resolve(response.sessionLocksDetails); } }); } }); }; /** * @inheritdoc */ ClientControlImpl.prototype.setConflated = function (sessions, conflated) { var _this = this; return new Promise(function (resolve, reject) { try { require_non_null_1.requireNonNull(sessions, 'sessions'); } catch (e) { reject(e); return; } if (_this.internal.checkConnected(reject)) { var sessionID = session_id_1.SessionId.validate(sessions); if (sessionID) { var request = new set_client_conflation_request_1.SetClientConflationRequest(sessionID, conflated); _this.SET_CLIENT_CONFLATION.send(request, function (err) { if (err) { reject(err); } else { resolve(1); } }); } else if (typeof sessions === 'string') { var request = new set_client_conflation_filter_request_1.SetClientConflationFilterRequest(sessions, conflated); _this.SET_CLIENT_CONFLATION_FILTER.send(request, function (err, response) { if (!response_success_1.responseSuccess(err, response)) { reject(err); } else if (response.errors.length > 0) { reject(response.errors); } else { resolve(response.count); } }); } else { reject(new Error("Invalid SessionID: " + sessions)); } } }); }; /** * @inheritdoc */ ClientControlImpl.prototype.fetchRequest = function () { return new session_fetch_request_1.SessionFetchRequestImpl(this.internal); }; return ClientControlImpl; }()); exports.ClientControlImpl = ClientControlImpl;