@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.
- package/dist/cjs/analytics/index.js +2 -1
- package/dist/cjs/utils/decorators/functionDecorators.js +2 -2
- package/dist/cjs/utils/micro-frontend/app-bridge.js +36 -0
- package/dist/cjs/utils/micro-frontend/guest.js +99 -13
- package/dist/cjs/utils/micro-frontend/host.js +35 -2
- package/dist/cjs/utils/micro-frontend/tests/app.config.json +200 -0
- package/dist/cjs/utils/micro-frontend/tests/utils.js +116 -0
- package/dist/cjs/utils/testing/index.js +15 -1
- package/dist/cjs/view/micro-iframe-app/iframe/index.js +1 -1
- package/dist/cjs/view/micro-iframe-app/iframe.html +5 -1
- package/dist/cjs/view/micro-iframe-app/use-frame-loaded.js +3 -1
- package/dist/cjs/view/microapp-v2.js +91 -0
- package/dist/cjs/view/tests/__snapshots__/micro-iframe-app.test.tsx.snap +208 -0
- package/dist/cjs/view/tests/__snapshots__/microapp-v2.test.tsx.snap +21 -0
- package/dist/cjs/view/tests/app.config.json +200 -0
- package/dist/cjs/view/tests/constants.js +44 -0
- package/dist/cjs/view/tests/flights/23.1/app.checksum1.css +3 -0
- package/dist/cjs/view/tests/flights/23.1/app.checksum1.js +52 -0
- package/dist/cjs/view/tests/flights/23.1/manifest.json +4 -0
- package/dist/cjs/view/tests/flights/latest/app.checksum.css +3 -0
- package/dist/cjs/view/tests/flights/latest/app.checksum.js +52 -0
- package/dist/cjs/view/tests/flights/latest/manifest.json +4 -0
- package/dist/cjs/view/tests/hotels/23.1/app.checksum.css +3 -0
- package/dist/cjs/view/tests/hotels/23.1/app.checksum.js +52 -0
- package/dist/cjs/view/tests/hotels/23.1/manifest.json +4 -0
- package/dist/cjs/view/tests/hotels/latest/app.checksum.css +3 -0
- package/dist/cjs/view/tests/hotels/latest/app.checksum.js +52 -0
- package/dist/cjs/view/tests/hotels/latest/manifest.json +4 -0
- package/dist/cjs/view/tests/loan/latest/index.js +116 -0
- package/dist/cjs/view/tests/loan/latest/manifest.json +3 -0
- package/dist/cjs/view/tests/scriptingObjects/appraisalServiceModule.js +85 -0
- package/dist/cjs/{utils/micro-frontend/host-app.js → view/tests/scriptingObjects/constant.js} +5 -10
- package/dist/cjs/view/tests/scriptingObjects/global.js +40 -0
- package/dist/cjs/view/tests/scriptingObjects/loan.js +207 -0
- package/dist/cjs/view/tests/server.js +29 -0
- package/dist/cjs/view/tests/serverHandlers.js +210 -0
- package/dist/cjs/view/tests/task/latest/index.dev.js +67 -0
- package/dist/cjs/view/tests/task/latest/index.js +67 -0
- package/dist/cjs/view/tests/task/latest/manifest.json +4 -0
- package/dist/cjs/view/tests/travelhub/23.1/app.checksum.css +3 -0
- package/dist/cjs/view/tests/travelhub/23.1/app.checksum.js +25 -0
- package/dist/cjs/view/tests/travelhub/23.1/landing.checksum1.css +3 -0
- package/dist/cjs/view/tests/travelhub/23.1/landing.checksum1.js +6 -0
- package/dist/cjs/view/tests/travelhub/23.1/manifest.json +6 -0
- package/dist/cjs/view/tests/travelhub/latest/app.checksum.css +3 -0
- package/dist/cjs/view/tests/travelhub/latest/app.checksum.js +30 -0
- package/dist/cjs/view/tests/travelhub/latest/landing.checksum.css +3 -0
- package/dist/cjs/view/tests/travelhub/latest/landing.checksum.js +8 -0
- package/dist/cjs/view/tests/travelhub/latest/manifest.json +6 -0
- package/dist/cjs/{utils/micro-frontend/ssfguest-adapter.js → view/tests/utils.js} +34 -29
- package/dist/esm/analytics/index.js +2 -1
- package/dist/esm/utils/decorators/functionDecorators.js +2 -2
- package/dist/esm/utils/micro-frontend/app-bridge.js +16 -0
- package/dist/esm/utils/micro-frontend/guest.js +99 -13
- package/dist/esm/utils/micro-frontend/host.js +35 -2
- package/dist/esm/utils/micro-frontend/tests/app.config.json +200 -0
- package/dist/esm/utils/micro-frontend/tests/utils.js +96 -0
- package/dist/esm/utils/testing/index.js +5 -1
- package/dist/esm/view/micro-iframe-app/iframe/index.js +1 -1
- package/dist/esm/view/micro-iframe-app/iframe.html +5 -1
- package/dist/esm/view/micro-iframe-app/use-frame-loaded.js +3 -1
- package/dist/esm/view/microapp-v2.js +71 -0
- package/dist/esm/view/tests/__snapshots__/micro-iframe-app.test.tsx.snap +208 -0
- package/dist/esm/view/tests/__snapshots__/microapp-v2.test.tsx.snap +21 -0
- package/dist/esm/view/tests/app.config.json +200 -0
- package/dist/esm/view/tests/constants.js +24 -0
- package/dist/esm/view/tests/flights/23.1/app.checksum1.css +3 -0
- package/dist/esm/view/tests/flights/23.1/app.checksum1.js +51 -0
- package/dist/esm/view/tests/flights/23.1/manifest.json +4 -0
- package/dist/esm/view/tests/flights/latest/app.checksum.css +3 -0
- package/dist/esm/view/tests/flights/latest/app.checksum.js +51 -0
- package/dist/esm/view/tests/flights/latest/manifest.json +4 -0
- package/dist/esm/view/tests/hotels/23.1/app.checksum.css +3 -0
- package/dist/esm/view/tests/hotels/23.1/app.checksum.js +51 -0
- package/dist/esm/view/tests/hotels/23.1/manifest.json +4 -0
- package/dist/esm/view/tests/hotels/latest/app.checksum.css +3 -0
- package/dist/esm/view/tests/hotels/latest/app.checksum.js +51 -0
- package/dist/esm/view/tests/hotels/latest/manifest.json +4 -0
- package/dist/esm/view/tests/loan/latest/index.js +115 -0
- package/dist/esm/view/tests/loan/latest/manifest.json +3 -0
- package/dist/esm/view/tests/scriptingObjects/appraisalServiceModule.js +67 -0
- package/dist/esm/view/tests/scriptingObjects/constant.js +4 -0
- package/dist/esm/view/tests/scriptingObjects/global.js +20 -0
- package/dist/esm/view/tests/scriptingObjects/loan.js +187 -0
- package/dist/esm/view/tests/server.js +9 -0
- package/dist/esm/view/tests/serverHandlers.js +180 -0
- package/dist/esm/view/tests/task/latest/index.dev.js +66 -0
- package/dist/esm/view/tests/task/latest/index.js +66 -0
- package/dist/esm/view/tests/task/latest/manifest.json +4 -0
- package/dist/esm/view/tests/travelhub/23.1/app.checksum.css +3 -0
- package/dist/esm/view/tests/travelhub/23.1/app.checksum.js +24 -0
- package/dist/esm/view/tests/travelhub/23.1/landing.checksum1.css +3 -0
- package/dist/esm/view/tests/travelhub/23.1/landing.checksum1.js +5 -0
- package/dist/esm/view/tests/travelhub/23.1/manifest.json +6 -0
- package/dist/esm/view/tests/travelhub/latest/app.checksum.css +3 -0
- package/dist/esm/view/tests/travelhub/latest/app.checksum.js +29 -0
- package/dist/esm/view/tests/travelhub/latest/landing.checksum.css +3 -0
- package/dist/esm/view/tests/travelhub/latest/landing.checksum.js +7 -0
- package/dist/esm/view/tests/travelhub/latest/manifest.json +6 -0
- package/dist/esm/view/tests/utils.js +33 -0
- package/dist/types/lib/utils/micro-frontend/app-bridge.d.ts +4 -0
- package/dist/types/lib/utils/micro-frontend/guest.d.ts +46 -11
- package/dist/types/lib/utils/micro-frontend/host.d.ts +20 -3
- package/dist/types/lib/utils/micro-frontend/tests/utils.d.ts +39 -0
- package/dist/types/lib/utils/micro-frontend/types.d.ts +2 -1
- package/dist/types/lib/utils/testing/index.d.ts +57 -1
- package/dist/types/lib/utils/window.d.ts +13 -6
- package/dist/types/lib/view/microapp-v2.d.ts +16 -0
- package/dist/types/lib/view/tests/constants.d.ts +11 -0
- package/dist/types/lib/view/tests/flights/23.1/app.checksum1.d.ts +7 -0
- package/dist/types/lib/view/tests/flights/latest/app.checksum.d.ts +7 -0
- package/dist/types/lib/view/tests/hotels/23.1/app.checksum.d.ts +7 -0
- package/dist/types/lib/view/tests/hotels/latest/app.checksum.d.ts +7 -0
- package/dist/types/lib/view/tests/loan/latest/index.d.ts +11 -0
- package/dist/types/lib/view/tests/microapp-v2.test.d.ts +1 -0
- package/dist/types/lib/view/tests/scriptingObjects/appraisalServiceModule.d.ts +36 -0
- package/dist/types/lib/view/tests/scriptingObjects/constant.d.ts +1 -0
- package/dist/types/lib/view/tests/scriptingObjects/global.d.ts +9 -0
- package/dist/types/lib/view/tests/scriptingObjects/loan.d.ts +31 -0
- package/dist/types/lib/view/tests/server.d.ts +1 -0
- package/dist/types/lib/view/tests/serverHandlers.d.ts +5 -0
- package/dist/types/lib/view/tests/task/latest/index.d.ts +10 -0
- package/dist/types/lib/view/tests/task/latest/index.dev.d.ts +10 -0
- package/dist/types/lib/view/tests/travelhub/23.1/app.checksum.d.ts +7 -0
- package/dist/types/lib/view/tests/travelhub/23.1/landing.checksum1.d.ts +2 -0
- package/dist/types/lib/view/tests/travelhub/latest/app.checksum.d.ts +0 -0
- package/dist/types/lib/view/tests/travelhub/latest/landing.checksum.d.ts +0 -0
- package/dist/types/lib/view/tests/utils.d.ts +7 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +43 -39
- package/dist/esm/utils/micro-frontend/host-app.js +0 -9
- package/dist/esm/utils/micro-frontend/ssfguest-adapter.js +0 -28
- package/dist/types/lib/utils/micro-frontend/host-app.d.ts +0 -11
- package/dist/types/lib/utils/micro-frontend/ssfguest-adapter.d.ts +0 -7
- /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
|
|
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
|
|
169
|
+
if (promise instanceof Promise) {
|
|
170
170
|
promiseMap.set(key, promise);
|
|
171
|
-
promise.
|
|
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
|
|
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
|
-
|
|
178
|
-
|
|
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
|
|
236
|
+
async findHost() {
|
|
183
237
|
let host = null;
|
|
184
238
|
if (window.parent !== window) {
|
|
185
239
|
if (!isCrossDomain()) {
|
|
186
|
-
host = window.parent?.emui?.MicroAppHost
|
|
240
|
+
host = window.parent?.emui?.MicroAppHost ?? null;
|
|
187
241
|
}
|
|
188
242
|
if (!host) {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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.
|
|
204
|
-
if (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
|
-
|
|
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
|
|
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) => (
|
|
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
|
-
|
|
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
|
}
|