@elliemae/pui-app-sdk 5.20.3 → 5.21.0-beta.2

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 (135) hide show
  1. package/dist/cjs/analytics/index.js +2 -1
  2. package/dist/cjs/utils/decorators/functionDecorators.js +2 -2
  3. package/dist/cjs/utils/micro-frontend/app-bridge.js +36 -0
  4. package/dist/cjs/utils/micro-frontend/guest.js +99 -13
  5. package/dist/cjs/utils/micro-frontend/host.js +35 -2
  6. package/dist/cjs/utils/micro-frontend/tests/app.config.json +200 -0
  7. package/dist/cjs/utils/micro-frontend/tests/utils.js +116 -0
  8. package/dist/cjs/utils/testing/index.js +15 -1
  9. package/dist/cjs/view/micro-iframe-app/iframe/index.js +1 -1
  10. package/dist/cjs/view/micro-iframe-app/iframe.html +5 -1
  11. package/dist/cjs/view/micro-iframe-app/use-frame-loaded.js +3 -1
  12. package/dist/cjs/view/microapp-v2.js +91 -0
  13. package/dist/cjs/view/tests/__snapshots__/micro-iframe-app.test.tsx.snap +208 -0
  14. package/dist/cjs/view/tests/__snapshots__/microapp-v2.test.tsx.snap +21 -0
  15. package/dist/cjs/view/tests/app.config.json +200 -0
  16. package/dist/cjs/view/tests/constants.js +44 -0
  17. package/dist/cjs/view/tests/flights/23.1/app.checksum1.css +3 -0
  18. package/dist/cjs/view/tests/flights/23.1/app.checksum1.js +52 -0
  19. package/dist/cjs/view/tests/flights/23.1/manifest.json +4 -0
  20. package/dist/cjs/view/tests/flights/latest/app.checksum.css +3 -0
  21. package/dist/cjs/view/tests/flights/latest/app.checksum.js +52 -0
  22. package/dist/cjs/view/tests/flights/latest/manifest.json +4 -0
  23. package/dist/cjs/view/tests/hotels/23.1/app.checksum.css +3 -0
  24. package/dist/cjs/view/tests/hotels/23.1/app.checksum.js +52 -0
  25. package/dist/cjs/view/tests/hotels/23.1/manifest.json +4 -0
  26. package/dist/cjs/view/tests/hotels/latest/app.checksum.css +3 -0
  27. package/dist/cjs/view/tests/hotels/latest/app.checksum.js +52 -0
  28. package/dist/cjs/view/tests/hotels/latest/manifest.json +4 -0
  29. package/dist/cjs/view/tests/loan/latest/index.js +116 -0
  30. package/dist/cjs/view/tests/loan/latest/manifest.json +3 -0
  31. package/dist/cjs/view/tests/scriptingObjects/appraisalServiceModule.js +85 -0
  32. package/dist/cjs/{utils/micro-frontend/host-app.js → view/tests/scriptingObjects/constant.js} +5 -10
  33. package/dist/cjs/view/tests/scriptingObjects/global.js +40 -0
  34. package/dist/cjs/view/tests/scriptingObjects/loan.js +207 -0
  35. package/dist/cjs/view/tests/server.js +29 -0
  36. package/dist/cjs/view/tests/serverHandlers.js +210 -0
  37. package/dist/cjs/view/tests/task/latest/index.dev.js +67 -0
  38. package/dist/cjs/view/tests/task/latest/index.js +67 -0
  39. package/dist/cjs/view/tests/task/latest/manifest.json +4 -0
  40. package/dist/cjs/view/tests/travelhub/23.1/app.checksum.css +3 -0
  41. package/dist/cjs/view/tests/travelhub/23.1/app.checksum.js +25 -0
  42. package/dist/cjs/view/tests/travelhub/23.1/landing.checksum1.css +3 -0
  43. package/dist/cjs/view/tests/travelhub/23.1/landing.checksum1.js +6 -0
  44. package/dist/cjs/view/tests/travelhub/23.1/manifest.json +6 -0
  45. package/dist/cjs/view/tests/travelhub/latest/app.checksum.css +3 -0
  46. package/dist/cjs/view/tests/travelhub/latest/app.checksum.js +30 -0
  47. package/dist/cjs/view/tests/travelhub/latest/landing.checksum.css +3 -0
  48. package/dist/cjs/view/tests/travelhub/latest/landing.checksum.js +8 -0
  49. package/dist/cjs/view/tests/travelhub/latest/manifest.json +6 -0
  50. package/dist/cjs/{utils/micro-frontend/ssfguest-adapter.js → view/tests/utils.js} +34 -29
  51. package/dist/esm/analytics/index.js +2 -1
  52. package/dist/esm/utils/decorators/functionDecorators.js +2 -2
  53. package/dist/esm/utils/micro-frontend/app-bridge.js +16 -0
  54. package/dist/esm/utils/micro-frontend/guest.js +99 -13
  55. package/dist/esm/utils/micro-frontend/host.js +35 -2
  56. package/dist/esm/utils/micro-frontend/tests/app.config.json +200 -0
  57. package/dist/esm/utils/micro-frontend/tests/utils.js +96 -0
  58. package/dist/esm/utils/testing/index.js +5 -1
  59. package/dist/esm/view/micro-iframe-app/iframe/index.js +1 -1
  60. package/dist/esm/view/micro-iframe-app/iframe.html +5 -1
  61. package/dist/esm/view/micro-iframe-app/use-frame-loaded.js +3 -1
  62. package/dist/esm/view/microapp-v2.js +71 -0
  63. package/dist/esm/view/tests/__snapshots__/micro-iframe-app.test.tsx.snap +208 -0
  64. package/dist/esm/view/tests/__snapshots__/microapp-v2.test.tsx.snap +21 -0
  65. package/dist/esm/view/tests/app.config.json +200 -0
  66. package/dist/esm/view/tests/constants.js +24 -0
  67. package/dist/esm/view/tests/flights/23.1/app.checksum1.css +3 -0
  68. package/dist/esm/view/tests/flights/23.1/app.checksum1.js +51 -0
  69. package/dist/esm/view/tests/flights/23.1/manifest.json +4 -0
  70. package/dist/esm/view/tests/flights/latest/app.checksum.css +3 -0
  71. package/dist/esm/view/tests/flights/latest/app.checksum.js +51 -0
  72. package/dist/esm/view/tests/flights/latest/manifest.json +4 -0
  73. package/dist/esm/view/tests/hotels/23.1/app.checksum.css +3 -0
  74. package/dist/esm/view/tests/hotels/23.1/app.checksum.js +51 -0
  75. package/dist/esm/view/tests/hotels/23.1/manifest.json +4 -0
  76. package/dist/esm/view/tests/hotels/latest/app.checksum.css +3 -0
  77. package/dist/esm/view/tests/hotels/latest/app.checksum.js +51 -0
  78. package/dist/esm/view/tests/hotels/latest/manifest.json +4 -0
  79. package/dist/esm/view/tests/loan/latest/index.js +115 -0
  80. package/dist/esm/view/tests/loan/latest/manifest.json +3 -0
  81. package/dist/esm/view/tests/scriptingObjects/appraisalServiceModule.js +67 -0
  82. package/dist/esm/view/tests/scriptingObjects/constant.js +4 -0
  83. package/dist/esm/view/tests/scriptingObjects/global.js +20 -0
  84. package/dist/esm/view/tests/scriptingObjects/loan.js +187 -0
  85. package/dist/esm/view/tests/server.js +9 -0
  86. package/dist/esm/view/tests/serverHandlers.js +180 -0
  87. package/dist/esm/view/tests/task/latest/index.dev.js +66 -0
  88. package/dist/esm/view/tests/task/latest/index.js +66 -0
  89. package/dist/esm/view/tests/task/latest/manifest.json +4 -0
  90. package/dist/esm/view/tests/travelhub/23.1/app.checksum.css +3 -0
  91. package/dist/esm/view/tests/travelhub/23.1/app.checksum.js +24 -0
  92. package/dist/esm/view/tests/travelhub/23.1/landing.checksum1.css +3 -0
  93. package/dist/esm/view/tests/travelhub/23.1/landing.checksum1.js +5 -0
  94. package/dist/esm/view/tests/travelhub/23.1/manifest.json +6 -0
  95. package/dist/esm/view/tests/travelhub/latest/app.checksum.css +3 -0
  96. package/dist/esm/view/tests/travelhub/latest/app.checksum.js +29 -0
  97. package/dist/esm/view/tests/travelhub/latest/landing.checksum.css +3 -0
  98. package/dist/esm/view/tests/travelhub/latest/landing.checksum.js +7 -0
  99. package/dist/esm/view/tests/travelhub/latest/manifest.json +6 -0
  100. package/dist/esm/view/tests/utils.js +33 -0
  101. package/dist/types/lib/utils/micro-frontend/app-bridge.d.ts +4 -0
  102. package/dist/types/lib/utils/micro-frontend/guest.d.ts +46 -11
  103. package/dist/types/lib/utils/micro-frontend/host.d.ts +20 -3
  104. package/dist/types/lib/utils/micro-frontend/tests/utils.d.ts +39 -0
  105. package/dist/types/lib/utils/micro-frontend/types.d.ts +2 -1
  106. package/dist/types/lib/utils/testing/index.d.ts +57 -1
  107. package/dist/types/lib/utils/window.d.ts +13 -6
  108. package/dist/types/lib/view/microapp-v2.d.ts +16 -0
  109. package/dist/types/lib/view/tests/constants.d.ts +11 -0
  110. package/dist/types/lib/view/tests/flights/23.1/app.checksum1.d.ts +7 -0
  111. package/dist/types/lib/view/tests/flights/latest/app.checksum.d.ts +7 -0
  112. package/dist/types/lib/view/tests/hotels/23.1/app.checksum.d.ts +7 -0
  113. package/dist/types/lib/view/tests/hotels/latest/app.checksum.d.ts +7 -0
  114. package/dist/types/lib/view/tests/loan/latest/index.d.ts +11 -0
  115. package/dist/types/lib/view/tests/microapp-v2.test.d.ts +1 -0
  116. package/dist/types/lib/view/tests/scriptingObjects/appraisalServiceModule.d.ts +36 -0
  117. package/dist/types/lib/view/tests/scriptingObjects/constant.d.ts +1 -0
  118. package/dist/types/lib/view/tests/scriptingObjects/global.d.ts +9 -0
  119. package/dist/types/lib/view/tests/scriptingObjects/loan.d.ts +31 -0
  120. package/dist/types/lib/view/tests/server.d.ts +1 -0
  121. package/dist/types/lib/view/tests/serverHandlers.d.ts +5 -0
  122. package/dist/types/lib/view/tests/task/latest/index.d.ts +10 -0
  123. package/dist/types/lib/view/tests/task/latest/index.dev.d.ts +10 -0
  124. package/dist/types/lib/view/tests/travelhub/23.1/app.checksum.d.ts +7 -0
  125. package/dist/types/lib/view/tests/travelhub/23.1/landing.checksum1.d.ts +2 -0
  126. package/dist/types/lib/view/tests/travelhub/latest/app.checksum.d.ts +0 -0
  127. package/dist/types/lib/view/tests/travelhub/latest/landing.checksum.d.ts +0 -0
  128. package/dist/types/lib/view/tests/utils.d.ts +7 -0
  129. package/dist/types/tsconfig.tsbuildinfo +1 -1
  130. package/package.json +43 -39
  131. package/dist/esm/utils/micro-frontend/host-app.js +0 -9
  132. package/dist/esm/utils/micro-frontend/ssfguest-adapter.js +0 -28
  133. package/dist/types/lib/utils/micro-frontend/host-app.d.ts +0 -11
  134. package/dist/types/lib/utils/micro-frontend/ssfguest-adapter.d.ts +0 -7
  135. /package/dist/types/lib/{utils/micro-frontend/tests/guest-ssf-host.test.d.ts → view/tests/micro-iframe-app.test.d.ts} +0 -0
