@expofp/schema 3.21.1 → 3.23.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.
@@ -78,6 +78,8 @@ export declare const ConfigDefaults: {
78
78
  enableRotation: false;
79
79
  alwaysShowSidebar: false;
80
80
  customKioskQrCodeUrl: string;
81
+ /** No provider configured; see the field's note in `config.ts` for why not `''`. */
82
+ mobileLocationProvider: null;
81
83
  /**
82
84
  * Deliberately undefined rather than `false`: the flag is tri-state. Unset
83
85
  * lets the drawing decide (`__fpGeo.properties.config.type === 'maplibre'`),
@@ -84,6 +84,8 @@ export const ConfigDefaults = {
84
84
  enableRotation: false,
85
85
  alwaysShowSidebar: false,
86
86
  customKioskQrCodeUrl: '',
87
+ /** No provider configured; see the field's note in `config.ts` for why not `''`. */
88
+ mobileLocationProvider: null,
87
89
  // flags (deprecated nested `flags` flattened to root)
88
90
  /**
89
91
  * Deliberately undefined rather than `false`: the flag is tri-state. Unset
@@ -306,6 +306,7 @@ export declare const ConfigSchema: z.ZodObject<{
306
306
  enableRotation: z.ZodBoolean;
307
307
  alwaysShowSidebar: z.ZodBoolean;
308
308
  customKioskQrCodeUrl: z.ZodString;
309
+ mobileLocationProvider: z.ZodNullable<z.ZodString>;
309
310
  debugMode: z.ZodBoolean;
310
311
  debugPattern: z.ZodString;
311
312
  showDebugButton: z.ZodBoolean;
@@ -667,6 +668,7 @@ export declare const DataSchema: z.ZodObject<{
667
668
  enableRotation: z.ZodOptional<z.ZodBoolean>;
668
669
  alwaysShowSidebar: z.ZodOptional<z.ZodBoolean>;
669
670
  customKioskQrCodeUrl: z.ZodOptional<z.ZodString>;
671
+ mobileLocationProvider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
670
672
  debugMode: z.ZodOptional<z.ZodBoolean>;
671
673
  debugPattern: z.ZodOptional<z.ZodString>;
672
674
  showDebugButton: z.ZodOptional<z.ZodBoolean>;
@@ -1039,6 +1041,7 @@ export declare const DataJsSchema: z.ZodObject<{
1039
1041
  enableRotation: z.ZodOptional<z.ZodBoolean>;
1040
1042
  alwaysShowSidebar: z.ZodOptional<z.ZodBoolean>;
1041
1043
  customKioskQrCodeUrl: z.ZodOptional<z.ZodString>;
1044
+ mobileLocationProvider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1042
1045
  debugMode: z.ZodOptional<z.ZodBoolean>;
1043
1046
  debugPattern: z.ZodOptional<z.ZodString>;
1044
1047
  showDebugButton: z.ZodOptional<z.ZodBoolean>;
@@ -1405,6 +1408,7 @@ export declare const ManifestSchema: z.ZodObject<{
1405
1408
  enableRotation: z.ZodOptional<z.ZodBoolean>;
1406
1409
  alwaysShowSidebar: z.ZodOptional<z.ZodBoolean>;
1407
1410
  customKioskQrCodeUrl: z.ZodOptional<z.ZodString>;
1411
+ mobileLocationProvider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1408
1412
  debugMode: z.ZodOptional<z.ZodBoolean>;
1409
1413
  debugPattern: z.ZodOptional<z.ZodString>;
1410
1414
  showDebugButton: z.ZodOptional<z.ZodBoolean>;
@@ -1597,7 +1601,6 @@ export declare const UrlConfigSchema: z.ZodObject<{
1597
1601
  lng: z.ZodOptional<z.ZodNumber>;
1598
1602
  }, z.core.$strip>, z.ZodBoolean, z.ZodOptional<z.ZodNumber>], null>;
1599
1603
  }, z.core.$strip>], "name">>>;
1600
- noOverlay: z.ZodOptional<z.ZodBoolean>;
1601
1604
  consent: z.ZodOptional<z.ZodEnum<{
1602
1605
  ask: "ask";
1603
1606
  denied: "denied";
@@ -1660,7 +1663,6 @@ export declare const UrlConfigSchema: z.ZodObject<{
1660
1663
  mapBearingDegrees: z.ZodOptional<z.ZodNumber>;
1661
1664
  mapPitchDegrees: z.ZodOptional<z.ZodNumber>;
1662
1665
  }, z.core.$strip>>;
1663
- allowConsent: z.ZodOptional<z.ZodBoolean>;
1664
1666
  validateSchema: z.ZodOptional<z.ZodBoolean>;
1665
1667
  }, z.core.$strip>;
1666
1668
  /**
@@ -124,6 +124,13 @@ export const ConfigSchema = z.object({
124
124
  enableRotation: z.boolean(),
125
125
  alwaysShowSidebar: z.boolean(),
126
126
  customKioskQrCodeUrl: z.string(),
127
+ /**
128
+ * Indoor-positioning provider for the native SDKs, opaque web-side:
129
+ * `<provider>.<version>.<base64url credentials>`, e.g.
130
+ * `indooratlas.1.SGVsbG8gV29ybGQh`. `null` (the default) means none — not
131
+ * `''`, so the native bridge sees Kotlin `null` / Swift `nil`.
132
+ */
133
+ mobileLocationProvider: z.string().nullable(),
127
134
  ...FlagsSchema.shape,
128
135
  // user preferences
129
136
  /** Debug mode: verbose logs, the in-map debug overlay, dev-leniency in error paths. */
@@ -156,17 +163,17 @@ export const ConfigSchema = z.object({
156
163
  disableGps: z.boolean(),
157
164
  /**
158
165
  * The initial camera, applied once at boot (an empty object means "don't
159
- * move"). The runtime counterpart is `FloorPlan.setCamera` / the `setCamera`
160
- * intent; the legacy `?centerxy=`/`?center=`/`?z=`/`?bearing=`/`?zoomtime=`
161
- * URL params translate into this shape.
166
+ * move"). The URL form is `?camera[x]=…`; the runtime counterpart is
167
+ * `FloorPlan.setCamera` / the `setCamera` intent.
162
168
  */
163
169
  camera: CameraSchema,
164
170
  /**
165
- * Visibility of the map chrome, applied once at boot (an empty object leaves
166
- * the chrome untouched; a non-empty one resets every omitted element to
167
- * visible — the legacy `?hide=` list semantics). The runtime counterpart is
168
- * `FloorPlan.setVisibility` / the `setVisibility` intent; the legacy
169
- * `?hide=a,b` deep link keeps its store-level translation.
171
+ * Visibility of the map chrome, applied once at boot. An empty object leaves
172
+ * the chrome untouched; a non-empty one REBUILDS the set — every element it
173
+ * omits resets to visible — so a URL that hides one element must list every
174
+ * other element it also wants hidden. The URL form is
175
+ * `?visibility[header]=false`; the runtime counterpart is
176
+ * `FloorPlan.setVisibility` / the `setVisibility` intent.
170
177
  */
171
178
  visibility: VisibilitySchema,
172
179
  /**
@@ -193,16 +200,19 @@ export const ConfigSchema = z.object({
193
200
  * The kiosk anchor — where a kiosk device stands and how its camera is
194
201
  * framed, applied at boot when the device has no locally-saved kiosk (the
195
202
  * on-device SetKiosk flow wins; `localStorage['kiosk']='0'` disables both).
196
- * Canonical URL form `?kiosk[x]=…`; the legacy `kiosk_*` params stay the
197
- * per-navigation translation and `?kiosk=1/0` keeps toggling kiosk mode.
203
+ * Canonical URL form `?kiosk[x]=…`, and `?kiosk=1/0` keeps toggling kiosk
204
+ * mode. The legacy `kiosk_x/y/z` params are a separate, narrower channel:
205
+ * they carry the anchor POSITION to a phone scanning a kiosk's route QR
206
+ * code, and put that phone in no kiosk mode of its own.
198
207
  */
199
208
  kiosk: KioskSchema,
200
209
  });
201
210
  /**
202
- * Deprecated `allowConsent` input alias, accepted by every input schema and
203
- * folded into `consent` by `loadConfig` (`true` → `'granted'`, `false` →
204
- * `'denied'`; a layer's own `consent` wins). The effective config never
205
- * carries it.
211
+ * Deprecated `allowConsent` input alias, accepted by the data and options input
212
+ * schemas and folded into `consent` by `loadConfig` (`true` → `'granted'`,
213
+ * `false` → `'denied'`; a layer's own `consent` wins). The effective config
214
+ * never carries it. RETIRED from the URL query — `?consent=` is the only query
215
+ * form (see `retiredKeys` in `@expofp/config`'s legacy-url codec).
206
216
  */
207
217
  const DeprecatedConsentAlias = {
208
218
  allowConsent: z.boolean().optional(),
@@ -292,8 +302,9 @@ export const UrlConfigSchema = ConfigSchema.partial()
292
302
  intents: true,
293
303
  consent: true,
294
304
  // the former one-shot presentation params — the query keys keep their
295
- // historical names, which match these field names exactly
296
- noOverlay: true,
305
+ // historical names, which match these field names exactly. `noOverlay` is
306
+ // NOT among them: the overlay is addressed by `?visibility[overlay]=false`
307
+ // from the URL, the field stays a manifest/options setting
297
308
  monochrome: true,
298
309
  hideHeaderLogo: true,
299
310
  hideLogoInBooth: true,
@@ -317,7 +328,6 @@ export const UrlConfigSchema = ConfigSchema.partial()
317
328
  // drops out of the tolerant parse and keeps its params-based primary
318
329
  kiosk: true,
319
330
  })
