@unisim/sdk 0.142.5 → 0.142.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/suiteApps.js CHANGED
@@ -31,8 +31,13 @@
31
31
  // Both lists are therefore copies of this one, in formats that cannot import
32
32
  // it. That is the thing to distrust: see `tests/suite-apps.mjs`, which fails if
33
33
  // they drift.
34
+ //
35
+ // The tail of this file answers the other half of the same question — where to
36
+ // GET a suite app you have not got. It hangs off the same registry because the
37
+ // two are one decision per row: launch it, offer it, or leave the web link
38
+ // alone. See "You haven't got this one" below.
34
39
  // ──────────────────────────────────────────────────────────────────────────────
35
- import { isNativeShell, capacitorPlugin } from './sessionStorage.js';
40
+ import { isNativeShell, capacitorPlugin, capacitorPlatform } from './sessionStorage.js';
36
41
  /**
37
42
  * Every suite product that has a native build, and only those.
38
43
  *
@@ -76,7 +81,12 @@ import { isNativeShell, capacitorPlugin } from './sessionStorage.js';
76
81
  * could even ask whether it was installed.
77
82
  */
78
83
  export const SUITE_NATIVE_APPS = [
79
- { id: 'ergo_assess', scheme: 'unisim-ergo-assess', iosBundleId: 'com.universalsimulation.ergoassesscapture', androidPackage: 'com.universalsimulation.ergoassesscapture' },
84
+ // iOS and Android ids differ: the iOS target is `…ergoassess` (ios/project.yml,
85
+ // and the live App Store listing), Android `…ergoassesscapture`. Until
86
+ // 2026-09-15 this said `…ergoassesscapture` for both, so
87
+ // add-suite-app-links.mjs could not recognise Ergo's own plist and would have
88
+ // rewritten it WITHOUT its own scheme on the next run.
89
+ { id: 'ergo_assess', scheme: 'unisim-ergo-assess', iosBundleId: 'com.universalsimulation.ergoassess', androidPackage: 'com.universalsimulation.ergoassesscapture', appStoreId: '6811535068' },
80
90
  { id: 'cyber_assess', scheme: 'unisim-cyber-assess', iosBundleId: 'uk.co.unisim.cyberassess', androidPackage: 'uk.co.unisim.cyberassess' },
81
91
  { id: 'workplace_assess', scheme: 'unisim-workplace-assess', iosBundleId: 'uk.co.unisim.wfhassess', androidPackage: 'uk.co.unisim.wfhassess' },
82
92
  { id: 'fire_assess', scheme: 'unisim-fire-assess', iosBundleId: 'uk.co.unisim.fireassess', androidPackage: 'uk.co.unisim.fireassess' },
@@ -190,4 +200,115 @@ export async function openSuiteApp(id) {
190
200
  return false;
191
201
  }
192
202
  }
