@elliemae/pui-app-sdk 5.21.1 → 5.22.0-beta.1

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 (141) hide show
  1. package/dist/cjs/analytics/index.js +2 -1
  2. package/dist/cjs/index.js +3 -0
  3. package/dist/cjs/utils/micro-frontend/app-bridge.js +40 -0
  4. package/dist/cjs/utils/micro-frontend/guest.js +101 -14
  5. package/dist/cjs/utils/micro-frontend/host.js +36 -3
  6. package/dist/cjs/utils/micro-frontend/scripting-objects/analytics.js +2 -12
  7. package/dist/cjs/utils/micro-frontend/tests/app.config.json +200 -0
  8. package/dist/cjs/utils/micro-frontend/tests/utils.js +116 -0
  9. package/dist/cjs/utils/testing/index.js +15 -1
  10. package/dist/cjs/view/guest-microapp.js +126 -0
  11. package/dist/cjs/view/micro-iframe-app/iframe/index.js +1 -1
  12. package/dist/cjs/view/micro-iframe-app/iframe.html +5 -1
  13. package/dist/cjs/view/micro-iframe-app/use-frame-loaded.js +3 -1
  14. package/dist/cjs/view/tests/__snapshots__/guest-microapp.test.tsx.snap +21 -0
  15. package/dist/cjs/view/tests/__snapshots__/micro-iframe-app.test.tsx.snap +208 -0
  16. package/dist/cjs/view/tests/app.config.json +200 -0
  17. package/dist/cjs/view/tests/constants.js +44 -0
  18. package/dist/cjs/view/tests/flights/23.1/app.checksum1.css +3 -0
  19. package/dist/cjs/view/tests/flights/23.1/app.checksum1.js +52 -0
  20. package/dist/cjs/view/tests/flights/23.1/manifest.json +4 -0
  21. package/dist/cjs/view/tests/flights/latest/app.checksum.css +3 -0
  22. package/dist/cjs/view/tests/flights/latest/app.checksum.js +52 -0
  23. package/dist/cjs/view/tests/flights/latest/manifest.json +4 -0
  24. package/dist/cjs/view/tests/hotels/23.1/app.checksum.css +3 -0
  25. package/dist/cjs/view/tests/hotels/23.1/app.checksum.js +52 -0
  26. package/dist/cjs/view/tests/hotels/23.1/manifest.json +4 -0
  27. package/dist/cjs/view/tests/hotels/latest/app.checksum.css +3 -0
  28. package/dist/cjs/view/tests/hotels/latest/app.checksum.js +52 -0
  29. package/dist/cjs/view/tests/hotels/latest/manifest.json +4 -0
  30. package/dist/cjs/view/tests/loan/latest/index.js +116 -0
  31. package/dist/cjs/view/tests/loan/latest/manifest.json +3 -0
  32. package/dist/cjs/view/tests/scriptingObjects/appraisalServiceModule.js +81 -0
  33. package/dist/cjs/{utils/micro-frontend/host-app.js → view/tests/scriptingObjects/constant.js} +5 -10
  34. package/dist/cjs/view/tests/scriptingObjects/global.js +40 -0
  35. package/dist/cjs/view/tests/scriptingObjects/loan.js +200 -0
  36. package/dist/cjs/view/tests/server.js +29 -0
  37. package/dist/cjs/view/tests/serverHandlers.js +210 -0
  38. package/dist/cjs/view/tests/task/latest/index.dev.js +67 -0
  39. package/dist/cjs/view/tests/task/latest/index.js +67 -0
  40. package/dist/cjs/view/tests/task/latest/manifest.json +4 -0
  41. package/dist/cjs/view/tests/travelhub/23.1/app.checksum.css +3 -0
  42. package/dist/cjs/view/tests/travelhub/23.1/app.checksum.js +25 -0
  43. package/dist/cjs/view/tests/travelhub/23.1/landing.checksum1.css +3 -0
  44. package/dist/cjs/view/tests/travelhub/23.1/landing.checksum1.js +6 -0
  45. package/dist/cjs/view/tests/travelhub/23.1/manifest.json +6 -0
  46. package/dist/cjs/view/tests/travelhub/latest/app.checksum.css +3 -0
  47. package/dist/cjs/view/tests/travelhub/latest/app.checksum.js +30 -0
  48. package/dist/cjs/view/tests/travelhub/latest/landing.checksum.css +3 -0
  49. package/dist/cjs/view/tests/travelhub/latest/landing.checksum.js +8 -0
  50. package/dist/cjs/view/tests/travelhub/latest/manifest.json +6 -0
  51. package/dist/cjs/{utils/micro-frontend/ssfguest-adapter.js → view/tests/utils.js} +34 -29
  52. package/dist/esm/analytics/index.js +2 -1
  53. package/dist/esm/index.js +7 -1
  54. package/dist/esm/utils/micro-frontend/app-bridge.js +20 -0
  55. package/dist/esm/utils/micro-frontend/guest.js +101 -14
  56. package/dist/esm/utils/micro-frontend/host.js +36 -3
  57. package/dist/esm/utils/micro-frontend/scripting-objects/analytics.js +2 -2
  58. package/dist/esm/utils/micro-frontend/tests/app.config.json +200 -0
  59. package/dist/esm/utils/micro-frontend/tests/utils.js +96 -0
  60. package/dist/esm/utils/testing/index.js +5 -1
  61. package/dist/esm/view/guest-microapp.js +96 -0
  62. package/dist/esm/view/micro-iframe-app/iframe/index.js +1 -1
  63. package/dist/esm/view/micro-iframe-app/iframe.html +5 -1
  64. package/dist/esm/view/micro-iframe-app/use-frame-loaded.js +3 -1
  65. package/dist/esm/view/tests/__snapshots__/guest-microapp.test.tsx.snap +21 -0
  66. package/dist/esm/view/tests/__snapshots__/micro-iframe-app.test.tsx.snap +208 -0
  67. package/dist/esm/view/tests/app.config.json +200 -0
  68. package/dist/esm/view/tests/constants.js +24 -0
  69. package/dist/esm/view/tests/flights/23.1/app.checksum1.css +3 -0
  70. package/dist/esm/view/tests/flights/23.1/app.checksum1.js +51 -0
  71. package/dist/esm/view/tests/flights/23.1/manifest.json +4 -0
  72. package/dist/esm/view/tests/flights/latest/app.checksum.css +3 -0
  73. package/dist/esm/view/tests/flights/latest/app.checksum.js +51 -0
  74. package/dist/esm/view/tests/flights/latest/manifest.json +4 -0
  75. package/dist/esm/view/tests/hotels/23.1/app.checksum.css +3 -0
  76. package/dist/esm/view/tests/hotels/23.1/app.checksum.js +51 -0
  77. package/dist/esm/view/tests/hotels/23.1/manifest.json +4 -0
  78. package/dist/esm/view/tests/hotels/latest/app.checksum.css +3 -0
  79. package/dist/esm/view/tests/hotels/latest/app.checksum.js +51 -0
  80. package/dist/esm/view/tests/hotels/latest/manifest.json +4 -0
  81. package/dist/esm/view/tests/loan/latest/index.js +115 -0
  82. package/dist/esm/view/tests/loan/latest/manifest.json +3 -0
  83. package/dist/esm/view/tests/scriptingObjects/appraisalServiceModule.js +63 -0
  84. package/dist/esm/view/tests/scriptingObjects/constant.js +4 -0
  85. package/dist/esm/view/tests/scriptingObjects/global.js +22 -0
  86. package/dist/esm/view/tests/scriptingObjects/loan.js +180 -0
  87. package/dist/esm/view/tests/server.js +9 -0
  88. package/dist/esm/view/tests/serverHandlers.js +180 -0
  89. package/dist/esm/view/tests/task/latest/index.dev.js +66 -0
  90. package/dist/esm/view/tests/task/latest/index.js +66 -0
  91. package/dist/esm/view/tests/task/latest/manifest.json +4 -0
  92. package/dist/esm/view/tests/travelhub/23.1/app.checksum.css +3 -0
  93. package/dist/esm/view/tests/travelhub/23.1/app.checksum.js +24 -0
  94. package/dist/esm/view/tests/travelhub/23.1/landing.checksum1.css +3 -0
  95. package/dist/esm/view/tests/travelhub/23.1/landing.checksum1.js +5 -0
  96. package/dist/esm/view/tests/travelhub/23.1/manifest.json +6 -0
  97. package/dist/esm/view/tests/travelhub/latest/app.checksum.css +3 -0
  98. package/dist/esm/view/tests/travelhub/latest/app.checksum.js +29 -0
  99. package/dist/esm/view/tests/travelhub/latest/landing.checksum.css +3 -0
  100. package/dist/esm/view/tests/travelhub/latest/landing.checksum.js +7 -0
  101. package/dist/esm/view/tests/travelhub/latest/manifest.json +6 -0
  102. package/dist/esm/view/tests/utils.js +33 -0
  103. package/dist/types/lib/index.d.ts +2 -1
  104. package/dist/types/lib/utils/micro-frontend/app-bridge.d.ts +4 -0
  105. package/dist/types/lib/utils/micro-frontend/guest.d.ts +46 -11
  106. package/dist/types/lib/utils/micro-frontend/host.d.ts +27 -10
  107. package/dist/types/lib/utils/micro-frontend/scripting-objects/analytics.d.ts +2 -2
  108. package/dist/types/lib/utils/micro-frontend/tests/utils.d.ts +39 -0
  109. package/dist/types/lib/utils/micro-frontend/types.d.ts +2 -1
  110. package/dist/types/lib/utils/testing/index.d.ts +57 -1
  111. package/dist/types/lib/utils/window.d.ts +13 -6
  112. package/dist/types/lib/view/guest-microapp.d.ts +13 -0
  113. package/dist/types/lib/view/micro-app/index.d.ts +5 -0
  114. package/dist/types/lib/view/micro-iframe-app/index.d.ts +5 -0
  115. package/dist/types/lib/view/tests/constants.d.ts +11 -0
  116. package/dist/types/lib/view/tests/flights/23.1/app.checksum1.d.ts +7 -0
  117. package/dist/types/lib/view/tests/flights/latest/app.checksum.d.ts +7 -0
  118. package/dist/types/lib/view/tests/hotels/23.1/app.checksum.d.ts +7 -0
  119. package/dist/types/lib/view/tests/hotels/latest/app.checksum.d.ts +7 -0
  120. package/dist/types/lib/view/tests/loan/latest/index.d.ts +11 -0
  121. package/dist/types/lib/view/tests/micro-iframe-app.test.d.ts +1 -0
  122. package/dist/types/lib/view/tests/scriptingObjects/appraisalServiceModule.d.ts +36 -0
  123. package/dist/types/lib/view/tests/scriptingObjects/constant.d.ts +1 -0
  124. package/dist/types/lib/view/tests/scriptingObjects/global.d.ts +9 -0
  125. package/dist/types/lib/view/tests/scriptingObjects/loan.d.ts +31 -0
  126. package/dist/types/lib/view/tests/server.d.ts +1 -0
  127. package/dist/types/lib/view/tests/serverHandlers.d.ts +5 -0
  128. package/dist/types/lib/view/tests/task/latest/index.d.ts +10 -0
  129. package/dist/types/lib/view/tests/task/latest/index.dev.d.ts +10 -0
  130. package/dist/types/lib/view/tests/travelhub/23.1/app.checksum.d.ts +7 -0
  131. package/dist/types/lib/view/tests/travelhub/23.1/landing.checksum1.d.ts +2 -0
  132. package/dist/types/lib/view/tests/travelhub/latest/app.checksum.d.ts +0 -0
  133. package/dist/types/lib/view/tests/travelhub/latest/landing.checksum.d.ts +0 -0
  134. package/dist/types/lib/view/tests/utils.d.ts +7 -0
  135. package/dist/types/tsconfig.tsbuildinfo +1 -1
  136. package/package.json +43 -43
  137. package/dist/esm/utils/micro-frontend/host-app.js +0 -9
  138. package/dist/esm/utils/micro-frontend/ssfguest-adapter.js +0 -28
  139. package/dist/types/lib/utils/micro-frontend/host-app.d.ts +0 -11
  140. package/dist/types/lib/utils/micro-frontend/ssfguest-adapter.d.ts +0 -7
  141. /package/dist/types/lib/{utils/micro-frontend/tests/guest-ssf-host.test.d.ts → view/tests/guest-microapp.test.d.ts} +0 -0
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ const appId = "taskapp";
3
+ const appName = "Task App";
4
+ const appElementId = `pui-app-container-${appId}`;
5
+ const pipelinePath = "/pipeline";
6
+ const pipelineLinkText = "Pipeline";
7
+ const getWindow = () => {
8
+ try {
9
+ window.parent.document;
10
+ return window.parent;
11
+ } catch (err) {
12
+ return window;
13
+ }
14
+ };
15
+ let host = null;
16
+ let parentHistory = null;
17
+ let logger = null;
18
+ const browserWindow = getWindow();
19
+ browserWindow.__TEST__ = browserWindow.__TEST__ ?? {
20
+ logs: []
21
+ };
22
+ window.emui = window.emui || { uuid: crypto.randomUUID() };
23
+ window.emui.app = {
24
+ uuid: window.emui.uuid,
25
+ init: async (options) => {
26
+ browserWindow.__TEST__.logs.push(`${appId} initializing`);
27
+ host = options.host;
28
+ parentHistory = options.history;
29
+ logger = options.logger;
30
+ },
31
+ mount: async () => {
32
+ browserWindow.__TEST__.logs.push(`${appId} mounting`);
33
+ const appContainer = document.getElementById(appElementId);
34
+ if (appContainer) {
35
+ const mainElement = document.createElement("main");
36
+ appContainer.appendChild(mainElement);
37
+ const pageHeaderEle = document.createElement("h1");
38
+ pageHeaderEle.textContent = appName;
39
+ mainElement.appendChild(pageHeaderEle);
40
+ const contentEle = document.createElement("p");
41
+ contentEle.textContent = "Go to ";
42
+ mainElement.appendChild(contentEle);
43
+ const linkEle = document.createElement("a");
44
+ linkEle.href = "#";
45
+ linkEle.onclick = () => {
46
+ parentHistory?.push?.(pipelinePath);
47
+ };
48
+ linkEle.textContent = pipelineLinkText;
49
+ contentEle.appendChild(linkEle);
50
+ browserWindow.__TEST__.logs.push(`${appId} mounted`);
51
+ } else {
52
+ throw new Error(
53
+ `App container element with id ${appElementId} not found`
54
+ );
55
+ }
56
+ },
57
+ unmount: () => {
58
+ browserWindow.__TEST__.logs.push(`${appId} unmounting`);
59
+ const appContainer = document.getElementById(appElementId);
60
+ if (appContainer) {
61
+ appContainer.removeChild(appContainer.getElementsByTagName("main")[0]);
62
+ }
63
+ browserWindow.__TEST__.logs.push(`${appId} unmounted`);
64
+ return Promise.resolve();
65
+ }
66
+ };
67
+ browserWindow.emui?.registerApp?.({ appId, app: window.emui.app });
@@ -0,0 +1,4 @@
1
+ {
2
+ "index.js": "latest/index.js",
3
+ "index.dev.js": "latest/index.dev.js"
4
+ }
@@ -0,0 +1,3 @@
1
+ h1 {
2
+ color: red;
3
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ const appId = "travelhub";
3
+ const appName = "Travel Hub";
4
+ const getWindow = () => {
5
+ try {
6
+ window.parent.document;
7
+ return window.parent;
8
+ } catch (err) {
9
+ return window;
10
+ }
11
+ };
12
+ const browserWindow = getWindow();
13
+ browserWindow.emui = browserWindow.emui || {};
14
+ browserWindow.emui[appId] = browserWindow.emui[appId] || {};
15
+ const mainElement = document.createElement("main");
16
+ mainElement.id = "travelhub";
17
+ const pageHeaderEle = document.createElement("h1");
18
+ pageHeaderEle.id = "header";
19
+ pageHeaderEle.textContent = appName;
20
+ mainElement.appendChild(pageHeaderEle);
21
+ const versionEle = document.createElement("p");
22
+ versionEle.id = "version";
23
+ versionEle.textContent = "Version: 23.1";
24
+ mainElement.appendChild(versionEle);
25
+ document.body.appendChild(mainElement);
@@ -0,0 +1,3 @@
1
+ #content {
2
+ color: green;
3
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ const mainElement = document.getElementById("travelhub");
3
+ const contentEle = document.createElement("p");
4
+ contentEle.id = "greeting";
5
+ contentEle.textContent = "Hello Travellers!";
6
+ mainElement.appendChild(contentEle);
@@ -0,0 +1,6 @@
1
+ {
2
+ "app.js": "23.1/app.checksum.js",
3
+ "landing.js": "23.1/landing.checksum1.js",
4
+ "app.css": "23.1/app.checksum.css",
5
+ "landing.css": "23.1/landing.checksum1.css"
6
+ }
@@ -0,0 +1,3 @@
1
+ h1 {
2
+ color: red;
3
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ (function() {
3
+ const appId = "travelhub";
4
+ const appName = "Travel Hub";
5
+ const getWindow = () => {
6
+ try {
7
+ window.parent.document;
8
+ return window.parent;
9
+ } catch (err) {
10
+ return window;
11
+ }
12
+ };
13
+ const browserWindow = getWindow();
14
+ browserWindow.emui = browserWindow.emui ?? {};
15
+ browserWindow.emui[appId] = browserWindow.emui[appId] ?? {};
16
+ browserWindow.__TEST__ = browserWindow.__TEST__ ?? {
17
+ logs: []
18
+ };
19
+ const mainElement = document.createElement("main");
20
+ mainElement.id = "travelhub";
21
+ const pageHeaderEle = document.createElement("h1");
22
+ pageHeaderEle.id = "header";
23
+ pageHeaderEle.textContent = appName;
24
+ mainElement.appendChild(pageHeaderEle);
25
+ const versionEle = document.createElement("p");
26
+ versionEle.id = "version";
27
+ versionEle.textContent = "Version: latest";
28
+ mainElement.appendChild(versionEle);
29
+ document.body.appendChild(mainElement);
30
+ })();
@@ -0,0 +1,3 @@
1
+ #content {
2
+ color: green;
3
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ (function() {
3
+ const mainElement = document.getElementById("travelhub");
4
+ const contentEle = document.createElement("p");
5
+ contentEle.id = "greeting";
6
+ contentEle.textContent = "Hello Travellers!";
7
+ mainElement.appendChild(contentEle);
8
+ })();
@@ -0,0 +1,6 @@
1
+ {
2
+ "app.js": "latest/app.checksum.js",
3
+ "landing.js": "latest/landing.checksum.js",
4
+ "app.css": "latest/app.checksum.css",
5
+ "landing.css": "latest/landing.checksum.css"
6
+ }
@@ -26,33 +26,38 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var ssfguest_adapter_exports = {};
30
- __export(ssfguest_adapter_exports, {
31
- SSFGuestAdapter: () => SSFGuestAdapter
29
+ var utils_exports = {};
30
+ __export(utils_exports, {
31
+ getMajorMinorVersion: () => getMajorMinorVersion,
32
+ logger: () => logger,
33
+ releaseJSThread: () => releaseJSThread,
34
+ sendJS: () => sendJS,
35
+ sendJSText: () => sendJSText
36
+ });
37
+ module.exports = __toCommonJS(utils_exports);
38
+ var import_promises = require("fs/promises");
39
+ var import_node_path = __toESM(require("node:path"));
40
+ var import_pui_diagnostics = require("@elliemae/pui-diagnostics");
41
+ const getMajorMinorVersion = (version) => version.split(".").slice(0, 2).join(".");
42
+ const sendJS = async (res, ctx, filePath) => {
43
+ const fileContent = await (0, import_promises.readFile)(import_node_path.default.join(__dirname, filePath), "utf-8");
44
+ return res.once(
45
+ ctx.status(200),
46
+ ctx.set("Content-Type", "application/javascript"),
47
+ ctx.body(fileContent)
48
+ );
49
+ };
50
+ const sendJSText = async (res, ctx, fileContent) => res.once(
51
+ ctx.status(200),
52
+ ctx.set("Content-Type", "application/javascript"),
53
+ ctx.body(fileContent)
54
+ );
55
+ const releaseJSThread = () => new Promise((resolve) => {
56
+ setTimeout(resolve, 0);
57
+ });
58
+ const logger = (0, import_pui_diagnostics.logger)({
59
+ transport: (0, import_pui_diagnostics.Console)(),
60
+ index: "microfe",
61
+ team: "ui platform",
62
+ appName: "MicroFE Tests"
32
63
  });
33
- module.exports = __toCommonJS(ssfguest_adapter_exports);
34
- var import_em_ssf_guest = __toESM(require("@elliemae/em-ssf-guest"));
35
- class SSFGuestAdapter {
36
- async init() {
37
- if (!import_em_ssf_guest.default) return false;
38
- await import_em_ssf_guest.default.connect();
39
- return true;
40
- }
41
- async getObject(name) {
42
- return import_em_ssf_guest.default.getObject(name);
43
- }
44
- subscribe(message, func) {
45
- const callback = (scriptingObj, eventData) => {
46
- func(message, eventData);
47
- };
48
- const [objectId, eventName] = message.split(".");
49
- return import_em_ssf_guest.default.subscribe(
50
- objectId,
51
- eventName || "",
52
- callback
53
- );
54
- }
55
- unsubscribe(token, objectId, eventName) {
56
- return import_em_ssf_guest.default.unsubscribe(objectId, eventName, token);
57
- }
58
- }
@@ -15,7 +15,8 @@ const sendBAEvent = ({
15
15
  self = true
16
16
  }) => {
17
17
  if (!self) {
18
- const sendEvent = CMicroAppGuest.getInstance()?.getHost()?.sendBAEvent;
18
+ const host = CMicroAppGuest.getInstance()?.getHost();
19
+ const sendEvent = host?.sendBAEvent;
19
20
  if (sendEvent) {
20
21
  sendEvent(data);
21
22
  } else {
package/dist/esm/index.js CHANGED
@@ -60,7 +60,10 @@ import {
60
60
  } from "./utils/session.js";
61
61
  import { waitMessage } from "./data/wait-message/actions.js";
62
62
  import { initServiceWorker } from "./utils/service-worker.js";
63
- import { CMicroAppGuest } from "./utils/micro-frontend/guest.js";
63
+ import {
64
+ CMicroAppGuest,
65
+ CMicroAppGuest as CMicroAppGuest2
66
+ } from "./utils/micro-frontend/guest.js";
64
67
  import { CMicroAppHost } from "./utils/micro-frontend/host.js";
65
68
  import { enableReactAppForHostIntegration } from "./utils/app-host-integration/react.js";
66
69
  import {
@@ -132,6 +135,7 @@ import { actions } from "./data/live-message/index.js";
132
135
  import { actions as actions2 } from "./data/error/index.js";
133
136
  import { actions as actions3 } from "./data/logout/actions.js";
134
137
  import { MicroApp } from "./view/micro-app/index.js";
138
+ import { GuestMicroApp } from "./view/guest-microapp.js";
135
139
  import { MicroIFrameApp } from "./view/micro-iframe-app/index.js";
136
140
  import { getNavigationLinks } from "./view/micro-app/utils.js";
137
141
  import { getStore } from "./data/store.js";
@@ -145,6 +149,7 @@ export {
145
149
  Analytics,
146
150
  AppRoot,
147
151
  Autocomplete,
152
+ CMicroAppGuest2 as CMicroApp,
148
153
  CMicroAppGuest,
149
154
  CMicroAppHost,
150
155
  CheckBox,
@@ -161,6 +166,7 @@ export {
161
166
  FormItemLayout,
162
167
  FormLayoutBlockItem,
163
168
  FormSubmitButton,
169
+ GuestMicroApp,
164
170
  InputMask,
165
171
  InputText,
166
172
  LargeTextBox,
@@ -0,0 +1,20 @@
1
+ import { CAppBridge } from "@elliemae/pui-app-bridge";
2
+ import { getLogger } from "../logger.js";
3
+ import { Analytics } from "./scripting-objects/analytics.js";
4
+ let appBridge = null;
5
+ const getAppBridge = async () => {
6
+ if (!appBridge) {
7
+ const logger = getLogger();
8
+ const version = window.emui?.version || "latest";
9
+ appBridge = new CAppBridge({
10
+ logger,
11
+ version
12
+ });
13
+ await appBridge.init();
14
+ appBridge.addScriptingObject(new Analytics({ logger }));
15
+ }
16
+ return appBridge;
17
+ };
18
+ export {
19
+ getAppBridge
20
+ };
@@ -1,6 +1,7 @@
1
1
  import _ from "lodash";
2
2
  import { v4 as uuidv4 } from "uuid";
3
3
  import { getDefaultTheme } from "@elliemae/pui-theme";
4
+ import { SSFGuest } from "@elliemae/ssf-guest";
4
5
  import { getWindow } from "../window.js";
5
6
  import { loadAppConfig } from "../app-config/index.js";
6
7
  import { getAppConfigValue } from "../app-config/config.js";
@@ -10,8 +11,7 @@ import { setLogger } from "../logger.js";
10
11
  import { removeStorageEvents } from "../web-storage.js";
11
12
  import { updateBAEventParameters } from "./scripting-objects/web-analytics.js";
12
13
  import { setAppDynamicsUserData } from "../../analytics/appdynamics.js";
13
- import { SSFGuestAdapter } from "./ssfguest-adapter.js";
14
- import { setHostApp } from "./host-app.js";
14
+ import { getAppBridge } from "./app-bridge.js";
15
15
  const isCrossDomain = () => {
16
16
  try {
17
17
  window.parent.document;
@@ -20,6 +20,11 @@ const isCrossDomain = () => {
20
20
  return true;
21
21
  }
22
22
  };
23
+ var CommunicationMethod = /* @__PURE__ */ ((CommunicationMethod2) => {
24
+ CommunicationMethod2["SSF"] = "ssf";
25
+ CommunicationMethod2["APPSDK"] = "app-sdk";
26
+ return CommunicationMethod2;
27
+ })(CommunicationMethod || {});
23
28
  class CMicroAppGuest {
24
29
  /**
25
30
  * unique microapp id
@@ -30,6 +35,14 @@ class CMicroAppGuest {
30
35
  appId;
31
36
  props;
32
37
  containerId;
38
+ /**
39
+ * communication method used between microapps
40
+ */
41
+ #communicationMethod;
42
+ /**
43
+ * AppBridge instance
44
+ */
45
+ #appBridge = null;
33
46
  onInit;
34
47
  onMount;
35
48
  onUnmount;
@@ -40,6 +53,7 @@ class CMicroAppGuest {
40
53
  window.emui.uuid = window.emui.uuid || uuidv4();
41
54
  this.appId = window.emui?.appId || getAppConfigValue("appId");
42
55
  this.#uuid = window.emui.uuid;
56
+ this.#communicationMethod = "app-sdk" /* APPSDK */;
43
57
  this.props = {
44
58
  host: null,
45
59
  hostUrl: null,
@@ -61,7 +75,7 @@ class CMicroAppGuest {
61
75
  }
62
76
  static getInstance(params) {
63
77
  if (!this.instance) {
64
- this.instance = new this(params);
78
+ this.instance = new CMicroAppGuest(params);
65
79
  }
66
80
  return this.instance;
67
81
  }
@@ -77,6 +91,46 @@ class CMicroAppGuest {
77
91
  getLogger() {
78
92
  return this.logger;
79
93
  }
94
+ getObject(objectId) {
95
+ let host = null;
96
+ if (this.#communicationMethod === "ssf" /* SSF */) {
97
+ host = this.getHost();
98
+ return host.getObject(objectId);
99
+ }
100
+ host = this.getHost();
101
+ if (!host) return Promise.resolve(null);
102
+ return host.getObject(objectId);
103
+ }
104
+ /**
105
+ * subscribe to the scripting object event
106
+ * @param {SubscribeParam<EventId, AppEvents[EventId]>} params - the parameters for the subscription
107
+ * @param {string} params.soName - the name of the scripting object
108
+ * @param {string} params.eventName - the name of the event
109
+ * @param {Function} params.callback - the callback function to be called when the event is triggered
110
+ * @returns {void}
111
+ */
112
+ subscribe(params) {
113
+ let host = null;
114
+ if (this.#communicationMethod === "ssf" /* SSF */) {
115
+ host = this.getHost();
116
+ return host.subscribe(params);
117
+ }
118
+ host = this.getHost();
119
+ return host.subscribe(params);
120
+ }
121
+ /**
122
+ * unsubscribe from the scripting object event
123
+ * @param params - parameters for the unsubscription
124
+ */
125
+ unsubscribe(params) {
126
+ let host = null;
127
+ if (this.#communicationMethod === "ssf" /* SSF */) {
128
+ host = this.getHost();
129
+ host.unsubscribe(params);
130
+ }
131
+ host = this.getHost();
132
+ host.unsubscribe(params);
133
+ }
80
134
  getProps() {
81
135
  return this.props;
82
136
  }
@@ -141,21 +195,22 @@ class CMicroAppGuest {
141
195
  }
142
196
  getSessionStorageItem(key) {
143
197
  let value = sessionStorage.getItem(key);
144
- if (!value && this.props.host?.getItem) {
145
- value = this.props.host.getItem(key);
198
+ const host = this.getHost();
199
+ if (!value && host?.getItem) {
200
+ value = host.getItem(key);
146
201
  }
147
202
  return value;
148
203
  }
149
- async getSSFAdapter() {
204
+ async findHost() {
150
205
  let host = null;
151
206
  if (window.parent !== window) {
152
207
  if (!isCrossDomain()) {
153
- host = window.parent?.emui?.MicroAppHost || null;
208
+ host = window.parent?.emui?.MicroAppHost ?? null;
154
209
  }
155
210
  if (!host) {
156
- const ssfAdapter = new SSFGuestAdapter();
157
- if (!await ssfAdapter.init()) return null;
158
- host = ssfAdapter;
211
+ host = new SSFGuest({ appLogger: this.logger });
212
+ await host.connect();
213
+ this.#communicationMethod = "ssf" /* SSF */;
159
214
  }
160
215
  }
161
216
  return host;
@@ -167,17 +222,21 @@ class CMicroAppGuest {
167
222
  this.props = _.merge(this.props, options);
168
223
  this.props.history = options?.history || this.props.history;
169
224
  if (!this.props.host) {
170
- const host = await this.getSSFAdapter();
171
- if (host) this.props.host = host;
225
+ const host = await this.findHost();
226
+ if (host) {
227
+ this.props.host = host;
228
+ }
172
229
  }
173
- if (this.props.host) setHostApp(this.props.host);
174
230
  __webpack_public_path__ = __webpack_public_path__.replace(/\/?$/, "/");
175
231
  return loadAppConfig().then(() => {
176
232
  const instanceId = this.getSessionStorageItem("instanceId") || "";
177
233
  const userId = this.getSessionStorageItem("userId") || "";
178
234
  updateBAEventParameters({ appId: this.appId, instanceId, userId });
179
235
  setAppDynamicsUserData({ appId: this.appId, instanceId, userId });
180
- if (this.onInit) this.onInit(this.props);
236
+ return getAppBridge().then((appBridge) => {
237
+ this.#appBridge = appBridge;
238
+ if (this.onInit) this.onInit(this.props);
239
+ });
181
240
  });
182
241
  }
183
242
  mount(options = { containerId: "app-container" }) {
@@ -198,6 +257,34 @@ class CMicroAppGuest {
198
257
  navigate(url, state) {
199
258
  if (url) this.props.history.push(url, state);
200
259
  }
260
+ /**
261
+ * add scripting object for child microapp to use
262
+ * @param so - The scripting object to be added.
263
+ * @param params - Optional parameters for adding the scripting object.
264
+ */
265
+ addScriptingObject(so, params) {
266
+ if (this.#appBridge) {
267
+ this.#appBridge.addScriptingObject(so, params);
268
+ }
269
+ }
270
+ /**
271
+ * dispatch event to child microapp
272
+ * @param {DispatchEventParams<EventId, Params>} params - event parameters
273
+ */
274
+ async dispatchEvent(params) {
275
+ if (this.#appBridge) {
276
+ await this.#appBridge.dispatchEvent(params);
277
+ }
278
+ }
279
+ /**
280
+ * removes scripting object from child microapp use
281
+ * @param objectId unique id of the scripting object
282
+ */
283
+ removeScriptingObject(objectId) {
284
+ if (this.#appBridge) {
285
+ this.#appBridge.removeScriptingObject(objectId);
286
+ }
287
+ }
201
288
  }
202
289
  export {
203
290
  CMicroAppGuest
@@ -24,7 +24,7 @@ import { setAppDynamicsUserData } from "../../analytics/appdynamics.js";
24
24
  import { Analytics } from "./scripting-objects/analytics.js";
25
25
  import { updateBAEventParameters } from "./scripting-objects/web-analytics.js";
26
26
  import { renewSession } from "../session.js";
27
- import { setHostApp } from "./host-app.js";
27
+ import { getAppBridge } from "./app-bridge.js";
28
28
  class CMicroAppHost {
29
29
  static instance;
30
30
  logger;
@@ -36,6 +36,7 @@ class CMicroAppHost {
36
36
  throttleRenewSessionTimer;
37
37
  scriptingObjects;
38
38
  #ssfHostRef;
39
+ #appBridge = null;
39
40
  // eslint-disable-next-line max-statements
40
41
  constructor(params) {
41
42
  this.appId = getAppConfigValue("appId");
@@ -76,6 +77,11 @@ class CMicroAppHost {
76
77
  }
77
78
  );
78
79
  loadAppConfig().then(() => {
80
+ getAppBridge().then((appBridge) => {
81
+ this.#appBridge = appBridge;
82
+ }).catch((ex) => {
83
+ throw ex;
84
+ });
79
85
  if (this.onInit) this.onInit(this.props);
80
86
  }).catch(() => {
81
87
  });
@@ -86,8 +92,7 @@ class CMicroAppHost {
86
92
  }
87
93
  static getInstance(params) {
88
94
  if (!this.instance) {
89
- this.instance = new this(params);
90
- setHostApp(this.instance);
95
+ this.instance = new CMicroAppHost(params);
91
96
  }
92
97
  return this.instance;
93
98
  }
@@ -181,6 +186,34 @@ class CMicroAppHost {
181
186
  async getObject(name) {
182
187
  return this.scriptingObjects[name];
183
188
  }
189
+ /**
190
+ * add scripting object for child microapp to use
191
+ * @param so - The scripting object to be added.
192
+ * @param params - Optional parameters for adding the scripting object.
193
+ */
194
+ addScriptingObject(so, params) {
195
+ if (this.#appBridge) {
196
+ this.#appBridge.addScriptingObject(so, params);
197
+ }
198
+ }
199
+ /**
200
+ * dispatch event to child microapp
201
+ * @param {DispatchEventParams<EventId, Params>} params - event parameters
202
+ */
203
+ async dispatchEvent(params) {
204
+ if (this.#appBridge) {
205
+ await this.#appBridge.dispatchEvent(params);
206
+ }
207
+ }
208
+ /**
209
+ * removes scripting object from child microapp use
210
+ * @param objectId unique id of the scripting object
211
+ */
212
+ removeScriptingObject(objectId) {
213
+ if (this.#appBridge) {
214
+ this.#appBridge.removeScriptingObject(objectId);
215
+ }
216
+ }
184
217
  }
185
218
  export {
186
219
  CMicroAppHost
@@ -1,8 +1,8 @@
1
- import ssfHost from "@elliemae/em-ssf-host";
1
+ import { ScriptingObject } from "@elliemae/ssf-host";
2
2
  import { getBAEventParameters } from "./web-analytics.js";
3
3
  import { getProductAppDetails } from "../../helpers.js";
4
4
  import { HeadSampler } from "../../headSampler.js";
5
- class Analytics extends ssfHost.ScriptingObject {
5
+ class Analytics extends ScriptingObject {
6
6
  /**
7
7
  * logger instance
8
8
  */