320
- .extend(DeprecatedConsentAlias)
321
331
  .extend(LoadDiagnostics);
322
332
  /**
323
333
  * The subset persisted per-user in localStorage.
@@ -4,10 +4,16 @@ import * as z from 'zod';
4
4
  * stands and how its camera is framed. Applied at boot when the device has no
5
5
  * locally-saved kiosk (the on-device SetKiosk flow persists to localStorage
6
6
  * and wins over the config; the `localStorage['kiosk']='0'` device switch
7
- * disables both). The legacy `kiosk_*` URL params stay the per-navigation
8
- * translation of this same shape (QR-shared routes smuggle the anchor through
9
- * them), and `?kiosk=1/0` keeps toggling kiosk MODE — the mode and the anchor
10
- * are independent inputs.
7
+ * disables both). `?kiosk=1/0` keeps toggling kiosk MODE — the mode and the
8
+ * anchor are independent inputs.
9
+ *
10
+ * The legacy `kiosk_x/y/z` params are a narrower, per-navigation channel for
11
+ * one purpose: a kiosk's route QR code hands the scanning phone the anchor
12
+ * POSITION so the route's missing starting point resolves there. The framing
13
+ * fields below travel only in this node, never through those params. Note that
14
+ * the scanning phone does end up in kiosk mode and stays there — a pre-existing
15
+ * quirk of how the anchor is stored, not an intended property of the channel;
16
+ * `packages/floorplan/src/components/Kiosk/kioskUrlParam.ts` traces it.
11
17
  */
