@unisim/sdk 0.123.4 → 0.124.0

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 (48) hide show
  1. package/README.md +103 -6
  2. package/android/build.gradle +59 -0
  3. package/android/src/main/AndroidManifest.xml +88 -0
  4. package/android/src/main/java/uk/co/unisim/sdk/SuiteAuthProvider.java +107 -0
  5. package/android/src/main/java/uk/co/unisim/sdk/SuiteAuthStore.java +179 -0
  6. package/android/src/main/java/uk/co/unisim/sdk/UnisimSuiteAuthPlugin.java +214 -0
  7. package/dist/ChangelogMenu.js +7 -0
  8. package/dist/ChangelogMenu.js.map +1 -1
  9. package/dist/SuiteSwitcher.d.ts.map +1 -1
  10. package/dist/SuiteSwitcher.js +70 -4
  11. package/dist/SuiteSwitcher.js.map +1 -1
  12. package/dist/UniversalAppsNavBar.d.ts.map +1 -1
  13. package/dist/UniversalAppsNavBar.js +92 -6
  14. package/dist/UniversalAppsNavBar.js.map +1 -1
  15. package/dist/UniversalNavBar.d.ts +25 -3
  16. package/dist/UniversalNavBar.d.ts.map +1 -1
  17. package/dist/UniversalNavBar.js +144 -61
  18. package/dist/UniversalNavBar.js.map +1 -1
  19. package/dist/UserProfile.d.ts +108 -1
  20. package/dist/UserProfile.d.ts.map +1 -1
  21. package/dist/UserProfile.js +147 -78
  22. package/dist/UserProfile.js.map +1 -1
  23. package/dist/i18n.d.ts.map +1 -1
  24. package/dist/i18n.js +7 -0
  25. package/dist/i18n.js.map +1 -1
  26. package/dist/index.d.ts +5 -3
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +6 -2
  29. package/dist/index.js.map +1 -1
  30. package/dist/provider.d.ts.map +1 -1
  31. package/dist/provider.js +94 -1
  32. package/dist/provider.js.map +1 -1
  33. package/dist/sessionStorage.d.ts +25 -7
  34. package/dist/sessionStorage.d.ts.map +1 -1
  35. package/dist/sessionStorage.js +49 -15
  36. package/dist/sessionStorage.js.map +1 -1
  37. package/dist/suiteApps.d.ts +66 -0
  38. package/dist/suiteApps.d.ts.map +1 -0
  39. package/dist/suiteApps.js +168 -0
  40. package/dist/suiteApps.js.map +1 -0
  41. package/dist/types.d.ts +1 -1
  42. package/dist/types.d.ts.map +1 -1
  43. package/dist/unisimMark.d.ts +1 -1
  44. package/dist/unisimMark.d.ts.map +1 -1
  45. package/dist/unisimMark.js +8 -5
  46. package/dist/unisimMark.js.map +1 -1
  47. package/ios/Sources/UnisimSuiteAuthPlugin/UnisimSuiteAuthPlugin.swift +63 -1
  48. package/package.json +8 -2
@@ -14,9 +14,15 @@
14
14
  // • **Browser, local dev / Electron** — localStorage. There is no parent
15
15
  // zone to scope a cookie to on localhost or file://.
16
16
  //
17
- // • **Native (Capacitor)** — the iOS Keychain, in a group shared by every
18
- // suite app, via the UnisimSuiteAuth plugin. Falls back to localStorage
19
- // when the plugin is absent.
17
+ // • **Native (Capacitor)** — a store shared by every suite app, via the
18
+ // UnisimSuiteAuth plugin. Falls back to localStorage when the plugin is
19
+ // absent. The plugin presents ONE interface over two quite different
20
+ // mechanisms: on iOS a Keychain access group, which the OS shares between
21
+ // apps of the same team; on Android a signature-permissioned
22
+ // ContentProvider in each app that the others read and write, because
23
+ // Android has no shared box to put anything in (`sharedUserId` was
24
+ // deprecated in API 29). See the plugin sources under `ios/` and
25
+ // `android/` — the JS below is deliberately blind to which one answered.
20
26
  //
