@elliemae/pui-app-bridge 2.0.0-next.39 → 2.0.0-next.41

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 (81) hide show
  1. package/dist/cjs/{microfeFactory.js → appBridge.js} +95 -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 +9 -58
  6. package/dist/cjs/tests/scriptingObjects/appraisalServiceModule.js +2 -2
  7. package/dist/cjs/tests/scriptingObjects/constant.js +0 -2
  8. package/dist/cjs/tests/task/latest/index.dev.js +4 -1
  9. package/dist/cjs/tests/task/latest/index.js +4 -1
  10. package/dist/cjs/typings/common.js +12 -0
  11. package/dist/esm/{microfeFactory.js → appBridge.js} +92 -36
  12. package/dist/esm/config/microFE.js +3 -1
  13. package/dist/esm/eventManager.js +182 -0
  14. package/dist/esm/index.js +5 -3
  15. package/dist/esm/microfeHost.js +10 -59
  16. package/dist/esm/tests/scriptingObjects/appraisalServiceModule.js +4 -2
  17. package/dist/esm/tests/scriptingObjects/constant.js +0 -2
  18. package/dist/esm/tests/task/latest/index.dev.js +4 -1
  19. package/dist/esm/tests/task/latest/index.js +4 -1
  20. package/dist/esm/typings/common.js +8 -0
  21. package/dist/public/frame.html +1 -1
  22. package/dist/public/guest/util.js +1 -1
  23. package/dist/public/guest/util.js.br +0 -0
  24. package/dist/public/guest/util.js.gz +0 -0
  25. package/dist/public/guest/util.js.map +1 -1
  26. package/dist/public/index.html +1 -1
  27. package/dist/public/init.js +1 -1
  28. package/dist/public/init.js.br +0 -0
  29. package/dist/public/init.js.gz +0 -0
  30. package/dist/public/init.js.map +1 -1
  31. package/dist/public/js/emuiAppBridge.b12883c6611f8722e0a7.js +24 -0
  32. package/dist/public/js/emuiAppBridge.b12883c6611f8722e0a7.js.br +0 -0
  33. package/dist/public/js/emuiAppBridge.b12883c6611f8722e0a7.js.gz +0 -0
  34. package/dist/public/js/emuiAppBridge.b12883c6611f8722e0a7.js.map +1 -0
  35. package/dist/public/loan-object.js +1 -1
  36. package/dist/public/loan-object.js.br +0 -0
  37. package/dist/public/loan-object.js.gz +0 -0
  38. package/dist/public/loan-object.js.map +1 -1
  39. package/dist/public/utils.js +1 -1
  40. package/dist/public/utils.js.br +0 -0
  41. package/dist/public/utils.js.gz +0 -0
  42. package/dist/public/utils.js.map +1 -1
  43. package/dist/types/appBridge.d.ts +122 -0
  44. package/dist/types/config/app.d.ts +5 -0
  45. package/dist/types/eventManager.d.ts +66 -0
  46. package/dist/types/index.d.ts +5 -3
  47. package/dist/types/microfeHost.d.ts +19 -35
  48. package/dist/types/tests/eventManager.test.d.ts +1 -0
  49. package/dist/types/tests/scriptingObjects/constant.d.ts +0 -1
  50. package/dist/types/tests/utils.d.ts +9 -2
  51. package/dist/types/typings/common.d.ts +77 -0
  52. package/dist/types/typings/guest.d.ts +1 -1
  53. package/dist/types/typings/host.d.ts +3 -33
  54. package/dist/umd/guest/util.js +1 -1
  55. package/dist/umd/guest/util.js.br +0 -0
  56. package/dist/umd/guest/util.js.gz +0 -0
  57. package/dist/umd/guest/util.js.map +1 -1
  58. package/dist/umd/index.js +7 -7
  59. package/dist/umd/index.js.br +0 -0
  60. package/dist/umd/index.js.gz +0 -0
  61. package/dist/umd/index.js.map +1 -1
  62. package/dist/umd/init.js +1 -1
  63. package/dist/umd/init.js.br +0 -0
  64. package/dist/umd/init.js.gz +0 -0
  65. package/dist/umd/init.js.map +1 -1
  66. package/dist/umd/loan-object.js +1 -1
  67. package/dist/umd/loan-object.js.br +0 -0
  68. package/dist/umd/loan-object.js.gz +0 -0
  69. package/dist/umd/loan-object.js.map +1 -1
  70. package/dist/umd/utils.js +1 -1
  71. package/dist/umd/utils.js.br +0 -0
  72. package/dist/umd/utils.js.gz +0 -0
  73. package/dist/umd/utils.js.map +1 -1
  74. package/package.json +3 -3
  75. package/dist/public/js/emuiAppBridge.772b6189eb50ae4205fd.js +0 -24
  76. package/dist/public/js/emuiAppBridge.772b6189eb50ae4205fd.js.br +0 -0
  77. package/dist/public/js/emuiAppBridge.772b6189eb50ae4205fd.js.gz +0 -0
  78. package/dist/public/js/emuiAppBridge.772b6189eb50ae4205fd.js.map +0 -1
  79. package/dist/types/microfeFactory.d.ts +0 -96
  80. /package/dist/types/tests/{appFactoryFailure.test.d.ts → appBridge.test.d.ts} +0 -0
  81. /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_microfe_common = require("@elliemae/microfe-common");