203
+ // ── "You haven't got this one" ───────────────────────────────────────────────
204
+ //
205
+ // The other half of the same question. `installedSuiteApps` answers which
206
+ // sibling apps are on the device; everything below is for the ones that are
207
+ // not, on a device that could install them.
208
+ //
209
+ // ⚠️ **The two store URLs per platform are not interchangeable, and picking the
210
+ // wrong one reproduces the exact bug this whole module exists to avoid.** An
211
+ // `https://apps.apple.com/…` link tapped inside a Capacitor webview loads the
212
+ // App Store's *web page* in that webview — the website, inside the app the
213
+ // person was already in. The `itms-apps:` / `market:` schemes cannot do that:
214
+ // they are not http(s), so Capacitor's navigation delegate hands them to the
215
+ // OS instead of loading them, on both platforms. In a real browser the https
216
+ // forms are the right ones — they deep-link into the store app when it is
217
+ // there and render a usable page when it is not (a desktop, or a locked-down
218
+ // device with no store).
219
+ //
220
+ // So: scheme URL in the shell, https URL on the web. Neither is a fallback for
221
+ // the other.
222
+ /**
223
+ * Which mobile platform's store this device can be sent to, or null.
224
+ *
225
+ * Null covers every desktop browser and anything we cannot place — and null
226
+ * means *show nothing*, never "guess iOS". A store chip on a Linux desktop is
227
+ * not a small cosmetic miss: it is an offer to install software the machine
228
+ * cannot run.
229
+ *
230
+ * ⚠️ **iPadOS lies in the user-agent string.** Since iPadOS 13 Safari reports
231
+ * `Macintosh; Intel Mac OS X`, identical to a desktop Mac, and the only thing
232
+ * that separates them is the touch screen — hence the `maxTouchPoints` arm. A
233
+ * Mac with a drawing tablet plugged in can report >1 here, which would offer a
234
+ * desktop an iOS store link; that is the accepted cost of not failing every
235
+ * iPad, and it is why the check is `> 1` rather than `> 0`.
236
+ */
237
+ export function suiteStorePlatform() {
238
+ // The shell knows for certain; ask it before reading any string.
239
+ const native = capacitorPlatform();
240
+ if (native)
241
+ return native;
242
+ if (typeof navigator === 'undefined')
243
+ return null;
244
+ const ua = navigator.userAgent || '';
245
+ if (/android/i.test(ua))
246
+ return 'android';
247
+ if (/iPad|iPhone|iPod/.test(ua))
248
+ return 'ios';
249
+ if (/Macintosh/.test(ua) && (navigator.maxTouchPoints ?? 0) > 1)
250
+ return 'ios';
251
+ return null;
252
+ }
253
+ /**
254
+ * Where to get `id` on this device, or null when there is nowhere to send
255
+ * anyone.
256
+ *
257
+ * Null is the answer far more often than not, and every one of these is a
258
+ * deliberate no-offer rather than a gap to fill in later:
259
+ *
260
+ * • the product has no native build at all (not in {@link SUITE_NATIVE_APPS})
261
+ * • this device is not a phone or tablet we can name
262
+ * • the listing is not live yet on *this* platform — `appStoreId` unset, or
263
+ * `playListed` false. The two ship weeks apart in practice, so an app can
264
+ * be honestly offerable on one platform and not the other.
265
+ *
266
+ * ⚠️ **Callers must not offer this to someone who already has the app.** It
267
+ * takes no view on that — `installedSuiteApps()` is the one that knows, and
268
+ * sending an existing user to a store page reading "Open" is a worse tap than
269
+ * the website link it replaced.
270
+ */
271
+ export function suiteAppStore(id) {
272
+ const app = suiteNativeApp(id);
273
+ if (!app)
274
+ return null;
275
+ const platform = suiteStorePlatform();
276
+ if (!platform)
277
+ return null;
278
+ return suiteStoreUrl(app, platform, isNativeShell());
279
+ }
280
+ /**
281
+ * The URL half of {@link suiteAppStore}, with the two environment questions
282
+ * (which platform, in a shell or not) passed in rather than sniffed.
283
+ *
284
+ * Split out to be testable. The four URL shapes below are the part of this
285
+ * module most likely to be quietly wrong — they cannot be checked by reading,
286
+ * only by construction, and three of the four are unreachable from a node test
287
+ * that has to sniff its own environment and correctly finds nothing. Exported
288
+ * for the same reason the launch helpers are: a product putting the offer
289
+ * behind its own affordance already knows its platform.
290
+ */
291
+ export function suiteStoreUrl(app, platform, inShell) {
292
+ if (platform === 'ios') {
293
+ if (!app.appStoreId)
294
+ return null;
295
+ return {
296
+ name: 'App Store',
297
+ // No country segment: Apple resolves the visitor's own storefront, and a
298
+ // hard-coded `/gb/` would send everyone outside the UK to a page that
299
+ // tells them the app is unavailable in their region.
300
+ url: inShell
301
+ ? `itms-apps://itunes.apple.com/app/id${app.appStoreId}`
302
+ : `https://apps.apple.com/app/id${app.appStoreId}`,
303
+ };
304
+ }
305
+ if (!app.playListed)
306
+ return null;
307
+ return {
308
+ name: 'Google Play',
309
+ url: inShell
310
+ ? `market://details?id=${app.androidPackage}`
311
+ : `https://play.google.com/store/apps/details?id=${app.androidPackage}`,
312
+ };
313
+ }
193
314
  //# sourceMappingURL=suiteApps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"suiteApps.js","sourceRoot":"","sources":["../src/suiteApps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"suiteApps.js","sourceRoot":"","sources":["../src/suiteApps.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unisim/sdk",
3
- "version": "0.142.5",
3
+ "version": "0.142.7",
4
4
  "description": "Shared React SDK for the Universal Suite — auth, entitlements, usage telemetry, changelog, org admin.",
5
5
  "license": "MIT",
6
6
  "author": "Universal Simulation Ltd",
@@ -61,6 +61,7 @@
61
61
  "test:session-storage": "npm run build && node tests/session-storage.browser.mjs",
62
62
  "test:shared-signout": "node tests/shared-signout.mjs",
63
63
  "test:suite-apps": "npm run build && node tests/suite-apps.mjs",
64
+ "test:suite-store": "npm run build && node tests/suite-store.browser.mjs",
64
65
  "test:suite-switcher": "npm run build && node tests/suite-switcher-close.browser.mjs",
65
66
  "test:hover-click": "npm run build && node tests/hover-click.browser.mjs",
66
67
  "test:multi-org": "npm run build && node tests/multi-org.mjs",
@@ -68,6 +69,7 @@
68
69
  "test:about-credits": "npm run build && node tests/about-credits.browser.mjs",
69
70
  "test:profile-menu-order": "npm run build && node tests/profile-menu-order.browser.mjs",
70
71
  "test:delete-account": "npm run build && node tests/delete-account.browser.mjs",
72
+ "test:native-purchase-links": "npm run build && node tests/native-purchase-links.browser.mjs",
71
73
  "test:reveal-on-expand": "npm run build && node tests/reveal-on-expand.browser.mjs",
72
74
  "test:dropdown-scroll": "npm run build && node tests/dropdown-scroll.browser.mjs",
73
75
  "test:about-authorship": "npm run build && node tests/about-authorship.browser.mjs",