@trackunit/iris-app-sdk-vite 1.0.33 → 1.0.36

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/CHANGELOG.md CHANGED
@@ -1,3 +1,30 @@
1
+ ## 1.0.36 (2026-06-22)
2
+
3
+ ### 🧱 Updated Dependencies
4
+
5
+ - Updated iris-app-build-utilities to 2.0.32
6
+ - Updated iris-app-api to 2.0.31
7
+ - Updated iris-app to 2.0.34
8
+
9
+ ## 1.0.35 (2026-06-22)
10
+
11
+ ### 🩹 Fixes
12
+
13
+ - **iris-app-sdk:** degrade gracefully when custom-field check can't run [GLU-1302] ([#23721](https://github.com/Trackunit/manager/pull/23721))
14
+
15
+ ### ❤️ Thank You
16
+
17
+ - Christian Sandbeck
18
+ - Claude Opus 4.8
19
+
20
+ ## 1.0.34 (2026-06-19)
21
+
22
+ ### 🧱 Updated Dependencies
23
+
24
+ - Updated iris-app-build-utilities to 2.0.31
25
+ - Updated iris-app-api to 2.0.30
26
+ - Updated iris-app to 2.0.33
27
+
1
28
  ## 1.0.33 (2026-06-19)
2
29
 
3
30
  ### 🧱 Updated Dependencies
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/iris-app-sdk-vite",
3
- "version": "1.0.33",
3
+ "version": "1.0.36",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "repository": "https://github.com/Trackunit/manager",
6
6
  "executors": "./executors.json",
@@ -10,8 +10,8 @@
10
10
  "dependencies": {
11
11
  "rxjs": "7.8.1",
12
12
  "win-ca": "^3.5.1",
13
- "@trackunit/iris-app-build-utilities": "2.0.30",
14
- "@trackunit/iris-app-api": "2.0.29",
13
+ "@trackunit/iris-app-build-utilities": "2.0.32",
14
+ "@trackunit/iris-app-api": "2.0.31",
15
15
  "tslib": "^2.6.2",
16
16
  "vite": "7.3.1",
17
17
  "@module-federation/vite": "1.11.0",
@@ -22,7 +22,7 @@
22
22
  "@tailwindcss/postcss": "^4.1.18",
23
23
  "@vitejs/plugin-react-swc": "^4.2.3",
24
24
  "@nx/devkit": "22.7.5",
25
- "@trackunit/iris-app": "2.0.32",
25
+ "@trackunit/iris-app": "2.0.34",
26
26
  "cross-keychain": "^1.1.0",
27
27
  "jwt-decode": "^3.1.2"
28
28
  },
@@ -37,10 +37,19 @@ async function* serveExecutor(options, context) {
37
37
  const irisAppManifest = (0, manifestLoader_1.loadManifest)(context.root, projectRootDir);
38
38
  const checkCustomFieldsResult = await (0, checkCustomFields_1.checkCustomFields)(irisAppManifest, settings);
39
39
  if (checkCustomFieldsResult === "out-of-sync") {
40
- throw new Error("Custom fields are out of sync with the latest approved manifest, please submit and get this version approved before you continue developing the app.");
40
+ throw new Error("Custom fields are out of sync with the latest approved manifest, which can cause the app to behave in unexpected ways. Please submit and get this version approved before you continue developing the app.");
41
41
  }
42
42
  if (checkCustomFieldsResult === "not-submitted") {
43
- throw new Error("Custom fields are not submitted, please submit and get this version approved before you continue developing the app.");
43
+ throw new Error("Custom fields are not submitted, which can cause the app to behave in unexpected ways. Please submit and get this version approved before you continue developing the app.");
44
+ }
45
+ if (checkCustomFieldsResult === "unverified") {
46
+ // The check could not be completed (network/auth/server failure). This is
47
+ // non-fatal for local development: warn loudly and continue serving rather
48
+ // than crashing. The underlying reason was already logged by checkCustomFields.
49
+ // eslint-disable-next-line no-console
50
+ console.warn("\n ⚠️ Custom-field in-sync check was skipped — the latest approved manifest could not be verified " +
51
+ "(see the warning above). The dev server will start, but your custom fields were NOT validated against the approved manifest. " +
52
+ "If your local custom field definitions are out of sync, the app may behave in unexpected ways.\n");
44
53
  }
45
54
  const serversideResult = await (0, iris_app_build_utilities_1.spawnServersideExtensions)(irisAppManifest, context.root);
46
55
  try {
@@ -24,8 +24,25 @@ const checkCustomFields = async (irisAppManifest, settings) => {
24
24
  }
25
25
  // eslint-disable-next-line no-console
26
26
  console.log("This app is using custom fields, fetching the latest approved manifest to validate that the local custom field definitions are in sync.");
27
- const tokenData = await (0, accessTokenCache_1.getCachedAccessToken)(settings);
28
- const latestApprovedManifestIfAny = await fetchLatestApprovedManifest(irisAppManifest.moduleFederationName, tokenData.access_token, settings);
27
+ // The in-sync check is advisory for local development: when it cannot be
28
+ // completed (auth can't be obtained, the endpoint is unreachable, returns an
29
+ // error, or sends back a malformed body) we degrade to "unverified" and let
30
+ // the caller continue, rather than throwing and aborting `serve`. Genuine
31
+ // "the check ran and found a problem" outcomes (out-of-sync / not-submitted)
32
+ // are still returned below. Mirrors the warn-and-continue idiom in
33
+ // accessTokenCache.ts.
34
+ let latestApprovedManifestIfAny;
35
+ try {
36
+ const tokenData = await (0, accessTokenCache_1.getCachedAccessToken)(settings);
37
+ latestApprovedManifestIfAny = await fetchLatestApprovedManifest(irisAppManifest.moduleFederationName, tokenData.access_token, settings);
38
+ }
39
+ catch (error) {
40
+ const reason = error instanceof Error ? error.message : String(error);
41
+ // eslint-disable-next-line no-console
42
+ console.warn(`[checkCustomFields] Could not verify custom fields against the latest approved manifest: ${reason}. ` +
43
+ "Skipping the in-sync check for this session and continuing — your custom fields were NOT validated.");
44
+ return "unverified";
45
+ }
29
46
  if (!latestApprovedManifestIfAny) {
30
47
  return "not-submitted";
31
48
  }
@@ -92,6 +109,13 @@ async function fetchLatestApprovedManifest(irisAppId, accessToken, settings) {
92
109
  if (body.errors && body.errors.length > 0) {
93
110
  throw new Error(`GraphQL error fetching latest approved manifest: ${body.errors.map(e => e.message).join(", ")}`);
94
111
  }
95
- return body.data?.manifest ?? null;
112
+ // A well-formed response always carries the `manifest` field (possibly null
113
+ // when the app has no approved version yet). Anything else means we cannot
114
+ // trust the result, so treat it as a failed fetch (→ "unverified" upstream)
115
+ // rather than misreporting it as "not-submitted".
116
+ if (!body.data || !("manifest" in body.data)) {
117
+ throw new Error(`Malformed response fetching latest approved manifest: missing data.manifest in ${JSON.stringify(body)}`);
118
+ }
119
+ return body.data.manifest ?? null;
96
120
  }
97
121
  //# sourceMappingURL=checkCustomFields.js.map