49
+ var import_eventManager = require("./eventManager.js");
47
50
  var import_frame = require("./frame.js");
48
51
  var import_window = require("./typings/window.js");
49
52
  var import_app = require("./config/app.js");
50
53
  var import_microFE = require("./config/microFE.js");
51
54
  var import_loaders = require("./loaders/index.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,20 @@ 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 {ValueOf<AppObjects>} so scripting object
231
+ * @param {AddScriptingObjectParams} params params to add scripting object
232
+ */
233
+ __publicField(this, "addScriptingObject", (so, params) => {
234
+ __privateGet(this, _soManager).addScriptingObject(so, params);
235
+ });
206
236
  /**
207
237
  * Close all active guest micro frontend applications
208
238
  */
209
239
  __publicField(this, "closeAllApps", async () => {
210
- await Promise.all(Object.keys(__privateGet(this, _activeApps)).map(this.closeApp));
240
+ await Promise.all([...__privateGet(this, _activeApps).keys()].map(this.closeApp));
211
241
  });
212
242
  /**
213
243
  * Close guest micro frontend application
@@ -230,29 +260,36 @@ class CMicroAppFactory {
230
260
  throw new Error(`Iframe for application with id ${id} is not found`);
231
261
  }
232
262
  __privateGet(this, _unloadApp).call(this, { id, hostUrl, documentEle: frameEle.contentDocument });
263
+ __privateGet(this, _soManager).removeAllScriptingObjects(id);
233
264
  import_frame.Frame.remove(id);
234
265
  }
235
266
  });
267
+ /**
268
+ * dispatch event to guest microfrontend application
269
+ *
270
+ * @param {DispatchEventParams<EventId, Params>} params - event parameters
271
+ */
272
+ __publicField(this, "dispatchEvent", async (params) => __privateGet(this, _eventManager).dispatchEvent(params));
236
273
  /**
237
274
  * Get guest by id
238
275
  *
239
276
  * @param id unique id of guest
240
277
  * @returns guest instance
241
278
  */
242
- __publicField(this, "getGuest", (id) => __privateGet(this, _activeGuests).get(id));
279
+ __publicField(this, "getGuest", (id) => __privateGet(this, _activeApps).get(id)?.guest);
243
280
  /**
244
281
  * Get list of active guests
245
282
  *
246
283
  * @returns list of active guests
247
284
  */
248
- __publicField(this, "getGuests", () => Array.from(__privateGet(this, _activeGuests).values()));
285
+ __publicField(this, "getGuests", () => [...__privateGet(this, _activeApps).values()].map((app) => app.guest));
249
286
  /**
250
- * Initialize factory
287
+ * Initialize appBridge
251
288
  */
252
289
  __publicField(this, "init", async () => {
253
290
  await __privateGet(this, _appConfig).load();
254
291
  __privateGet(this, _microFEConfig).init({
255
- version: __privateGet(this, _host).version,
292
+ version: __privateGet(this, _version),
256
293
  appConfig: __privateGet(this, _appConfig)
257
294
  });
258
295
  });
@@ -298,6 +335,7 @@ class CMicroAppFactory {
298
335
  documentEle: frameEle.contentDocument
299
336
  });
