cozy-intent
Version:
Event-based library allowing interactions between React-Native and React applications
251 lines (208 loc) • 10.2 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.NativeService = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _postMe = require("post-me");
var _api = require("../../api");
var _utils = require("../../utils");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var log = (0, _postMe.debug)('NativeService');
var NativeService = /*#__PURE__*/function () {
function NativeService(_localMethods) {
var _this = this;
var messengerService = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _api.NativeMessenger;
(0, _classCallCheck2.default)(this, NativeService);
(0, _defineProperty2.default)(this, "messengerService", void 0);
(0, _defineProperty2.default)(this, "localMethods", void 0);
(0, _defineProperty2.default)(this, "messengerRegister", {});
(0, _defineProperty2.default)(this, "updateLocalMethods", function (localMethods) {
_this.localMethods = localMethods;
});
(0, _defineProperty2.default)(this, "getUri", function (source) {
return new URL(source.nativeEvent.url).hostname.toLowerCase();
});
(0, _defineProperty2.default)(this, "parseNativeEvent", function (_ref) {
var nativeEvent = _ref.nativeEvent;
return JSON.parse(nativeEvent.data);
});
(0, _defineProperty2.default)(this, "isPostMeMessage", function (message) {
return message.type === _api.strings.postMeSignature;
});
(0, _defineProperty2.default)(this, "isInitMessage", function (message) {
return message.message === _api.strings.webviewIsRendered;
});
(0, _defineProperty2.default)(this, "registerWebview", function (uri, slug, ref) {
log(_api.strings.logging.registering(uri));
if (_this.messengerRegister[uri]) return log((0, _utils.interpolate)(_api.strings.errorRegisterWebview, {
uri: uri
}));
var messenger = new _this.messengerService(ref);
_this.messengerRegister = _objectSpread(_objectSpread({}, _this.messengerRegister), {}, (0, _defineProperty2.default)({}, uri, {
messenger: (0, _utils.isNativeDevMode)() ? (0, _api.DebugNativeMessenger)(messenger) : messenger,
slug: slug
}));
log(_api.strings.logging.registered(uri));
});
(0, _defineProperty2.default)(this, "unregisterWebview", function (uri) {
log(_api.strings.logging.unregistering(uri));
if (!_this.messengerRegister[uri]) return log((0, _utils.interpolate)(_api.strings.errorUnregisterWebview, {
uri: uri
}));
delete _this.messengerRegister[uri];
log(_api.strings.logging.unregistered(uri));
});
(0, _defineProperty2.default)(this, "initWebview", /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(messenger) {
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return (0, _postMe.ParentHandshake)(messenger, _this.localMethods, _api.numbers.maxAttempts);
case 2:
return _context.abrupt("return", _context.sent);
case 3:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function (_x) {
return _ref2.apply(this, arguments);
};
}());
(0, _defineProperty2.default)(this, "tryEmit", /*#__PURE__*/function () {
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(event, componentId) {
var parsedEvent;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (_this.isNativeEvent(event)) {
_context2.next = 2;
break;
}
return _context2.abrupt("return");
case 2:
parsedEvent = _this.parseNativeEvent(event);
if (parsedEvent.methodName === 'setFlagshipUI' && (0, _utils.isFlagshipUiArgsArray)(parsedEvent.args)) {
parsedEvent.args[0].componentId = componentId;
}
if (parsedEvent.methodName === 'setTheme' && Array.isArray(parsedEvent.args) && (0, _utils.isThemeArg)(parsedEvent.args[0])) {
parsedEvent.args[0] = {
homeTheme: parsedEvent.args[0],
componentId: componentId
};
}
if (!_this.isInitMessage(parsedEvent)) {
_context2.next = 9;
break;
}
_context2.next = 8;
return _this.tryInit(event);
case 8:
return _context2.abrupt("return", _context2.sent);
case 9:
if (_this.isPostMeMessage(parsedEvent)) _this.tryOnMessage(event, parsedEvent);
case 10:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return function (_x2, _x3) {
return _ref3.apply(this, arguments);
};
}());
(0, _defineProperty2.default)(this, "tryInit", /*#__PURE__*/function () {
var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(event) {
var uri, messengerToInit;
return _regenerator.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
uri = _this.getUri(event);
messengerToInit = _this.messengerRegister[uri];
_context3.prev = 2;
if (messengerToInit) {
_context3.next = 5;
break;
}
throw new Error((0, _utils.interpolate)(_api.strings.errorNoMessengerToInit, {
uri: uri
}));
case 5:
_context3.next = 7;
return _this.initWebview(messengerToInit.messenger);
case 7:
messengerToInit.connection = _context3.sent;
_context3.next = 13;
break;
case 10:
_context3.prev = 10;
_context3.t0 = _context3["catch"](2);
log((0, _utils.interpolate)(_api.strings.errorParentHandshake, {
uri: uri,
errorMessage: (0, _utils.getErrorMessage)(_context3.t0)
}));
case 13:
case "end":
return _context3.stop();
}
}
}, _callee3, null, [[2, 10]]);
}));
return function (_x4) {
return _ref4.apply(this, arguments);
};
}());
(0, _defineProperty2.default)(this, "tryOnMessage", function (event, message) {
var _message$args;
var webviewUri = _this.getUri(event);
var registeredWebview = _this.messengerRegister[webviewUri];
if (registeredWebview === undefined) {
return log((0, _utils.interpolate)(_api.strings.errorEmitMessage, {
webviewUri: webviewUri
}));
}
(_message$args = message.args) === null || _message$args === void 0 ? void 0 : _message$args.unshift({
slug: registeredWebview.slug
});
registeredWebview.messenger.onMessage(message);
});
(0, _defineProperty2.default)(this, "getHostname", function (uri) {
try {
return new URL(uri).hostname.toLowerCase();
} catch (_unused) {
return uri;
}
});
(0, _defineProperty2.default)(this, "call", function (uri, methodName) {
var _this$messengerRegist, _this$messengerRegist2, _this$messengerRegist3;
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
return (_this$messengerRegist = _this.messengerRegister[_this.getHostname(uri)]) === null || _this$messengerRegist === void 0 ? void 0 : (_this$messengerRegist2 = _this$messengerRegist.connection) === null || _this$messengerRegist2 === void 0 ? void 0 : (_this$messengerRegist3 = _this$messengerRegist2.remoteHandle()).call.apply(_this$messengerRegist3, [methodName].concat(args));
});
this.messengerService = messengerService;
this.localMethods = _localMethods;
}
(0, _createClass2.default)(NativeService, [{
key: "isNativeEvent",
value: function isNativeEvent(object) {
return object.nativeEvent.data !== undefined;
}
}]);
return NativeService;
}();
exports.NativeService = NativeService;