21
27
  // ⚠️ **The native case is why this module exists.** A Capacitor app runs at
22
28
  // `capacitor://localhost`, and a cookie written from there with
@@ -30,8 +36,16 @@
30
36
  //
31
37
  // The shared Keychain then buys the thing that was actually asked for: sign in
32
38
  // on Universal Images on the phone and Universal PDF is already signed in.
33
- // Sign-out is suite-wide too, which matches how the shared cookie already
34
- // behaves on the web.
39
+ //
40
+ // ⚠️ **Sign-out is NOT symmetric with sign-in, and a shared store alone does
41
+ // not make it so.** This comment used to claim it was. What a shared store
42
+ // gives you is a shared *answer*; what it does not give you is anyone asking
43
+ // the question. supabase-js announces a session it FINDS on resume
44
+ // (SIGNED_IN), and announces nothing at all when it finds the store emptied —
45
+ // see the long note on the resume resync in `provider.tsx`, which is what
46
+ // closes the gap. Emptying this store is necessary for suite-wide sign-out and
47
+ // is not sufficient for it; an app already running keeps its in-memory session
48
+ // until something asks.
35
49
  // ─────────────────────────────────────────────────────────────────────────────
36
50
  function capacitorGlobal() {
37
51
  if (typeof window === 'undefined')
@@ -39,6 +53,18 @@ function capacitorGlobal() {
39
53
  const c = window.Capacitor;
40
54
  return c ?? null;
41
55
  }
56
+ /**
57
+ * One of the container's registered plugins, or null in a browser (and in a
58
+ * native build whose `capacitor.plugins.json` never listed it).
59
+ *
60
+ * Read off the `Capacitor` global rather than imported from `@capacitor/core`
61
+ * so the SDK stays installable in a plain React app — every consumer is a web
62
+ * build first and only some of them are also wrapped natively.
63
+ */
64
+ export function capacitorPlugin(name) {
65
+ const plugin = capacitorGlobal()?.Plugins?.[name];
66
+ return plugin ? plugin : null;
67
+ }
42
68
  /**
43
69
  * True inside a Capacitor container (iOS/Android), false in any browser.
44
70
  *
@@ -65,25 +91,33 @@ export function isNativeShell() {
65
91
  return protocol === 'capacitor:' || protocol === 'ionic:';
66
92
  }
67
93
  function suiteAuthPlugin() {
68
- const plugin = capacitorGlobal()?.Plugins?.UnisimSuiteAuth;
69
- return plugin ? plugin : null;
94
+ return capacitorPlugin('UnisimSuiteAuth');
70
95
  }
71
- /** True when this native build can reach the shared-Keychain plugin. */
72
- export function hasSharedKeychain() {
96
+ /**
97
+ * True when this native build can reach the shared-store plugin — an iOS
98
+ * Keychain group or an Android provider group, depending on the platform.
99
+ */
100
+ export function hasSharedSuiteStore() {
73
101
  return suiteAuthPlugin() !== null;
74
102
  }
103
+ /**
104
+ * @deprecated Named when iOS was the only native platform. Use
105
+ * {@link hasSharedSuiteStore} — on Android the shared store is not a Keychain
106
+ * at all. Kept so an older consumer does not break on an SDK bump.
107
+ */
108
+ export const hasSharedKeychain = hasSharedSuiteStore;
75
109
  function localStorageAdapter() {
76
110
  // `undefined` lets supabase-js install its own localStorage adapter, which
77
111
  // already handles the private-mode / storage-disabled throw.
78
112
  return undefined;
79
113
  }
80
114
  /**
81
- * Keychain-backed storage, shared across every suite app signed by the same
82
- * team. Async, which supabase-js supports.
115
+ * Plugin-backed storage, shared across every suite app signed by the same key.
116
+ * Async, which supabase-js supports.
83
117
  *
84
118
  * ⚠️ On a plugin ERROR this falls back to localStorage for that call, so a
85
- * Keychain hiccup degrades to an app-local session rather than signing the
86
- * user out. A plugin returning `null` is NOT an error — it means "no session
119
+ * hiccup in the shared store degrades to an app-local session rather than
120
+ * signing the user out. A plugin returning `null` is NOT an error — it means "no session
87
121
  * in the shared store", and must be reported as such, or a sign-out in one app
88
122
  * would never be seen by the others.
89
123
  */
@@ -93,7 +127,7 @@ export function createSharedKeychainStorage(plugin) {
93
127
  if (warned)
94
128
  return;
95
129
  warned = true;
96
- console.warn(`[unisim/sdk] shared Keychain ${op} failed; falling back to app-local storage. ` +
130
+ console.warn(`[unisim/sdk] shared suite store ${op} failed; falling back to app-local storage. ` +
97
131
  'Sign-in will not carry across the suite apps on this device.', err);
98
132
  };
99
133
  const local = {
@@ -220,7 +254,7 @@ export function chooseSessionStorage(cookieDomain) {
220
254
  const plugin = suiteAuthPlugin();
221
255
  if (plugin) {
222
256
  return {
223
- kind: 'shared-keychain',
257
+ kind: 'shared-native',
224
258
  storage: createSharedKeychainStorage(plugin),
225
259
  cookiesUsable: false,
226
260
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sessionStorage.js","sourceRoot":"","sources":["../src/sessionStorage.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kDAAkD;AAClD,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,0BAA0B;AAC1B,EAAE;AACF,mEAAmE;AACnE,4EAA4E;AAC5E,6EAA6E;AAC7E,uCAAuC;AACvC,EAAE;AACF,2EAA2E;AAC3E,yDAAyD;AACzD,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,iCAAiC;AACjC,EAAE;AACF,4EAA4E;AAC5E,gEAAgE;AAChE,2EAA2E;AAC3E,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,2EAA2E;AAC3E,0EAA0E;AAC1E,oCAAoC;AACpC,EAAE;AACF,+EAA+E;AAC/E,2EAA2E;AAC3E,0EAA0E;AAC1E,sBAAsB;AACtB,gFAAgF;AAoChF,SAAS,eAAe;IACtB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAA;IAC9C,MAAM,CAAC,GAAI,MAAqD,CAAC,SAAS,CAAA;IAC1E,OAAO,CAAC,IAAI,IAAI,CAAA;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,GAAG,eAAe,EAAE,CAAA;IAC3B,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;IACD,2EAA2E;IAC3E,qCAAqC;IACrC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAA;IAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC1C,OAAO,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,QAAQ,CAAA;AAC3D,CAAC;AAUD,SAAS,eAAe;IACtB,MAAM,MAAM,GAAG,eAAe,EAAE,EAAE,OAAO,EAAE,eAAe,CAAA;IAC1D,OAAO,MAAM,CAAC,CAAC,CAAE,MAAqC,CAAC,CAAC,CAAC,IAAI,CAAA;AAC/D,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,iBAAiB;IAC/B,OAAO,eAAe,EAAE,KAAK,IAAI,CAAA;AACnC,CAAC;AAED,SAAS,mBAAmB;IAC1B,2EAA2E;IAC3E,6DAA6D;IAC7D,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAuB;IACjE,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,GAAY,EAAE,EAAE;QACxC,IAAI,MAAM;YAAE,OAAM;QAClB,MAAM,GAAG,IAAI,CAAA;QACb,OAAO,CAAC,IAAI,CACV,gCAAgC,EAAE,8CAA8C;YAChF,8DAA8D,EAC9D,GAAG,CACJ,CAAA;IACH,CAAC,CAAA;IAED,MAAM,KAAK,GAAG;QACZ,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE;YACnB,IAAI,CAAC;gBAAC,OAAO,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,IAAI,CAAA;YAAC,CAAC;QACvE,CAAC;QACD,GAAG,EAAE,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE;YAClC,IAAI,CAAC;gBAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE;YACtB,IAAI,CAAC;gBAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC1E,CAAC;KACF,CAAA;IAED,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,GAAG;YACf,IAAI,CAAC;gBACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;gBAC3C,OAAO,KAAK,IAAI,IAAI,CAAA;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;gBACjB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK;YACtB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;YAClC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;gBAClB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,GAAG;YAClB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;YAC9B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;gBACnB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACnB,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,MAAM,MAAM,GACV,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAA;IAExE,OAAO;QACL,OAAO,CAAC,GAAW;YACjB,IAAI,OAAO,QAAQ,KAAK,WAAW;gBAAE,OAAO,IAAI,CAAA;YAChD,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;YACvC,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBAC9B,MAAM,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBACrD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;gBAClE,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,CAAC,GAAW,EAAE,KAAa;YAChC,IAAI,OAAO,QAAQ,KAAK,WAAW;gBAAE,OAAM;YAC3C,MAAM,KAAK,GAAG;gBACZ,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBACzD,QAAQ;gBACR,UAAU,MAAM,EAAE;gBAClB,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAG,SAAS;gBAC3C,cAAc;aACf,CAAA;YACD,IAAI,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAChC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpC,CAAC;QACD,UAAU,CAAC,GAAW;YACpB,IAAI,OAAO,QAAQ,KAAK,WAAW;gBAAE,OAAM;YAC3C,MAAM,KAAK,GAAG;gBACZ,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG;gBAC7B,QAAQ;gBACR,UAAU,MAAM,EAAE;gBAClB,WAAW;gBACX,cAAc;aACf,CAAA;YACD,IAAI,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAChC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpC,CAAC;KACF,CAAA;AACH,CAAC;AAkBD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAqB;IACxD,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;QAChC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,2BAA2B,CAAC,MAAM,CAAC;gBAC5C,aAAa,EAAE,KAAK;aACrB,CAAA;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAA;IACvF,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,mBAAmB,CAAC,YAAY,CAAC;YAC1C,aAAa,EAAE,IAAI;SACpB,CAAA;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAA;AAChF,CAAC"}
1
+ {"version":3,"file":"sessionStorage.js","sourceRoot":"","sources":["../src/sessionStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { SuiteProductId } from './SuiteSwitcher.js';
2
+ export interface SuiteNativeApp {
3
+ /** The switcher's product id — how a row finds its native twin. */
4
+ id: SuiteProductId;
5
+ /**
6
+ * The app's own custom URL scheme, without `://`. Derived from the id
7
+ * (`workplace_assess` → `unisim-workplace-assess`) because underscores are
8
+ * not legal in a URL scheme and hyphens are.
9
+ */
10
+ scheme: string;
11
+ /** iOS bundle identifier — the app's `appId` in its capacitor.config. */
12
+ iosBundleId: string;
13
+ /** Android application id. Usually the same string; Universal AI's is not. */
14
+ androidPackage: string;
15
+ }
16
+ /**
17
+ * Every suite product that has a native build, and only those.
18
+ *
19
+ * ⚠️ **Being in the switcher is not enough to be in here.** Ergo Assess, Exports
20
+ * and the rest are web-only; listing them would put a scheme nobody answers
21
+ * into thirteen Info.plists and mark rows "Installed" that can never be. A
22
+ * product missing from this list simply keeps today's behaviour — the https
23
+ * link — which is the correct answer for a product with no app.
24
+ *
25
+ * Universal Family has a native build and is deliberately absent for the same
26
+ * reason: it has no row in the switcher to open.
27
+ *
28
+ * Universal AI is listed, and is the one entry where the two platform ids
29
+ * differ: its Capacitor `appId` `com.universal-ai.app` is legal on iOS and
30
+ * illegal on Android (a hyphen cannot appear in a Java package), so its Android
31
+ * project was generated under `uk.co.unisim.ai`. Note it is also `comingSoon`
32
+ * in the switcher, so its row does not navigate and will not launch — the entry
33
+ * is here so that stops being true the moment the badge comes off.
34
+ */
35
+ export declare const SUITE_NATIVE_APPS: readonly SuiteNativeApp[];
36
+ export declare function suiteNativeApp(id: SuiteProductId): SuiteNativeApp | undefined;
37
+ /**
38
+ * Can this build ask the OS what is installed?
39
+ *
40
+ * False in every browser, and false in a native shell running against an older
41
+ * SDK whose plugin has no `installedApps` — so the switcher must treat it as
42
+ * "show exactly what the web shows", never as "nothing is installed". The
43
+ * difference matters: an empty answer draws no badges either, but it is a
44
+ * finding, and this is not.
45
+ */
46
+ export declare function canProbeSuiteApps(): boolean;
47
+ /**
48
+ * The subset of {@link SUITE_NATIVE_APPS} installed on this device, by product
49
+ * id. Empty in a browser.
50
+ *
51
+ * Cached, because the answer costs a bridge round trip and a package-manager
52
+ * scan and the menu opens often. Invalidated on resume rather than on a timer:
53
+ * the only way the answer changes is the user leaving to install or delete
54
+ * something, and they cannot do that without backgrounding this app first.
55
+ */
56
+ export declare function installedSuiteApps(): Promise<ReadonlySet<string>>;
57
+ /** Drop the cached probe. Exported for tests. */
58
+ export declare function resetInstalledSuiteApps(): void;
59
+ /**
60
+ * Bring the installed app for `id` to the front. Resolves false when there is
61
+ * nothing to open — no native build, not installed, no bridge, or the OS
62
+ * refused — and the caller is expected to fall back to the https link on false
63
+ * rather than leaving the tap dead.
64
+ */
65
+ export declare function openSuiteApp(id: SuiteProductId): Promise<boolean>;
66
+ //# sourceMappingURL=suiteApps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suiteApps.d.ts","sourceRoot":"","sources":["../src/suiteApps.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,EAAE,EAAE,cAAc,CAAA;IAClB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAA;IACnB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EActD,CAAA;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,cAAc,GAAG,SAAS,CAE7E;AA2BD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAOD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAkBjE;AAUD,iDAAiD;AACjD,wBAAgB,uBAAuB,SAEtC;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAWvE"}
@@ -0,0 +1,168 @@
1
+ // ──────────────────────────────────────────────────────────────────────────────
2
+ // Which suite apps are installed on THIS device, and how to open one.
3
+ //
4
+ // The suite switcher lists every product as an https link, which is right on
5
+ // the web and wrong on a phone: a user who has Universal PDF installed taps
6
+ // "Universal PDF" in Universal Images and gets the website, inside the webview
7
+ // they were already in. This module is what lets the switcher hand off to the
8
+ // real app instead, and mark the rows it can hand off to.
9
+ //
10
+ // ⚠️ **An https URL cannot do this.** A Capacitor app runs its own webview, and
11
+ // a WKWebView does NOT honour universal links for navigation that happens
12
+ // inside it — the link resolves as a page load, not as a handoff, no matter how
13
+ // the associated domains are configured. Opening a sibling app needs the
14
+ // platform's own app-to-app channel: a custom URL scheme on iOS, a launch
15
+ // intent on Android. Hence the registry below.
16
+ //
17
+ // The two platforms need different things and fail differently:
18
+ //
19
+ // • **iOS** matches on SCHEME, and `canOpenURL` answers `false` — with only a
20
+ // console line to say why — for any scheme the CALLING app has not listed
21
+ // in its own `LSApplicationQueriesSchemes`. So every app needs every other
22
+ // app's scheme in its Info.plist. `scripts/sync-native-app-links.mjs`
23
+ // writes that from this file; nobody should be hand-editing the lists.
24
+ //
25
+ // • **Android** matches on PACKAGE, and needs no per-app change at all: the
26
+ // `<queries>` block in the SDK's own AndroidManifest.xml is merged into
27
+ // every consumer, so adding an app here plus one line there is the whole
28
+ // job. Same silent failure though — an undeclared package does not exist
29
+ // to `getLaunchIntentForPackage` on API 30+.
30
+ //
31
+ // Both lists are therefore copies of this one, in formats that cannot import
32
+ // it. That is the thing to distrust: see `tests/suite-apps.mjs`, which fails if
33
+ // they drift.
34
+ // ──────────────────────────────────────────────────────────────────────────────
35
+ import { isNativeShell, capacitorPlugin } from './sessionStorage.js';
36
+ /**
37
+ * Every suite product that has a native build, and only those.
38
+ *
39
+ * ⚠️ **Being in the switcher is not enough to be in here.** Ergo Assess, Exports
40
+ * and the rest are web-only; listing them would put a scheme nobody answers
41
+ * into thirteen Info.plists and mark rows "Installed" that can never be. A
42
+ * product missing from this list simply keeps today's behaviour — the https
43
+ * link — which is the correct answer for a product with no app.
44
+ *
45
+ * Universal Family has a native build and is deliberately absent for the same
46
+ * reason: it has no row in the switcher to open.
47
+ *
48
+ * Universal AI is listed, and is the one entry where the two platform ids
49
+ * differ: its Capacitor `appId` `com.universal-ai.app` is legal on iOS and
50
+ * illegal on Android (a hyphen cannot appear in a Java package), so its Android
51
+ * project was generated under `uk.co.unisim.ai`. Note it is also `comingSoon`
52
+ * in the switcher, so its row does not navigate and will not launch — the entry
53
+ * is here so that stops being true the moment the badge comes off.
54
+ */
55
+ export const SUITE_NATIVE_APPS = [
56
+ { id: 'cyber_assess', scheme: 'unisim-cyber-assess', iosBundleId: 'uk.co.unisim.cyberassess', androidPackage: 'uk.co.unisim.cyberassess' },
57
+ { id: 'workplace_assess', scheme: 'unisim-workplace-assess', iosBundleId: 'uk.co.unisim.wfhassess', androidPackage: 'uk.co.unisim.wfhassess' },
58
+ { id: 'fire_assess', scheme: 'unisim-fire-assess', iosBundleId: 'uk.co.unisim.fireassess', androidPackage: 'uk.co.unisim.fireassess' },
59
+ { id: 'coshh_assess', scheme: 'unisim-coshh-assess', iosBundleId: 'uk.co.unisim.coshhassess', androidPackage: 'uk.co.unisim.coshhassess' },
60
+ { id: 'risk_assess', scheme: 'unisim-risk-assess', iosBundleId: 'uk.co.unisim.riskassess', androidPackage: 'uk.co.unisim.riskassess' },
61
+ { id: 'pdf', scheme: 'unisim-pdf', iosBundleId: 'uk.co.unisim.pdf', androidPackage: 'uk.co.unisim.pdf' },
62
+ { id: 'images', scheme: 'unisim-images', iosBundleId: 'uk.co.unisim.images', androidPackage: 'uk.co.unisim.images' },
63
+ { id: 'qr', scheme: 'unisim-qr', iosBundleId: 'uk.co.unisim.qr', androidPackage: 'uk.co.unisim.qr' },
64
+ { id: 'compress', scheme: 'unisim-compress', iosBundleId: 'uk.co.unisim.compress', androidPackage: 'uk.co.unisim.compress' },
65
+ { id: 'converter', scheme: 'unisim-converter', iosBundleId: 'uk.co.unisim.converter', androidPackage: 'uk.co.unisim.converter' },
66
+ { id: 'polling', scheme: 'unisim-polling', iosBundleId: 'uk.co.unisim.polling', androidPackage: 'uk.co.unisim.polling' },
67
+ { id: 'blackbook', scheme: 'unisim-blackbook', iosBundleId: 'uk.co.unisim.blackbook', androidPackage: 'uk.co.unisim.blackbook' },
68
+ { id: 'ai', scheme: 'unisim-ai', iosBundleId: 'com.universal-ai.app', androidPackage: 'uk.co.unisim.ai' },
69
+ ];
70
+ export function suiteNativeApp(id) {
71
+ return SUITE_NATIVE_APPS.find((a) => a.id === id);
72
+ }
73
+ /**
74
+ * ⚠️ These methods hang off `UnisimSuiteAuth` — the session-store plugin —
75
+ * rather than a launcher plugin of their own, and that is a deliberate trade of
76
+ * a tidy name for a failure mode we can see.
77
+ *
78
+ * Capacitor resolves Android plugins through `capacitor.plugins.json`, which is
79
+ * generated by `npx cap sync` and COMMITTED in each app. A new plugin class
80
+ * would be invisible in every app until each one re-synced, and invisible is
81
+ * exactly how it would present: no error, no launch, just the web link again in
82
+ * some apps and not others. Adding methods to a class that is already in all
83
+ * thirteen files cannot go wrong that way.
84
+ */
85
+ function suiteAppsPlugin() {
86
+ const plugin = capacitorPlugin('UnisimSuiteAuth');
87
+ if (!plugin || typeof plugin.installedApps !== 'function')
88
+ return null;
89
+ return plugin;
90
+ }
91
+ /**
92
+ * Can this build ask the OS what is installed?
93
+ *
94
+ * False in every browser, and false in a native shell running against an older
95
+ * SDK whose plugin has no `installedApps` — so the switcher must treat it as
96
+ * "show exactly what the web shows", never as "nothing is installed". The
97
+ * difference matters: an empty answer draws no badges either, but it is a
98
+ * finding, and this is not.
99
+ */
100
+ export function canProbeSuiteApps() {
101
+ return isNativeShell() && suiteAppsPlugin() !== null;
102
+ }
103
+ const NONE = new Set();
104
+ let probe = null;
105
+ let resumeHooked = false;
106
+ /**
107
+ * The subset of {@link SUITE_NATIVE_APPS} installed on this device, by product
108
+ * id. Empty in a browser.
109
+ *
110
+ * Cached, because the answer costs a bridge round trip and a package-manager
111
+ * scan and the menu opens often. Invalidated on resume rather than on a timer:
112
+ * the only way the answer changes is the user leaving to install or delete
113
+ * something, and they cannot do that without backgrounding this app first.
114
+ */
115
+ export function installedSuiteApps() {
116
+ if (probe)
117
+ return probe;
118
+ const plugin = suiteAppsPlugin();
119
+ if (!plugin || !isNativeShell())
120
+ return Promise.resolve(NONE);
121
+ hookResume();
122
+ probe = plugin
123
+ .installedApps({ apps: [...SUITE_NATIVE_APPS] })
124
+ .then((r) => new Set(r?.installed ?? []))
125
+ .catch((err) => {
126
+ // Degrade to the web behaviour rather than to an empty menu. Nothing the
127
+ // user sees is wrong afterwards — the rows still navigate — so this is a
128
+ // console line, not a UI state.
129
+ console.warn('[unisim/sdk] could not check which suite apps are installed', err);
130
+ probe = null;
131
+ return NONE;
132
+ });
133
+ return probe;
134
+ }
135
+ function hookResume() {
136
+ if (resumeHooked || typeof document === 'undefined')
137
+ return;
138
+ resumeHooked = true;
139
+ document.addEventListener('visibilitychange', () => {
140
+ if (document.visibilityState === 'visible')
141
+ probe = null;
142
+ });
143
+ }
144
+ /** Drop the cached probe. Exported for tests. */
145
+ export function resetInstalledSuiteApps() {
146
+ probe = null;
147
+ }
148
+ /**
149
+ * Bring the installed app for `id` to the front. Resolves false when there is
150
+ * nothing to open — no native build, not installed, no bridge, or the OS
151
+ * refused — and the caller is expected to fall back to the https link on false
152
+ * rather than leaving the tap dead.
153
+ */
154
+ export async function openSuiteApp(id) {
155
+ const app = suiteNativeApp(id);
156
+ const plugin = suiteAppsPlugin();
157
+ if (!app || !plugin || !isNativeShell())
158
+ return false;
159
+ try {
160
+ const { opened } = await plugin.openApp(app);
161
+ return opened === true;
162
+ }
163
+ catch (err) {
164
+ console.warn(`[unisim/sdk] could not open ${app.id}`, err);
165
+ return false;
166
+ }
167
+ }
168
+ //# sourceMappingURL=suiteApps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suiteApps.js","sourceRoot":"","sources":["../src/suiteApps.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -166,7 +166,7 @@ export interface SeatPool {
166
166
  * note the changelog validates at runtime against JSON, so a mismatch here
167
167
  * surfaces as a mis-labelled entry rather than a build failure.
168
168
  */
169
- export type ChangelogProduct = ProductCode | 'suite' | 'haptics';
169
+ export type ChangelogProduct = ProductCode | 'suite' | 'haptics' | 'family';
170
170
  export interface ChangelogEntry {
171
171
  product: ChangelogProduct;
172
172
  type: 'added' | 'changed' | 'fixed' | 'removed' | 'deprecated' | 'security';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}