300
337
  await __privateGet(this, _mountApp).call(this, appConfig);
338
+ return __privateGet(this, _activeApps).get(id)?.guest;
301
339
  } catch (err) {
302
340
  __privateGet(this, _unloadApp).call(this, {
303
341
  id,
@@ -308,6 +346,29 @@ class CMicroAppFactory {
308
346
  throw err;
309
347
  }
310
348
  });
349
+ /**
350
+ * emit event to all subscribers (deprecated)
351
+ *
352
+ * @deprecated use dispatchEvent instead
353
+ * @param eventId unique id of the event. The format is <scripting object name>.<event name>
354
+ * @param data data to be sent to the subscribers of the event
355
+ * @returns true if event is published successfully
356
+ */
357
+ __publicField(this, "publish", (eventId, data) => (0, import_pubsub_js.publish)(eventId, data));
358
+ /**
359
+ * remove all listeners
360
+ */
361
+ __publicField(this, "removeAllEventListeners", () => {
362
+ __privateGet(this, _eventManager).unsubscribeAll();
363
+ });
364
+ /**
365
+ * removes scripting object from the host
366
+ *
367
+ * @param objectId unique id of the scripting object
368
+ */
369
+ __publicField(this, "removeScriptingObject", (objectId) => {
370
+ __privateGet(this, _soManager).removeScriptingObject(objectId);
371
+ });
311
372
  /**
312
373
  * Unmount guest micro frontend application from DOM
313
374
  *
@@ -327,30 +388,25 @@ class CMicroAppFactory {
327
388
  if (!logger)
328
389
  throw new Error("logger is required");
329
390
  __privateSet(this, _logger, params.logger);
391
+ __privateSet(this, _version, params.version);
330
392
  __privateSet(this, _appConfig, new import_app.CAppConfig({
331
393
  version: params.version,
332
394
  baseUrl: params.appConfigBaseUrl
333
395
  }));
334
396
  __privateSet(this, _scriptLoader, new import_loaders.ScriptLoader(logger));
335
397
  __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);
398
+ __privateSet(this, _soManager, new import_microfe_common.ScriptingObjectManager());
399
+ __privateSet(this, _eventManager, new import_eventManager.EventManager());
345
400
  }
346
401
  }
347
402
  _logger = new WeakMap();
403
+ _version = new WeakMap();
348
404
  _scriptLoader = new WeakMap();
349
405
  _styleLoader = new WeakMap();
350
406
  _appConfig = new WeakMap();
351
407
  _microFEConfig = new WeakMap();
352
- _host = new WeakMap();
353
- _activeGuests = new WeakMap();
408
+ _soManager = new WeakMap();
409
+ _eventManager = new WeakMap();
354
410
  _activeApps = new WeakMap();
355
411
  _removeAssetsFromDOM = new WeakMap();
356
412
  _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,7 @@ 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(__privateGet(this, _soManager).getObject(objectId, __privateGet(this, _guest))));
106
78
  /**
107
79
  * removes listener from the scripting object event
108
80
  *
@@ -111,22 +83,6 @@ class CMicroFEHost {
111
83
  __publicField(this, "removeEventListener", (params) => {
112
84
  __privateGet(this, _eventManager).unsubscribe(params);
113
85
  });
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
86
  /**
131
87
  * set the size of the guest application iframe window
132
88
  *
@@ -142,14 +98,6 @@ class CMicroFEHost {
142
98
  }
143
99
  });
144
100
  // 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
101
  /**
154
102
  * subscribe to an scripting object event (deprecated)
155
103
  *
@@ -168,9 +116,11 @@ class CMicroFEHost {
168
116
  __publicField(this, "unsubscribe", (token) => {
169
117
  (0, import_pubsub_js.unsubscribe)(token);
170
118
  });
119
+ __privateSet(this, _guest, params.guest);
171
120
  __privateSet(this, _logger, params.logger);
172
121
  __privateSet(this, _version, params?.version || import_constant.LATEST_VERSION);
173
- __privateSet(this, _eventManager, new import_microfe_common.EventManager());
122
+ __privateSet(this, _soManager, params.soManager);
123
+ __privateSet(this, _eventManager, params.eventManager);
174
124
  }
175
125
  /**
176
126
  * application release version
@@ -182,6 +132,7 @@ class CMicroFEHost {
182
132
  }
183
133
  }
184
134
  _logger = new WeakMap();
135
+ _guest = new WeakMap();
185
136
  _version = new WeakMap();
137
+ _soManager = new WeakMap();
186
138
  _eventManager = new WeakMap();
187
- _scriptingObjects = new WeakMap();
@@ -44,15 +44,15 @@ __export(appraisalServiceModule_exports, {
44
44
  AppraisalService: () => AppraisalService
45
45
  });
46
46
  module.exports = __toCommonJS(appraisalServiceModule_exports);
47
+ var import_pui_scripting_object = require("@elliemae/pui-scripting-object");
47
48
  var import_microfe_common = require("@elliemae/microfe-common");
48
- var import_constant = require("./constant.js");
49
49
  var _loanId, _creditScore;
50
50
  class AppraisalService extends import_microfe_common.ScriptingObject {
51
51
  constructor({
52
52
  loanId,
53
53
  creditScore
54
54
  }) {
55
- super(import_constant.OBJECT_NAME);
55
+ super(import_pui_scripting_object.ScriptingObjectNames.Module);
56
56
  __privateAdd(this, _loanId, void 0);
57
57
  __privateAdd(this, _creditScore, void 0);
58
58
  __publicField(this, "Unloading", new import_microfe_common.Event({
@@ -18,9 +18,7 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var constant_exports = {};
20
20
  __export(constant_exports, {
21
- OBJECT_NAME: () => OBJECT_NAME,
22
21
  UNLOADING_EVENT_NAME: () => UNLOADING_EVENT_NAME
23
22
  });
24
23
  module.exports = __toCommonJS(constant_exports);
25
- const OBJECT_NAME = "AppraisalService";
26
24
  const UNLOADING_EVENT_NAME = "Unloading";
@@ -19,12 +19,15 @@
19
19
  const browserWindow = getWindow();
20
20
  browserWindow.emui = browserWindow.emui || {};
21
21
  browserWindow.emui[appId] = browserWindow.emui[appId] || {};
22
+ window.__TEST__ = {};
22
23
  browserWindow.emui[appId].init = async (options) => {
24
+ window.__TEST__.initOptions = options;
23
25
  host = options.host;
24
26
  parentHistory = options.history;
25
27
  logger = options.logger;
26
28
  };
27
- browserWindow.emui[appId].mount = async () => {
29
+ browserWindow.emui[appId].mount = async (options) => {
30
+ window.__TEST__.mountOptions = options;
28
31
  const appContainer = document.getElementById(appElementId);
29
32
  if (appContainer) {
30
33
  const mainElement = document.createElement("main");
@@ -19,12 +19,15 @@
19
19
  const browserWindow = getWindow();
20
20
  browserWindow.emui = browserWindow.emui || {};
21
21
  browserWindow.emui[appId] = browserWindow.emui[appId] || {};
22
+ window.__TEST__ = {};
22
23
  browserWindow.emui[appId].init = async (options) => {
24
+ window.__TEST__.initOptions = options;
23
25
  host = options.host;
24
26
  parentHistory = options.history;
25
27
  logger = options.logger;
26
28
  };
27
- browserWindow.emui[appId].mount = async () => {
29
+ browserWindow.emui[appId].mount = async (options) => {
30
+ window.__TEST__.mountOptions = options;
28
31
  const appContainer = document.getElementById(appElementId);
29
32
  if (appContainer) {
30
33
  const mainElement = document.createElement("main");