@qlik/api 0.0.14 → 0.0.15

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 (98) hide show
  1. package/api-keys.js +10 -10
  2. package/api-keys.mjs +2 -2
  3. package/apps.d.mts +20 -10
  4. package/apps.d.ts +20 -10
  5. package/apps.js +46 -46
  6. package/apps.mjs +2 -2
  7. package/audits.d.mts +0 -1
  8. package/audits.d.ts +0 -1
  9. package/audits.js +9 -9
  10. package/audits.mjs +2 -2
  11. package/auth.js +3 -3
  12. package/auth.mjs +2 -2
  13. package/automations.js +21 -21
  14. package/automations.mjs +2 -2
  15. package/brands.js +15 -15
  16. package/brands.mjs +2 -2
  17. package/chunks/{SEXEAWEC.js → 2YWCEGTS.js} +3 -3
  18. package/chunks/34ZKUFEA.js +41 -0
  19. package/chunks/{VCYQUP4Y.mjs → 3YV6X7S6.mjs} +1 -1
  20. package/chunks/{ICTODCOL.js → 4WHZ4EIW.js} +2 -2
  21. package/chunks/{M7UTYYGM.mjs → 6AD3HYSF.mjs} +1 -1
  22. package/chunks/{3INB42LZ.mjs → 6WX5AGKQ.mjs} +1 -1
  23. package/chunks/{JYRPLJUL.js → B4VPD3ZT.js} +11 -11
  24. package/chunks/BM4OSDRZ.js +17 -0
  25. package/chunks/{JZOX7DKF.mjs → BYD63JCG.mjs} +43 -41
  26. package/chunks/{H32EGPZN.mjs → DCXUEDOW.mjs} +1 -1
  27. package/chunks/{X474LM7J.mjs → EHAANYDL.mjs} +3 -3
  28. package/chunks/{3SBSHHRV.mjs → HHOVS7QC.mjs} +5 -5
  29. package/chunks/{IJNQAGVX.mjs → HOCTJESP.mjs} +70 -4
  30. package/chunks/{HHMKNG2O.js → MTAQE4WC.js} +75 -9
  31. package/chunks/{CX7TY2FM.mjs → O4EAKEIN.mjs} +1 -1
  32. package/chunks/{WM2VCN4G.js → OPRGGO4C.js} +1 -1
  33. package/chunks/{SMKHFJJF.js → PLOSYUG2.js} +4 -4
  34. package/chunks/{J3ZWASEK.mjs → UKVTBYP6.mjs} +1 -1
  35. package/chunks/{TH75GYUY.js → URIW2U5M.js} +3 -3
  36. package/chunks/{6KX2ETIK.js → WOYJLK4Y.js} +43 -41
  37. package/collections.js +14 -14
  38. package/collections.mjs +2 -2
  39. package/csp-origins.js +9 -9
  40. package/csp-origins.mjs +2 -2
  41. package/data-assets.js +8 -8
  42. package/data-assets.mjs +2 -2
  43. package/data-connections.js +12 -12
  44. package/data-connections.mjs +2 -2
  45. package/data-credentials.js +7 -7
  46. package/data-credentials.mjs +2 -2
  47. package/data-files.js +15 -15
  48. package/data-files.mjs +2 -2
  49. package/docs/examples/open-without-data.md +40 -0
  50. package/docs/examples.md +1 -0
  51. package/docs/qix.md +21 -2
  52. package/extensions.js +10 -10
  53. package/extensions.mjs +2 -2
  54. package/glossaries.js +27 -27
  55. package/glossaries.mjs +2 -2
  56. package/groups.js +11 -11
  57. package/groups.mjs +2 -2
  58. package/identity-providers.js +11 -11
  59. package/identity-providers.mjs +2 -2
  60. package/index.js +8 -8
  61. package/index.mjs +4 -4
  62. package/items.js +11 -11
  63. package/items.mjs +2 -2
  64. package/licenses.js +12 -12
  65. package/licenses.mjs +2 -2
  66. package/package.json +3 -3
  67. package/qix.d.mts +6 -1
  68. package/qix.d.ts +6 -1
  69. package/qix.js +3 -3
  70. package/qix.mjs +2 -2
  71. package/quotas.js +5 -5
  72. package/quotas.mjs +2 -2
  73. package/reload-tasks.js +8 -8
  74. package/reload-tasks.mjs +2 -2
  75. package/reloads.js +7 -7
  76. package/reloads.mjs +2 -2
  77. package/roles.js +5 -5
  78. package/roles.mjs +2 -2
  79. package/spaces.js +15 -15
  80. package/spaces.mjs +2 -2
  81. package/temp-contents.js +6 -6
  82. package/temp-contents.mjs +2 -2
  83. package/tenants.js +9 -9
  84. package/tenants.mjs +2 -2
  85. package/themes.js +10 -10
  86. package/themes.mjs +2 -2
  87. package/transports.js +9 -9
  88. package/transports.mjs +2 -2
  89. package/users.js +13 -13
  90. package/users.mjs +2 -2
  91. package/web-integrations.js +8 -8
  92. package/web-integrations.mjs +2 -2
  93. package/web-notifications.js +9 -9
  94. package/web-notifications.mjs +2 -2
  95. package/webhooks.js +13 -13
  96. package/webhooks.mjs +2 -2
  97. package/chunks/GMCMKY65.js +0 -41
  98. package/chunks/ME4LNBI3.js +0 -17
