@elliemae/pui-app-bridge 2.0.0-next.38 → 2.0.0-next.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/cjs/{microfeFactory.js → appBridge.js} +94 -39
  2. package/dist/cjs/config/microFE.js +3 -1
  3. package/dist/cjs/eventManager.js +201 -0
  4. package/dist/cjs/index.js +5 -3
  5. package/dist/cjs/microfeHost.js +11 -58
  6. package/dist/cjs/scriptingObjectManager.js +199 -0
  7. package/dist/cjs/tests/scriptingObjects/appraisalServiceModule.js +2 -2
  8. package/dist/cjs/tests/scriptingObjects/constant.js +0 -2
  9. package/dist/cjs/tests/task/latest/index.dev.js +4 -1
  10. package/dist/cjs/tests/task/latest/index.js +4 -1
  11. package/dist/cjs/typings/common.js +12 -0
  12. package/dist/esm/{microfeFactory.js → appBridge.js} +93 -36
  13. package/dist/esm/config/microFE.js +3 -1
  14. package/dist/esm/eventManager.js +182 -0
  15. package/dist/esm/index.js +5 -3
  16. package/dist/esm/microfeHost.js +12 -59
  17. package/dist/esm/scriptingObjectManager.js +180 -0
  18. package/dist/esm/tests/scriptingObjects/appraisalServiceModule.js +4 -2
  19. package/dist/esm/tests/scriptingObjects/constant.js +0 -2
  20. package/dist/esm/tests/task/latest/index.dev.js +4 -1
  21. package/dist/esm/tests/task/latest/index.js +4 -1
  22. package/dist/esm/typings/common.js +8 -0
  23. package/dist/public/frame.html +1 -1
  24. package/dist/public/guest/util.js +1 -1
  25. package/dist/public/guest/util.js.br +0 -0
  26. package/dist/public/guest/util.js.gz +0 -0
  27. package/dist/public/guest/util.js.map +1 -1
  28. package/dist/public/index.html +1 -1
  29. package/dist/public/init.js +1 -1
  30. package/dist/public/init.js.br +0 -0
  31. package/dist/public/init.js.gz +0 -0
  32. package/dist/public/init.js.map +1 -1
  33. package/dist/public/js/emuiAppBridge.f188b157cac0e400cc31.js +24 -0
  34. package/dist/public/js/emuiAppBridge.f188b157cac0e400cc31.js.br +0 -0
  35. package/dist/public/js/emuiAppBridge.f188b157cac0e400cc31.js.gz +0 -0
  36. package/dist/public/js/emuiAppBridge.f188b157cac0e400cc31.js.map +1 -0
  37. package/dist/public/loan-object.js +1 -1
  38. package/dist/public/loan-object.js.br +0 -0
  39. package/dist/public/loan-object.js.gz +0 -0
  40. package/dist/public/loan-object.js.map +1 -1
  41. package/dist/public/utils.js +1 -1
  42. package/dist/public/utils.js.br +0 -0
  43. package/dist/public/utils.js.gz +0 -0
  44. package/dist/public/utils.js.map +1 -1
  45. package/dist/types/{microfeFactory.d.ts → appBridge.d.ts} +43 -17
  46. package/dist/types/config/app.d.ts +5 -0
  47. package/dist/types/eventManager.d.ts +66 -0
  48. package/dist/types/index.d.ts +6 -3
  49. package/dist/types/microfeHost.d.ts +13 -35
  50. package/dist/types/scriptingObjectManager.d.ts +66 -0
  51. package/dist/types/tests/eventManager.test.d.ts +1 -0
  52. package/dist/types/tests/scriptingObjects/constant.d.ts +0 -1
  53. package/dist/types/tests/utils.d.ts +9 -2
  54. package/dist/types/typings/common.d.ts +77 -0
  55. package/dist/types/typings/guest.d.ts +1 -1
  56. package/dist/types/typings/host.d.ts +3 -33
  57. package/dist/umd/guest/util.js +1 -1
  58. package/dist/umd/guest/util.js.br +0 -0
  59. package/dist/umd/guest/util.js.gz +0 -0
  60. package/dist/umd/guest/util.js.map +1 -1
  61. package/dist/umd/index.js +7 -7
  62. package/dist/umd/index.js.br +0 -0
  63. package/dist/umd/index.js.gz +0 -0
  64. package/dist/umd/index.js.map +1 -1
  65. package/dist/umd/init.js +1 -1
  66. package/dist/umd/init.js.br +0 -0
  67. package/dist/umd/init.js.gz +0 -0
  68. package/dist/umd/init.js.map +1 -1
  69. package/dist/umd/loan-object.js +1 -1
  70. package/dist/umd/loan-object.js.br +0 -0
  71. package/dist/umd/loan-object.js.gz +0 -0
  72. package/dist/umd/loan-object.js.map +1 -1
  73. package/dist/umd/utils.js +1 -1
  74. package/dist/umd/utils.js.br +0 -0
  75. package/dist/umd/utils.js.gz +0 -0
  76. package/dist/umd/utils.js.map +1 -1
  77. package/package.json +5 -5
  78. package/dist/public/js/emuiAppBridge.772b6189eb50ae4205fd.js +0 -24
  79. package/dist/public/js/emuiAppBridge.772b6189eb50ae4205fd.js.br +0 -0
  80. package/dist/public/js/emuiAppBridge.772b6189eb50ae4205fd.js.gz +0 -0
  81. package/dist/public/js/emuiAppBridge.772b6189eb50ae4205fd.js.map +0 -1
  82. /package/dist/types/tests/{appFactoryFailure.test.d.ts → appBridge.test.d.ts} +0 -0
  83. /package/dist/types/tests/{factory.test.d.ts → appBridgeFailure.test.d.ts} +0 -0
