@copart/ops-tool-kit 1.13.0-beta.11 → 1.13.0-beta.13

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.
@@ -6,6 +6,7 @@ var React = require('react');
6
6
  var ReactDOM = require('react-dom');
7
7
  var frontEndUtils = require('@copart/front-end-utils');
8
8
  var coreComponents = require('@copart/core-components');
9
+ var reactRouterDom = require('react-router-dom');
9
10
 
10
11
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
12
 
@@ -47,12 +48,13 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
47
48
  var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
48
49
 
49
50
  const name$1 = "@copart/ops-tool-kit";
50
- const version$3 = "1.13.0-beta.11";
51
+ const version$3 = "1.13.0-beta.13";
51
52
  const main$1 = "dist/ops-tool-kit.js";
52
53
  const style = "dist/ops-tool-kit.css";
53
54
  const files = [
54
55
  "dist",
55
- "bin"
56
+ "bin",
57
+ "iframe-webpack-facade.js"
56
58
  ];
57
59
  const bin = {
58
60
  "generate-build-meta": "./bin/cli.js"
@@ -106,7 +108,8 @@ const devDependencies$1 = {
106
108
  };
107
109
  const peerDependencies = {
108
110
  "@copart/core-components": "2.3.0-alpha.filters.6",
109
- react: "*"
111
+ react: "*",
112
+ "react-router-dom": "^5.0.0"
110
113
  };
111
114
  const dependencies$1 = {
112
115
  "@reacting/purist": "0.1.0",
@@ -68104,6 +68107,7 @@ function ContextualHelp(_ref) {
68104
68107
 
68105
68108
  var _excluded = ["signal"];
68106
68109
  var pending = new Map();
68110
+ var STORAGE_REQUEST_TIMEOUT_MS = 5000;
68107
68111
  function requestId() {
68108
68112
  return "bridge-".concat(Date.now(), "-").concat(Math.random().toString(36).slice(2, 9));
68109
68113
  }
@@ -68231,11 +68235,29 @@ function sendFetchRequest(payload) {
68231
68235
  });
68232
68236
  }
68233
68237
  function sendStorageGet(payload) {
68234
- return new Promise(function (resolve) {
68238
+ var timeoutMs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : STORAGE_REQUEST_TIMEOUT_MS;
68239
+ return new Promise(function (_resolve) {
68235
68240
  var id = requestId();
68241
+ var timer = setTimeout(function () {
68242
+ if (pending.has(id)) {
68243
+ pending.delete(id);
68244
+ console.warn('[iframe-bridge/transport] STORAGE_GET timed out', {
68245
+ op: payload === null || payload === void 0 ? void 0 : payload.op,
68246
+ key: payload === null || payload === void 0 ? void 0 : payload.key,
68247
+ timeoutMs: timeoutMs
68248
+ });
68249
+ _resolve(undefined);
68250
+ }
68251
+ }, timeoutMs);
68236
68252
  pending.set(id, {
68237
- resolve: resolve,
68238
- reject: function reject() {}
68253
+ resolve: function resolve(result) {
68254
+ clearTimeout(timer);
68255
+ _resolve(result);
68256
+ },
68257
+ reject: function reject() {
68258
+ clearTimeout(timer);
68259
+ _resolve(undefined);
68260
+ }
68239
68261
  });
68240
68262
  post('STORAGE_GET', _objectSpread2(_objectSpread2({}, payload), {}, {
68241
68263
  requestId: id
@@ -68243,11 +68265,29 @@ function sendStorageGet(payload) {
68243
68265
  });
68244
68266
  }
68245
68267
  function sendStorageSet(payload) {
68246
- return new Promise(function (resolve) {
68268
+ var timeoutMs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : STORAGE_REQUEST_TIMEOUT_MS;
68269
+ return new Promise(function (_resolve2) {
68247
68270
  var id = requestId();
68271
+ var timer = setTimeout(function () {
68272
+ if (pending.has(id)) {
68273
+ pending.delete(id);
68274
+ console.warn('[iframe-bridge/transport] STORAGE_SET timed out', {
68275
+ op: payload === null || payload === void 0 ? void 0 : payload.op,
68276
+ key: payload === null || payload === void 0 ? void 0 : payload.key,
68277
+ timeoutMs: timeoutMs
68278
+ });
68279
+ _resolve2(undefined);
68280
+ }
68281
+ }, timeoutMs);
68248
68282
  pending.set(id, {
68249
- resolve: resolve,
68250
- reject: function reject() {}
68283
+ resolve: function resolve(result) {
68284
+ clearTimeout(timer);
68285
+ _resolve2(result);
68286
+ },
68287
+ reject: function reject() {
68288
+ clearTimeout(timer);
68289
+ _resolve2(undefined);
68290
+ }
68251
68291
  });
68252
68292
  post('STORAGE_SET', _objectSpread2(_objectSpread2({}, payload), {}, {
68253
68293
  requestId: id
@@ -68255,22 +68295,22 @@ function sendStorageSet(payload) {
68255
68295
  });
68256
68296
  }
68257
68297
  function getInitData() {
68258
- return new Promise(function (_resolve) {
68298
+ return new Promise(function (_resolve3) {
68259
68299
  var id = requestId();
68260
68300
  var timer = setTimeout(function () {
68261
68301
  if (pending.has(id)) {
68262
68302
  pending.delete(id);
68263
- _resolve(null);
68303
+ _resolve3(null);
68264
68304
  }
68265
68305
  }, 5000);
68266
68306
  pending.set(id, {
68267
68307
  resolve: function resolve(result) {
68268
68308
  clearTimeout(timer);
68269
- _resolve(result);
68309
+ _resolve3(result);
68270
68310
  },
68271
68311
  reject: function reject() {
68272
68312
  clearTimeout(timer);
68273
- _resolve(null);
68313
+ _resolve3(null);
68274
68314
  }
68275
68315
  });
68276
68316
  post('GET_INIT_DATA', {
@@ -68407,6 +68447,17 @@ function setInitCache(initData) {
68407
68447
  count: Array.isArray(initData[k]) ? initData[k].length : 'not-array'
68408
68448
  });
68409
68449
  });
68450
+ var appConfigKeys = Object.keys(initData).filter(function (k) {
68451
+ return k.endsWith(':config') && k !== 'opsportal-core:config';
68452
+ });
68453
+ appConfigKeys.forEach(function (k) {
68454
+ var _initData$k;
68455
+ cache.local[k] = initData[k];
68456
+ console.log('[iframe-bridge/storage] setInitCache mapped app config', {
68457
+ key: k,
68458
+ hasRunConfig: Boolean((_initData$k = initData[k]) === null || _initData$k === void 0 ? void 0 : _initData$k.runConfig)
68459
+ });
68460
+ });
68410
68461
  }
68411
68462
  function setExtraLocal(key, value) {
68412
68463
  cache.local[key] = value;
@@ -69561,6 +69612,438 @@ var iframeFacade = {
69561
69612
  }
69562
69613
  };
69563
69614
 
69615
+ function normalizeIframePath(uri) {
69616
+ if (uri === '' || uri == null) return '/';
69617
+ return uri.startsWith('/') ? uri : "/".concat(uri);
69618
+ }
69619
+
69620
+ function serializeNavItems(items) {
69621
+ if (!Array.isArray(items)) return [];
69622
+ return items.map(function (item) {
69623
+ var serialized = {
69624
+ name: item.name,
69625
+ route: item.route
69626
+ };
69627
+ if (item.icon && typeof item.icon === 'string') serialized.icon = item.icon;
69628
+ if (typeof item.disabled === 'function') {
69629
+ try {
69630
+ serialized.disabled = item.disabled();
69631
+ } catch (_) {
69632
+ serialized.disabled = false;
69633
+ }
69634
+ } else if (typeof item.disabled === 'boolean') {
69635
+ serialized.disabled = item.disabled;
69636
+ }
69637
+ if (typeof item.hidden === 'function') {
69638
+ try {
69639
+ serialized.hidden = item.hidden();
69640
+ } catch (_) {
69641
+ serialized.hidden = false;
69642
+ }
69643
+ } else if (typeof item.hidden === 'boolean') {
69644
+ serialized.hidden = item.hidden;
69645
+ }
69646
+ if (item.isLandingPage) serialized.isLandingPage = true;
69647
+ if (item.subMenuItems && item.subMenuItems.length > 0) {
69648
+ serialized.subMenuItems = serializeNavItems(item.subMenuItems);
69649
+ }
69650
+ return serialized;
69651
+ });
69652
+ }
69653
+
69654
+ function IframeRouteSync(_ref) {
69655
+ var _ref$updateUriIsPath = _ref.updateUriIsPath,
69656
+ updateUriIsPath = _ref$updateUriIsPath === void 0 ? false : _ref$updateUriIsPath,
69657
+ _ref$suppressEcho = _ref.suppressEcho,
69658
+ suppressEcho = _ref$suppressEcho === void 0 ? true : _ref$suppressEcho;
69659
+ var history = reactRouterDom.useHistory();
69660
+ var location = reactRouterDom.useLocation();
69661
+ var initialRef = React.useRef(true);
69662
+ var suppressUpdateUriRef = React.useRef(false);
69663
+ React.useEffect(function () {
69664
+ var remove = addMessageListener(function (data) {
69665
+ if (data.eventType === 'LOAD_URI' && data.eventProps) {
69666
+ var path = normalizeIframePath(data.eventProps.uri);
69667
+ if (suppressEcho) suppressUpdateUriRef.current = true;
69668
+ history.push(path);
69669
+ }
69670
+ });
69671
+ return remove;
69672
+ }, [history, suppressEcho]);
69673
+ React.useEffect(function () {
69674
+ if (initialRef.current) {
69675
+ initialRef.current = false;
69676
+ return;
69677
+ }
69678
+ if (suppressEcho && suppressUpdateUriRef.current) {
69679
+ suppressUpdateUriRef.current = false;
69680
+ return;
69681
+ }
69682
+ var pathname = location.pathname || '/';
69683
+ postUpdateUri(pathname, updateUriIsPath);
69684
+ }, [location.pathname, updateUriIsPath, suppressEcho]);
69685
+ return null;
69686
+ }
69687
+
69688
+ function defaultToolkitEnv() {
69689
+ return {
69690
+ STACK: process.env.STACK,
69691
+ APP_NAME: process.env.APP_NAME,
69692
+ CORE_CONFIG_URI: process.env.CORE_CONFIG_URI,
69693
+ CONFIG_URI: process.env.CONFIG_URI
69694
+ };
69695
+ }
69696
+ function AppEnvSender(_ref) {
69697
+ var toolkitEnv = _ref.toolkitEnv,
69698
+ _ref$mihelpAgentProps = _ref.mihelpAgentProps,
69699
+ mihelpAgentProps = _ref$mihelpAgentProps === void 0 ? null : _ref$mihelpAgentProps;
69700
+ var sentRef = React.useRef(false);
69701
+ React.useEffect(function () {
69702
+ if (sentRef.current) return;
69703
+ sentRef.current = true;
69704
+ postAppEnv(toolkitEnv || defaultToolkitEnv(), mihelpAgentProps);
69705
+ }, [toolkitEnv, mihelpAgentProps]);
69706
+ return null;
69707
+ }
69708
+
69709
+ function NavConfigSender(_ref) {
69710
+ var navItemsLoader = _ref.navItemsLoader,
69711
+ onError = _ref.onError;
69712
+ var sentRef = React.useRef(false);
69713
+ React.useEffect(function () {
69714
+ if (sentRef.current || !navItemsLoader) return;
69715
+ sentRef.current = true;
69716
+ navItemsLoader().then(function (mod) {
69717
+ var items = mod && (mod.default != null ? mod.default : mod);
69718
+ postNavConfig(serializeNavItems(items));
69719
+ }).catch(function (err) {
69720
+ if (onError) {
69721
+ onError(err);
69722
+ } else {
69723
+ console.warn('[Iframe] Failed to load navItems:', err);
69724
+ }
69725
+ });
69726
+ }, [navItemsLoader, onError]);
69727
+ return null;
69728
+ }
69729
+
69730
+ var defaultContentStyle = {
69731
+ height: '100%',
69732
+ display: 'flex',
69733
+ flexDirection: 'column',
69734
+ overflow: 'hidden'
69735
+ };
69736
+ function IframeAppRootInner(_ref) {
69737
+ var children = _ref.children,
69738
+ contentStyle = _ref.contentStyle,
69739
+ toolkitEnv = _ref.toolkitEnv,
69740
+ mihelpAgentProps = _ref.mihelpAgentProps,
69741
+ navItemsLoader = _ref.navItemsLoader,
69742
+ navConfigOnError = _ref.navConfigOnError,
69743
+ updateUriIsPath = _ref.updateUriIsPath,
69744
+ suppressRouteSyncEcho = _ref.suppressRouteSyncEcho;
69745
+ var history = reactRouterDom.useHistory();
69746
+ return /*#__PURE__*/React__default["default"].createElement(CrumbProvider, {
69747
+ navigate: function navigate(path) {
69748
+ return history.push(path);
69749
+ }
69750
+ }, /*#__PURE__*/React__default["default"].createElement(AppEnvSender, {
69751
+ toolkitEnv: toolkitEnv,
69752
+ mihelpAgentProps: mihelpAgentProps
69753
+ }), /*#__PURE__*/React__default["default"].createElement(IframeRouteSync, {
69754
+ updateUriIsPath: updateUriIsPath,
69755
+ suppressEcho: suppressRouteSyncEcho
69756
+ }), navItemsLoader ? /*#__PURE__*/React__default["default"].createElement(NavConfigSender, {
69757
+ navItemsLoader: navItemsLoader,
69758
+ onError: navConfigOnError
69759
+ }) : null, /*#__PURE__*/React__default["default"].createElement("div", {
69760
+ style: contentStyle || defaultContentStyle
69761
+ }, children));
69762
+ }
69763
+ function IframeAppRoot(_ref2) {
69764
+ var _ref2$initialUri = _ref2.initialUri,
69765
+ initialUri = _ref2$initialUri === void 0 ? '/' : _ref2$initialUri,
69766
+ children = _ref2.children,
69767
+ contentStyle = _ref2.contentStyle,
69768
+ toolkitEnv = _ref2.toolkitEnv,
69769
+ _ref2$mihelpAgentProp = _ref2.mihelpAgentProps,
69770
+ mihelpAgentProps = _ref2$mihelpAgentProp === void 0 ? null : _ref2$mihelpAgentProp,
69771
+ navItemsLoader = _ref2.navItemsLoader,
69772
+ navConfigOnError = _ref2.navConfigOnError,
69773
+ _ref2$updateUriIsPath = _ref2.updateUriIsPath,
69774
+ updateUriIsPath = _ref2$updateUriIsPath === void 0 ? false : _ref2$updateUriIsPath,
69775
+ _ref2$suppressRouteSy = _ref2.suppressRouteSyncEcho,
69776
+ suppressRouteSyncEcho = _ref2$suppressRouteSy === void 0 ? true : _ref2$suppressRouteSy;
69777
+ var initialPath = normalizeIframePath(initialUri);
69778
+ return /*#__PURE__*/React__default["default"].createElement(reactRouterDom.MemoryRouter, {
69779
+ initialEntries: [initialPath],
69780
+ initialIndex: 0
69781
+ }, /*#__PURE__*/React__default["default"].createElement(IframeAppRootInner, {
69782
+ contentStyle: contentStyle,
69783
+ toolkitEnv: toolkitEnv,
69784
+ mihelpAgentProps: mihelpAgentProps,
69785
+ navItemsLoader: navItemsLoader,
69786
+ navConfigOnError: navConfigOnError,
69787
+ updateUriIsPath: updateUriIsPath,
69788
+ suppressRouteSyncEcho: suppressRouteSyncEcho
69789
+ }, children));
69790
+ }
69791
+
69792
+ /**
69793
+ * Register a synchronous LOAD_URI listener before async bootstrap loads.
69794
+ * Call this from the app entry (index.js) before dynamic-importing bootstrap.
69795
+ */
69796
+ function registerEarlyLoadUriListener() {
69797
+ if (typeof window === 'undefined') return;
69798
+ if (window.__IFRAME_EARLY_LOAD_URI_LISTENER_REGISTERED) return;
69799
+ window.__IFRAME_EARLY_LOAD_URI_LISTENER_REGISTERED = true;
69800
+ window.__IFRAME_EARLY_LOAD_URI = null;
69801
+ window.addEventListener('message', function (event) {
69802
+ if (event.data && event.data.eventType === 'LOAD_URI' && event.data.eventProps) {
69803
+ window.__IFRAME_EARLY_LOAD_URI = event.data.eventProps.uri || '/';
69804
+ }
69805
+ });
69806
+ }
69807
+
69808
+ function resolveRootNode(rootSelector) {
69809
+ var selectors = rootSelector ? [rootSelector] : ['#root', '#app'];
69810
+ for (var i = 0; i < selectors.length; i += 1) {
69811
+ var node = document.querySelector(selectors[i]);
69812
+ if (node) return node;
69813
+ }
69814
+ return null;
69815
+ }
69816
+ function isInIframe() {
69817
+ return typeof window !== 'undefined' && window.self !== window.top;
69818
+ }
69819
+ function renderStandaloneError(rootNode, message) {
69820
+ rootNode.innerHTML = "<h1>".concat(message, "</h1>");
69821
+ }
69822
+ function normalizePermissionKeys(permissionKeys) {
69823
+ if (!permissionKeys) return [];
69824
+ return Array.isArray(permissionKeys) ? permissionKeys : [permissionKeys];
69825
+ }
69826
+ function isValidAppConfig(config, validateAppConfig) {
69827
+ if (validateAppConfig) return validateAppConfig(config);
69828
+ return !!config;
69829
+ }
69830
+ function hydrateAppConfig(_x) {
69831
+ return _hydrateAppConfig.apply(this, arguments);
69832
+ }
69833
+ function _hydrateAppConfig() {
69834
+ _hydrateAppConfig = _asyncToGenerator$1(/*#__PURE__*/_regenerator().m(function _callee(_ref) {
69835
+ var appName, getCachedLocalItem, sendStorageGet, setExtraLocal, fetcher, configFallbackUri, validateAppConfig, configKey, appConfig;
69836
+ return _regenerator().w(function (_context) {
69837
+ while (1) switch (_context.n) {
69838
+ case 0:
69839
+ appName = _ref.appName, getCachedLocalItem = _ref.getCachedLocalItem, sendStorageGet = _ref.sendStorageGet, setExtraLocal = _ref.setExtraLocal, fetcher = _ref.fetcher, configFallbackUri = _ref.configFallbackUri, validateAppConfig = _ref.validateAppConfig;
69840
+ configKey = "".concat(appName, ":config");
69841
+ appConfig = getCachedLocalItem(configKey);
69842
+ if (isValidAppConfig(appConfig, validateAppConfig)) {
69843
+ _context.n = 2;
69844
+ break;
69845
+ }
69846
+ _context.n = 1;
69847
+ return sendStorageGet({
69848
+ op: 'getLocalItem',
69849
+ key: configKey
69850
+ });
69851
+ case 1:
69852
+ appConfig = _context.v;
69853
+ case 2:
69854
+ if (!(!isValidAppConfig(appConfig, validateAppConfig) && configFallbackUri && fetcher)) {
69855
+ _context.n = 4;
69856
+ break;
69857
+ }
69858
+ console.log('[Iframe] fetching app config from', configFallbackUri);
69859
+ _context.n = 3;
69860
+ return fetcher.getConfig(configFallbackUri);
69861
+ case 3:
69862
+ appConfig = _context.v;
69863
+ case 4:
69864
+ if (isValidAppConfig(appConfig, validateAppConfig)) {
69865
+ setExtraLocal(configKey, appConfig);
69866
+ }
69867
+ case 5:
69868
+ return _context.a(2);
69869
+ }
69870
+ }, _callee);
69871
+ }));
69872
+ return _hydrateAppConfig.apply(this, arguments);
69873
+ }
69874
+ function hydratePermissions(_x2) {
69875
+ return _hydratePermissions.apply(this, arguments);
69876
+ }
69877
+ /**
69878
+ * Bootstrap an iframe-embedded portal app: init bridge data from shell, then render.
69879
+ *
69880
+ * @param {object} options
69881
+ * @param {string} [options.appName] - Defaults to process.env.APP_NAME
69882
+ * @param {string|string[]} [options.permissionKeys] - Shell localStorage permission key(s)
69883
+ * @param {string} [options.rootSelector] - Root element selector (default: #root then #app)
69884
+ * @param {(initData: *) => void} [options.onInitCache] - Called after setInitCache (e.g. initStoreData)
69885
+ * @param {(initialUri: string, rootNode: HTMLElement) => void} options.render - App render callback
69886
+ * @param {'render'|'error'|'skip'} [options.standaloneMode='render'] - Behavior when not in iframe
69887
+ * @param {(rootNode: HTMLElement) => void} [options.standaloneRender] - Custom standalone UI
69888
+ * @param {string} [options.standaloneErrorMessage] - Message when standaloneMode is 'error'
69889
+ * @param {boolean} [options.fetchConfigFromShell=true] - Fetch app config/permissions from shell
69890
+ * @param {string} [options.configFallbackUri] - Defaults to process.env.CONFIG_URI
69891
+ * @param {(config: *) => boolean} [options.validateAppConfig] - Config validity check before setExtraLocal
69892
+ * @param {boolean} [options.permissionsOnlyIfArray=true] - Only set permissions when shell returns an array
69893
+ */
69894
+ function _hydratePermissions() {
69895
+ _hydratePermissions = _asyncToGenerator$1(/*#__PURE__*/_regenerator().m(function _callee3(_ref2) {
69896
+ var permissionKeys, getCachedLocalItem, sendStorageGet, setExtraLocal, permissionsOnlyIfArray, keys;
69897
+ return _regenerator().w(function (_context3) {
69898
+ while (1) switch (_context3.n) {
69899
+ case 0:
69900
+ permissionKeys = _ref2.permissionKeys, getCachedLocalItem = _ref2.getCachedLocalItem, sendStorageGet = _ref2.sendStorageGet, setExtraLocal = _ref2.setExtraLocal, permissionsOnlyIfArray = _ref2.permissionsOnlyIfArray;
69901
+ keys = normalizePermissionKeys(permissionKeys);
69902
+ _context3.n = 1;
69903
+ return Promise.all(keys.map(/*#__PURE__*/function () {
69904
+ var _ref3 = _asyncToGenerator$1(/*#__PURE__*/_regenerator().m(function _callee2(key) {
69905
+ var perms;
69906
+ return _regenerator().w(function (_context2) {
69907
+ while (1) switch (_context2.n) {
69908
+ case 0:
69909
+ perms = getCachedLocalItem(key);
69910
+ if (!(perms == null || permissionsOnlyIfArray && !Array.isArray(perms))) {
69911
+ _context2.n = 2;
69912
+ break;
69913
+ }
69914
+ _context2.n = 1;
69915
+ return sendStorageGet({
69916
+ op: 'getLocalItem',
69917
+ key: key
69918
+ });
69919
+ case 1:
69920
+ perms = _context2.v;
69921
+ case 2:
69922
+ if (!(permissionsOnlyIfArray && !Array.isArray(perms))) {
69923
+ _context2.n = 3;
69924
+ break;
69925
+ }
69926
+ return _context2.a(2);
69927
+ case 3:
69928
+ if (perms != null) setExtraLocal(key, perms);
69929
+ case 4:
69930
+ return _context2.a(2);
69931
+ }
69932
+ }, _callee2);
69933
+ }));
69934
+ return function (_x4) {
69935
+ return _ref3.apply(this, arguments);
69936
+ };
69937
+ }()));
69938
+ case 1:
69939
+ return _context3.a(2);
69940
+ }
69941
+ }, _callee3);
69942
+ }));
69943
+ return _hydratePermissions.apply(this, arguments);
69944
+ }
69945
+ function bootstrapIframeApp(_x3) {
69946
+ return _bootstrapIframeApp.apply(this, arguments);
69947
+ }
69948
+ function _bootstrapIframeApp() {
69949
+ _bootstrapIframeApp = _asyncToGenerator$1(/*#__PURE__*/_regenerator().m(function _callee4(options) {
69950
+ var _ref4, _ref4$appName, appName, permissionKeys, rootSelector, onInitCache, render, _ref4$standaloneMode, standaloneMode, standaloneRender, _ref4$standaloneError, standaloneErrorMessage, _ref4$fetchConfigFrom, fetchConfigFromShell, _ref4$configFallbackU, configFallbackUri, validateAppConfig, _ref4$permissionsOnly, permissionsOnlyIfArray, rootNode, bridge, fetcher, storage, getInitialUri, getInitData, setInitCache, setExtraLocal, sendStorageGet, setAppName, _yield$Promise$all, _yield$Promise$all2, initialUri, initData, getCachedLocalItem, tasks, _t;
69951
+ return _regenerator().w(function (_context4) {
69952
+ while (1) switch (_context4.p = _context4.n) {
69953
+ case 0:
69954
+ _ref4 = options || {}, _ref4$appName = _ref4.appName, appName = _ref4$appName === void 0 ? process.env.APP_NAME : _ref4$appName, permissionKeys = _ref4.permissionKeys, rootSelector = _ref4.rootSelector, onInitCache = _ref4.onInitCache, render = _ref4.render, _ref4$standaloneMode = _ref4.standaloneMode, standaloneMode = _ref4$standaloneMode === void 0 ? 'render' : _ref4$standaloneMode, standaloneRender = _ref4.standaloneRender, _ref4$standaloneError = _ref4.standaloneErrorMessage, standaloneErrorMessage = _ref4$standaloneError === void 0 ? 'This application must be opened from the parent portal.' : _ref4$standaloneError, _ref4$fetchConfigFrom = _ref4.fetchConfigFromShell, fetchConfigFromShell = _ref4$fetchConfigFrom === void 0 ? true : _ref4$fetchConfigFrom, _ref4$configFallbackU = _ref4.configFallbackUri, configFallbackUri = _ref4$configFallbackU === void 0 ? process.env.CONFIG_URI : _ref4$configFallbackU, validateAppConfig = _ref4.validateAppConfig, _ref4$permissionsOnly = _ref4.permissionsOnlyIfArray, permissionsOnlyIfArray = _ref4$permissionsOnly === void 0 ? true : _ref4$permissionsOnly;
69955
+ if (!(typeof render !== 'function')) {
69956
+ _context4.n = 1;
69957
+ break;
69958
+ }
69959
+ throw new Error('bootstrapIframeApp requires a render(initialUri, rootNode) function');
69960
+ case 1:
69961
+ rootNode = resolveRootNode(rootSelector);
69962
+ if (rootNode) {
69963
+ _context4.n = 2;
69964
+ break;
69965
+ }
69966
+ console.error('[Iframe] No root element found');
69967
+ return _context4.a(2);
69968
+ case 2:
69969
+ if (isInIframe()) {
69970
+ _context4.n = 4;
69971
+ break;
69972
+ }
69973
+ if (!(standaloneMode === 'error')) {
69974
+ _context4.n = 3;
69975
+ break;
69976
+ }
69977
+ if (standaloneRender) standaloneRender(rootNode);else renderStandaloneError(rootNode, standaloneErrorMessage);
69978
+ return _context4.a(2);
69979
+ case 3:
69980
+ if (!(standaloneMode === 'skip')) {
69981
+ _context4.n = 4;
69982
+ break;
69983
+ }
69984
+ return _context4.a(2);
69985
+ case 4:
69986
+ bridge = iframeFacade.bridge, fetcher = iframeFacade.fetcher, storage = iframeFacade.storage;
69987
+ getInitialUri = bridge.getInitialUri, getInitData = bridge.getInitData, setInitCache = bridge.setInitCache, setExtraLocal = bridge.setExtraLocal, sendStorageGet = bridge.sendStorageGet, setAppName = bridge.setAppName;
69988
+ _context4.n = 5;
69989
+ return Promise.all([getInitialUri(), getInitData()]);
69990
+ case 5:
69991
+ _yield$Promise$all = _context4.v;
69992
+ _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
69993
+ initialUri = _yield$Promise$all2[0];
69994
+ initData = _yield$Promise$all2[1];
69995
+ if (appName && typeof setAppName === 'function') setAppName(appName);
69996
+ if (initData) {
69997
+ setInitCache(initData);
69998
+ if (onInitCache) onInitCache(initData);
69999
+ } else {
70000
+ console.warn('[Iframe] no initData from shell');
70001
+ }
70002
+ getCachedLocalItem = function getCachedLocalItem(key) {
70003
+ return storage.getLocalItem(key);
70004
+ };
70005
+ if (!(fetchConfigFromShell && appName)) {
70006
+ _context4.n = 9;
70007
+ break;
70008
+ }
70009
+ _context4.p = 6;
70010
+ tasks = [hydrateAppConfig({
70011
+ appName: appName,
70012
+ getCachedLocalItem: getCachedLocalItem,
70013
+ sendStorageGet: sendStorageGet,
70014
+ setExtraLocal: setExtraLocal,
70015
+ fetcher: fetcher,
70016
+ configFallbackUri: configFallbackUri,
70017
+ validateAppConfig: validateAppConfig
70018
+ })];
70019
+ if (permissionKeys) {
70020
+ tasks.push(hydratePermissions({
70021
+ permissionKeys: permissionKeys,
70022
+ getCachedLocalItem: getCachedLocalItem,
70023
+ sendStorageGet: sendStorageGet,
70024
+ setExtraLocal: setExtraLocal,
70025
+ permissionsOnlyIfArray: permissionsOnlyIfArray
70026
+ }));
70027
+ }
70028
+ _context4.n = 7;
70029
+ return Promise.all(tasks);
70030
+ case 7:
70031
+ _context4.n = 9;
70032
+ break;
70033
+ case 8:
70034
+ _context4.p = 8;
70035
+ _t = _context4.v;
70036
+ console.warn('[Iframe] failed to fetch app config/permissions from shell:', _t);
70037
+ case 9:
70038
+ render(initialUri, rootNode);
70039
+ case 10:
70040
+ return _context4.a(2);
70041
+ }
70042
+ }, _callee4, null, [[6, 8]]);
70043
+ }));
70044
+ return _bootstrapIframeApp.apply(this, arguments);
70045
+ }
70046
+
69564
70047
  setup({
69565
70048
  pkg: pkg
69566
70049
  });
@@ -81139,13 +81622,21 @@ var index_es = /*#__PURE__*/Object.freeze({
81139
81622
  vectorsRatio: vectorsRatio
81140
81623
  });
81141
81624
 
81625
+ exports.AppEnvSender = AppEnvSender;
81142
81626
  exports.AppFrame = AppFrame;
81143
81627
  exports.AutoRefresh = AutoRefresh;
81144
81628
  exports.CallLogger = CallLogger;
81145
81629
  exports.ContextualHelp = ContextualHelp;
81146
81630
  exports.Crumb = Crumb$1;
81631
+ exports.IframeAppRoot = IframeAppRoot;
81632
+ exports.IframeRouteSync = IframeRouteSync;
81633
+ exports.NavConfigSender = NavConfigSender;
81147
81634
  exports.accessHelpers = accessHelpers$1;
81635
+ exports.bootstrapIframeApp = bootstrapIframeApp;
81148
81636
  exports.fetcher = fetcher$1;
81149
81637
  exports.iframeFacade = iframeFacade;
81638
+ exports.normalizeIframePath = normalizeIframePath;
81639
+ exports.registerEarlyLoadUriListener = registerEarlyLoadUriListener;
81640
+ exports.serializeNavItems = serializeNavItems;
81150
81641
  exports.storage = storage$2;
81151
81642
  //# sourceMappingURL=ops-tool-kit.js.map