diffusion
Version:
Diffusion JavaScript client
736 lines (735 loc) • 35.3 kB
JavaScript
"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 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.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) {
var _this = this;
return new Promise(function (resolve, reject) {
try {
session = require_non_null_1.requireNonNull(session, 'SessionID or Session Filter');
path = require_non_null_1.requireNonNull(path, 'Topic Selector');
}
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
}, function (err) {
if (err) {
reject(err);
}
else {
resolve();
}
});
}
else {
_this.serviceLocator.obtain(Services.FILTER_SUBSCRIBE).send({
filter: session,
selector: selector
}, 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) {
var _this = this;
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');
}
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
}, function (err) {
if (err) {
reject(err);
}
else {
resolve();
}
});
}
else {
_this.serviceLocator.obtain(Services.FILTER_UNSUBSCRIBE).send({
filter: session,
selector: selector
}, 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.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 (key, property) {
_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.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;