@@ -39,61 +39,72 @@ var __privateSet = (obj, member, value, setter) => {
39
39
  setter ? setter.call(obj, value) : member.set(obj, value);
40
40
  return value;
41
41
  };
42
- var microfeFactory_exports = {};
43
- __export(microfeFactory_exports, {
44
- CMicroAppFactory: () => CMicroAppFactory
42
+ var appBridge_exports = {};
43
+ __export(appBridge_exports, {
44
+ CAppBridge: () => CAppBridge
45
45
  });
46
- module.exports = __toCommonJS(microfeFactory_exports);
46
+ module.exports = __toCommonJS(appBridge_exports);
47
+ var import_pubsub_js = require("pubsub-js");
48
+ var import_eventManager = require("./eventManager.js");
47
49
  var import_frame = require("./frame.js");
48
50
  var import_window = require("./typings/window.js");
49
51
  var import_app = require("./config/app.js");
50
52
  var import_microFE = require("./config/microFE.js");
51
53
  var import_loaders = require("./loaders/index.js");
54
+ var import_scriptingObjectManager = require("./scriptingObjectManager.js");
52
55
  var import_microfeHost = require("./microfeHost.js");
53
- var _logger, _scriptLoader, _styleLoader, _appConfig, _microFEConfig, _host, _activeGuests, _activeApps, _removeAssetsFromDOM, _addAppToActiveAppList, _waitAndInitApplication, _initApplication, _loadApp, _unloadApp, _mountApp, _unmountApp;
56
+ var _logger, _version, _scriptLoader, _styleLoader, _appConfig, _microFEConfig, _soManager, _eventManager, _activeApps, _removeAssetsFromDOM, _addAppToActiveAppList, _waitAndInitApplication, _initApplication, _loadApp, _unloadApp, _mountApp, _unmountApp;
54
57
  const APP_CONTAINER_ID_PREFIX = "pui-app-container-";
55
58
  const cssType = /\.css$/;
56
59
  const isCss = (fileName) => cssType.test(fileName);
57
- class CMicroAppFactory {
60
+ class CAppBridge {
58
61
  /**
59
- * Create a new instance of the MicroAppFactory
62
+ * Create a new instance of the AppBridge
60
63
  *
61
- * @param {MicroAppFactoryParams} params - parameter for the constructor
64
+ * @param {AppBridgeParams} params - parameter for the constructor
62
65
  */
63
66
  constructor(params) {
64
67
  __privateAdd(this, _logger, void 0);
68
+ __privateAdd(this, _version, void 0);
65
69
  __privateAdd(this, _scriptLoader, void 0);
66
70
  __privateAdd(this, _styleLoader, void 0);
67
71
  __privateAdd(this, _appConfig, void 0);
68
72
  __privateAdd(this, _microFEConfig, new import_microFE.CMicroFEConfig());
69
- __privateAdd(this, _host, void 0);
70
- __privateAdd(this, _activeGuests, /* @__PURE__ */ new Map());
71
- __privateAdd(this, _activeApps, {});
73
+ __privateAdd(this, _soManager, void 0);
74
+ __privateAdd(this, _eventManager, void 0);
75
+ __privateAdd(this, _activeApps, /* @__PURE__ */ new Map());
72
76
  __privateAdd(this, _removeAssetsFromDOM, (id, documentEle = document) => {
73
- __privateGet(this, _activeGuests).delete(id);
74
- const { elementIds } = __privateGet(this, _activeApps)[id] || {};
77
+ const { elementIds } = __privateGet(this, _activeApps).get(id) || {};
75
78
  if (elementIds) {
76
79
  elementIds.forEach((elementId) => {
77
80
  const ele = documentEle.getElementById(elementId);
78
81
  if (ele)
79
82
  ele.remove();
80
83
  });
81
- delete __privateGet(this, _activeApps)[id];
82
84
  }
83
85
  });
84
86
  __privateAdd(this, _addAppToActiveAppList, (id, documentEle, elementIds) => {
85
87
  const app = window.emui?.[id] || {};
86
- __privateGet(this, _activeApps)[id] = { elementIds };
87
- __privateGet(this, _activeGuests).set(id, {
88
- guestWindow: documentEle?.defaultView,
89
- ...app
88
+ __privateGet(this, _activeApps).set(id, {
89
+ elementIds,
90
+ guest: {
91
+ guestWindow: documentEle?.defaultView,
92
+ ...app
93
+ }
90
94
  });
91
95
  });
92
96
  __privateAdd(this, _waitAndInitApplication, (options, requests) => {
93
- const { id, name, hostUrl, manifestPath, homeRoute, history, theme } = options;
94
- return Promise.all(requests).then(
95
- __privateGet(this, _addAppToActiveAppList).bind(null, options.id, options.documentEle)
96
- ).then(
97
+ const {
98
+ id,
99
+ name,
100
+ hostUrl,
101
+ manifestPath,
102
+ homeRoute,
103
+ history,
104
+ theme,
105
+ documentEle
106
+ } = options;
107
+ return Promise.all(requests).then(__privateGet(this, _addAppToActiveAppList).bind(null, id, documentEle)).then(
97
108
  __privateGet(this, _initApplication).bind(null, {
98
109
  id,
99
110
  name,
@@ -132,8 +143,17 @@ class CMicroAppFactory {
132
143
  throw new Error(
133
144
  `Application ${name} with id ${id} doesn't expose init method`
134
145
  );
146
+ const host = new import_microfeHost.CMicroFEHost({
147
+ guest: {
148
+ id
149
+ },
150
+ version: __privateGet(this, _version),
151
+ logger: __privateGet(this, _logger),
152
+ soManager: __privateGet(this, _soManager),
153
+ eventManager: __privateGet(this, _eventManager)
154
+ });
135
155
  return app.init({
136
- host: __privateGet(this, _host),
156
+ host,
137
157
  hostUrl,
138
158
  manifestPath,
139
159
  homeRoute,
@@ -177,6 +197,7 @@ class CMicroAppFactory {
177
197
  __privateGet(this, _styleLoader).removeDynamicImportedStyles(hostUrl, documentEle);
178
198
  if (window.emui?.[id])
179
199
  delete window.emui[id];
200
+ __privateGet(this, _activeApps).delete(id);
180
201
  __privateGet(this, _logger).info({ message: "Application unloaded", appId: id });
181
202
  });
182
203
  __privateAdd(this, _mountApp, async ({ id, name }) => {
@@ -203,11 +224,19 @@ class CMicroAppFactory {
203
224
  containerId: `${APP_CONTAINER_ID_PREFIX}${id}`
204
225
  });
205
226
  });
227
+ /**
228
+ * registers scripting object to the host
229
+ *
230
+ * @param {AddScriptingObjectParams<AppObjects>} params params to add scripting object
231
+ */
232
+ __publicField(this, "addScriptingObject", (params) => {
233
+ __privateGet(this, _soManager).addScriptingObject(params);
234
+ });
206
235
  /**
207
236
  * Close all active guest micro frontend applications
208
237
  */
209
238
  __publicField(this, "closeAllApps", async () => {
210
- await Promise.all(Object.keys(__privateGet(this, _activeApps)).map(this.closeApp));
239
+ await Promise.all([...__privateGet(this, _activeApps).keys()].map(this.closeApp));
211
240
  });
212
241
  /**
213
242
  * Close guest micro frontend application
@@ -230,29 +259,36 @@ class CMicroAppFactory {
230
259
  throw new Error(`Iframe for application with id ${id} is not found`);
231
260
  }
232
261
  __privateGet(this, _unloadApp).call(this, { id, hostUrl, documentEle: frameEle.contentDocument });
262
+ __privateGet(this, _soManager).clearGuestScriptingObjects(id);
233
263
  import_frame.Frame.remove(id);
234
264
  }
235
265
  });
266
+ /**
267
+ * dispatch event to guest microfrontend application
268
+ *
269
+ * @param {DispatchEventParams<EventId, Params>} params - event parameters
270
+ */
271
+ __publicField(this, "dispatchEvent", async (params) => __privateGet(this, _eventManager).dispatchEvent(params));
236
272
  /**
237
273
  * Get guest by id
238
274
  *
239
275
  * @param id unique id of guest
240
276
  * @returns guest instance
241
277
  */
242
- __publicField(this, "getGuest", (id) => __privateGet(this, _activeGuests).get(id));
278
+ __publicField(this, "getGuest", (id) => __privateGet(this, _activeApps).get(id)?.guest);
243
279
  /**
244
280
  * Get list of active guests
245
281
  *
246
282
  * @returns list of active guests
247
283
  */
248
- __publicField(this, "getGuests", () => Array.from(__privateGet(this, _activeGuests).values()));
284
+ __publicField(this, "getGuests", () => [...__privateGet(this, _activeApps).values()].map((app) => app.guest));
249
285
  /**
250
- * Initialize factory
286
+ * Initialize appBridge
251
287
  */
252
288
  __publicField(this, "init", async () => {
253
289
  await __privateGet(this, _appConfig).load();
254
290
  __privateGet(this, _microFEConfig).init({
255
- version: __privateGet(this, _host).version,
291
+ version: __privateGet(this, _version),
256
292
  appConfig: __privateGet(this, _appConfig)
257
293
  });
258
294
  });
@@ -298,6 +334,7 @@ class CMicroAppFactory {
298
334
  documentEle: frameEle.contentDocument
299
335
  });
300
336
  await __privateGet(this, _mountApp).call(this, appConfig);
337
+ return __privateGet(this, _activeApps).get(id)?.guest;
301
338
  } catch (err) {
302
339
  __privateGet(this, _unloadApp).call(this, {
303
340
  id,
@@ -308,6 +345,29 @@ class CMicroAppFactory {
308
345
  throw err;
309
346
  }
310
347
  });
348
+ /**
349
+ * emit event to all subscribers (deprecated)
350
+ *
351
+ * @deprecated use dispatchEvent instead
352
+ * @param eventId unique id of the event. The format is <scripting object name>.<event name>
353
+ * @param data data to be sent to the subscribers of the event
354
+ * @returns true if event is published successfully
355
+ */
356
+ __publicField(this, "publish", (eventId, data) => (0, import_pubsub_js.publish)(eventId, data));
357
+ /**
358
+ * remove all listeners
359
+ */
360
+ __publicField(this, "removeAllEventListeners", () => {
361
+ __privateGet(this, _eventManager).unsubscribeAll();
362
+ });
363
+ /**
364
+ * removes scripting object from the host
365
+ *
366
+ * @param objectId unique id of the scripting object
367
+ */
368
+ __publicField(this, "removeScriptingObject", (objectId) => {
369
+ __privateGet(this, _soManager).removeScriptingObject(objectId);
370
+ });
311
371
  /**
312
372
  * Unmount guest micro frontend application from DOM
313
373
  *
@@ -327,30 +387,25 @@ class CMicroAppFactory {
327
387
  if (!logger)
328
388
  throw new Error("logger is required");
329
389
  __privateSet(this, _logger, params.logger);
390
+ __privateSet(this, _version, params.version);
330
391
  __privateSet(this, _appConfig, new import_app.CAppConfig({
331
392
  version: params.version,
332
393
  baseUrl: params.appConfigBaseUrl
333
394
  }));
334
395
  __privateSet(this, _scriptLoader, new import_loaders.ScriptLoader(logger));
335
396
  __privateSet(this, _styleLoader, new import_loaders.StyleLoader(logger));
336
- __privateSet(this, _host, new import_microfeHost.CMicroFEHost(params));
337
- }
338
- /**
339
- * Get instance of host
340
- *
341
- * @returns instance of host
342
- */
343
- get host() {
344
- return __privateGet(this, _host);
397
+ __privateSet(this, _soManager, new import_scriptingObjectManager.ScriptingObjectManager());
398
+ __privateSet(this, _eventManager, new import_eventManager.EventManager());
345
399
  }
346
400
  }
347
401
  _logger = new WeakMap();
402
+ _version = new WeakMap();
348
403
  _scriptLoader = new WeakMap();
349
404
  _styleLoader = new WeakMap();
350
405
  _appConfig = new WeakMap();
351
406
  _microFEConfig = new WeakMap();
352
- _host = new WeakMap();
353
- _activeGuests = new WeakMap();
407
+ _soManager = new WeakMap();
408
+ _eventManager = new WeakMap();
354
409
  _activeApps = new WeakMap();
355
410
  _removeAssetsFromDOM = new WeakMap();
356
411
  _addAppToActiveAppList = new WeakMap();
@@ -57,6 +57,7 @@ module.exports = __toCommonJS(microFE_exports);
57
57
  var import_merge = __toESM(require("lodash/merge"), 1);
58
58
  var import_utils = require("../utils.js");
59
59
  var import_constant = require("../constant.js");
60
+ var import_common = require("../typings/common.js");
60
61
  var _microFrontendApps;
61
62
  const CONFIG_KEY = "microFrontendApps";
62
63
  const isCIBuild = () => process.env.CI === "true";
@@ -127,7 +128,8 @@ const getConfig = ({
127
128
  {
128
129
  name: id,
129
130
  mode: "production",
130
- manifestPath: "./{SYSTEM_VERSION}/"
131
+ manifestPath: "./{SYSTEM_VERSION}/",
132
+ securityContext: import_common.SecurityContext.USER
131
133
  },
132
134
  config,
133
135
  envConfig
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var __publicField = (obj, key, value) => {
21
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
22
+ return value;
23
+ };
24
+ var __accessCheck = (obj, member, msg) => {
25
+ if (!member.has(obj))
26
+ throw TypeError("Cannot " + msg);
27
+ };
28
+ var __privateGet = (obj, member, getter) => {
29
+ __accessCheck(obj, member, "read from private field");
30
+ return getter ? getter.call(obj) : member.get(obj);
31
+ };
32
+ var __privateAdd = (obj, member, value) => {
33
+ if (member.has(obj))
34
+ throw TypeError("Cannot add the same private member more than once");
35
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
36
+ };
37
+ var eventManager_exports = {};
38
+ __export(eventManager_exports, {
39
+ EventManager: () => EventManager
40
+ });
41
+ module.exports = __toCommonJS(eventManager_exports);
42
+ var import_uuid = require("uuid");
43
+ var _listeners, _asyncCallwithTimeout, _emitEvent, _emitEventWithFeedback;
44
+ const flatten = (source, target = []) => {
45
+ const retVal = target || [];
46
+ if (source && source.forEach) {
47
+ source.forEach((item) => {
48
+ flatten(item, retVal);
49
+ });
50
+ } else if (typeof source !== "undefined") {
51
+ retVal.push(source);
52
+ }
53
+ return retVal;
54
+ };
55
+ class EventManager {
56
+ constructor() {
57
+ /**
58
+ * event listeners
59
+ */
60
+ __privateAdd(this, _listeners, /* @__PURE__ */ new Map());
61
+ /**
62
+ * call an async function with a timeout
63
+ *
64
+ * @param promise async function to call
65
+ * @param feedbackWaitTime timeout in milliseconds
66
+ * @returns result of the async function or undefined if timeout
67
+ */
68
+ __privateAdd(this, _asyncCallwithTimeout, (promise, feedbackWaitTime) => {
69
+ const timeout = new Promise((resolve) => {
70
+ setTimeout(() => {
71
+ resolve();
72
+ }, feedbackWaitTime);
73
+ });
74
+ return Promise.race([promise, timeout]);
75
+ });
76
+ /**
77
+ * emit an event to set of listeners
78
+ *
79
+ * @param {EmitEventParam} param - parameters for emitting an event
80
+ */
81
+ __privateAdd(this, _emitEvent, (param) => {
82
+ const { eventName, scriptingObject, eventParams, listeners } = param;
83
+ listeners.map(async (listener) => {
84
+ try {
85
+ await listener.callback({
86
+ obj: scriptingObject,
87
+ eventName,
88
+ eventParams
89
+ });
90
+ } catch (e) {
91
+ }
92
+ });
93
+ });
94
+ __privateAdd(this, _emitEventWithFeedback, async ({
95
+ eventId,
96
+ eventName,
97
+ scriptingObject,
98
+ eventParams,
99
+ feedbackWaitTime
100
+ }) => {
101
+ const listeners = __privateGet(this, _listeners).get(eventId) || [];
102
+ const promises = listeners.map(
103
+ (listener) => __privateGet(this, _asyncCallwithTimeout).call(
104
+ this,
105
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
106
+ listener.callback({
107
+ obj: scriptingObject,
108
+ eventName,
109
+ eventParams
110
+ }),
111
+ feedbackWaitTime
112
+ )
113
+ );
114
+ const retValues = await Promise.all(promises);
115
+ return flatten(retValues);
116
+ });
117
+ /**
118
+ * dispatch an event
119
+ *
120
+ * @param {DispatchEventParam<EventId, Params>} param - parameters for dispatching an event
121
+ */
122
+ __publicField(this, "dispatchEvent", async (param) => {
123
+ const {
124
+ event: { id, name, requiresFeedback, scriptingObject },
125
+ eventParams,
126
+ feedbackWaitTime = 1e3
127
+ } = param;
128
+ if (!id)
129
+ throw new Error("Event Id is required");
130
+ const listeners = __privateGet(this, _listeners).get(id) || [];
131
+ if (!requiresFeedback) {
132
+ __privateGet(this, _emitEvent).call(this, {
133
+ eventName: name,
134
+ scriptingObject,
135
+ eventParams,
136
+ listeners
137
+ });
138
+ return Promise.resolve();
139
+ }
140
+ return __privateGet(this, _emitEventWithFeedback).call(this, {
141
+ eventId: id,
142
+ eventName: name,
143
+ scriptingObject,
144
+ eventParams,
145
+ feedbackWaitTime
146
+ });
147
+ });
148
+ /**
149
+ * Subscribe to an event
150
+ *
151
+ * @param {SubscribeParam<EventId, AppEvents[EventId]>} param - parameters for subscribing to an event
152
+ */
153
+ __publicField(this, "subscribe", (param) => {
154
+ const { eventId, listener } = param;
155
+ if (!eventId)
156
+ throw new Error("eventId is required");
157
+ if (!listener)
158
+ throw new Error("Listener is required");
159
+ const listeners = __privateGet(this, _listeners).get(eventId) || [];
160
+ const subscriptionId = (0, import_uuid.v4)();
161
+ listeners.push({
162
+ subscriptionId,
163
+ callback: listener
164
+ });
165
+ __privateGet(this, _listeners).set(eventId, listeners);
166
+ return subscriptionId;
167
+ });
168
+ /**
169
+ * Unsubscribe from an event
170
+ *
171
+ * @param {UnsubscribeParam<EventId>} param - parameters for unsubscribing from an event
172
+ */
173
+ __publicField(this, "unsubscribe", (param) => {
174
+ const { eventId, subscriptionId } = param;
175
+ if (!eventId)
176
+ throw new Error("eventId id is required");
177
+ if (subscriptionId) {
178
+ const listeners = __privateGet(this, _listeners).get(eventId) || [];
179
+ const index = listeners.findIndex(
180
+ (listener) => listener.subscriptionId === subscriptionId
181
+ );
182
+ if (index > -1) {
183
+ listeners.splice(index, 1);
184
+ __privateGet(this, _listeners).set(eventId, listeners);
185
+ }
186
+ } else {
187
+ __privateGet(this, _listeners).delete(eventId);
188
+ }
189
+ });
190
+ /**
191
+ * Unsubscribe from all events
192
+ */
193
+ __publicField(this, "unsubscribeAll", () => {
194
+ __privateGet(this, _listeners).clear();
195
+ });
196
+ }
197
+ }
198
+ _listeners = new WeakMap();
199
+ _asyncCallwithTimeout = new WeakMap();
200
+ _emitEvent = new WeakMap();
201
+ _emitEventWithFeedback = new WeakMap();
package/dist/cjs/index.js CHANGED
@@ -18,10 +18,12 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var lib_exports = {};
20
20
  __export(lib_exports, {
21
- CMicroAppFactory: () => import_microfeFactory.CMicroAppFactory,
21
+ CAppBridge: () => import_appBridge.CAppBridge,
22
22
  Event: () => import_microfe_common.Event,
23
- ScriptingObject: () => import_microfe_common.ScriptingObject
23
+ ScriptingObject: () => import_microfe_common.ScriptingObject,
24
+ SecurityContext: () => import_common.SecurityContext
24
25
  });
25
26
  module.exports = __toCommonJS(lib_exports);
27
+ var import_common = require("./typings/common.js");
26
28
  var import_microfe_common = require("@elliemae/microfe-common");
27
- var import_microfeFactory = require("./microfeFactory.js");
29
+ var import_appBridge = require("./appBridge.js");
@@ -45,10 +45,9 @@ __export(microfeHost_exports, {
45
45
  });
46
46
  module.exports = __toCommonJS(microfeHost_exports);
47
47
  var import_pubsub_js = require("pubsub-js");
48
- var import_microfe_common = require("@elliemae/microfe-common");
49
48
  var import_frame = require("./frame.js");
50
49
  var import_constant = require("./constant.js");
51
- var _logger, _version, _eventManager, _scriptingObjects;
50
+ var _logger, _guest, _version, _soManager, _eventManager;
52
51
  class CMicroFEHost {
53
52
  /**
54
53
  * Create new instance of the host frontend application
@@ -57,9 +56,10 @@ class CMicroFEHost {
57
56
  */
58
57
  constructor(params) {
59
58
  __privateAdd(this, _logger, void 0);
59
+ __privateAdd(this, _guest, void 0);
60
60
  __privateAdd(this, _version, void 0);
61
+ __privateAdd(this, _soManager, void 0);
61
62
  __privateAdd(this, _eventManager, void 0);
62
- __privateAdd(this, _scriptingObjects, /* @__PURE__ */ new Map());
63
63
  /**
64
64
  * add listener to the scripting object event
65
65
  *
@@ -67,30 +67,6 @@ class CMicroFEHost {
67
67
  * @returns subscription id
68
68
  */
69
69
  __publicField(this, "addEventListener", (params) => __privateGet(this, _eventManager).subscribe(params));
70
- /**
71
- * registers scripting object to the host
72
- *
73
- * @param so scripting object to publish
74
- */
75
- __publicField(this, "addScriptingObject", (so) => {
76
- if (!so?.id || !so?._toJSON) {
77
- throw new Error("Object is not derived from ScriptingObject");
78
- }
79
- const objectId = so.id.toLowerCase();
80
- if (objectId === "module")
81
- throw new Error(
82
- "Do not publish the module object. Create a concrete object derived from it."
83
- );
84
- if (__privateGet(this, _scriptingObjects).has(objectId))
85
- throw new Error(`Scripting Object ${so.id} already exists`);
86
- __privateGet(this, _scriptingObjects).set(objectId, so);
87
- });
88
- /**
89
- * dispatch event to guest microfrontend application
90
- *
91
- * @param {DispatchEventParams<EventId, Params>} params - event parameters
92
- */
93
- __publicField(this, "dispatchEvent", async (params) => __privateGet(this, _eventManager).dispatchEvent(params));
94
70
  /**
95
71
  * Get reference to the scripting object (or proxy) by name
96
72
  *
@@ -98,11 +74,9 @@ class CMicroFEHost {
98
74
  * @param objectId
99
75
  * @returns scripting object reference
100
76
  */
101
- __publicField(this, "getObject", (objectId) => {
102
- const id = objectId.toLowerCase();
103
- const data = __privateGet(this, _scriptingObjects).get(id);
104
- return Promise.resolve(data || null);
105
- });
77
+ __publicField(this, "getObject", (objectId) => Promise.resolve(
78
+ __privateGet(this, _soManager).getObject({ objectId, guest: __privateGet(this, _guest) })
79
+ ));
106
80
  /**
107
81
  * removes listener from the scripting object event
108
82
  *
@@ -111,22 +85,6 @@ class CMicroFEHost {
111
85
  __publicField(this, "removeEventListener", (params) => {
112
86
  __privateGet(this, _eventManager).unsubscribe(params);
113
87
  });
114
- /**
115
- * remove all listeners
116
- */
117
- __publicField(this, "removeAllEventListeners", () => {
118
- __privateGet(this, _eventManager).unsubscribeAll();
119
- });
120
- /**
121
- * removes scripting object from the host
122
- *
123
- * @param objectId unique id of the scripting object
124
- */
125
- __publicField(this, "removeScriptingObject", (objectId) => {
126
- __privateGet(this, _scriptingObjects).delete(
127
- objectId.toLowerCase()
128
- );
129
- });
130
88
  /**
131
89
  * set the size of the guest application iframe window
132
90
  *
@@ -142,14 +100,6 @@ class CMicroFEHost {
142
100
  }
143
101
  });
144
102
  // deprecated legacy eventing methods (to be removed)
145
- /**
146
- * emit event to all subscribers (deprecated)
147
- *
148
- * @param eventId unique id of the event. The format is <scripting object name>.<event name>
149
- * @param data data to be sent to the subscribers of the event
150
- * @returns true if event is published successfully
151
- */
152
- __publicField(this, "publish", (eventId, data) => (0, import_pubsub_js.publish)(eventId, data));
153
103
  /**
154
104
  * subscribe to an scripting object event (deprecated)
155
105
  *
@@ -168,9 +118,11 @@ class CMicroFEHost {
168
118
  __publicField(this, "unsubscribe", (token) => {
169
119
  (0, import_pubsub_js.unsubscribe)(token);
170
120
  });
121
+ __privateSet(this, _guest, params.guest);
171
122
  __privateSet(this, _logger, params.logger);
172
123
  __privateSet(this, _version, params?.version || import_constant.LATEST_VERSION);
173
- __privateSet(this, _eventManager, new import_microfe_common.EventManager());
124
+ __privateSet(this, _soManager, params.soManager);
125
+ __privateSet(this, _eventManager, params.eventManager);
174
126
  }
175
127
  /**
176
128
  * application release version
@@ -182,6 +134,7 @@ class CMicroFEHost {
182
134
  }
183
135
  }
184
136
  _logger = new WeakMap();
137
+ _guest = new WeakMap();
185
138
  _version = new WeakMap();
139
+ _soManager = new WeakMap();
186
140
  _eventManager = new WeakMap();
187
- _scriptingObjects = new WeakMap();