@mentra/engine 3.2.0-dev.187 → 3.2.0-dev.191
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/build/engine.d.ts.map +1 -1
- package/build/facades/dev.d.ts.map +1 -1
- package/build/facades/dev.js +30 -0
- package/build/facades/dev.js.map +1 -1
- package/build/generated/releaseMetadata.js +5 -5
- package/build/generated/releaseMetadata.js.map +1 -1
- package/build/runtime/bootstrap.d.ts +9 -0
- package/build/runtime/bootstrap.d.ts.map +1 -1
- package/build/runtime/bootstrap.js.map +1 -1
- package/build/services/CloudClientService.d.ts +1 -1
- package/build/services/CloudClientService.d.ts.map +1 -1
- package/build/services/CloudClientService.js +3 -17
- package/build/services/CloudClientService.js.map +1 -1
- package/build/services/cloudEndpointPolicy.d.ts +19 -0
- package/build/services/cloudEndpointPolicy.d.ts.map +1 -0
- package/build/services/cloudEndpointPolicy.js +20 -0
- package/build/services/cloudEndpointPolicy.js.map +1 -0
- package/build/services/otaManifestPolicy.js +1 -1
- package/build/services/otaManifestPolicy.js.map +1 -1
- package/build/services/otaManifestUrl.d.ts.map +1 -1
- package/build/services/otaManifestUrl.js +2 -1
- package/build/services/otaManifestUrl.js.map +1 -1
- package/build/stores/settings.d.ts.map +1 -1
- package/build/stores/settings.js +16 -5
- package/build/stores/settings.js.map +1 -1
- package/package.json +7 -7
- package/src/facades/dev.ts +32 -0
- package/src/generated/releaseMetadata.ts +5 -5
- package/src/runtime/bootstrap.ts +6 -0
- package/src/services/CloudClientService.ts +3 -15
- package/src/services/cloudEndpointPolicy.ts +25 -0
- package/src/services/otaManifestPolicy.ts +1 -1
- package/src/services/otaManifestUrl.ts +2 -1
- package/src/stores/settings.ts +15 -6
package/build/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,SAAS,EAIT,aAAa,EACd,MAAM,qBAAqB,CAAA;AAuC5B,eAAO,MAAM,MAAM;IACjB,2EAA2E;;IAE3E,8EAA8E;;IAE9E;iDAC6C;;IAkF7C;;yCAEqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BrC,mFAAmF;;;;;;;;IAEnF,sEAAsE;;;;;;;;;;;;IAEtE,qFAAqF;;;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,SAAS,EAIT,aAAa,EACd,MAAM,qBAAqB,CAAA;AAuC5B,eAAO,MAAM,MAAM;IACjB,2EAA2E;;IAE3E,8EAA8E;;IAE9E;iDAC6C;;IAkF7C;;yCAEqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BrC,mFAAmF;;;;;;;;IAEnF,sEAAsE;;;;;;;;;;;;IAEtE,qFAAqF;;;gBAhGhF,CAAA;mBAAiB,CAAC;;;gBAIwC,CAAC;mBAQ9D,CAPA;;;;;;;;;;;;;;;;IA6FF,qEAAqE;;;;IAErE,sFAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEtF,6EAA6E;;;;;;;;;;;;IAE7E,iFAAiF;;;;;;;;;;;;;;;;;;;IAEjF,8CAA8C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAE9C,uDAAuD;;;;;;;;;;;;;;;;;;;IAEvD,8EAA8E;;;;;;;IAE9E,qFAAqF;;;;;;;;;;;;;;CAGtF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/facades/dev.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/facades/dev.ts"],"names":[],"mappings":"AAqEA,iBAAS,oBAAoB;;;;;;;;;;;EAkB5B;AAED,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAE9E,eAAO,MAAM,GAAG;IACd,+CAA+C;qBAChC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAC;IAIhD,0EAA0E;yBACrD;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAC;IA4CtD,8EAA8E;0BAC1D,IAAI;IAExB,iFAAiF;uBAChE,MAAM;IACvB;;;OAGG;2BACkB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAK5C;;;;;;;;;OASG;0BAEI,MAAM,SACJ,MAAM,KACZ,OAAO,CAAC;QAAC,EAAE,EAAE,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG;QAAC,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IAyCtF,qEAAqE;yBAClD,wBAAwB;IAE3C,gFAAgF;0BAC1D,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC;CAmBhF,CAAA"}
|
package/build/facades/dev.js
CHANGED
|
@@ -19,12 +19,18 @@ import { getConfigValues } from "../runtime/bootstrap";
|
|
|
19
19
|
import { decideDevLaunchRoute } from "../utils/devMiniappLaunch";
|
|
20
20
|
import { registerDevApp, DEV_APP_PACKAGE_NAME } from "../services/AppRegistry";
|
|
21
21
|
import { useAppStatusStore } from "../stores/apps";
|
|
22
|
+
import { scopeCloudUrlOverrides } from "../services/cloudEndpointPolicy";
|
|
22
23
|
/**
|
|
23
24
|
* Reconnect the cloud client onto the current cloud-URL overrides. Explicit
|
|
24
25
|
* partial overrides merge over the boot-resolved config (which carries the
|
|
25
26
|
* host's Metro/env URL resolution); both empty clears the live override.
|
|
26
27
|
*/
|
|
27
28
|
function applyCloudUrlReconnect(urls = currentCloudUrlOverrides()) {
|
|
29
|
+
const hostResolver = getConfigValues().resolveCloudEndpoints;
|
|
30
|
+
if (hostResolver) {
|
|
31
|
+
cloudClientService.reconnect(null);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
28
34
|
const resolved = resolveCloudUrlReconnectTarget(urls);
|
|
29
35
|
if (resolved === undefined) {
|
|
30
36
|
cloudClientService.reconnect(null);
|
|
@@ -83,6 +89,30 @@ export const dev = {
|
|
|
83
89
|
},
|
|
84
90
|
/** Override the cloud-v2 URLs and reconnect the live client onto them. */
|
|
85
91
|
setCloudUrls: (urls) => {
|
|
92
|
+
const config = getConfigValues();
|
|
93
|
+
if (config.resolveCloudEndpoints) {
|
|
94
|
+
const scope = config.cloudDebugScope ?? "";
|
|
95
|
+
const scoped = scopeCloudUrlOverrides({
|
|
96
|
+
scope: useSettingsStore.getState().getSetting(SETTINGS.cloud_url_deployment.key),
|
|
97
|
+
...currentCloudUrlOverrides(),
|
|
98
|
+
}, scope, urls);
|
|
99
|
+
const values = {
|
|
100
|
+
[SETTINGS.cloud_url_deployment.key]: scope,
|
|
101
|
+
[SETTINGS.cloud_core_url.key]: scoped.core,
|
|
102
|
+
[SETTINGS.cloud_runtime_url.key]: scoped.runtime,
|
|
103
|
+
[SETTINGS.cached_required_version.key]: "",
|
|
104
|
+
};
|
|
105
|
+
void useSettingsStore
|
|
106
|
+
.getState()
|
|
107
|
+
.setManyLocally(values)
|
|
108
|
+
.then((result) => {
|
|
109
|
+
if (result.is_error())
|
|
110
|
+
console.error("engine.dev.setCloudUrls: could not save URLs", result.error);
|
|
111
|
+
else
|
|
112
|
+
applyCloudUrlReconnect();
|
|
113
|
+
});
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
86
116
|
const next = { ...currentCloudUrlOverrides(), ...urls };
|
|
87
117
|
const resolved = resolveCloudUrlReconnectTarget(next);
|
|
88
118
|
if (resolved === null) {
|
package/build/facades/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/facades/dev.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * dev facade — `engine.dev`: developer/debug surface over engine-owned state.\n * Backend/cloud URL overrides read+write the engine settings store; the cloud\n * URL setters reconnect the engine-owned cloud client onto the new endpoints;\n *\n * NOTE: the dev-time endpoint *resolution* (Metro-host auto-detect, env defaults)\n * still lives host-side in `@/services/cloudClient` during the migration; this\n * facade manages the explicit overrides + reconnect.\n */\nimport BluetoothSdk from \"@mentra/bluetooth-sdk/internal\"\nimport {isGlassesReady} from \"../services/GlassesReadiness\"\nimport {useCloudClientStatusStore} from \"../stores/cloudClientStatus\"\nimport {useConnectionStore} from \"../stores/connection\"\nimport {useCoreStore} from \"../stores/core\"\nimport {useGlassesStore} from \"../stores/glasses\"\nimport {useSettingsStore, SETTINGS} from \"../stores/settings\"\nimport {cloudClientService} from \"../services/CloudClientService\"\nimport {getConfigValues} from \"../runtime/bootstrap\"\nimport {decideDevLaunchRoute} from \"../utils/devMiniappLaunch\"\nimport {registerDevApp, DEV_APP_PACKAGE_NAME, type DevAppRecord} from \"../services/AppRegistry\"\nimport {useAppStatusStore} from \"../stores/apps\"\n\ntype CloudUrlOverrides = {core?: string; runtime?: string}\n\n/**\n * Reconnect the cloud client onto the current cloud-URL overrides. Explicit\n * partial overrides merge over the boot-resolved config (which carries the\n * host's Metro/env URL resolution); both empty clears the live override.\n */\nfunction applyCloudUrlReconnect(urls: CloudUrlOverrides = currentCloudUrlOverrides()): void {\n const resolved = resolveCloudUrlReconnectTarget(urls)\n if (resolved === undefined) {\n cloudClientService.reconnect(null)\n } else if (resolved) {\n cloudClientService.reconnect(resolved)\n } else {\n console.warn(\"engine.dev.setCloudUrls: partial cloud override missing boot-resolved sibling endpoint\")\n }\n}\n\nfunction currentCloudUrlOverrides(): CloudUrlOverrides {\n const s = useSettingsStore.getState()\n return {\n core: trimSetting(s.getSetting(SETTINGS.cloud_core_url.key)),\n runtime: trimSetting(s.getSetting(SETTINGS.cloud_runtime_url.key)),\n }\n}\n\nfunction resolveCloudUrlReconnectTarget(urls: CloudUrlOverrides): {core: string; runtime: string} | null | undefined {\n const core = trimSetting(urls.core)\n const runtime = trimSetting(urls.runtime)\n if (!core && !runtime) return undefined\n\n const config = getConfigValues()\n const resolvedCore = core || config.coreUrl?.trim()\n const resolvedRuntime = runtime || config.runtimeUrl?.trim()\n return resolvedCore && resolvedRuntime ? {core: resolvedCore, runtime: resolvedRuntime} : null\n}\n\nfunction trimSetting(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined\n}\n\nfunction projectRuntimeStatus() {\n const core = useCoreStore.getState()\n const glasses = useGlassesStore.getState()\n const connection = useConnectionStore.getState()\n const cloudClient = useCloudClientStatusStore.getState()\n return {\n searching: core.searching,\n // Copy: the snapshot must not hand callers a mutable reference into the store.\n micRanking: [...core.micRanking],\n currentMic: core.currentMic,\n systemMicUnavailable: core.systemMicUnavailable,\n glassesConnected: glasses.connection.state === \"connected\",\n glassesFullyBooted: isGlassesReady(glasses.connection),\n bluetoothClassicConnected: glasses.bluetoothClassicConnected,\n coreStatus: connection.status,\n cloudClientStatus: cloudClient.status,\n cloudClientAudioTransport: cloudClient.audioTransport,\n }\n}\n\nexport type DevRuntimeStatusSnapshot = ReturnType<typeof projectRuntimeStatus>\n\nexport const dev = {\n /** The cloud-v2 core/runtime URL overrides. */\n cloudUrls: (): {core?: string; runtime?: string} => {\n const s = useSettingsStore.getState()\n return {core: s.getSetting(SETTINGS.cloud_core_url.key), runtime: s.getSetting(SETTINGS.cloud_runtime_url.key)}\n },\n /** Override the cloud-v2 URLs and reconnect the live client onto them. */\n setCloudUrls: (urls: {core?: string; runtime?: string}) => {\n const next = {...currentCloudUrlOverrides(), ...urls}\n const resolved = resolveCloudUrlReconnectTarget(next)\n if (resolved === null) {\n console.warn(\"engine.dev.setCloudUrls: ignoring partial cloud override without a resolvable sibling endpoint\")\n return\n }\n\n const s = useSettingsStore.getState()\n if (urls.core !== undefined) s.setSetting(SETTINGS.cloud_core_url.key, urls.core)\n if (urls.runtime !== undefined) s.setSetting(SETTINGS.cloud_runtime_url.key, urls.runtime)\n if (resolved === undefined) {\n cloudClientService.reconnect(null)\n } else {\n cloudClientService.reconnect(resolved)\n }\n },\n\n /** Tear down + rebuild the live cloud client (the dev \"reconnect\" button). */\n reconnectCloud: (): void => applyCloudUrlReconnect(),\n\n /** Current native (BLE-process) memory usage in MB — a dev/diagnostics gauge. */\n getMemoryMB: (): number => BluetoothSdk.getMemoryMB(),\n /**\n * Phone-side bluetooth runtime snapshot (the core store read-model: scan/mic/\n * search state) — the diagnostics/data-export surface. Shallow copy.\n */\n bluetoothStatus: (): Record<string, unknown> => {\n const {setCoreInfo: _setCoreInfo, reset: _reset, ...state} = useCoreStore.getState()\n return {...state}\n },\n\n /**\n * Side-load a miniapp being served from a dev machine (the `mentra dev` / CLI\n * flow) by its URL: probes `<url>/miniapp.json`, and on a reachable manifest\n * registers it under its manifest package so it appears in `engine.miniapps`\n * and can coexist with other dev miniapps. This is the OEM-host equivalent\n * of the first-party\n * developer-URL screen — the registration itself is engine-internal, so a\n * host reaches it here rather than the internal registry. Rendering still\n * flows through the normal display path once the miniapp is started.\n */\n loadDevMiniapp: async (\n url: string,\n name?: string,\n ): Promise<{ok: true; packageName: string; name: string} | {ok: false; error: string}> => {\n const devUrl = url.trim().replace(/\\/+$/, \"\")\n if (!devUrl) return {ok: false, error: \"empty url\"}\n const result = await decideDevLaunchRoute(\"\", devUrl)\n if (result.decision !== \"live\") {\n return {ok: false, error: \"dev server unreachable, or no miniapp.json served there\"}\n }\n const manifest = result.manifest\n const appName = name ?? manifest.name ?? \"Dev Miniapp\"\n const packageName = (manifest.packageName as string | undefined) ?? DEV_APP_PACKAGE_NAME\n // Persist the host that answered — not the stale input IP — so home-tile\n // relaunches skip a dead LAN address after mDNS/Metro failover.\n const resolvedUrl = result.resolvedUrl || devUrl\n // The `mentra-miniapp dev` server puts the hot-reload/log sidecar on the\n // user port PLUS ONE — same convention as the first-party developer-URL\n // screen's deriveDevPort.\n let devPort: number | undefined\n try {\n const parsed = Number(new URL(resolvedUrl).port)\n devPort = Number.isFinite(parsed) && parsed > 0 ? parsed + 1 : undefined\n } catch {\n devPort = undefined\n }\n const existing = useAppStatusStore.getState().apps.find((app) => app.packageName === packageName)\n if (existing?.running) await useAppStatusStore.getState().stop(packageName)\n await registerDevApp({\n packageName,\n name: appName,\n iconUrl: manifest.icon ? new URL(manifest.icon, `${resolvedUrl}/`).toString() : `${resolvedUrl}/icon.png`,\n // Persist the host that answered — not the stale input IP.\n devUrl: resolvedUrl,\n devPort,\n type: manifest.type as DevAppRecord[\"type\"],\n permissions: manifest.permissions as DevAppRecord[\"permissions\"],\n hardwareRequirements: manifest.hardwareRequirements as DevAppRecord[\"hardwareRequirements\"],\n actions: manifest.actions as DevAppRecord[\"actions\"],\n })\n await useAppStatusStore.getState().refresh()\n return {ok: true, packageName, name: appName}\n },\n\n /** Current engine runtime status for engine-owned debug surfaces. */\n runtimeStatus: (): DevRuntimeStatusSnapshot => projectRuntimeStatus(),\n\n /** Subscribe to the projected engine runtime status; returns an unsubscribe. */\n onRuntimeStatus: (cb: (status: DevRuntimeStatusSnapshot) => void): (() => void) => {\n let last = JSON.stringify(projectRuntimeStatus())\n const notify = () => {\n const snap = projectRuntimeStatus()\n const key = JSON.stringify(snap)\n if (key === last) return\n last = key\n cb(snap)\n }\n const unsubscribers = [\n useCoreStore.subscribe(notify),\n useGlassesStore.subscribe(notify),\n useConnectionStore.subscribe(notify),\n useCloudClientStatusStore.subscribe(notify),\n ]\n return () => {\n unsubscribers.forEach((unsubscribe) => unsubscribe())\n }\n },\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/facades/dev.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * dev facade — `engine.dev`: developer/debug surface over engine-owned state.\n * Backend/cloud URL overrides read+write the engine settings store; the cloud\n * URL setters reconnect the engine-owned cloud client onto the new endpoints;\n *\n * NOTE: the dev-time endpoint *resolution* (Metro-host auto-detect, env defaults)\n * still lives host-side in `@/services/cloudClient` during the migration; this\n * facade manages the explicit overrides + reconnect.\n */\nimport BluetoothSdk from \"@mentra/bluetooth-sdk/internal\"\nimport {isGlassesReady} from \"../services/GlassesReadiness\"\nimport {useCloudClientStatusStore} from \"../stores/cloudClientStatus\"\nimport {useConnectionStore} from \"../stores/connection\"\nimport {useCoreStore} from \"../stores/core\"\nimport {useGlassesStore} from \"../stores/glasses\"\nimport {useSettingsStore, SETTINGS} from \"../stores/settings\"\nimport {cloudClientService} from \"../services/CloudClientService\"\nimport {getConfigValues} from \"../runtime/bootstrap\"\nimport {decideDevLaunchRoute} from \"../utils/devMiniappLaunch\"\nimport {registerDevApp, DEV_APP_PACKAGE_NAME, type DevAppRecord} from \"../services/AppRegistry\"\nimport {useAppStatusStore} from \"../stores/apps\"\nimport {scopeCloudUrlOverrides} from \"../services/cloudEndpointPolicy\"\n\ntype CloudUrlOverrides = {core?: string; runtime?: string}\n\n/**\n * Reconnect the cloud client onto the current cloud-URL overrides. Explicit\n * partial overrides merge over the boot-resolved config (which carries the\n * host's Metro/env URL resolution); both empty clears the live override.\n */\nfunction applyCloudUrlReconnect(urls: CloudUrlOverrides = currentCloudUrlOverrides()): void {\n const hostResolver = getConfigValues().resolveCloudEndpoints\n if (hostResolver) {\n cloudClientService.reconnect(null)\n return\n }\n const resolved = resolveCloudUrlReconnectTarget(urls)\n if (resolved === undefined) {\n cloudClientService.reconnect(null)\n } else if (resolved) {\n cloudClientService.reconnect(resolved)\n } else {\n console.warn(\"engine.dev.setCloudUrls: partial cloud override missing boot-resolved sibling endpoint\")\n }\n}\n\nfunction currentCloudUrlOverrides(): CloudUrlOverrides {\n const s = useSettingsStore.getState()\n return {\n core: trimSetting(s.getSetting(SETTINGS.cloud_core_url.key)),\n runtime: trimSetting(s.getSetting(SETTINGS.cloud_runtime_url.key)),\n }\n}\n\nfunction resolveCloudUrlReconnectTarget(urls: CloudUrlOverrides): {core: string; runtime: string} | null | undefined {\n const core = trimSetting(urls.core)\n const runtime = trimSetting(urls.runtime)\n if (!core && !runtime) return undefined\n\n const config = getConfigValues()\n const resolvedCore = core || config.coreUrl?.trim()\n const resolvedRuntime = runtime || config.runtimeUrl?.trim()\n return resolvedCore && resolvedRuntime ? {core: resolvedCore, runtime: resolvedRuntime} : null\n}\n\nfunction trimSetting(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined\n}\n\nfunction projectRuntimeStatus() {\n const core = useCoreStore.getState()\n const glasses = useGlassesStore.getState()\n const connection = useConnectionStore.getState()\n const cloudClient = useCloudClientStatusStore.getState()\n return {\n searching: core.searching,\n // Copy: the snapshot must not hand callers a mutable reference into the store.\n micRanking: [...core.micRanking],\n currentMic: core.currentMic,\n systemMicUnavailable: core.systemMicUnavailable,\n glassesConnected: glasses.connection.state === \"connected\",\n glassesFullyBooted: isGlassesReady(glasses.connection),\n bluetoothClassicConnected: glasses.bluetoothClassicConnected,\n coreStatus: connection.status,\n cloudClientStatus: cloudClient.status,\n cloudClientAudioTransport: cloudClient.audioTransport,\n }\n}\n\nexport type DevRuntimeStatusSnapshot = ReturnType<typeof projectRuntimeStatus>\n\nexport const dev = {\n /** The cloud-v2 core/runtime URL overrides. */\n cloudUrls: (): {core?: string; runtime?: string} => {\n const s = useSettingsStore.getState()\n return {core: s.getSetting(SETTINGS.cloud_core_url.key), runtime: s.getSetting(SETTINGS.cloud_runtime_url.key)}\n },\n /** Override the cloud-v2 URLs and reconnect the live client onto them. */\n setCloudUrls: (urls: {core?: string; runtime?: string}) => {\n const config = getConfigValues()\n if (config.resolveCloudEndpoints) {\n const scope = config.cloudDebugScope ?? \"\"\n const scoped = scopeCloudUrlOverrides(\n {\n scope: useSettingsStore.getState().getSetting(SETTINGS.cloud_url_deployment.key),\n ...currentCloudUrlOverrides(),\n },\n scope,\n urls,\n )\n const values: Record<string, unknown> = {\n [SETTINGS.cloud_url_deployment.key]: scope,\n [SETTINGS.cloud_core_url.key]: scoped.core,\n [SETTINGS.cloud_runtime_url.key]: scoped.runtime,\n [SETTINGS.cached_required_version.key]: \"\",\n }\n void useSettingsStore\n .getState()\n .setManyLocally(values)\n .then((result) => {\n if (result.is_error()) console.error(\"engine.dev.setCloudUrls: could not save URLs\", result.error)\n else applyCloudUrlReconnect()\n })\n return\n }\n const next = {...currentCloudUrlOverrides(), ...urls}\n const resolved = resolveCloudUrlReconnectTarget(next)\n if (resolved === null) {\n console.warn(\"engine.dev.setCloudUrls: ignoring partial cloud override without a resolvable sibling endpoint\")\n return\n }\n\n const s = useSettingsStore.getState()\n if (urls.core !== undefined) s.setSetting(SETTINGS.cloud_core_url.key, urls.core)\n if (urls.runtime !== undefined) s.setSetting(SETTINGS.cloud_runtime_url.key, urls.runtime)\n if (resolved === undefined) {\n cloudClientService.reconnect(null)\n } else {\n cloudClientService.reconnect(resolved)\n }\n },\n\n /** Tear down + rebuild the live cloud client (the dev \"reconnect\" button). */\n reconnectCloud: (): void => applyCloudUrlReconnect(),\n\n /** Current native (BLE-process) memory usage in MB — a dev/diagnostics gauge. */\n getMemoryMB: (): number => BluetoothSdk.getMemoryMB(),\n /**\n * Phone-side bluetooth runtime snapshot (the core store read-model: scan/mic/\n * search state) — the diagnostics/data-export surface. Shallow copy.\n */\n bluetoothStatus: (): Record<string, unknown> => {\n const {setCoreInfo: _setCoreInfo, reset: _reset, ...state} = useCoreStore.getState()\n return {...state}\n },\n\n /**\n * Side-load a miniapp being served from a dev machine (the `mentra dev` / CLI\n * flow) by its URL: probes `<url>/miniapp.json`, and on a reachable manifest\n * registers it under its manifest package so it appears in `engine.miniapps`\n * and can coexist with other dev miniapps. This is the OEM-host equivalent\n * of the first-party\n * developer-URL screen — the registration itself is engine-internal, so a\n * host reaches it here rather than the internal registry. Rendering still\n * flows through the normal display path once the miniapp is started.\n */\n loadDevMiniapp: async (\n url: string,\n name?: string,\n ): Promise<{ok: true; packageName: string; name: string} | {ok: false; error: string}> => {\n const devUrl = url.trim().replace(/\\/+$/, \"\")\n if (!devUrl) return {ok: false, error: \"empty url\"}\n const result = await decideDevLaunchRoute(\"\", devUrl)\n if (result.decision !== \"live\") {\n return {ok: false, error: \"dev server unreachable, or no miniapp.json served there\"}\n }\n const manifest = result.manifest\n const appName = name ?? manifest.name ?? \"Dev Miniapp\"\n const packageName = (manifest.packageName as string | undefined) ?? DEV_APP_PACKAGE_NAME\n // Persist the host that answered — not the stale input IP — so home-tile\n // relaunches skip a dead LAN address after mDNS/Metro failover.\n const resolvedUrl = result.resolvedUrl || devUrl\n // The `mentra-miniapp dev` server puts the hot-reload/log sidecar on the\n // user port PLUS ONE — same convention as the first-party developer-URL\n // screen's deriveDevPort.\n let devPort: number | undefined\n try {\n const parsed = Number(new URL(resolvedUrl).port)\n devPort = Number.isFinite(parsed) && parsed > 0 ? parsed + 1 : undefined\n } catch {\n devPort = undefined\n }\n const existing = useAppStatusStore.getState().apps.find((app) => app.packageName === packageName)\n if (existing?.running) await useAppStatusStore.getState().stop(packageName)\n await registerDevApp({\n packageName,\n name: appName,\n iconUrl: manifest.icon ? new URL(manifest.icon, `${resolvedUrl}/`).toString() : `${resolvedUrl}/icon.png`,\n // Persist the host that answered — not the stale input IP.\n devUrl: resolvedUrl,\n devPort,\n type: manifest.type as DevAppRecord[\"type\"],\n permissions: manifest.permissions as DevAppRecord[\"permissions\"],\n hardwareRequirements: manifest.hardwareRequirements as DevAppRecord[\"hardwareRequirements\"],\n actions: manifest.actions as DevAppRecord[\"actions\"],\n })\n await useAppStatusStore.getState().refresh()\n return {ok: true, packageName, name: appName}\n },\n\n /** Current engine runtime status for engine-owned debug surfaces. */\n runtimeStatus: (): DevRuntimeStatusSnapshot => projectRuntimeStatus(),\n\n /** Subscribe to the projected engine runtime status; returns an unsubscribe. */\n onRuntimeStatus: (cb: (status: DevRuntimeStatusSnapshot) => void): (() => void) => {\n let last = JSON.stringify(projectRuntimeStatus())\n const notify = () => {\n const snap = projectRuntimeStatus()\n const key = JSON.stringify(snap)\n if (key === last) return\n last = key\n cb(snap)\n }\n const unsubscribers = [\n useCoreStore.subscribe(notify),\n useGlassesStore.subscribe(notify),\n useConnectionStore.subscribe(notify),\n useCloudClientStatusStore.subscribe(notify),\n ]\n return () => {\n unsubscribers.forEach((unsubscribe) => unsubscribe())\n }\n },\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export const ENGINE_RELEASE_METADATA = Object.freeze({
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"familyBaseVersion": "3.2.0",
|
|
4
|
-
"releaseIdentity": "3.2.0-dev.
|
|
5
|
-
"releaseSetId": "mentra-3.2.0-dev.
|
|
6
|
-
"sourceCommit": "
|
|
7
|
-
"otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.
|
|
8
|
-
"otaManifestSha256": "
|
|
4
|
+
"releaseIdentity": "3.2.0-dev.191",
|
|
5
|
+
"releaseSetId": "mentra-3.2.0-dev.191",
|
|
6
|
+
"sourceCommit": "3516939c2afd92634e7f3b3f1983f0671c8e1e27",
|
|
7
|
+
"otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.191.json",
|
|
8
|
+
"otaManifestSha256": "95911977308516fa70d367a18af66f7075440aa219285ac23d5aa72164d475c4"
|
|
9
9
|
});
|
|
10
10
|
//# sourceMappingURL=releaseMetadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,uBAAuB,GAAoC,MAAM,CAAC,MAAM,CAAC;IACpF,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,eAAe;IAClC,cAAc,EAAE,sBAAsB;IACtC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,wHAAwH;IAC1I,mBAAmB,EAAE,kEAAkE;CACxF,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface EngineReleaseMetadata {\n schemaVersion: 1\n familyBaseVersion: string | null\n releaseIdentity: string | null\n releaseSetId: string | null\n sourceCommit: string | null\n otaManifestUrl: string | null\n otaManifestSha256: string | null\n}\n\nexport const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"3.2.0\",\n \"releaseIdentity\": \"3.2.0-dev.
|
|
1
|
+
{"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,uBAAuB,GAAoC,MAAM,CAAC,MAAM,CAAC;IACpF,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,eAAe;IAClC,cAAc,EAAE,sBAAsB;IACtC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,wHAAwH;IAC1I,mBAAmB,EAAE,kEAAkE;CACxF,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface EngineReleaseMetadata {\n schemaVersion: 1\n familyBaseVersion: string | null\n releaseIdentity: string | null\n releaseSetId: string | null\n sourceCommit: string | null\n otaManifestUrl: string | null\n otaManifestSha256: string | null\n}\n\nexport const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"3.2.0\",\n \"releaseIdentity\": \"3.2.0-dev.191\",\n \"releaseSetId\": \"mentra-3.2.0-dev.191\",\n \"sourceCommit\": \"3516939c2afd92634e7f3b3f1983f0671c8e1e27\",\n \"otaManifestUrl\": \"https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.191.json\",\n \"otaManifestSha256\": \"95911977308516fa70d367a18af66f7075440aa219285ac23d5aa72164d475c4\"\n})\n"]}
|
|
@@ -32,6 +32,13 @@ export interface IslandConfigValues {
|
|
|
32
32
|
coreUrl?: string | null;
|
|
33
33
|
/** cloud-v2 runtime service base URL. */
|
|
34
34
|
runtimeUrl?: string | null;
|
|
35
|
+
/** Host's live manifest/override resolver, also used on automatic reconnects. */
|
|
36
|
+
resolveCloudEndpoints?: () => {
|
|
37
|
+
core: string;
|
|
38
|
+
runtime: string;
|
|
39
|
+
};
|
|
40
|
+
/** Scope for debug settings written through engine.dev. */
|
|
41
|
+
cloudDebugScope?: string;
|
|
35
42
|
/** Open Runtime's live WebSocket/audio session. Defaults to true. */
|
|
36
43
|
runtimeRealtimeSession?: boolean;
|
|
37
44
|
/** Complete allowlist for bundled/local miniapps; null or omitted allows all. */
|
|
@@ -44,6 +51,8 @@ export interface IslandConfigValues {
|
|
|
44
51
|
cloudAuthStorageKey?: string;
|
|
45
52
|
/** Deployment-pinned Mentra Live OTA manifest; explicit null disables remote OTA. */
|
|
46
53
|
otaManifestUrl?: string | null;
|
|
54
|
+
/** Official deployments retain the legacy-device and embedded release fallback. */
|
|
55
|
+
allowLegacyOtaFallback?: boolean;
|
|
47
56
|
/** Deployment capability policy. Omitted entries preserve consumer behavior. */
|
|
48
57
|
features?: Partial<Record<IslandFeatureName, boolean>>;
|
|
49
58
|
/** OEM identifier (Mentra is OEM #0); reserved for OEM auth/telemetry. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Bootstrap — the engine's single front door (`engine.configure` / `start` / `stop`).\n *\n * The host hands engine auth + config + analytics in one call; engine owns the\n * runtime construction behind `start()`. Internal services read this holder\n * directly instead of exposing host-facing adapter bags.\n */\n\nexport type SubjectTokenType = \"supabase\" | \"authing\" | (string & {})\n\nexport interface IslandAuth {\n /** Returns the host's current (auto-refreshed) subject token for the backend. */\n getSubjectToken?: () => Promise<{token: string; type: SubjectTokenType}>\n /** Supplies a token issued directly for Runtime in a Core-free deployment. */\n getRuntimeToken?: (opts?: {forceRefresh?: boolean}) => Promise<string>\n /** Stable, deployment-scoped local identity for bundled miniapp storage. */\n getUserId?: () => Promise<string> | string\n /**\n * Optional auth-session listener. Hosts that can emit auth changes should\n * wire this so engine can reconnect backend sessions after restored login\n * state lands post-boot.\n */\n onStateChange?: (callback: (event: string, session: {token?: string | null} | null) => void) => unknown\n}\n\nexport interface IslandConfigValues {\n /** cloud-v2 core service base URL (defaults resolved by the cloud client). */\n coreUrl?: string | null\n /** cloud-v2 runtime service base URL. */\n runtimeUrl?: string | null\n /** Open Runtime's live WebSocket/audio session. Defaults to true. */\n runtimeRealtimeSession?: boolean\n /** Complete allowlist for bundled/local miniapps; null or omitted allows all. */\n localMiniappAllowlist?: readonly string[] | null\n /** Provenance-aware policy for workspace SYSTEM and managed miniapps. */\n localMiniappPolicy?: LocalMiniappPolicy\n /** Optional per-package configuration supplied by the host deployment. */\n miniappConfiguration?: Readonly<Record<string, Readonly<Record<string, string>>>>\n /** Deployment-scoped key for the persisted Core refresh token. */\n cloudAuthStorageKey?: string\n /** Deployment-pinned Mentra Live OTA manifest; explicit null disables remote OTA. */\n otaManifestUrl?: string | null\n /** Deployment capability policy. Omitted entries preserve consumer behavior. */\n features?: Partial<Record<IslandFeatureName, boolean>>\n /** OEM identifier (Mentra is OEM #0); reserved for OEM auth/telemetry. */\n oemId?: string\n /**\n * LC3 frame size (bytes) the phone's mic encoder emits — announced to the\n * cloud on connect (20 for G1, 40 for G2, …). Defaults to 20 if unset.\n */\n audioFrameSizeBytes?: number\n /**\n * Dev-only live Metro/LAN host used to repair persisted local-miniapp dev URLs\n * after the laptop changes networks. Omitted in production/OEM builds.\n */\n devServerHost?: () => string | undefined\n}\n\nexport interface ManagedMiniappPolicyEntry {\n packageName: string\n version: string\n sha256: string\n deploymentId: string\n deploymentOrigin: string\n}\n\nexport interface LocalMiniappPolicy {\n systemPackageNames: readonly string[] | null\n managed: readonly ManagedMiniappPolicyEntry[]\n}\n\nexport type IslandFeatureName = \"managedStreams\" | \"nativeMeetings\" | \"cloudSpeech\" | \"onDeviceSpeech\" | \"navigation\"\n\nexport type IslandAnalytics = (event: string, props?: Record<string, unknown>) => void\n\n/**\n * Named host-UI seams: engine dispatches the runtime request, the host owns the\n * screen/navigation/branding. Keep each entry a single narrow purpose — this is\n * a contract of specific UI capabilities, not a generic runtime-hook bag.\n */\nexport interface IslandUiSeams {\n /**\n * `session.glasses.requestWifiSetup` — open the host's glasses Wi-Fi setup\n * flow. Absent ⇒ miniapps get NOT_IMPLEMENTED for the request.\n */\n requestWifiSetup?: (reason?: string, packageName?: string) => Promise<void> | void\n /**\n * `session.system.scanQr` — open a phone-camera QR scanner overlay. Must NOT\n * clear miniapp foreground: UI_CLOSE on a live call hangs it up. Absent ⇒\n * miniapps get NOT_IMPLEMENTED.\n */\n scanQr?: (options?: ScanQrOptions) => Promise<ScanQrResult>\n}\n\nexport interface ScanQrOptions {\n title?: string\n hint?: string\n}\n\nexport type ScanQrResult = {data: string} | {cancelled: true}\n\nexport interface IslandConfigureOptions {\n /** REQUIRED — the only must-have seam. The host owns login; engine owns the rest. */\n auth: IslandAuth\n config?: IslandConfigValues\n analytics?: IslandAnalytics\n ui?: IslandUiSeams\n}\n\nexport function isLocalMiniappPackageAllowed(packageName: string): boolean {\n const policy = options?.config?.localMiniappPolicy\n if (policy) {\n return (\n policy.systemPackageNames === null ||\n policy.systemPackageNames.includes(packageName) ||\n policy.managed.some((entry) => entry.packageName === packageName)\n )\n }\n const allowlist = options?.config?.localMiniappAllowlist\n return allowlist == null || allowlist.includes(packageName)\n}\n\nexport function isOfflineSystemMiniappAllowed(packageName: string): boolean {\n const policy = options?.config?.localMiniappPolicy\n if (!policy) return isLocalMiniappPackageAllowed(packageName)\n return policy.systemPackageNames === null || policy.systemPackageNames.includes(packageName)\n}\n\nexport function isInstalledMiniappAllowed(\n packageName: string,\n version: string | undefined,\n releaseIdentity: {\n source: string\n bundleSha256?: string\n deploymentId?: string\n deploymentOrigin?: string\n } | null,\n): boolean {\n const policy = options?.config?.localMiniappPolicy\n if (!policy) return isLocalMiniappPackageAllowed(packageName)\n\n const systemApproved = policy.systemPackageNames === null || policy.systemPackageNames.includes(packageName)\n if (systemApproved && releaseIdentity?.source === \"bundled_asset\") return true\n if (!version || releaseIdentity?.source !== \"deployment_manifest\") return false\n\n return policy.managed.some(\n (entry) =>\n entry.packageName === packageName &&\n entry.version === version &&\n entry.sha256 === releaseIdentity.bundleSha256?.toLowerCase() &&\n entry.deploymentId === releaseIdentity.deploymentId &&\n entry.deploymentOrigin === releaseIdentity.deploymentOrigin,\n )\n}\n\n/** Read a defensive package-scoped configuration snapshot. */\nexport function getMiniappConfiguration(packageName: string): Record<string, string> {\n const configuration = options?.config?.miniappConfiguration?.[packageName]\n return configuration ? {...configuration} : {}\n}\n\nexport function isFeatureEnabled(feature: IslandFeatureName): boolean {\n return options?.config?.features?.[feature] !== false\n}\n\nlet options: IslandConfigureOptions | null = null\nlet started = false\n\n/**\n * Hand engine its auth + config + analytics. Call once, before `start()`.\n *\n * Reconfiguring a RUNNING runtime is not supported: services capture pieces of\n * this config as they build (e.g. the cloud client's endpoints), so swapping the\n * options mid-run would split-brain the runtime (`getAuth()`/`getConfigValues()`\n * report values the running services never consumed). Ignored with a warning\n * while started; after `stop()`, `configure()` + `start()` begin a fresh cycle.\n */\nexport function configure(opts: IslandConfigureOptions): void {\n if (started) {\n console.warn(\"engine.configure() called after engine.start(); ignored — stop() the runtime before reconfiguring\")\n return\n }\n const localMiniappAllowlist = opts.config?.localMiniappAllowlist\n const localMiniappPolicy = opts.config?.localMiniappPolicy\n options = {\n ...opts,\n config: opts.config\n ? {\n ...opts.config,\n localMiniappAllowlist: Array.isArray(localMiniappAllowlist)\n ? Object.freeze([...localMiniappAllowlist])\n : localMiniappAllowlist,\n localMiniappPolicy: localMiniappPolicy\n ? Object.freeze({\n systemPackageNames: Array.isArray(localMiniappPolicy.systemPackageNames)\n ? Object.freeze([...localMiniappPolicy.systemPackageNames])\n : null,\n managed: Object.freeze(\n localMiniappPolicy.managed.map((entry) =>\n Object.freeze({...entry, sha256: entry.sha256.toLowerCase()}),\n ),\n ),\n })\n : undefined,\n }\n : undefined,\n }\n}\n\n/**\n * Merge host-UI seams after configure/start. UI capabilities (scan overlay,\n * wifi setup) are looked up per request, so this is safe on a running runtime.\n * Used so Metro reloads can attach seams that missed the original configure().\n */\nexport function updateUiSeams(ui: IslandUiSeams): void {\n if (!options) {\n console.warn(\"engine.updateUiSeams() called before engine.configure(); ignored\")\n return\n }\n options = {...options, ui: {...options.ui, ...ui}}\n}\n\n/** Mark the runtime started. Idempotent. */\nexport async function start(): Promise<void> {\n if (started) return\n if (!options) {\n throw new Error(\"engine.start() called before engine.configure()\")\n }\n started = true\n}\n\n/** Tear down. Idempotent. */\nexport async function stop(): Promise<void> {\n started = false\n}\n\nexport function isStarted(): boolean {\n return started\n}\n\n/** Test-only: wipe configure state so suites can start from a cold host. */\nexport function resetForTests(): void {\n options = null\n started = false\n}\n\n/** The host-supplied auth provider, or null if not configured yet. */\nexport function getAuth(): IslandAuth | null {\n return options?.auth ?? null\n}\n\nexport function getConfigValues(): IslandConfigValues {\n return options?.config ?? {}\n}\n\nexport function getAnalytics(): IslandAnalytics | null {\n return options?.analytics ?? null\n}\n\n/** The host-supplied UI seams ({} until configure() provides them). */\nexport function getUiSeams(): IslandUiSeams {\n return options?.ui ?? {}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Bootstrap — the engine's single front door (`engine.configure` / `start` / `stop`).\n *\n * The host hands engine auth + config + analytics in one call; engine owns the\n * runtime construction behind `start()`. Internal services read this holder\n * directly instead of exposing host-facing adapter bags.\n */\n\nexport type SubjectTokenType = \"supabase\" | \"authing\" | (string & {})\n\nexport interface IslandAuth {\n /** Returns the host's current (auto-refreshed) subject token for the backend. */\n getSubjectToken?: () => Promise<{token: string; type: SubjectTokenType}>\n /** Supplies a token issued directly for Runtime in a Core-free deployment. */\n getRuntimeToken?: (opts?: {forceRefresh?: boolean}) => Promise<string>\n /** Stable, deployment-scoped local identity for bundled miniapp storage. */\n getUserId?: () => Promise<string> | string\n /**\n * Optional auth-session listener. Hosts that can emit auth changes should\n * wire this so engine can reconnect backend sessions after restored login\n * state lands post-boot.\n */\n onStateChange?: (callback: (event: string, session: {token?: string | null} | null) => void) => unknown\n}\n\nexport interface IslandConfigValues {\n /** cloud-v2 core service base URL (defaults resolved by the cloud client). */\n coreUrl?: string | null\n /** cloud-v2 runtime service base URL. */\n runtimeUrl?: string | null\n /** Host's live manifest/override resolver, also used on automatic reconnects. */\n resolveCloudEndpoints?: () => {core: string; runtime: string}\n /** Scope for debug settings written through engine.dev. */\n cloudDebugScope?: string\n /** Open Runtime's live WebSocket/audio session. Defaults to true. */\n runtimeRealtimeSession?: boolean\n /** Complete allowlist for bundled/local miniapps; null or omitted allows all. */\n localMiniappAllowlist?: readonly string[] | null\n /** Provenance-aware policy for workspace SYSTEM and managed miniapps. */\n localMiniappPolicy?: LocalMiniappPolicy\n /** Optional per-package configuration supplied by the host deployment. */\n miniappConfiguration?: Readonly<Record<string, Readonly<Record<string, string>>>>\n /** Deployment-scoped key for the persisted Core refresh token. */\n cloudAuthStorageKey?: string\n /** Deployment-pinned Mentra Live OTA manifest; explicit null disables remote OTA. */\n otaManifestUrl?: string | null\n /** Official deployments retain the legacy-device and embedded release fallback. */\n allowLegacyOtaFallback?: boolean\n /** Deployment capability policy. Omitted entries preserve consumer behavior. */\n features?: Partial<Record<IslandFeatureName, boolean>>\n /** OEM identifier (Mentra is OEM #0); reserved for OEM auth/telemetry. */\n oemId?: string\n /**\n * LC3 frame size (bytes) the phone's mic encoder emits — announced to the\n * cloud on connect (20 for G1, 40 for G2, …). Defaults to 20 if unset.\n */\n audioFrameSizeBytes?: number\n /**\n * Dev-only live Metro/LAN host used to repair persisted local-miniapp dev URLs\n * after the laptop changes networks. Omitted in production/OEM builds.\n */\n devServerHost?: () => string | undefined\n}\n\nexport interface ManagedMiniappPolicyEntry {\n packageName: string\n version: string\n sha256: string\n deploymentId: string\n deploymentOrigin: string\n}\n\nexport interface LocalMiniappPolicy {\n systemPackageNames: readonly string[] | null\n managed: readonly ManagedMiniappPolicyEntry[]\n}\n\nexport type IslandFeatureName = \"managedStreams\" | \"nativeMeetings\" | \"cloudSpeech\" | \"onDeviceSpeech\" | \"navigation\"\n\nexport type IslandAnalytics = (event: string, props?: Record<string, unknown>) => void\n\n/**\n * Named host-UI seams: engine dispatches the runtime request, the host owns the\n * screen/navigation/branding. Keep each entry a single narrow purpose — this is\n * a contract of specific UI capabilities, not a generic runtime-hook bag.\n */\nexport interface IslandUiSeams {\n /**\n * `session.glasses.requestWifiSetup` — open the host's glasses Wi-Fi setup\n * flow. Absent ⇒ miniapps get NOT_IMPLEMENTED for the request.\n */\n requestWifiSetup?: (reason?: string, packageName?: string) => Promise<void> | void\n /**\n * `session.system.scanQr` — open a phone-camera QR scanner overlay. Must NOT\n * clear miniapp foreground: UI_CLOSE on a live call hangs it up. Absent ⇒\n * miniapps get NOT_IMPLEMENTED.\n */\n scanQr?: (options?: ScanQrOptions) => Promise<ScanQrResult>\n}\n\nexport interface ScanQrOptions {\n title?: string\n hint?: string\n}\n\nexport type ScanQrResult = {data: string} | {cancelled: true}\n\nexport interface IslandConfigureOptions {\n /** REQUIRED — the only must-have seam. The host owns login; engine owns the rest. */\n auth: IslandAuth\n config?: IslandConfigValues\n analytics?: IslandAnalytics\n ui?: IslandUiSeams\n}\n\nexport function isLocalMiniappPackageAllowed(packageName: string): boolean {\n const policy = options?.config?.localMiniappPolicy\n if (policy) {\n return (\n policy.systemPackageNames === null ||\n policy.systemPackageNames.includes(packageName) ||\n policy.managed.some((entry) => entry.packageName === packageName)\n )\n }\n const allowlist = options?.config?.localMiniappAllowlist\n return allowlist == null || allowlist.includes(packageName)\n}\n\nexport function isOfflineSystemMiniappAllowed(packageName: string): boolean {\n const policy = options?.config?.localMiniappPolicy\n if (!policy) return isLocalMiniappPackageAllowed(packageName)\n return policy.systemPackageNames === null || policy.systemPackageNames.includes(packageName)\n}\n\nexport function isInstalledMiniappAllowed(\n packageName: string,\n version: string | undefined,\n releaseIdentity: {\n source: string\n bundleSha256?: string\n deploymentId?: string\n deploymentOrigin?: string\n } | null,\n): boolean {\n const policy = options?.config?.localMiniappPolicy\n if (!policy) return isLocalMiniappPackageAllowed(packageName)\n\n const systemApproved = policy.systemPackageNames === null || policy.systemPackageNames.includes(packageName)\n if (systemApproved && releaseIdentity?.source === \"bundled_asset\") return true\n if (!version || releaseIdentity?.source !== \"deployment_manifest\") return false\n\n return policy.managed.some(\n (entry) =>\n entry.packageName === packageName &&\n entry.version === version &&\n entry.sha256 === releaseIdentity.bundleSha256?.toLowerCase() &&\n entry.deploymentId === releaseIdentity.deploymentId &&\n entry.deploymentOrigin === releaseIdentity.deploymentOrigin,\n )\n}\n\n/** Read a defensive package-scoped configuration snapshot. */\nexport function getMiniappConfiguration(packageName: string): Record<string, string> {\n const configuration = options?.config?.miniappConfiguration?.[packageName]\n return configuration ? {...configuration} : {}\n}\n\nexport function isFeatureEnabled(feature: IslandFeatureName): boolean {\n return options?.config?.features?.[feature] !== false\n}\n\nlet options: IslandConfigureOptions | null = null\nlet started = false\n\n/**\n * Hand engine its auth + config + analytics. Call once, before `start()`.\n *\n * Reconfiguring a RUNNING runtime is not supported: services capture pieces of\n * this config as they build (e.g. the cloud client's endpoints), so swapping the\n * options mid-run would split-brain the runtime (`getAuth()`/`getConfigValues()`\n * report values the running services never consumed). Ignored with a warning\n * while started; after `stop()`, `configure()` + `start()` begin a fresh cycle.\n */\nexport function configure(opts: IslandConfigureOptions): void {\n if (started) {\n console.warn(\"engine.configure() called after engine.start(); ignored — stop() the runtime before reconfiguring\")\n return\n }\n const localMiniappAllowlist = opts.config?.localMiniappAllowlist\n const localMiniappPolicy = opts.config?.localMiniappPolicy\n options = {\n ...opts,\n config: opts.config\n ? {\n ...opts.config,\n localMiniappAllowlist: Array.isArray(localMiniappAllowlist)\n ? Object.freeze([...localMiniappAllowlist])\n : localMiniappAllowlist,\n localMiniappPolicy: localMiniappPolicy\n ? Object.freeze({\n systemPackageNames: Array.isArray(localMiniappPolicy.systemPackageNames)\n ? Object.freeze([...localMiniappPolicy.systemPackageNames])\n : null,\n managed: Object.freeze(\n localMiniappPolicy.managed.map((entry) =>\n Object.freeze({...entry, sha256: entry.sha256.toLowerCase()}),\n ),\n ),\n })\n : undefined,\n }\n : undefined,\n }\n}\n\n/**\n * Merge host-UI seams after configure/start. UI capabilities (scan overlay,\n * wifi setup) are looked up per request, so this is safe on a running runtime.\n * Used so Metro reloads can attach seams that missed the original configure().\n */\nexport function updateUiSeams(ui: IslandUiSeams): void {\n if (!options) {\n console.warn(\"engine.updateUiSeams() called before engine.configure(); ignored\")\n return\n }\n options = {...options, ui: {...options.ui, ...ui}}\n}\n\n/** Mark the runtime started. Idempotent. */\nexport async function start(): Promise<void> {\n if (started) return\n if (!options) {\n throw new Error(\"engine.start() called before engine.configure()\")\n }\n started = true\n}\n\n/** Tear down. Idempotent. */\nexport async function stop(): Promise<void> {\n started = false\n}\n\nexport function isStarted(): boolean {\n return started\n}\n\n/** Test-only: wipe configure state so suites can start from a cold host. */\nexport function resetForTests(): void {\n options = null\n started = false\n}\n\n/** The host-supplied auth provider, or null if not configured yet. */\nexport function getAuth(): IslandAuth | null {\n return options?.auth ?? null\n}\n\nexport function getConfigValues(): IslandConfigValues {\n return options?.config ?? {}\n}\n\nexport function getAnalytics(): IslandAnalytics | null {\n return options?.analytics ?? null\n}\n\n/** The host-supplied UI seams ({} until configure() provides them). */\nexport function getUiSeams(): IslandUiSeams {\n return options?.ui ?? {}\n}\n"]}
|
|
@@ -32,7 +32,7 @@ export declare const cloudClientService: {
|
|
|
32
32
|
init(): void;
|
|
33
33
|
/**
|
|
34
34
|
* Tear down + rebuild. Pass new endpoints to switch URLs; pass `null` to CLEAR
|
|
35
|
-
* a prior override and
|
|
35
|
+
* a prior override and resume the host resolver or boot config (so cleared/default cloud
|
|
36
36
|
* URLs don't keep reconnecting to a stale override); omit to keep the current.
|
|
37
37
|
*/
|
|
38
38
|
reconnect(endpoints?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudClientService.d.ts","sourceRoot":"","sources":["../../src/services/CloudClientService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAC,WAAW,EAAgD,MAAM,mCAAmC,CAAA;AAE5G,OAAO,KAAK,EAAC,2BAA2B,EAAkB,MAAM,mCAAmC,CAAA;AAGnG,OAAO,KAAK,EAAC,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAC,MAAM,wBAAwB,CAAA;AAMjG,OAAO,EAAC,KAAK,yBAAyB,EAAE,KAAK,gBAAgB,EAAC,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"CloudClientService.d.ts","sourceRoot":"","sources":["../../src/services/CloudClientService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAC,WAAW,EAAgD,MAAM,mCAAmC,CAAA;AAE5G,OAAO,KAAK,EAAC,2BAA2B,EAAkB,MAAM,mCAAmC,CAAA;AAGnG,OAAO,KAAK,EAAC,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAC,MAAM,wBAAwB,CAAA;AAMjG,OAAO,EAAC,KAAK,yBAAyB,EAAE,KAAK,gBAAgB,EAAC,MAAM,mBAAmB,CAAA;AAavF,KAAK,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;AA+djD;;;GAGG;AACH,eAAO,MAAM,kBAAkB;wBACH,OAAO,CAAC,IAAI,CAAC;IAQvC;;;;OAIG;YACK,IAAI;IAMZ;;;;OAIG;0BACmB;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,GAAG,IAAI;sCAoB5B,OAAO,CAAC,2BAA2B,CAAC;IAO5E;;;;;;;;OAQG;2BAC0B,OAAO,CAAC,MAAM,CAAC;IAc5C,sEAAsE;uBACnD,MAAM;qCAOV,MAAM,SACZ;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAC,GAClD,OAAO,CAAC,gBAAgB,CAAC;IAe5B,uEAAuE;YAC/D,IAAI;IAuBZ,qFAAqF;6BAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;sCAIb,MAAM;;;;IAKxC,2EAA2E;8BAClD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;qCAKf,MAAM;;;;;;;;gCAKX,MAAM;IAMlC,mEAAmE;mBACpD,OAAO;IAItB,4EAA4E;iCAC/C,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAOtE,0EAA0E;2BAC7C,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;0BAU1C,UAAU,GAAG,IAAI;qBAItB,CAAC,CAAC,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI;sBAO1C,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI;iBAO9C,yBAAyB;kBAIxB,MAAM;eAMT,OAAO;gCAIU,OAAO,CAAC,MAAM,CAAC;wBAIvB,CAAC,QAAQ,EAAE,yBAAyB,KAAK,IAAI,GAAG,MAAM,IAAI;;oBAQhE,MAAM,YAAY,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;;wBAQnE,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;8BAKrD,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;;;;+BAK9D,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;;;;;;;0BAKvE,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;6BA6BxD,OAAO;CAGjC,CAAA"}
|
|
@@ -29,6 +29,7 @@ import { BgTimer } from "../utils/timers";
|
|
|
29
29
|
import { logCloudV2TranscriptMetric } from "./CloudTranscriptE2EMetrics";
|
|
30
30
|
import { LocalMiniappUserIdentity } from "./LocalMiniappUserIdentity";
|
|
31
31
|
import { nativeHttpResponseBody } from "./NativeHttpResponse";
|
|
32
|
+
import { resolveCloudEndpoints } from "./cloudEndpointPolicy";
|
|
32
33
|
const LOG_TAG = "cloudClient";
|
|
33
34
|
// Persistent cloud-disconnect detector: the cloud-client reconnect loop is infinite
|
|
34
35
|
// and never surfaces a "giving up" signal, so "persistent failure" = the session has
|
|
@@ -44,11 +45,6 @@ function clearPersistentFailureAlarm() {
|
|
|
44
45
|
}
|
|
45
46
|
persistentFailureNotified = false;
|
|
46
47
|
}
|
|
47
|
-
// Neutral last-ditch fallbacks (reachable under `adb reverse`) for when the host
|
|
48
|
-
// passes no endpoints. The host normally resolves the real URLs (dev override /
|
|
49
|
-
// Metro host / env) and hands them in via `engine.configure({config})`.
|
|
50
|
-
const FALLBACK_CORE_URL = "http://localhost:3000";
|
|
51
|
-
const FALLBACK_RUNTIME_URL = "http://localhost:3001";
|
|
52
48
|
const LOCAL_AUTH_PORT = 3002;
|
|
53
49
|
let client = null;
|
|
54
50
|
let connected = false;
|
|
@@ -86,17 +82,7 @@ const translationListeners = new Set();
|
|
|
86
82
|
const statusListeners = new Set();
|
|
87
83
|
const connectionListeners = new Set();
|
|
88
84
|
function resolveEndpoints() {
|
|
89
|
-
|
|
90
|
-
return endpointsOverride;
|
|
91
|
-
const cfg = getConfigValues();
|
|
92
|
-
const runtime = cfg.runtimeUrl === null ? "" : cfg.runtimeUrl?.trim() || FALLBACK_RUNTIME_URL;
|
|
93
|
-
if (!runtime)
|
|
94
|
-
throw new Error("cloudClient: Runtime endpoint is not configured");
|
|
95
|
-
const core = cfg.coreUrl === null ? undefined : cfg.coreUrl?.trim() || FALLBACK_CORE_URL;
|
|
96
|
-
return {
|
|
97
|
-
...(core ? { core } : {}),
|
|
98
|
-
runtime,
|
|
99
|
-
};
|
|
85
|
+
return resolveCloudEndpoints(getConfigValues(), endpointsOverride);
|
|
100
86
|
}
|
|
101
87
|
function getCoreClient() {
|
|
102
88
|
if (!client)
|
|
@@ -516,7 +502,7 @@ export const cloudClientService = {
|
|
|
516
502
|
},
|
|
517
503
|
/**
|
|
518
504
|
* Tear down + rebuild. Pass new endpoints to switch URLs; pass `null` to CLEAR
|
|
519
|
-
* a prior override and
|
|
505
|
+
* a prior override and resume the host resolver or boot config (so cleared/default cloud
|
|
520
506
|
* URLs don't keep reconnecting to a stale override); omit to keep the current.
|
|
521
507
|
*/
|
|
522
508
|
reconnect(endpoints) {
|