12
18
  export declare const KioskSchema: z.ZodObject<{
13
19
  x: z.ZodOptional<z.ZodNumber>;
package/dist/lib/kiosk.js CHANGED
@@ -4,10 +4,16 @@ import * as z from 'zod';
4
4
  * stands and how its camera is framed. Applied at boot when the device has no
5
5
  * locally-saved kiosk (the on-device SetKiosk flow persists to localStorage
6
6
  * and wins over the config; the `localStorage['kiosk']='0'` device switch
7
- * disables both). The legacy `kiosk_*` URL params stay the per-navigation
8
- * translation of this same shape (QR-shared routes smuggle the anchor through
9
- * them), and `?kiosk=1/0` keeps toggling kiosk MODE — the mode and the anchor
10
- * are independent inputs.
7
+ * disables both). `?kiosk=1/0` keeps toggling kiosk MODE — the mode and the
8
+ * anchor are independent inputs.
9
+ *
10
+ * The legacy `kiosk_x/y/z` params are a narrower, per-navigation channel for
11
+ * one purpose: a kiosk's route QR code hands the scanning phone the anchor
12
+ * POSITION so the route's missing starting point resolves there. The framing
13
+ * fields below travel only in this node, never through those params. Note that
14
+ * the scanning phone does end up in kiosk mode and stays there — a pre-existing
15
+ * quirk of how the anchor is stored, not an intended property of the channel;
16
+ * `packages/floorplan/src/components/Kiosk/kioskUrlParam.ts` traces it.
11
17
  */
12
18
  export const KioskSchema = z.object({
13
19
  /** Anchor x in plan coordinates. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expofp/schema",
3
- "version": "3.21.1",
3
+ "version": "3.23.0",
4
4
  "type": "module",
5
5
  "description": "ExpoFP SDK internal: expo data schemas and types",
6
6
  "homepage": "https://developer.expofp.com/",
@@ -25,7 +25,7 @@
25
25
  "zod": "4.4.3"
26
26
  },
27
27
  "devDependencies": {
28
- "@expofp/utils": "3.21.1"
28
+ "@expofp/utils": "3.23.0"
29
29
  },
30
30
  "files": [
31
31
  "dist",