@@ -502,27 +502,30 @@ function generateRandomString(targetLength) {
502
502
 
503
503
  // src/auth/internal/default-auth-modules/oauth/storage-helpers.ts
504
504
  var storagePrefix = "qlik-qmfe-api";
505
+ function getTopicFromHostConfig(hostConfig) {
506
+ return hostConfig.clientId + (hostConfig.scope ? `_${hostConfig.scope}` : "_user_default");
507
+ }
505
508
  var cachedTokens = {};
506
- function saveInLocalStorage(scope, name, value) {
507
- localStorage.setItem(`${storagePrefix}-${scope}-${name}`, value);
509
+ function saveInLocalStorage(topic, name, value) {
510
+ localStorage.setItem(`${storagePrefix}-${topic}-${name}`, value);
508
511
  }
509
- function saveInSessionStorage(scope, name, value) {
510
- sessionStorage.setItem(`${storagePrefix}-${scope}-${name}`, value);
512
+ function saveInSessionStorage(topic, name, value) {
513
+ sessionStorage.setItem(`${storagePrefix}-${topic}-${name}`, value);
511
514
  }
512
- function loadFromLocalStorage(scope, name) {
513
- return localStorage.getItem(`${storagePrefix}-${scope}-${name}`) || void 0;
515
+ function loadFromLocalStorage(topic, name) {
516
+ return localStorage.getItem(`${storagePrefix}-${topic}-${name}`) || void 0;
514
517
  }
515
- function loadFromSessionStorage(scope, name) {
516
- return sessionStorage.getItem(`${storagePrefix}-${scope}-${name}`) || void 0;
518
+ function loadFromSessionStorage(topic, name) {
519
+ return sessionStorage.getItem(`${storagePrefix}-${topic}-${name}`) || void 0;
517
520
  }
518
- function deleteFromLocalStorage(scope, names) {
519
- names.forEach((name) => localStorage.removeItem(`${storagePrefix}-${scope}-${name}`));
521
+ function deleteFromLocalStorage(topic, names) {
522
+ names.forEach((name) => localStorage.removeItem(`${storagePrefix}-${topic}-${name}`));
520
523
  }
521
- function deleteFromSessionStorage(scope, names) {
522
- names.forEach((name) => sessionStorage.removeItem(`${storagePrefix}-${scope}-${name}`));
524
+ function deleteFromSessionStorage(topic, names) {
525
+ names.forEach((name) => sessionStorage.removeItem(`${storagePrefix}-${topic}-${name}`));
523
526
  }
524
- function loadAndDeleteFromSessionStorage(scope, name) {
525
- const id = `${storagePrefix}-${scope}-${name}`;
527
+ function loadAndDeleteFromSessionStorage(topic, name) {
528
+ const id = `${storagePrefix}-${topic}-${name}`;
526
529
  const result2 = sessionStorage.getItem(id) || void 0;
527
530
  sessionStorage.removeItem(id);
528
531
  return result2;
@@ -534,11 +537,11 @@ function loadOauthTokensFromStorage(hostConfig) {
534
537
  let accessToken;
535
538
  let refreshToken;
536
539
  if (hostConfig.accessTokenStorage === "local") {
537
- accessToken = loadFromLocalStorage(hostConfig.clientId, "access-token");
538
- refreshToken = loadFromLocalStorage(hostConfig.clientId, "refresh-token");
540
+ accessToken = loadFromLocalStorage(getTopicFromHostConfig(hostConfig), "access-token");
541
+ refreshToken = loadFromLocalStorage(getTopicFromHostConfig(hostConfig), "refresh-token");
539
542
  } else if (hostConfig.accessTokenStorage === "session") {
540
- accessToken = loadFromSessionStorage(hostConfig.clientId, "access-token");
541
- refreshToken = loadFromSessionStorage(hostConfig.clientId, "refresh-token");
543
+ accessToken = loadFromSessionStorage(getTopicFromHostConfig(hostConfig), "access-token");
544
+ refreshToken = loadFromSessionStorage(getTopicFromHostConfig(hostConfig), "refresh-token");
542
545
  }
543
546
  if (accessToken) {
544
547
  return {
@@ -549,34 +552,34 @@ function loadOauthTokensFromStorage(hostConfig) {
549
552
  return void 0;
550
553
  }
551
554
  async function loadCachedOauthTokens(hostConfig) {
552
- return cachedTokens[hostConfig.clientId];
555
+ return cachedTokens[getTopicFromHostConfig(hostConfig)];
553
556
  }
554
557
  async function loadOrAcquireAccessToken(hostConfig, acquireTokens) {
555
558
  if (!hostConfig.clientId) {
556
559
  throw new InvalidHostConfigError('A host config with authType set to "oauth2" has to also provide a clientId');
557
560
  }
558
561
  const mayUseStorage = isBrowser();
559
- const storedOauthTokens = cachedTokens[hostConfig.clientId] || (mayUseStorage ? loadOauthTokensFromStorage(hostConfig) : void 0);
562
+ const storedOauthTokens = cachedTokens[getTopicFromHostConfig(hostConfig)] || (mayUseStorage ? loadOauthTokensFromStorage(hostConfig) : void 0);
560
563
  if (storedOauthTokens) {
561
564
  return Promise.resolve(storedOauthTokens);
562
565
  }
563
566
  const tokensPromise = acquireTokens();
564
- cachedTokens[hostConfig.clientId] = tokensPromise;
567
+ cachedTokens[getTopicFromHostConfig(hostConfig)] = tokensPromise;
565
568
  if (mayUseStorage) {
566
569
  const tokens = await tokensPromise;
567
570
  if (hostConfig.accessTokenStorage === "local" && tokens) {
568
571
  if (tokens.accessToken) {
569
- saveInLocalStorage(hostConfig.clientId, "access-token", tokens.accessToken);
572
+ saveInLocalStorage(getTopicFromHostConfig(hostConfig), "access-token", tokens.accessToken);
570
573
  }
571
574
  if (tokens.refreshToken) {
572
- saveInLocalStorage(hostConfig.clientId, "refresh-token", tokens.refreshToken);
575
+ saveInLocalStorage(getTopicFromHostConfig(hostConfig), "refresh-token", tokens.refreshToken);
573
576
  }
574
577
  } else if (hostConfig.accessTokenStorage === "session" && tokens) {
575
578
  if (tokens.accessToken) {
576
- saveInSessionStorage(hostConfig.clientId, "access-token", tokens.accessToken);
579
+ saveInSessionStorage(getTopicFromHostConfig(hostConfig), "access-token", tokens.accessToken);
577
580
  }
578
581
  if (tokens.refreshToken) {
579
- saveInSessionStorage(hostConfig.clientId, "refresh-token", tokens.refreshToken);
582
+ saveInSessionStorage(getTopicFromHostConfig(hostConfig), "refresh-token", tokens.refreshToken);
580
583
  }
581
584
  }
582
585
  }
@@ -586,10 +589,10 @@ function clearStoredOauthTokens(hostConfig) {
586
589
  if (!hostConfig.clientId) {
587
590
  throw new InvalidHostConfigError('A host config with authType set to "oauth2" has to also provide a clientId');
588
591
  }
589
- delete cachedTokens[hostConfig.clientId];
592
+ delete cachedTokens[getTopicFromHostConfig(hostConfig)];
590
593
  if (isBrowser()) {
591
- deleteFromLocalStorage(hostConfig.clientId, ["access-token", "refresh-token"]);
592
- deleteFromSessionStorage(hostConfig.clientId, ["access-token", "refresh-token"]);
594
+ deleteFromLocalStorage(getTopicFromHostConfig(hostConfig), ["access-token", "refresh-token"]);
595
+ deleteFromSessionStorage(getTopicFromHostConfig(hostConfig), ["access-token", "refresh-token"]);
593
596
  }
594
597
  }
595
598
 
@@ -609,12 +612,12 @@ function handleOAuthCallback() {
609
612
  })}</code>`;
610
613
  document.body.prepend(element);
611
614
  }
612
- const clientId = loadAndDeleteFromSessionStorage("", "client-in-progress");
613
- if (clientId && callbackCode && callbackState) {
614
- const stateFromLocalStorage = loadAndDeleteFromSessionStorage(clientId, "state");
615
- const finalRedirectUri = loadAndDeleteFromSessionStorage(clientId, "href");
615
+ const topic = loadAndDeleteFromSessionStorage("", "client-in-progress");
616
+ if (topic && callbackCode && callbackState) {
617
+ const stateFromLocalStorage = loadAndDeleteFromSessionStorage(topic, "state");
618
+ const finalRedirectUri = loadAndDeleteFromSessionStorage(topic, "href");
616
619
  if (stateFromLocalStorage && stateFromLocalStorage === callbackState && finalRedirectUri) {
617
- saveInSessionStorage(clientId, "code", callbackCode);
620
+ saveInSessionStorage(topic, "code", callbackCode);
618
621
  if (finalRedirectUri !== globalThis.location.href) {
619
622
  globalThis.location.replace(finalRedirectUri);
620
623
  }
@@ -660,17 +663,16 @@ async function startFullPageLoginFlow(hostConfig) {
660
663
  const state = generateRandomString(43);
661
664
  const codeChallenge = await sha256(verifier);
662
665
  const redirectUri = hostConfig.redirectUri || globalThis.location.href;
663
- const scopes = ["user_default"];
664
666
  clearStoredOauthTokens(hostConfig);
665
- saveInSessionStorage(clientId, "state", state);
666
- saveInSessionStorage(clientId, "verifier", verifier);
667
- saveInSessionStorage(clientId, "href", globalThis.location.href);
668
- saveInSessionStorage("", "client-in-progress", clientId);
667
+ saveInSessionStorage(getTopicFromHostConfig(hostConfig), "state", state);
668
+ saveInSessionStorage(getTopicFromHostConfig(hostConfig), "verifier", verifier);
669
+ saveInSessionStorage(getTopicFromHostConfig(hostConfig), "href", globalThis.location.href);
670
+ saveInSessionStorage("", "client-in-progress", getTopicFromHostConfig(hostConfig));
669
671
  const queryParams = {
670
672
  response_type: "code",
671
673
  client_id: clientId,
672
674
  redirect_uri: redirectUri,
673
- scope: scopes.join(" "),
675
+ scope: hostConfig.scope || "user_default",
674
676
  state,
675
677
  code_challenge: codeChallenge,
676
678
  code_challenge_method: "S256"
@@ -773,8 +775,8 @@ async function getOAuthTokensForBrowser(hostConfig) {
773
775
  throw new InvalidHostConfigError('A host config with authType set to "oauth2" has to also provide a clientId');
774
776
  }
775
777
  const oauthTokens = await loadOrAcquireAccessToken(hostConfig, async () => {
776
- const code = loadAndDeleteFromSessionStorage(clientId, "code");
777
- const verifier = loadAndDeleteFromSessionStorage(clientId, "verifier");
778
+ const code = loadAndDeleteFromSessionStorage(getTopicFromHostConfig(hostConfig), "code");
779
+ const verifier = loadAndDeleteFromSessionStorage(getTopicFromHostConfig(hostConfig), "verifier");
778
780
  if (code && verifier) {
779
781
  const tokenResponse = await exchangeCodeAndVerifierForAccessTokenData(
780
782
  hostConfig,
@@ -1,6 +1,6 @@
1
1
  import "./VSY5YIQY.mjs";
2
2
 
3
- // node_modules/.pnpm/@qlik+runtime-module-loader@0.2.4/node_modules/@qlik/runtime-module-loader/dist/esm/index.js
3
+ // node_modules/.pnpm/@qlik+runtime-module-loader@0.2.5/node_modules/@qlik/runtime-module-loader/dist/esm/index.js
4
4
  window.__qlikMainPrivateResolvers = window.__qlikMainPrivateResolvers || {};
5
5
  window.__qlikMainPrivateResolvers.mainUrlPromise = window.__qlikMainPrivateResolvers.mainUrlPromise || new Promise((resolve) => {
6
6
  window.__qlikMainPrivateResolvers.resolveMainJsUrl = (value) => resolve(value);
@@ -1,17 +1,17 @@
1
1
  // src/public/public-runtime-modules.ts
2
2
  function getAuthRuntimeModule(hostConfig) {
3
3
  const isNode = !!globalThis.process?.argv;
4
- return isNode ? import("./3INB42LZ.mjs") : import("./H32EGPZN.mjs").then((mod) => mod.importRuntimeModule("auth@v1", hostConfig));
4
+ return isNode ? import("./6WX5AGKQ.mjs") : import("./DCXUEDOW.mjs").then((mod) => mod.importRuntimeModule("auth@v1", hostConfig));
5
5
  }
6
6
  async function getQixRuntimeModule(hostConfig) {
7
7
  await getAuthRuntimeModule(hostConfig);
8
8
  const isNode = !!globalThis.process?.argv;
9
- return isNode ? import("./3SBSHHRV.mjs") : import("./H32EGPZN.mjs").then((mod) => mod.importRuntimeModule("qix@v1", hostConfig));
9
+ return isNode ? import("./HHOVS7QC.mjs") : import("./DCXUEDOW.mjs").then((mod) => mod.importRuntimeModule("qix@v1", hostConfig));
10
10
  }
11
11
  async function getInvokeFetchRuntimeModule(hostConfig) {
12
12
  await getAuthRuntimeModule(hostConfig);
13
13
  const isNode = !!globalThis.process?.argv;
14
- return isNode ? import("./J3ZWASEK.mjs") : import("./H32EGPZN.mjs").then((mod) => mod.importRuntimeModule("invoke-fetch@v1", hostConfig));
14
+ return isNode ? import("./UKVTBYP6.mjs") : import("./DCXUEDOW.mjs").then((mod) => mod.importRuntimeModule("invoke-fetch@v1", hostConfig));
15
15
  }
16
16
 
17
17
  export {
@@ -4,7 +4,7 @@ import {
4
4
  invokeFetch,
5
5
  isWindows,
6
6
  toValidWebsocketLocationUrl
7
- } from "./JZOX7DKF.mjs";
7
+ } from "./BYD63JCG.mjs";
8
8
  import "./VSY5YIQY.mjs";
9
9
 
10
10
  // src/qix/session/shared-sessions.ts
@@ -35,9 +35,9 @@ async function resumeAll() {
35
35
  }
36
36
  var initialActions = {};
37
37
  var sharedSessions = {};
38
- function toGlobalAppSessionId({ appId, identity, hostConfig }) {
38
+ function toGlobalAppSessionId({ appId, identity, hostConfig, withoutData }) {
39
39
  const locationUrl = toValidWebsocketLocationUrl(hostConfig);
40
- return identity ? locationUrl + "/" + appId + "/" + identity : locationUrl + "/" + appId;
40
+ return (identity ? locationUrl + "/" + appId + "/" + identity : locationUrl + "/" + appId) + (withoutData ? "/withoutData" : "");
41
41
  }
42
42
  async function runPendingInitialActions(initialActionsForApp, sharedSession, doc) {
43
43
  for (const initialAction of initialActionsForApp) {
@@ -83,7 +83,7 @@ function listenForWindowsAuthenticationInformation(session) {
83
83
  return authSuggestedInWebsocket;
84
84
  }
85
85
  async function createAndSetupEnigmaSession(props, canRetry) {
86
- const { createEnigmaSession } = await import("./IJNQAGVX.mjs");
86
+ const { createEnigmaSession } = await import("./HOCTJESP.mjs");
87
87
  const session = await createEnigmaSession(props);
88
88
  setupSessionListeners(session, props);
89
89
  let global;
@@ -296,7 +296,7 @@ function createSharedSession(props) {
296
296
  const global2 = await sharedSession.globalPromise;
297
297
  return global2.createSessionApp();
298
298
  } else {
299
- return global.openDoc(props.appId, "", "", "", false).then((doc) => {
299
+ return global.openDoc(props.appId, "", "", "", !!props.withoutData).then((doc) => {
300
300
  if (!doc) {
301
301
  return Promise.reject(new Error("Doc could not be opened"));
302
302
  }
@@ -3,7 +3,7 @@ import {
3
3
  getRestCallAuthParams,
4
4
  getWebSocketAuthParams,
5
5
  toValidWebsocketLocationUrl
6
- } from "./JZOX7DKF.mjs";
6
+ } from "./BYD63JCG.mjs";
7
7
  import "./VSY5YIQY.mjs";
8
8
 
9
9
  // src/qix/session/enigma-session.ts
@@ -8626,6 +8626,68 @@ var mixin = {
8626
8626
  mixin.override.getField = fieldGet;
8627
8627
  var get_object_cache_default = mixin;
8628
8628
 
8629
+ // src/qix/session/mixins/all/layout-observable.js
8630
+ function Observable(api) {
8631
+ this.getLayout = function(api2) {
8632
+ this.requestPromise = api2.getLayout().then((layout) => {
8633
+ this.requestPromise = null;
8634
+ if (api2.isCancelled) {
8635
+ return;
8636
+ }
8637
+ this.fn(layout);
8638
+ }).catch((err) => {
8639
+ if (process.env.NODE_ENV === "development") {
8640
+ if (typeof err !== "undefined") {
8641
+ console.error(err);
8642
+ }
8643
+ }
8644
+ });
8645
+ }.bind(this, api);
8646
+ this.onInvalidated = function() {
8647
+ this.getLayout();
8648
+ }.bind(this);
8649
+ this.api = api;
8650
+ this.fn = null;
8651
+ }
8652
+ Observable.prototype.subscribe = function(fn) {
8653
+ if (typeof fn !== "function") {
8654
+ throw new Error("Observer must be a function");
8655
+ }
8656
+ if (typeof this.fn === "function") {
8657
+ return;
8658
+ }
8659
+ this.fn = fn;
8660
+ this.api.Invalidated.bind(this.onInvalidated);
8661
+ this.getLayout();
8662
+ };
8663
+ Observable.prototype.dispose = function() {
8664
+ this.api.Invalidated.unbind(this.onInvalidated);
8665
+ };
8666
+ Observable.prototype.cancel = function() {
8667
+ if (this.requestPromise) {
8668
+ this.api.app.global.cancelRequest(this.requestPromise.requestId);
8669
+ this.api.markAsCancelled();
8670
+ this.requestPromise = null;
8671
+ return true;
8672
+ }
8673
+ return false;
8674
+ };
8675
+ Observable.prototype.retry = function() {
8676
+ if (this.api.isCancelled) {
8677
+ this.getLayout();
8678
+ }
8679
+ };
8680
+ var layout_observable_default = {
8681
+ types: ["Doc", "GenericObject", "GenericDimension", "GenericMeasure", "GenericBookmark", "GenericVariable"],
8682
+ extend: {
8683
+ layoutSubscribe(fn) {
8684
+ const observable = new Observable(this);
8685
+ observable.subscribe(fn);
8686
+ return observable;
8687
+ }
8688
+ }
8689
+ };
8690
+
8629
8691
  // src/qix/session/mixins/all/migration.ts
8630
8692
  function isSnapshotData(data) {
8631
8693
  return data && !!data.sourceObjectId;
@@ -9279,7 +9341,7 @@ var state_default = {
9279
9341
  };
9280
9342
 
9281
9343
  // src/qix/session/mixins/all/index.ts
9282
- var mixins = [base_default, get_object_cache_default, migration_default, state_default];
9344
+ var mixins = [base_default, get_object_cache_default, migration_default, state_default, layout_observable_default];
9283
9345
 
9284
9346
  // src/qix/session/mixins/custom/currentselections/current-selections-mixins.ts
9285
9347
  var mixin2 = {
@@ -9643,7 +9705,7 @@ var normalize_default = {
9643
9705
  init(args) {
9644
9706
  this.Promise = args.config.Promise;
9645
9707
  const { api } = args;
9646
- api.waitForOpen = Promise.resolve();
9708
+ api.waitForOpen = { promise: Promise.resolve() };
9647
9709
  }
9648
9710
  };
9649
9711
 
@@ -10302,10 +10364,14 @@ var mixins5 = [...mixins3, ...mixins, ...mixins4, ...mixins2];
10302
10364
  async function createEnigmaSession({
10303
10365
  appId,
10304
10366
  identity,
10305
- hostConfig
10367
+ hostConfig,
10368
+ withoutData = false
10306
10369
  }) {
10307
10370
  const locationUrl = toValidWebsocketLocationUrl(hostConfig);
10308
10371
  const reloadUri = encodeURIComponent(`${locationUrl}/sense/app/${appId}`);
10372
+ if (!identity && withoutData) {
10373
+ identity = "no_data";
10374
+ }
10309
10375
  const identityPart = identity ? `/identity/${identity}` : "";
10310
10376
  let url = `${locationUrl}/app/${appId}${identityPart}?reloadUri=${reloadUri}`.replace(/^http/, "ws");
10311
10377
  const isNodeEnvironment = typeof window === "undefined";
@@ -3,7 +3,7 @@
3
3
 
4
4
 
5
5
 
6
- var _6KX2ETIKjs = require('./6KX2ETIK.js');
6
+ var _WOYJLK4Yjs = require('./WOYJLK4Y.js');
7
7
  require('./4HB3TAEO.js');
8
8
 
9
9
  // src/qix/session/enigma-session.ts
@@ -8626,6 +8626,68 @@ var mixin = {
8626
8626
  mixin.override.getField = fieldGet;
8627
8627
  var get_object_cache_default = mixin;
8628
8628
 
8629
+ // src/qix/session/mixins/all/layout-observable.js
8630
+ function Observable(api) {
8631
+ this.getLayout = function(api2) {
8632
+ this.requestPromise = api2.getLayout().then((layout) => {
8633
+ this.requestPromise = null;
8634
+ if (api2.isCancelled) {
8635
+ return;
8636
+ }
8637
+ this.fn(layout);
8638
+ }).catch((err) => {
8639
+ if (process.env.NODE_ENV === "development") {
8640
+ if (typeof err !== "undefined") {
8641
+ console.error(err);
8642
+ }
8643
+ }
8644
+ });
8645
+ }.bind(this, api);
8646
+ this.onInvalidated = function() {
8647
+ this.getLayout();
8648
+ }.bind(this);
8649
+ this.api = api;
8650
+ this.fn = null;
8651
+ }
8652
+ Observable.prototype.subscribe = function(fn) {
8653
+ if (typeof fn !== "function") {
8654
+ throw new Error("Observer must be a function");
8655
+ }
8656
+ if (typeof this.fn === "function") {
8657
+ return;
8658
+ }
8659
+ this.fn = fn;
8660
+ this.api.Invalidated.bind(this.onInvalidated);
8661
+ this.getLayout();
8662
+ };
8663
+ Observable.prototype.dispose = function() {
8664
+ this.api.Invalidated.unbind(this.onInvalidated);
8665
+ };
8666
+ Observable.prototype.cancel = function() {
8667
+ if (this.requestPromise) {
8668
+ this.api.app.global.cancelRequest(this.requestPromise.requestId);
8669
+ this.api.markAsCancelled();
8670
+ this.requestPromise = null;
8671
+ return true;
8672
+ }
8673
+ return false;
8674
+ };
8675
+ Observable.prototype.retry = function() {
8676
+ if (this.api.isCancelled) {
8677
+ this.getLayout();
8678
+ }
8679
+ };
8680
+ var layout_observable_default = {
8681
+ types: ["Doc", "GenericObject", "GenericDimension", "GenericMeasure", "GenericBookmark", "GenericVariable"],
8682
+ extend: {
8683
+ layoutSubscribe(fn) {
8684
+ const observable = new Observable(this);
8685
+ observable.subscribe(fn);
8686
+ return observable;
8687
+ }
8688
+ }
8689
+ };
8690
+
8629
8691
  // src/qix/session/mixins/all/migration.ts
8630
8692
  function isSnapshotData(data) {
8631
8693
  return data && !!data.sourceObjectId;
@@ -9279,7 +9341,7 @@ var state_default = {
9279
9341
  };
9280
9342
 
9281
9343
  // src/qix/session/mixins/all/index.ts
9282
- var mixins = [base_default, get_object_cache_default, migration_default, state_default];
9344
+ var mixins = [base_default, get_object_cache_default, migration_default, state_default, layout_observable_default];
9283
9345
 
9284
9346
  // src/qix/session/mixins/custom/currentselections/current-selections-mixins.ts
9285
9347
  var mixin2 = {
@@ -9643,7 +9705,7 @@ var normalize_default = {
9643
9705
  init(args) {
9644
9706
  this.Promise = args.config.Promise;
9645
9707
  const { api } = args;
9646
- api.waitForOpen = Promise.resolve();
9708
+ api.waitForOpen = { promise: Promise.resolve() };
9647
9709
  }
9648
9710
  };
9649
9711
 
@@ -9741,7 +9803,7 @@ var mixin6 = {
9741
9803
  // generating id on client side to support multiple undo create operations
9742
9804
  // raised an engine bug to solve this, when resolved can be changed
9743
9805
  // TODO: update the jira id for engine bug once created
9744
- qId: _6KX2ETIKjs.generateRandomString.call(void 0, 43),
9806
+ qId: _WOYJLK4Yjs.generateRandomString.call(void 0, 43),
9745
9807
  qType: "sheet"
9746
9808
  },
9747
9809
  qMetaDef: {
@@ -9777,7 +9839,7 @@ var mixin6 = {
9777
9839
  qInfo: {
9778
9840
  // generating id on client side to support multiple undo create operations
9779
9841
  // raised an engine bug to solve this, when resolved can be changed
9780
- qId: _6KX2ETIKjs.generateRandomString.call(void 0, 43),
9842
+ qId: _WOYJLK4Yjs.generateRandomString.call(void 0, 43),
9781
9843
  qType: "story"
9782
9844
  },
9783
9845
  qMetaDef: {
@@ -10302,16 +10364,20 @@ var mixins5 = [...mixins3, ...mixins, ...mixins4, ...mixins2];
10302
10364
  async function createEnigmaSession({
10303
10365
  appId,
10304
10366
  identity,
10305
- hostConfig
10367
+ hostConfig,
10368
+ withoutData = false
10306
10369
  }) {
10307
- const locationUrl = _6KX2ETIKjs.toValidWebsocketLocationUrl.call(void 0, hostConfig);
10370
+ const locationUrl = _WOYJLK4Yjs.toValidWebsocketLocationUrl.call(void 0, hostConfig);
10308
10371
  const reloadUri = encodeURIComponent(`${locationUrl}/sense/app/${appId}`);
10372
+ if (!identity && withoutData) {
10373
+ identity = "no_data";
10374
+ }
10309
10375
  const identityPart = identity ? `/identity/${identity}` : "";
10310
10376
  let url = `${locationUrl}/app/${appId}${identityPart}?reloadUri=${reloadUri}`.replace(/^http/, "ws");
10311
10377
  const isNodeEnvironment = typeof window === "undefined";
10312
10378
  let createSocketMethod;
10313
10379
  if (isNodeEnvironment) {
10314
- const { headers, queryParams } = await _6KX2ETIKjs.getRestCallAuthParams.call(void 0, { hostConfig, method: "POST" });
10380
+ const { headers, queryParams } = await _WOYJLK4Yjs.getRestCallAuthParams.call(void 0, { hostConfig, method: "POST" });
10315
10381
  const WS = (await Promise.resolve().then(() => _interopRequireWildcard(require("ws")))).default;
10316
10382
  Object.entries(queryParams).forEach(([key, value]) => {
10317
10383
  url = `${url}&${key}=${value}`;
@@ -10320,7 +10386,7 @@ async function createEnigmaSession({
10320
10386
  headers
10321
10387
  });
10322
10388
  } else {
10323
- const { queryParams } = await _6KX2ETIKjs.getWebSocketAuthParams.call(void 0, { hostConfig });
10389
+ const { queryParams } = await _WOYJLK4Yjs.getWebSocketAuthParams.call(void 0, { hostConfig });
10324
10390
  Object.entries(queryParams).forEach(([key, value]) => {
10325
10391
  url = `${url}&${key}=${value}`;
10326
10392
  });
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getQixRuntimeModule
3
- } from "./X474LM7J.mjs";
3
+ } from "./EHAANYDL.mjs";
4
4
 
5
5
  // src/public/qix.ts
6
6
  function openAppSession(appSessionProps) {
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }require('./4HB3TAEO.js');
2
2
 
3
- // node_modules/.pnpm/@qlik+runtime-module-loader@0.2.4/node_modules/@qlik/runtime-module-loader/dist/esm/index.js
3
+ // node_modules/.pnpm/@qlik+runtime-module-loader@0.2.5/node_modules/@qlik/runtime-module-loader/dist/esm/index.js
4
4
  window.__qlikMainPrivateResolvers = window.__qlikMainPrivateResolvers || {};
5
5
  window.__qlikMainPrivateResolvers.mainUrlPromise = window.__qlikMainPrivateResolvers.mainUrlPromise || new Promise((resolve) => {
6
6
  window.__qlikMainPrivateResolvers.resolveMainJsUrl = (value) => resolve(value);
@@ -1,16 +1,16 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _SEXEAWECjs = require('./SEXEAWEC.js');
3
+ var _2YWCEGTSjs = require('./2YWCEGTS.js');
4
4
 
5
5
  // src/public/auth.ts
6
6
  function registerAuthModule(name, authModule) {
7
- void _SEXEAWECjs.getAuthRuntimeModule.call(void 0, ).then((impl) => impl.registerAuthModule(name, authModule));
7
+ void _2YWCEGTSjs.getAuthRuntimeModule.call(void 0, ).then((impl) => impl.registerAuthModule(name, authModule));
8
8
  }
9
9
  function logout() {
10
- void _SEXEAWECjs.getAuthRuntimeModule.call(void 0, ).then((impl) => impl.logout());
10
+ void _2YWCEGTSjs.getAuthRuntimeModule.call(void 0, ).then((impl) => impl.logout());
11
11
  }
12
12
  function setDefaultHostConfig(hostConfig) {
13
- void _SEXEAWECjs.getAuthRuntimeModule.call(void 0, hostConfig).then((impl) => impl.setDefaultHostConfig(hostConfig));
13
+ void _2YWCEGTSjs.getAuthRuntimeModule.call(void 0, hostConfig).then((impl) => impl.setDefaultHostConfig(hostConfig));
14
14
  }
15
15
  var auth_default = {
16
16
  registerAuthModule,
@@ -5,7 +5,7 @@ import {
5
5
  invokeFetch,
6
6
  invoke_fetch_default,
7
7
  parseFetchResponse
8
- } from "./JZOX7DKF.mjs";
8
+ } from "./BYD63JCG.mjs";
9
9
  import "./VSY5YIQY.mjs";
10
10
  export {
11
11
  EncodingError,
@@ -1,14 +1,14 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _SEXEAWECjs = require('./SEXEAWEC.js');
3
+ var _2YWCEGTSjs = require('./2YWCEGTS.js');
4
4
 
5
5
  // src/public/invoke-fetch.ts
6
6
  async function invokeFetch(api, props) {
7
7
  const hostConfig = _optionalChain([props, 'access', _ => _.options, 'optionalAccess', _2 => _2.hostConfig]);
8
- return (await _SEXEAWECjs.getInvokeFetchRuntimeModule.call(void 0, hostConfig)).invokeFetch(api, props);
8
+ return (await _2YWCEGTSjs.getInvokeFetchRuntimeModule.call(void 0, hostConfig)).invokeFetch(api, props);
9
9
  }
10
10
  function clearApiCache(api) {
11
- void _SEXEAWECjs.getInvokeFetchRuntimeModule.call(void 0, ).then((runtimeModule) => runtimeModule.clearApiCache(api));
11
+ void _2YWCEGTSjs.getInvokeFetchRuntimeModule.call(void 0, ).then((runtimeModule) => runtimeModule.clearApiCache(api));
12
12
  }
13
13
 
14
14