baqend
Version:
Baqend JavaScript SDK
157 lines • 12.1 kB
JavaScript
;
/* this connector will only be choose in browser compatible environments */
/* eslint no-restricted-globals: ["off", "location", "addEventListener"] */
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.IFrameConnector = void 0;
var Connector_1 = require("./Connector");
var XMLHttpConnector_1 = require("./XMLHttpConnector");
var IFrameConnector = /** @class */ (function (_super) {
__extends(IFrameConnector, _super);
function IFrameConnector(host, port, secure, basePath) {
var _this = _super.call(this, host, port, secure, basePath) || this;
_this.queue = null;
_this.connected = false;
_this.mid = 0;
_this.messages = {};
_this.doReceive = _this.doReceive.bind(_this);
addEventListener('message', _this.doReceive, false);
return _this;
}
/**
* Indicates if this connector implementation is usable for the given host and port
* @param host
* @param port
* @param secure
* @return
*/
IFrameConnector.isUsable = function (host, port, secure) {
// we use location directly here, since there exists environments, which provide a location and a document but
// no window object
if (typeof location === 'undefined' || typeof document === 'undefined') {
return false;
}
var locationSecure = location.protocol === 'https:';
var locationPort = location.port || (locationSecure ? 443 : 80);
return location.hostname !== host || locationPort !== port || locationSecure !== secure;
};
IFrameConnector.prototype.load = function (message) {
var _a;
var url = this.origin + this.basePath + message.path();
var name = "baqend-sdk-connect-".concat(Math.floor(Math.random() * 100000));
this.iframe = document.createElement('iframe');
this.iframe.name = name;
this.iframe.setAttribute('style', IFrameConnector.style);
document.body.appendChild(this.iframe);
var form = document.createElement('form');
form.target = name;
form.method = 'post';
form.action = url;
form.setAttribute('style', IFrameConnector.style);
var token = (_a = message.tokenStorage()) === null || _a === void 0 ? void 0 : _a.token;
if (token) {
var input = document.createElement('input');
input.type = 'hidden';
input.name = 'BAT';
input.value = token;
form.appendChild(input);
}
document.body.appendChild(form);
this.queue = [];
this.iframe.addEventListener('load', this.onLoad.bind(this), false);
form.submit();
};
IFrameConnector.prototype.onLoad = function () {
if (!this.queue) {
return;
}
var queue = this.queue;
for (var i = 0; i < queue.length; i += 1) {
this.postMessage(queue[i]);
}
this.queue = null;
};
/**
* @inheritDoc
*/
IFrameConnector.prototype.doSend = function (message, request, receive) {
var _this = this;
// binary data will be send and received directly
if (message.isBinary) {
_super.prototype.doSend.call(this, message, request, receive);
return;
}
if (!this.iframe) {
// ensure that we get a local resource cache hit
// eslint-disable-next-line no-param-reassign
message.request.path = '/connect';
this.load(message);
}
var msg = {
mid: this.mid += 1,
method: request.method,
path: request.path,
headers: request.headers,
entity: request.entity,
responseHeaders: Connector_1.Connector.RESPONSE_HEADERS,
};
this.messages[msg.mid] = receive;
var strMsg = JSON.stringify(msg);
if (this.queue) {
this.queue.push(strMsg);
}
else {
this.postMessage(strMsg);
}
if (!this.connected) {
setTimeout(function () {
if (_this.messages[msg.mid]) {
delete _this.messages[msg.mid];
receive({
status: 0,
error: new Error('Connection refused.'),
headers: {},
});
}
}, 10000);
}
};
IFrameConnector.prototype.postMessage = function (msg) {
this.iframe.contentWindow.postMessage(msg, this.origin);
};
IFrameConnector.prototype.doReceive = function (event) {
if (event.origin !== this.origin || event.data[0] !== '{') {
return;
}
var msg = JSON.parse(event.data);
var receive = this.messages[msg.mid];
if (receive) {
delete this.messages[msg.mid];
this.connected = true;
receive({
status: msg.status,
headers: msg.headers,
entity: msg.entity,
});
}
};
IFrameConnector.style = 'width:1px;height:1px;position:absolute;top:-10px;left:-10px;';
return IFrameConnector;
}(XMLHttpConnector_1.XMLHttpConnector));
exports.IFrameConnector = IFrameConnector;
Connector_1.Connector.connectors.push(IFrameConnector);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUZyYW1lQ29ubmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2Nvbm5lY3Rvci9JRnJhbWVDb25uZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDJFQUEyRTtBQUMzRSwyRUFBMkU7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUzRSx5Q0FBMkQ7QUFDM0QsdURBQXNEO0FBSXREO0lBQXFDLG1DQUFnQjtJQWlDbkQseUJBQVksSUFBWSxFQUFFLElBQVksRUFBRSxNQUFlLEVBQUUsUUFBZ0I7UUFBekUsWUFDRSxrQkFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsU0FPcEM7UUFoQ08sV0FBSyxHQUFpQixJQUFJLENBQUM7UUFFM0IsZUFBUyxHQUFZLEtBQUssQ0FBQztRQXlCakMsS0FBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDYixLQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFJLENBQUMsU0FBUyxHQUFHLEtBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDO1FBRTNDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxLQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDOztJQUNyRCxDQUFDO0lBNUJEOzs7Ozs7T0FNRztJQUNJLHdCQUFRLEdBQWYsVUFBZ0IsSUFBWSxFQUFFLElBQVksRUFBRSxNQUFlO1FBQ3pELDhHQUE4RztRQUM5RyxtQkFBbUI7UUFDbkIsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQ3RFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQztRQUN0RCxJQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxH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