@@ -38,7 +38,8 @@ const sendBAEvent = ({
38
38
  self = true
39
39
  }) => {
40
40
  if (!self) {
41
- const sendEvent = import_guest.CMicroAppGuest.getInstance()?.getHost()?.sendBAEvent;
41
+ const host = import_guest.CMicroAppGuest.getInstance()?.getHost();
42
+ const sendEvent = host?.sendBAEvent;
42
43
  if (sendEvent) {
43
44
  sendEvent(data);
44
45
  } else {
@@ -166,9 +166,9 @@ function AsyncSingleExecution(_target, _propertyKey, descriptor) {
166
166
  return promiseMap.get(key);
167
167
  }
168
168
  const promise = originalMethod.apply(this, args);
169
- if (promise && typeof promise.then === "function") {
169
+ if (promise instanceof Promise) {
170
170
  promiseMap.set(key, promise);
171
- promise.catch((e) => e).finally(() => {
171
+ promise.finally(() => {
172
172
  promiseMap.delete(key);
173
173
  });
174
174
  }
@@ -0,0 +1,36 @@
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 __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var app_bridge_exports = {};
20
+ __export(app_bridge_exports, {
21
+ getAppBridge: () => getAppBridge
22
+ });
23
+ module.exports = __toCommonJS(app_bridge_exports);
24
+ var import_pui_app_bridge = require("@elliemae/pui-app-bridge");
25
+ var import_logger = require("../logger.js");
26
+ let appBridge = null;
27
+ const getAppBridge = async () => {
28
+ if (!appBridge) {
29
+ appBridge = new import_pui_app_bridge.CAppBridge({
30
+ logger: (0, import_logger.getLogger)(),
31
+ version: window.emui?.version || "latest"
32
+ });
33
+ await appBridge.init();
34
+ }
35
+ return appBridge;
36
+ };
@@ -34,6 +34,7 @@ module.exports = __toCommonJS(guest_exports);
34
34
  var import_lodash = __toESM(require("lodash"));
35
35
  var import_uuid = require("uuid");
36
36
  var import_pui_theme = require("@elliemae/pui-theme");
37
+ var import_ssf_guest = require("@elliemae/ssf-guest");
37
38
  var import_window = require("../window.js");
38
39
  var import_app_config = require("../app-config/index.js");
39
40
  var import_config = require("../app-config/config.js");
@@ -43,8 +44,7 @@ var import_logger = require("../logger.js");
43
44
  var import_web_storage = require("../web-storage.js");
44
45
  var import_web_analytics = require("./scripting-objects/web-analytics.js");
45
46
  var import_appdynamics = require("../../analytics/appdynamics.js");
46
- var import_ssfguest_adapter = require("./ssfguest-adapter.js");
47
- var import_host_app = require("./host-app.js");
47
+ var import_app_bridge = require("./app-bridge.js");
48
48
  const isCrossDomain = () => {
49
49
  try {
50
50
  window.parent.document;
@@ -53,6 +53,11 @@ const isCrossDomain = () => {
53
53
  return true;
54
54
  }
55
55
  };
56
+ var CommunicationMethod = /* @__PURE__ */ ((CommunicationMethod2) => {
57
+ CommunicationMethod2["SSF"] = "ssf";
58
+ CommunicationMethod2["APPSDK"] = "app-sdk";
59
+ return CommunicationMethod2;
60
+ })(CommunicationMethod || {});
56
61
  class CMicroAppGuest {
57
62
  /**
58
63
  * unique microapp id
@@ -63,6 +68,14 @@ class CMicroAppGuest {
63
68
  appId;
64
69
  props;
65
70
  containerId;
71
+ /**
72
+ * communication method used between microapps
73
+ */
74
+ #communicationMethod;
75
+ /**
76
+ * AppBridge instance
77
+ */
78
+ #appBridge = null;
66
79
  onInit;
67
80
  onMount;
68
81
  onUnmount;
@@ -73,6 +86,7 @@ class CMicroAppGuest {
73
86
  window.emui.uuid = window.emui.uuid || (0, import_uuid.v4)();
74
87
  this.appId = window.emui?.appId || (0, import_config.getAppConfigValue)("appId");
75
88
  this.#uuid = window.emui.uuid;
89
+ this.#communicationMethod = "app-sdk" /* APPSDK */;
76
90
  this.props = {
77
91
  host: null,
78
92
  hostUrl: null,
@@ -110,6 +124,45 @@ class CMicroAppGuest {
110
124
  getLogger() {
111
125
  return this.logger;
112
126
  }
127
+ getObject(objectId) {
128
+ let host = null;
129
+ if (this.#communicationMethod === "ssf" /* SSF */) {
130
+ host = this.getHost();
131
+ return host.getObject(objectId);
132
+ }
133
+ host = this.getHost();
134
+ return host.getObject(objectId);
135
+ }
136
+ /**
137
+ * subscribe to the scripting object event
138
+ * @param {SubscribeParam<EventId, AppEvents[EventId]>} params - the parameters for the subscription
139
+ * @param {string} params.soName - the name of the scripting object
140
+ * @param {string} params.eventName - the name of the event
141
+ * @param {Function} params.callback - the callback function to be called when the event is triggered
142
+ * @returns {void}
143
+ */
144
+ subscribe(params) {
145
+ let host = null;
146
+ if (this.#communicationMethod === "ssf" /* SSF */) {
147
+ host = this.getHost();
148
+ return host.subscribe(params);
149
+ }
150
+ host = this.getHost();
151
+ return host.subscribe(params);
152
+ }
153
+ /**
154
+ * unsubscribe from the scripting object event
155
+ * @param params - parameters for the unsubscription
156
+ */
157
+ unsubscribe(params) {
158
+ let host = null;
159
+ if (this.#communicationMethod === "ssf" /* SSF */) {
160
+ host = this.getHost();
161
+ host.unsubscribe(params);
162
+ }
163
+ host = this.getHost();
164
+ host.unsubscribe(params);
165
+ }
113
166
  getProps() {
114
167
  return this.props;
115
168
  }
@@ -174,21 +227,22 @@ class CMicroAppGuest {
174
227
  }
175
228
  getSessionStorageItem(key) {
176
229
  let value = sessionStorage.getItem(key);
177
- if (!value && this.props.host?.getItem) {
178
- value = this.props.host.getItem(key);
230
+ const host = this.getHost();
231
+ if (!value && host?.getItem) {
232
+ value = host.getItem(key);
179
233
  }
180
234
  return value;
181
235
  }
182
- async getSSFAdapter() {
236
+ async findHost() {
183
237
  let host = null;
184
238
  if (window.parent !== window) {
185
239
  if (!isCrossDomain()) {
186
- host = window.parent?.emui?.MicroAppHost || null;
240
+ host = window.parent?.emui?.MicroAppHost ?? null;
187
241
  }
188
242
  if (!host) {
189
- const ssfAdapter = new import_ssfguest_adapter.SSFGuestAdapter();
190
- if (!await ssfAdapter.init()) return null;
191
- host = ssfAdapter;
243
+ host = new import_ssf_guest.SSFGuest({ appLogger: this.logger });
244
+ await host.connect();
245
+ this.#communicationMethod = "ssf" /* SSF */;
192
246
  }
193
247
  }
194
248
  return host;
@@ -200,17 +254,21 @@ class CMicroAppGuest {
200
254
  this.props = import_lodash.default.merge(this.props, options);
201
255
  this.props.history = options?.history || this.props.history;
202
256
  if (!this.props.host) {
203
- const host = await this.getSSFAdapter();
204
- if (host) this.props.host = host;
257
+ const host = await this.findHost();
258
+ if (host) {
259
+ this.props.host = host;
260
+ }
205
261
  }
206
- if (this.props.host) (0, import_host_app.setHostApp)(this.props.host);
207
262
  __webpack_public_path__ = __webpack_public_path__.replace(/\/?$/, "/");
208
263
  return (0, import_app_config.loadAppConfig)().then(() => {
209
264
  const instanceId = this.getSessionStorageItem("instanceId") || "";
210
265
  const userId = this.getSessionStorageItem("userId") || "";
211
266
  (0, import_web_analytics.updateBAEventParameters)({ appId: this.appId, instanceId, userId });
212
267
  (0, import_appdynamics.setAppDynamicsUserData)({ appId: this.appId, instanceId, userId });
213
- if (this.onInit) this.onInit(this.props);
268
+ return (0, import_app_bridge.getAppBridge)().then((appBridge) => {
269
+ this.#appBridge = appBridge;
270
+ if (this.onInit) this.onInit(this.props);
271
+ });
214
272
  });
215
273
  }
216
274
  mount(options = { containerId: "app-container" }) {
@@ -231,4 +289,32 @@ class CMicroAppGuest {
231
289
  navigate(url, state) {
232
290
  if (url) this.props.history.push(url, state);
233
291
  }
292
+ /**
293
+ * add scripting object for child microapp to use
294
+ * @param so - The scripting object to be added.
295
+ * @param params - Optional parameters for adding the scripting object.
296
+ */
297
+ addScriptingObject(so, params) {
298
+ if (this.#appBridge) {
299
+ this.#appBridge.addScriptingObject(so, params);
300
+ }
301
+ }
302
+ /**
303
+ * dispatch event to child microapp
304
+ * @param {DispatchEventParams<EventId, Params>} params - event parameters
305
+ */
306
+ async dispatchEvent(params) {
307
+ if (this.#appBridge) {
308
+ await this.#appBridge.dispatchEvent(params);
309
+ }
310
+ }
311
+ /**
312
+ * removes scripting object from child microapp use
313
+ * @param objectId unique id of the scripting object
314
+ */
315
+ removeScriptingObject(objectId) {
316
+ if (this.#appBridge) {
317
+ this.#appBridge.removeScriptingObject(objectId);
318
+ }
319
+ }
234
320
  }
@@ -39,7 +39,7 @@ var import_appdynamics = require("../../analytics/appdynamics.js");
39
39
  var import_analytics = require("./scripting-objects/analytics.js");
40
40
  var import_web_analytics = require("./scripting-objects/web-analytics.js");
41
41
  var import_session = require("../session.js");
42
- var import_host_app = require("./host-app.js");
42
+ var import_app_bridge = require("./app-bridge.js");
43
43
  class CMicroAppHost {
44
44
  static instance;
45
45
  logger;
@@ -51,6 +51,7 @@ class CMicroAppHost {
51
51
  throttleRenewSessionTimer;
52
52
  scriptingObjects;
53
53
  #ssfHostRef;
54
+ #appBridge = null;
54
55
  // eslint-disable-next-line max-statements
55
56
  constructor(params) {
56
57
  this.appId = (0, import_config.getAppConfigValue)("appId");
@@ -91,6 +92,11 @@ class CMicroAppHost {
91
92
  }
92
93
  );
93
94
  (0, import_app_config.loadAppConfig)().then(() => {
95
+ (0, import_app_bridge.getAppBridge)().then((appBridge) => {
96
+ this.#appBridge = appBridge;
97
+ }).catch((ex) => {
98
+ throw ex;
99
+ });
94
100
  if (this.onInit) this.onInit(this.props);
95
101
  }).catch(() => {
96
102
  });
@@ -102,7 +108,6 @@ class CMicroAppHost {
102
108
  static getInstance(params) {
103
109
  if (!this.instance) {
104
110
  this.instance = new this(params);
105
- (0, import_host_app.setHostApp)(this.instance);
106
111
  }
107
112
  return this.instance;
108
113
  }
@@ -196,4 +201,32 @@ class CMicroAppHost {
196
201
  async getObject(name) {
197
202
  return this.scriptingObjects[name];
198
203
  }
204
+ /**
205
+ * add scripting object for child microapp to use
206
+ * @param so - The scripting object to be added.
207
+ * @param params - Optional parameters for adding the scripting object.
208
+ */
209
+ addScriptingObject(so, params) {
210
+ if (this.#appBridge) {
211
+ this.#appBridge.addScriptingObject(so, params);
212
+ }
213
+ }
214
+ /**
215
+ * dispatch event to child microapp
216
+ * @param {DispatchEventParams<EventId, Params>} params - event parameters
217
+ */
218
+ async dispatchEvent(params) {
219
+ if (this.#appBridge) {
220
+ await this.#appBridge.dispatchEvent(params);
221
+ }
222
+ }
223
+ /**
224
+ * removes scripting object from child microapp use
225
+ * @param objectId unique id of the scripting object
226
+ */
227
+ removeScriptingObject(objectId) {
228
+ if (this.#appBridge) {
229
+ this.#appBridge.removeScriptingObject(objectId);
230
+ }
231
+ }
199
232
  }
@@ -0,0 +1,200 @@
1
+ {
2
+ "appId": "microfe",
3
+ "activeEnv": "localhost",
4
+ "googleTagManager": true,
5
+ "sessionTimeoutWarnInterval": "7200000",
6
+ "sessionTimeoutInterval": "9000000",
7
+ "microFrontendApps": {
8
+ "loanapp": {
9
+ "name": "Loan",
10
+ "hostUrl": "./loan",
11
+ "development": {
12
+ "files": ["index.js"]
13
+ },
14
+ "production": {
15
+ "files": ["index.js"]
16
+ }
17
+ },
18
+ "taskapp": {
19
+ "name": "Task",
20
+ "hostUrl": "./task",
21
+ "mode": "development",
22
+ "development": {
23
+ "files": ["index.dev.js"]
24
+ },
25
+ "production": {
26
+ "files": ["index.js"]
27
+ }
28
+ },
29
+ "travelhub": {
30
+ "name": "TravelHub",
31
+ "hostUrl": "./travelhub",
32
+ "development": {
33
+ "files": ["app.js", "landing.js", "app.css", "landing.css"]
34
+ },
35
+ "production": {
36
+ "files": ["app.js", "landing.js", "app.css", "landing.css"]
37
+ }
38
+ },
39
+ "flights": {
40
+ "name": "Flights",
41
+ "hostUrl": "./flights",
42
+ "development": {
43
+ "files": ["app.js", "app.css"]
44
+ },
45
+ "production": {
46
+ "files": ["app.js", "app.css"]
47
+ }
48
+ },
49
+ "hotels": {
50
+ "name": "Hotels",
51
+ "hostUrl": "./hotels",
52
+ "development": {
53
+ "files": ["app.js", "app.css"]
54
+ },
55
+ "production": {
56
+ "files": ["app.js", "app.css"]
57
+ }
58
+ }
59
+ },
60
+ "serviceEndpoints": {
61
+ "api": "",
62
+ "idp": "https://int.idp.ellielabs.com",
63
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
64
+ },
65
+ "env": {
66
+ "localhost": {
67
+ "serviceEndpoints": {
68
+ "api": "",
69
+ "idp": "https://int.idp.ellielabs.com",
70
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
71
+ }
72
+ },
73
+ "dev": {
74
+ "serviceEndpoints": {
75
+ "api": "https://dev.api.puiservice.rd.elliemae.io",
76
+ "idp": "https://int.idp.ellielabs.com",
77
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
78
+ }
79
+ },
80
+ "dev2": {
81
+ "serviceEndpoints": {
82
+ "api": "https://int.api.ellielabs.com",
83
+ "idp": "https://int.idp.ellielabs.com",
84
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
85
+ }
86
+ },
87
+ "qa": {
88
+ "serviceEndpoints": {
89
+ "api": "https://dev.api.puiservice.rd.elliemae.io",
90
+ "idp": "https://int.idp.ellielabs.com",
91
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
92
+ }
93
+ },
94
+ "qa2": {
95
+ "serviceEndpoints": {
96
+ "api": "https://int.api.ellielabs.com",
97
+ "idp": "https://int.idp.ellielabs.com",
98
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
99
+ }
100
+ },
101
+ "qa3": {
102
+ "serviceEndpoints": {
103
+ "api": "https://int.api.ellielabs.com",
104
+ "idp": "https://int.idp.ellielabs.com",
105
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
106
+ }
107
+ },
108
+ "int": {
109
+ "serviceEndpoints": {
110
+ "api": "https://int.api.ellielabs.com",
111
+ "idp": "https://int.idp.ellielabs.com",
112
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
113
+ }
114
+ },
115
+ "peg-osb1": {
116
+ "serviceEndpoints": {
117
+ "api": "https://encompass-peg-api.elliemae.com",
118
+ "idp": "https://peg.idp.ellielabs.com/authorize",
119
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
120
+ }
121
+ },
122
+ "peg-osb2": {
123
+ "serviceEndpoints": {
124
+ "api": "https://encompass-peg2-api.elliemae.com",
125
+ "idp": "https://peg.idp.ellielabs.com/authorize",
126
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
127
+ }
128
+ },
129
+ "peg": {
130
+ "serviceEndpoints": {
131
+ "api": "https://peg2-west.api.ellielabs.com",
132
+ "idp": "https://peg.idp.ellielabs.com/authorize",
133
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
134
+ }
135
+ },
136
+ "peg-oapi-west": {
137
+ "serviceEndpoints": {
138
+ "api": "https://peg2-west.api.ellielabs.com",
139
+ "idp": "https://peg.idp.ellielabs.com/authorize",
140
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
141
+ }
142
+ },
143
+ "peg-oapi-east": {
144
+ "serviceEndpoints": {
145
+ "api": "https://peg2-east.api.ellielabs.com",
146
+ "idp": "https://peg.idp.ellielabs.com/authorize",
147
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
148
+ }
149
+ },
150
+ "peg2-oapi-east": {
151
+ "serviceEndpoints": {
152
+ "api": "https://peg2-east.api.ellielabs.com",
153
+ "idp": "https://peg.idp.ellielabs.com/authorize",
154
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
155
+ }
156
+ },
157
+ "peg3": {
158
+ "serviceEndpoints": {
159
+ "api": "https://pel1.api.ellielabs.com",
160
+ "idp": "https://peg3.idp.ellielabs.com/authorize",
161
+ "logger": "https://int.api.ellielabs.com/diagnostics/v2/logging"
162
+ }
163
+ },
164
+ "stage": {
165
+ "serviceEndpoints": {
166
+ "api": "https://stg.api.elliemae.com",
167
+ "idp": "https://stg.idp.elliemae.com/authorize",
168
+ "logger": "https://api.ellielabs.com/diagnostics/v2/logging"
169
+ }
170
+ },
171
+ "beta": {
172
+ "serviceEndpoints": {
173
+ "api": "https://concept.api.elliemae.com",
174
+ "idp": "https://concept.idp.elliemae.com/authorize",
175
+ "logger": "https://api.ellielabs.com/diagnostics/v2/logging"
176
+ }
177
+ },
178
+ "demo": {
179
+ "serviceEndpoints": {
180
+ "api": "https://concept.api.elliemae.com",
181
+ "idp": "https://concept.idp.elliemae.com/authorize",
182
+ "logger": "https://api.ellielabs.com/diagnostics/v2/logging"
183
+ }
184
+ },
185
+ "epc": {
186
+ "serviceEndpoints": {
187
+ "api": "https://concept.api.elliemae.com",
188
+ "idp": "https://concept.idp.elliemae.com/authorize",
189
+ "logger": "https://api.ellielabs.com/diagnostics/v2/logging"
190
+ }
191
+ },
192
+ "prod": {
193
+ "serviceEndpoints": {
194
+ "api": "https://api.elliemae.com",
195
+ "idp": "https://idp.elliemae.com/authorize",
196
+ "logger": "https://api.ellielabs.com/diagnostics/v2/logging"
197
+ }
198
+ }
199
+ }
200
+ }
@@ -0,0 +1,116 @@
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 __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var utils_exports = {};
20
+ __export(utils_exports, {
21
+ applicationScriptingObject: () => applicationScriptingObject,
22
+ authScriptingObject: () => authScriptingObject,
23
+ postMessage: () => postMessage,
24
+ setupHost: () => setupHost
25
+ });
26
+ module.exports = __toCommonJS(utils_exports);
27
+ var import_microfe_common = require("@elliemae/microfe-common");
28
+ const applicationScriptingObject = {
29
+ object: {
30
+ events: [],
31
+ functions: [
32
+ "closeModal",
33
+ "extend",
34
+ "getApplicationContext",
35
+ "getCapabilities",
36
+ "getCompanySettings",
37
+ "getDescriptor",
38
+ "getPersonaAccess",
39
+ "getPoliciesDetails",
40
+ "getUserAccessRights",
41
+ "hideSpinner",
42
+ "keepSessionAlive",
43
+ "log",
44
+ "navigate",
45
+ "open",
46
+ "openModal",
47
+ "performAction",
48
+ "print",
49
+ "showError",
50
+ "showSpinner",
51
+ "supportsAction",
52
+ "supportsNavigateTo"
53
+ ],
54
+ objectId: "application",
55
+ objectType: "Object"
56
+ },
57
+ type: "object"
58
+ };
59
+ const authScriptingObject = {
60
+ object: {
61
+ events: [],
62
+ functions: ["getAccessToken", "createAuthCode", "getUser"],
63
+ objectId: "auth",
64
+ objectType: "Object"
65
+ },
66
+ type: "object"
67
+ };
68
+ const hostObjects = {
69
+ application: applicationScriptingObject,
70
+ auth: authScriptingObject
71
+ };
72
+ const getOrigin = (url) => {
73
+ if (!url || url === "about:blank") return "*";
74
+ try {
75
+ const { origin } = new URL(url);
76
+ return origin === "null" || !origin ? url : origin;
77
+ } catch (e) {
78
+ const { origin } = new URL(url, document.baseURI);
79
+ return origin;
80
+ }
81
+ };
82
+ const postMessage = ({
83
+ srcWindow,
84
+ targetWindow,
85
+ message
86
+ }) => {
87
+ targetWindow.dispatchEvent(
88
+ new MessageEvent("message", {
89
+ source: srcWindow,
90
+ origin: getOrigin(srcWindow.location.href),
91
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
92
+ data: {
93
+ source: "elli:remoting",
94
+ ...message
95
+ }
96
+ })
97
+ );
98
+ };
99
+ const setupHost = (hostWindow) => {
100
+ const onMessage = ({ data }) => {
101
+ if (data?.type !== import_microfe_common.MessageType.ObjectGet) return;
102
+ const scriptingObject = hostObjects[data?.body?.objectId ?? ""] ?? null;
103
+ if (scriptingObject)
104
+ postMessage({
105
+ srcWindow: hostWindow,
106
+ targetWindow: window,
107
+ message: {
108
+ body: scriptingObject,
109
+ type: "elli:remoting:response",
110
+ requestId: data.requestId
111
+ }
112
+ });
113
+ };
114
+ hostWindow?.addEventListener?.("message", onMessage);
115
+ return () => hostWindow?.removeEventListener?.("message", onMessage);
116
+ };
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -16,6 +18,14 @@ var __copyProps = (to, from, except, desc) => {
16
18
  return to;
17
19
  };
18
20
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
19
29
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
30
  var testing_exports = {};
21
31
  __export(testing_exports, {
@@ -24,6 +34,7 @@ __export(testing_exports, {
24
34
  module.exports = __toCommonJS(testing_exports);
25
35
  var import_jsx_runtime = require("react/jsx-runtime");
26
36
  var import_react = require("@testing-library/react");
37
+ var import_user_event = __toESM(require("@testing-library/user-event"));
27
38
  var import_pui_theme = require("@elliemae/pui-theme");
28
39
  var import_store = require("../../data/store.js");
29
40
  var import_app_root = require("../../view/app-root/index.js");
@@ -36,4 +47,7 @@ const AllTheProviders = ({
36
47
  theme = defaultTheme,
37
48
  children
38
49
  }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_app_root.AppRoot, { store, history: import_history.browserHistory, theme, children });
39
- const customRender = (ui, options) => (0, import_react.render)(ui, { wrapper: AllTheProviders, ...options });
50
+ const customRender = (ui, options) => ({
51
+ user: import_user_event.default.setup(),
52
+ ...(0, import_react.render)(ui, { wrapper: AllTheProviders, ...options })
53
+ });
@@ -61,7 +61,7 @@ const IFrame = (0, import_react.memo)(
61
61
  ref: frameRef,
62
62
  title,
63
63
  src,
64
- scrolling: "no",
64
+ "data-testid": `${import_const.IFRAME_CONTAINER_ID_PREFIX}${id}`,
65
65
  ...sandboxProps,
66
66
  onLoad: () => frameRef?.current?.contentDocument && onFrameReady(frameRef.current.contentDocument)
67
67
  }