@mentra/engine 3.2.0-dev.235 → 3.2.0-dev.245
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/generated/releaseMetadata.js +5 -5
- package/build/generated/releaseMetadata.js.map +1 -1
- package/build/services/AcsMeetingService.d.ts +70 -0
- package/build/services/AcsMeetingService.d.ts.map +1 -1
- package/build/services/AcsMeetingService.js +97 -0
- package/build/services/AcsMeetingService.js.map +1 -1
- package/build/services/AppRegistry.d.ts +2 -12
- package/build/services/AppRegistry.d.ts.map +1 -1
- package/build/services/AppRegistry.js +2 -37
- package/build/services/AppRegistry.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 +2 -2
- package/build/services/CloudClientService.js.map +1 -1
- package/build/services/LocalMiniappRuntime.d.ts +51 -0
- package/build/services/LocalMiniappRuntime.d.ts.map +1 -1
- package/build/services/LocalMiniappRuntime.js +228 -6
- package/build/services/LocalMiniappRuntime.js.map +1 -1
- package/build/services/PhoneNotificationsSync.d.ts +1 -1
- package/build/services/PhonePhotoCoordinator.d.ts +3 -2
- package/build/services/PhonePhotoCoordinator.d.ts.map +1 -1
- package/build/services/PhonePhotoCoordinator.js +19 -14
- package/build/services/PhonePhotoCoordinator.js.map +1 -1
- package/build/services/SoftapCallTransport.d.ts +64 -0
- package/build/services/SoftapCallTransport.d.ts.map +1 -1
- package/build/services/SoftapCallTransport.js +103 -3
- package/build/services/SoftapCallTransport.js.map +1 -1
- package/build/services/manifestPermissions.d.ts +13 -0
- package/build/services/manifestPermissions.d.ts.map +1 -0
- package/build/services/manifestPermissions.js +42 -0
- package/build/services/manifestPermissions.js.map +1 -0
- package/build/types/applet.d.ts +13 -1
- package/build/types/applet.d.ts.map +1 -1
- package/build/types/applet.js.map +1 -1
- package/package.json +8 -8
- package/src/generated/releaseMetadata.ts +5 -5
- package/src/services/AcsMeetingService.ts +138 -0
- package/src/services/AppRegistry.ts +3 -40
- package/src/services/CloudClientService.ts +2 -2
- package/src/services/LocalMiniappRuntime.ts +268 -7
- package/src/services/PhonePhotoCoordinator.ts +18 -14
- package/src/services/SoftapCallTransport.ts +151 -16
- package/src/services/manifestPermissions.ts +44 -0
- package/src/types/applet.ts +11 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudClientService.js","sourceRoot":"","sources":["../../src/services/CloudClientService.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Owns the singleton `@mentra/cloud-client` (CloudClient) for the engine runtime\n * — the keystone move that pulls backend comms INTO engine.\n *\n * engine constructs the client from engine-owned pieces (the native UDP socket,\n * the MMKV secure store, the cloud-status store) plus the two things the host\n * provides through the engine front door: `auth.getSubjectToken` (the one\n * permanent seam — the OEM owns login) and the resolved cloud endpoints\n * (`config.coreUrl/runtimeUrl`, computed host-side from dev/settings). On init it\n * exposes cloud runtime methods directly from this service, so the host no longer\n * injects a cloud adapter — engine owns construction and wiring.\n *\n * The local-miniapp path drives the cloud's transcription/translation through\n * this service.\n */\nimport {CloudClient, setNativeHttp, setNativeUdp, setSecureStorage} from \"@mentra/cloud-client/react-native\"\nimport {DEFAULT_REFRESH_TOKEN_KEY} from \"@mentra/cloud-client\"\nimport type {PreinstalledMiniappRegistry, RuntimeSnapshot} from \"@mentra/cloud-client/react-native\"\nimport type {SubjectTokenType} from \"@mentra/cloud-client\"\nimport {Platform} from \"react-native\"\nimport type {AudioSubscription, TranscriptionData, TranslationData} from \"@mentra/cloud-protocol\"\n\nimport BluetoothSdk from \"@mentra/bluetooth-sdk/internal\"\nimport CrustModule from \"@mentra/crust\"\nimport {getAuth, getConfigValues, isFeatureEnabled} from \"../runtime/bootstrap\"\nimport {useSettingsStore, SETTINGS} from \"../stores/settings\"\nimport {type CloudClientStatusSnapshot, type MiniappAuthToken} from \"../runtime/config\"\nimport {createCloudUdpSocket} from \"../utils/cloudClient/RnUdpAdapter\"\nimport {cloudSecureStore} from \"../utils/cloudClient/cloudSecureStore\"\nimport {storage as mmkvStorage} from \"../utils/storage\"\nimport {useCloudClientStatusStore} from \"../stores/cloudClientStatus\"\nimport {islandNotifications} from \"./NotificationsEmitter\"\nimport {BgTimer} from \"../utils/timers\"\nimport {logCloudV2TranscriptMetric} from \"./CloudTranscriptE2EMetrics\"\nimport {LocalMiniappUserIdentity} from \"./LocalMiniappUserIdentity\"\nimport {nativeHttpResponseBody} from \"./NativeHttpResponse\"\nimport {resolveCloudEndpoints} from \"./cloudEndpointPolicy\"\n\nconst LOG_TAG = \"cloudClient\"\ntype CloudCore = NonNullable<CloudClient[\"core\"]>\n\n// Persistent cloud-disconnect detector: the cloud-client reconnect loop is infinite\n// and never surfaces a \"giving up\" signal, so \"persistent failure\" = the session has\n// been continuously NOT connected for this long. A quick reconnect cancels it; brief\n// flaps that recover don't fire. Raised as engine.notifications(connection_failed_persistent).\nconst CLOUD_PERSISTENT_FAILURE_MS = 60_000\nconst LOCAL_MINIAPP_USER_ID_KEY = \"mentra.localMiniapp.userId\"\n\n/** Cancel the pending persistent-failure alarm + re-arm for the next outage. */\nfunction clearPersistentFailureAlarm(): void {\n if (persistentFailureTimer) {\n BgTimer.clearTimeout(persistentFailureTimer)\n persistentFailureTimer = null\n }\n persistentFailureNotified = false\n}\n\ntype Lc3FrameSizeBytes = 20 | 40 | 60\n\nconst LOCAL_AUTH_PORT = 3002\n\nlet client: CloudClient | null = null\nlet connected = false\nlet persistentFailureTimer: ReturnType<typeof BgTimer.setTimeout> | null = null\nlet persistentFailureNotified = false\nlet audioSubscriptions: AudioSubscription[] = []\nlet transportsReady = false\n/** Endpoints to build with — seeded from config, overridable via reconnect(). */\nlet endpointsOverride: {core?: string; runtime: string} | null = null\nlet runtimeStatusUnsubscribe: (() => void) | null = null\nlet transcriptUnsubscribe: (() => void) | null = null\nlet translationUnsubscribe: (() => void) | null = null\nlet authStateUnsubscribe: (() => void) | null = null\nlet localDevRuntimeToken: {runtimeUrl: string; token: string; expiresAtMs: number} | null = null\nlet lc3FrameSizeUnsubscribe: (() => void) | null = null\nlet coreTokenSyncPromise: Promise<string> | null = null\n\nconst localMiniappUserIdentity = new LocalMiniappUserIdentity({\n get(): string | null {\n const result = mmkvStorage.load<string>(LOCAL_MINIAPP_USER_ID_KEY)\n return result.is_ok() ? result.value : null\n },\n set(userId: string): void {\n const result = mmkvStorage.save(LOCAL_MINIAPP_USER_ID_KEY, userId)\n if (result.is_error()) throw result.error\n },\n remove(): void {\n const result = mmkvStorage.remove(LOCAL_MINIAPP_USER_ID_KEY)\n if (result.is_error()) throw result.error\n },\n})\n\nconst transcriptListeners = new Set<(d: TranscriptionData) => void>()\nconst translationListeners = new Set<(d: TranslationData) => void>()\nconst statusListeners = new Set<(snapshot: CloudClientStatusSnapshot) => void>()\nconst connectionListeners = new Set<(connected: boolean) => void>()\n\nfunction resolveEndpoints(): {core?: string; runtime: string} {\n return resolveCloudEndpoints(getConfigValues(), endpointsOverride)\n}\n\nfunction getCoreClient(): CloudCore {\n if (!client) construct()\n const core = client?.core\n if (!core) throw new Error(\"cloud client core not configured\")\n return core\n}\n\nfunction syncCoreAccessTokenToBluetooth(): Promise<string> {\n if (coreTokenSyncPromise) return coreTokenSyncPromise\n\n coreTokenSyncPromise = syncCoreAccessTokenToBluetoothInternal().finally(() => {\n coreTokenSyncPromise = null\n })\n return coreTokenSyncPromise\n}\n\nasync function syncCoreAccessTokenToBluetoothInternal(): Promise<string> {\n if (!client) construct()\n const c = client\n if (!c) throw new Error(\"cloud client not initialized\")\n\n const token = await c.auth.getCoreToken()\n if (c !== client) {\n throw new Error(\"cloud client changed while syncing core token\")\n }\n localMiniappUserIdentity.remember(c.auth.identity.mentraUserId)\n const result = await useSettingsStore.getState().setSetting(SETTINGS.core_token.key, token, false)\n if (result.is_error()) {\n throw result.error\n }\n\n try {\n await BluetoothSdk.updateBluetoothSettings({[SETTINGS.core_token.key]: token})\n } catch (err) {\n console.warn(`${LOG_TAG}: direct Bluetooth core_token sync failed: ${(err as Error)?.message ?? err}`)\n }\n\n return token\n}\n\nfunction frameSizeBytes(): Lc3FrameSizeBytes {\n // Read LIVE from the engine settings store (the source of truth) so a\n // reconnect after a glasses swap (G1=20 ↔ G2=40) picks up the new frame size,\n // not the one-time engine.configure({config}) snapshot. Falls back to the\n // config value (set at boot) then 20 when the setting is unset.\n const fromSettings = useSettingsStore.getState().getSetting(SETTINGS.lc3_frame_size.key)\n const size = fromSettings ?? getConfigValues().audioFrameSizeBytes\n return size === 20 || size === 40 || size === 60 ? size : 20\n}\n\nasync function getSubjectToken(): Promise<{token: string; type: SubjectTokenType}> {\n const a = getAuth()\n if (!a?.getSubjectToken) throw new Error(\"cloudClient: Core subject-token auth is not configured\")\n const r = await a.getSubjectToken()\n // IslandAuth's SubjectTokenType is intentionally open (`string & {}`) so OEMs\n // can use other token kinds; cloud-client's is a closed union. The host's\n // actual value (\"supabase\") is valid — narrow at this boundary.\n return {token: r.token, type: r.type as SubjectTokenType}\n}\n\nfunction normalizeExpiresAt(expiresAt: number): number {\n return expiresAt < 10_000_000_000 ? expiresAt * 1000 : expiresAt\n}\n\nfunction shouldUseLocalDevRuntimeToken(endpoints: {runtime: string}): boolean {\n if (!__DEV__) return false\n try {\n const host = new URL(endpoints.runtime).hostname\n return host === \"localhost\" || host === \"127.0.0.1\" || host === \"10.0.2.2\"\n } catch {\n return false\n }\n}\n\nasync function getLocalDevRuntimeToken(runtimeEndpoint: string, opts?: {forceRefresh?: boolean}): Promise<string> {\n const now = Date.now()\n if (\n !opts?.forceRefresh &&\n localDevRuntimeToken?.runtimeUrl === runtimeEndpoint &&\n localDevRuntimeToken.expiresAtMs - now > 60_000\n ) {\n return localDevRuntimeToken.token\n }\n\n const base = new URL(runtimeEndpoint)\n base.port = String(LOCAL_AUTH_PORT)\n base.pathname = \"/api/dev/runtime-token\"\n base.search = new URLSearchParams({userId: \"local-phone-user\", tenantId: \"mentra\"}).toString()\n\n const res = await fetch(base.toString())\n if (!res.ok) {\n throw new Error(`cloudClient: local dev runtime token failed (${res.status})`)\n }\n const body = (await res.json()) as {access_token?: string; expires_in?: number}\n if (!body.access_token) {\n throw new Error(\"cloudClient: local dev runtime token response missing access_token\")\n }\n localDevRuntimeToken = {\n runtimeUrl: runtimeEndpoint,\n token: body.access_token,\n expiresAtMs: now + (body.expires_in ?? 300) * 1000,\n }\n return body.access_token\n}\n\nfunction toCloudClientStatusSnapshot(snapshot: RuntimeSnapshot): CloudClientStatusSnapshot {\n return {status: snapshot.status, audioTransport: snapshot.audioTransport}\n}\n\nfunction currentRuntimeStatus(): CloudClientStatusSnapshot {\n const state = useCloudClientStatusStore.getState()\n return {status: state.status, audioTransport: state.audioTransport}\n}\n\nfunction setRuntimeStatus(snapshot: RuntimeSnapshot): void {\n useCloudClientStatusStore.getState().setSnapshot(snapshot)\n emitStatus(toCloudClientStatusSnapshot(snapshot))\n}\n\nfunction resetRuntimeStatus(): void {\n useCloudClientStatusStore.getState().reset()\n emitStatus(currentRuntimeStatus())\n}\n\nfunction stringifyMeta(meta: unknown): string {\n if (!meta || typeof meta !== \"object\") return \"\"\n try {\n return ` ${JSON.stringify(meta)}`\n } catch {\n return \"\"\n }\n}\n\nconst cloudLogger = {\n debug: (msg: string, meta?: unknown) => console.log(`${LOG_TAG}: debug: ${msg}${stringifyMeta(meta)}`),\n info: (msg: string, meta?: unknown) => console.log(`${LOG_TAG}: info: ${msg}${stringifyMeta(meta)}`),\n warn: (msg: string, meta?: unknown) => console.warn(`${LOG_TAG}: warn: ${msg}${stringifyMeta(meta)}`),\n error: (msg: string, meta?: unknown) => console.warn(`${LOG_TAG}: error: ${msg}${stringifyMeta(meta)}`),\n}\n\nfunction notifyConnectionListeners(next: boolean): void {\n for (const l of connectionListeners) {\n try {\n l(next)\n } catch (err) {\n console.warn(`${LOG_TAG}: connection listener threw: ${(err as Error)?.message ?? err}`)\n }\n }\n}\n\nfunction extractUnsubscribe(sub: unknown): (() => void) | null {\n const candidates: unknown[] = []\n const s = sub as Record<string, unknown> | null | undefined\n if (s && typeof s === \"object\") {\n candidates.push(s)\n candidates.push((s.value as Record<string, unknown>)?.subscription)\n candidates.push((s.data as Record<string, unknown>)?.subscription)\n candidates.push(s.subscription)\n }\n for (const c of candidates) {\n const unsub = (c as {unsubscribe?: unknown})?.unsubscribe\n if (typeof unsub === \"function\") return unsub as () => void\n }\n return null\n}\n\nfunction ensureAuthWatch(): void {\n if (authStateUnsubscribe) return\n authStateUnsubscribe = () => {}\n\n const auth = getAuth()\n if (!auth?.onStateChange) return\n\n let reconnectPending = false\n try {\n const sub = auth.onStateChange((event, session) => {\n if (event === \"SIGNED_OUT\") {\n localMiniappUserIdentity.forget()\n return\n }\n // A new sign-in may belong to a different account. Force the next\n // storage request to resolve and persist that account's Core identity.\n if (event === \"SIGNED_IN\") localMiniappUserIdentity.forget()\n if (!session?.token) return\n if (connected || reconnectPending) return\n\n reconnectPending = true\n console.log(`${LOG_TAG}: auth session available (${event}) while disconnected — reconnecting`)\n try {\n cloudClientService.reconnect()\n } finally {\n setTimeout(() => {\n reconnectPending = false\n }, 0)\n }\n })\n\n const unsub = extractUnsubscribe(sub)\n if (unsub) authStateUnsubscribe = unsub\n } catch (err) {\n console.warn(`${LOG_TAG}: auth watch subscribe failed: ${(err as Error)?.message ?? err}`)\n }\n}\n\nfunction stopAuthWatch(): void {\n authStateUnsubscribe?.()\n authStateUnsubscribe = null\n}\n\nfunction emitTranscript(data: TranscriptionData): void {\n for (const l of transcriptListeners) {\n try {\n l(data)\n } catch (err) {\n console.warn(`${LOG_TAG}: transcript listener threw: ${(err as Error)?.message ?? err}`)\n }\n }\n}\n\nfunction emitTranslation(data: TranslationData): void {\n for (const l of translationListeners) {\n try {\n l(data)\n } catch (err) {\n console.warn(`${LOG_TAG}: translation listener threw: ${(err as Error)?.message ?? err}`)\n }\n }\n}\n\nfunction emitStatus(snapshot: CloudClientStatusSnapshot): void {\n for (const l of statusListeners) {\n try {\n l(snapshot)\n } catch (err) {\n console.warn(`${LOG_TAG}: status listener threw: ${(err as Error)?.message ?? err}`)\n }\n }\n}\n\nfunction ensureTransports(): void {\n if (transportsReady) return\n transportsReady = true\n setNativeUdp(() => createCloudUdpSocket())\n setSecureStorage(cloudSecureStore)\n if (Platform.OS !== \"android\") return\n setNativeHttp(async (input, init) => {\n if (typeof input !== \"string\" || (init?.body != null && typeof init.body !== \"string\")) {\n return globalThis.fetch(input, init)\n }\n const headers = Object.fromEntries(new Headers(init?.headers).entries())\n const result = await CrustModule.nativeHttpRequest(\n init?.method ?? \"GET\",\n input,\n headers,\n (init?.body as string | undefined) ?? null,\n )\n return new Response(nativeHttpResponseBody(result.status, result.body), {\n status: result.status,\n statusText: result.statusText,\n headers: result.headers,\n })\n })\n}\n\nfunction clearRuntimeEventSubscriptions(): void {\n runtimeStatusUnsubscribe?.()\n runtimeStatusUnsubscribe = null\n transcriptUnsubscribe?.()\n transcriptUnsubscribe = null\n translationUnsubscribe?.()\n translationUnsubscribe = null\n}\n\nfunction startLc3FrameSizeWatcher(): void {\n if (lc3FrameSizeUnsubscribe) return\n\n let last = frameSizeBytes()\n lc3FrameSizeUnsubscribe = useSettingsStore.subscribe(\n (state) => state.getSetting(SETTINGS.lc3_frame_size.key),\n () => {\n const next = frameSizeBytes()\n if (next === last) return\n last = next\n if (!client) return\n console.log(`${LOG_TAG}: LC3 frame size changed to ${next}; reconnecting runtime`)\n cloudClientService.reconnect()\n },\n )\n}\n\nfunction stopLc3FrameSizeWatcher(): void {\n lc3FrameSizeUnsubscribe?.()\n lc3FrameSizeUnsubscribe = null\n}\n\nfunction construct(): void {\n ensureTransports()\n\n const endpoints = resolveEndpoints()\n console.log(`${LOG_TAG}: endpoints ${JSON.stringify(endpoints)}`)\n\n const configuredAuth = getAuth()\n if (!configuredAuth) throw new Error(\"cloudClient: engine.configure({auth}) not called\")\n const coreAuth = configuredAuth.getSubjectToken ? {getSubjectToken} : undefined\n const auth = configuredAuth.getRuntimeToken\n ? {\n ...(coreAuth && endpoints.core ? {core: coreAuth} : {}),\n runtime: {getToken: configuredAuth.getRuntimeToken},\n }\n : shouldUseLocalDevRuntimeToken(endpoints)\n ? {\n ...(coreAuth ? {core: coreAuth} : {}),\n runtime: {getToken: (opts?: {forceRefresh?: boolean}) => getLocalDevRuntimeToken(endpoints.runtime, opts)},\n }\n : coreAuth && endpoints.core\n ? {core: coreAuth, runtime: {source: \"core\" as const}}\n : null\n if (!auth) throw new Error(\"cloudClient: no Runtime authentication mode is configured\")\n\n client = new CloudClient({\n endpoints,\n // The phone LC3-encodes mic audio (even in phone/simulated mode); announce\n // LC3 at 16 kHz with the frame size the encoder emits.\n audio: {codec: \"lc3\", sampleRate: 16000, frameSizeBytes: frameSizeBytes()},\n auth,\n authStorageKey: getConfigValues().cloudAuthStorageKey,\n timers: {\n setTimeout: (callback, delayMs) => BgTimer.setTimeout(callback, delayMs),\n clearTimeout: (handle) => BgTimer.clearTimeout(handle as number),\n setInterval: (callback, intervalMs) => BgTimer.setInterval(callback, intervalMs),\n clearInterval: (handle) => BgTimer.clearInterval(handle as number),\n },\n logger: cloudLogger,\n })\n\n const c = client\n clearRuntimeEventSubscriptions()\n runtimeStatusUnsubscribe = c.runtime.onStatusChanged((status) => {\n if (c !== client) return\n setRuntimeStatus(status)\n })\n transcriptUnsubscribe = c.runtime.onTranscript((data) => {\n if (c !== client) return\n logCloudV2TranscriptMetric(data)\n emitTranscript(data)\n })\n translationUnsubscribe = c.runtime.onTranslation((data) => {\n if (c !== client) return\n emitTranslation(data)\n })\n setRuntimeStatus(c.runtime.getStatus())\n\n c.runtime.onConnected(() => {\n if (c !== client) return\n connected = true\n console.log(`${LOG_TAG}: runtime connected`)\n console.log(`${LOG_TAG}: debug: ws-session-debug connected`)\n // Cloud is up — cancel any pending persistent-failure alarm and re-arm for the\n // next outage.\n clearPersistentFailureAlarm()\n // Re-apply the authoritative subscription set, including the empty set, so\n // a fresh phone launch clears any stale server-side audio subscriptions.\n c.runtime\n .setSubscriptions(audioSubscriptions)\n .catch((err) =>\n console.warn(`${LOG_TAG}: re-applying queued subscriptions failed: ${(err as Error)?.message ?? err}`),\n )\n notifyConnectionListeners(true)\n })\n c.runtime.onDisconnected((info) => {\n if (c !== client) return\n connected = false\n console.log(`${LOG_TAG}: runtime disconnected (${info.reason})`)\n console.log(\n `${LOG_TAG}: debug: ws-session-debug disconnected reason=${\n info.reason\n } willStayDown=${/superseded by newer session/i.test(info.reason)}`,\n )\n // Arm the persistent-failure alarm once; if we're still down when it fires, raise\n // the notification. A reconnect within the window cancels it (onConnected above).\n if (!persistentFailureTimer && !persistentFailureNotified) {\n persistentFailureTimer = BgTimer.setTimeout(() => {\n persistentFailureTimer = null\n if (connected) return\n persistentFailureNotified = true\n islandNotifications.emit({\n kind: \"connection_failed_persistent\",\n reason: `Cloud session has been disconnected for over ${Math.round(CLOUD_PERSISTENT_FAILURE_MS / 1000)}s`,\n metadata: {downForMs: CLOUD_PERSISTENT_FAILURE_MS, lastReason: info.reason},\n timestamp: Date.now(),\n })\n }, CLOUD_PERSISTENT_FAILURE_MS)\n }\n notifyConnectionListeners(false)\n })\n c.runtime.onError((err) => {\n console.warn(`${LOG_TAG}: runtime error: ${err.code}`)\n })\n\n if (getConfigValues().runtimeRealtimeSession !== false) {\n // Best-effort connect. Do not crash the app if the dev cloud is unreachable.\n c.runtime\n .connect()\n .then(() => console.log(`${LOG_TAG}: connect() resolved`))\n .catch((err) => console.warn(`${LOG_TAG}: connect() failed: ${err?.message ?? err}`))\n startLc3FrameSizeWatcher()\n } else {\n console.log(`${LOG_TAG}: Runtime live session disabled; REST capabilities remain available`)\n }\n\n if (c.core) {\n syncCoreAccessTokenToBluetooth().catch((err) =>\n console.warn(`${LOG_TAG}: initial Bluetooth core_token sync failed: ${(err as Error)?.message ?? err}`),\n )\n }\n}\n\n/**\n * engine's cloud client. Owns the singleton CloudClient, its connection state,\n * and the runtime-hook wiring.\n */\nexport const cloudClientService = {\n async clearAuthSession(): Promise<void> {\n if (client) {\n await client.auth.clearSession()\n return\n }\n await cloudSecureStore.delete(getConfigValues().cloudAuthStorageKey ?? DEFAULT_REFRESH_TOKEN_KEY)\n },\n\n /**\n * Construct (once) + connect the client. Idempotent. Best-effort connect — a\n * failure is logged and the app keeps running. Requires\n * `engine.configure({auth, config})` first.\n */\n init(): void {\n if (client) return\n ensureAuthWatch()\n construct()\n },\n\n /**\n * Tear down + rebuild. Pass new endpoints to switch URLs; pass `null` to CLEAR\n * a prior override and resume the host resolver or boot config (so cleared/default cloud\n * URLs don't keep reconnecting to a stale override); omit to keep the current.\n */\n reconnect(endpoints?: {core?: string; runtime: string} | null): void {\n if (endpoints !== undefined) endpointsOverride = endpoints\n try {\n client?.runtime.close()\n } catch (err) {\n console.warn(`${LOG_TAG}: reconnect close() failed: ${(err as Error)?.message ?? err}`)\n }\n clearRuntimeEventSubscriptions()\n clearPersistentFailureAlarm()\n\n const wasConnected = connected\n client = null\n localDevRuntimeToken = null\n connected = false\n resetRuntimeStatus()\n if (wasConnected) notifyConnectionListeners(false)\n\n construct()\n },\n\n async getPreinstalledMiniappRegistry(): Promise<PreinstalledMiniappRegistry> {\n if (!client) this.init()\n const c = client\n if (!c?.core) throw new Error(\"cloud client core is unavailable\")\n return c.core.miniapps.getRegistry()\n },\n\n /**\n * Resolve the stable Core-owned Mentra user id.\n *\n * Storage must use this identity rather than the short-lived Core access\n * token. A previously verified id is restored from MMKV so local miniapps\n * remain available after an offline process restart. On first sign-in,\n * callers join the auth module's single-flight exchange/refresh instead of\n * falling back to an anonymous namespace.\n */\n async resolveMentraUserId(): Promise<string> {\n return localMiniappUserIdentity.resolve(async () => {\n const hostIdentity = getAuth()?.getUserId\n if (hostIdentity) return await hostIdentity()\n if (!client) this.init()\n const c = client\n if (!c) throw new Error(\"cloud client not initialized\")\n\n await c.auth.getCoreToken()\n if (c !== client) throw new Error(\"cloud client changed while resolving user identity\")\n return c.auth.identity.mentraUserId\n })\n },\n\n /** Read the stable Mentra user id after async identity resolution. */\n getMentraUserId(): string {\n const userId = localMiniappUserIdentity.get()\n if (!userId) throw new Error(\"Mentra user identity is unavailable\")\n return userId\n },\n\n async getMiniappAuthToken(\n packageName: string,\n opts?: {minTtlMs?: number; devAttestation?: string},\n ): Promise<MiniappAuthToken> {\n if (!client) this.init()\n const c = client\n if (!c) throw new Error(\"cloud client not initialized\")\n\n const {token, expiresAt} = await c.auth.getMiniappToken(packageName, opts)\n const identity = c.auth.identity\n return {\n mentraUserId: identity.mentraUserId,\n tenantId: identity.tenantId,\n token,\n expiresAt: normalizeExpiresAt(expiresAt),\n }\n },\n\n /** Tear down the client + connection (the engine.stop() lifecycle). */\n stop(): void {\n try {\n client?.runtime.close()\n } catch (err) {\n console.warn(`${LOG_TAG}: stop close() failed: ${(err as Error)?.message ?? err}`)\n }\n stopLc3FrameSizeWatcher()\n stopAuthWatch()\n clearRuntimeEventSubscriptions()\n clearPersistentFailureAlarm()\n const wasConnected = connected\n client = null\n // stop() is part of the logout lifecycle and runs before the host emits\n // SIGNED_OUT. Remove the persisted namespace owner here so a later account\n // can never inherit it. A force-stop/process kill does not call stop(), so\n // the cached id still survives the offline cold-start case.\n localMiniappUserIdentity.forget()\n localDevRuntimeToken = null\n connected = false\n resetRuntimeStatus()\n if (wasConnected) notifyConnectionListeners(false)\n },\n\n /** Device-side managed photo (cloud-v2): presign now, deliver bytes, await ready. */\n startManagedPhoto(opts: Record<string, unknown> = {}) {\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.startManagedPhoto(opts)\n },\n awaitManagedPhotoReady(requestId: string) {\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.awaitManagedPhotoReady(requestId)\n },\n\n /** Managed stream (cloud-v2): provision ingest+playback on the runtime. */\n startManagedStream(opts: Record<string, unknown> = {}) {\n if (!isFeatureEnabled(\"managedStreams\")) throw new Error(\"managed streams are disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.startManagedStream(opts)\n },\n getManagedStreamStatus(streamId: string) {\n if (!isFeatureEnabled(\"managedStreams\")) throw new Error(\"managed streams are disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.getManagedStreamStatus(streamId)\n },\n stopManagedStream(streamId: string) {\n if (!isFeatureEnabled(\"managedStreams\")) throw new Error(\"managed streams are disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.stopManagedStream(streamId)\n },\n\n /** Current live-session connection state (handshake completed). */\n isConnected(): boolean {\n return connected\n },\n\n /** Subscribe to connection-state transitions. Returns an unsubscribe fn. */\n onConnectionChange(listener: (connected: boolean) => void): () => void {\n connectionListeners.add(listener)\n return () => {\n connectionListeners.delete(listener)\n }\n },\n\n /** Replace the v2 cloud's audio subscription set for the live session. */\n async setSubscriptions(subs: AudioSubscription[]): Promise<void> {\n // Cache unconditionally so the desired set survives a not-yet-connected\n // session and reconnects; the onConnected handler re-applies the cached set.\n audioSubscriptions = subs\n const c = client\n if (connected && c) {\n await c.runtime.setSubscriptions(subs)\n }\n },\n\n sendAudioFrame(frame: Uint8Array): void {\n client?.runtime.sendAudioFrame(frame)\n },\n\n onTranscript(cb: (d: TranscriptionData) => void): () => void {\n transcriptListeners.add(cb)\n return () => {\n transcriptListeners.delete(cb)\n }\n },\n\n onTranslation(cb: (d: TranslationData) => void): () => void {\n translationListeners.add(cb)\n return () => {\n translationListeners.delete(cb)\n }\n },\n\n getStatus(): CloudClientStatusSnapshot {\n return currentRuntimeStatus()\n },\n\n getCoreUrl(): string {\n const core = resolveEndpoints().core\n if (!core) throw new Error(\"cloud client core is unavailable\")\n return core\n },\n\n hasCore(): boolean {\n return Boolean(client?.core)\n },\n\n syncCoreTokenToBluetooth(): Promise<string> {\n return syncCoreAccessTokenToBluetooth()\n },\n\n onStatusChanged(cb: (snapshot: CloudClientStatusSnapshot) => void): () => void {\n statusListeners.add(cb)\n return () => {\n statusListeners.delete(cb)\n }\n },\n\n tts: {\n speak(text: string, options?: Parameters<CloudClient[\"runtime\"][\"tts\"][\"speak\"]>[1]) {\n if (!isFeatureEnabled(\"cloudSpeech\")) throw new Error(\"cloud speech is disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.tts.speak(text, options)\n },\n },\n\n maps: {\n directions(req: Parameters<CloudClient[\"runtime\"][\"maps\"][\"directions\"]>[0]) {\n if (!isFeatureEnabled(\"navigation\")) throw new Error(\"navigation is disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.maps.directions(req)\n },\n reverseGeocode(coord: Parameters<CloudClient[\"runtime\"][\"maps\"][\"reverseGeocode\"]>[0]) {\n if (!isFeatureEnabled(\"navigation\")) throw new Error(\"navigation is disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.maps.reverseGeocode(coord)\n },\n placeAutocomplete(req: Parameters<CloudClient[\"runtime\"][\"maps\"][\"placeAutocomplete\"]>[0]) {\n if (!isFeatureEnabled(\"navigation\")) throw new Error(\"navigation is disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.maps.placeAutocomplete(req)\n },\n placeDetails(req: Parameters<CloudClient[\"runtime\"][\"maps\"][\"placeDetails\"]>[0]) {\n if (!isFeatureEnabled(\"navigation\")) throw new Error(\"navigation is disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.maps.placeDetails(req)\n },\n },\n\n core: {\n reports: {\n submit(...args: Parameters<CloudCore[\"reports\"][\"submit\"]>) {\n return getCoreClient().reports.submit(...args)\n },\n addLogs(...args: Parameters<CloudCore[\"reports\"][\"addLogs\"]>) {\n return getCoreClient().reports.addLogs(...args)\n },\n addScreenshots(...args: Parameters<CloudCore[\"reports\"][\"addScreenshots\"]>) {\n return getCoreClient().reports.addScreenshots(...args)\n },\n complete(...args: Parameters<CloudCore[\"reports\"][\"complete\"]>) {\n return getCoreClient().reports.complete(...args)\n },\n },\n supportProfile: {\n update(...args: Parameters<CloudCore[\"supportProfile\"][\"update\"]>) {\n return getCoreClient().supportProfile.update(...args)\n },\n },\n },\n\n hasAudioSubscriptions(): boolean {\n return audioSubscriptions.length > 0\n },\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CloudClientService.js","sourceRoot":"","sources":["../../src/services/CloudClientService.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Owns the singleton `@mentra/cloud-client` (CloudClient) for the engine runtime\n * — the keystone move that pulls backend comms INTO engine.\n *\n * engine constructs the client from engine-owned pieces (the native UDP socket,\n * the MMKV secure store, the cloud-status store) plus the two things the host\n * provides through the engine front door: `auth.getSubjectToken` (the one\n * permanent seam — the OEM owns login) and the resolved cloud endpoints\n * (`config.coreUrl/runtimeUrl`, computed host-side from dev/settings). On init it\n * exposes cloud runtime methods directly from this service, so the host no longer\n * injects a cloud adapter — engine owns construction and wiring.\n *\n * The local-miniapp path drives the cloud's transcription/translation through\n * this service.\n */\nimport {CloudClient, setNativeHttp, setNativeUdp, setSecureStorage} from \"@mentra/cloud-client/react-native\"\nimport {DEFAULT_REFRESH_TOKEN_KEY} from \"@mentra/cloud-client\"\nimport type {PreinstalledMiniappRegistry, RuntimeSnapshot} from \"@mentra/cloud-client/react-native\"\nimport type {SubjectTokenType} from \"@mentra/cloud-client\"\nimport {Platform} from \"react-native\"\nimport type {AudioSubscription, TranscriptionData, TranslationData} from \"@mentra/cloud-protocol\"\n\nimport BluetoothSdk from \"@mentra/bluetooth-sdk/internal\"\nimport CrustModule from \"@mentra/crust\"\nimport {getAuth, getConfigValues, isFeatureEnabled} from \"../runtime/bootstrap\"\nimport {useSettingsStore, SETTINGS} from \"../stores/settings\"\nimport {type CloudClientStatusSnapshot, type MiniappAuthToken} from \"../runtime/config\"\nimport {createCloudUdpSocket} from \"../utils/cloudClient/RnUdpAdapter\"\nimport {cloudSecureStore} from \"../utils/cloudClient/cloudSecureStore\"\nimport {storage as mmkvStorage} from \"../utils/storage\"\nimport {useCloudClientStatusStore} from \"../stores/cloudClientStatus\"\nimport {islandNotifications} from \"./NotificationsEmitter\"\nimport {BgTimer} from \"../utils/timers\"\nimport {logCloudV2TranscriptMetric} from \"./CloudTranscriptE2EMetrics\"\nimport {LocalMiniappUserIdentity} from \"./LocalMiniappUserIdentity\"\nimport {nativeHttpResponseBody} from \"./NativeHttpResponse\"\nimport {resolveCloudEndpoints} from \"./cloudEndpointPolicy\"\n\nconst LOG_TAG = \"cloudClient\"\ntype CloudCore = NonNullable<CloudClient[\"core\"]>\n\n// Persistent cloud-disconnect detector: the cloud-client reconnect loop is infinite\n// and never surfaces a \"giving up\" signal, so \"persistent failure\" = the session has\n// been continuously NOT connected for this long. A quick reconnect cancels it; brief\n// flaps that recover don't fire. Raised as engine.notifications(connection_failed_persistent).\nconst CLOUD_PERSISTENT_FAILURE_MS = 60_000\nconst LOCAL_MINIAPP_USER_ID_KEY = \"mentra.localMiniapp.userId\"\n\n/** Cancel the pending persistent-failure alarm + re-arm for the next outage. */\nfunction clearPersistentFailureAlarm(): void {\n if (persistentFailureTimer) {\n BgTimer.clearTimeout(persistentFailureTimer)\n persistentFailureTimer = null\n }\n persistentFailureNotified = false\n}\n\ntype Lc3FrameSizeBytes = 20 | 40 | 60\n\nconst LOCAL_AUTH_PORT = 3002\n\nlet client: CloudClient | null = null\nlet connected = false\nlet persistentFailureTimer: ReturnType<typeof BgTimer.setTimeout> | null = null\nlet persistentFailureNotified = false\nlet audioSubscriptions: AudioSubscription[] = []\nlet transportsReady = false\n/** Endpoints to build with — seeded from config, overridable via reconnect(). */\nlet endpointsOverride: {core?: string; runtime: string} | null = null\nlet runtimeStatusUnsubscribe: (() => void) | null = null\nlet transcriptUnsubscribe: (() => void) | null = null\nlet translationUnsubscribe: (() => void) | null = null\nlet authStateUnsubscribe: (() => void) | null = null\nlet localDevRuntimeToken: {runtimeUrl: string; token: string; expiresAtMs: number} | null = null\nlet lc3FrameSizeUnsubscribe: (() => void) | null = null\nlet coreTokenSyncPromise: Promise<string> | null = null\n\nconst localMiniappUserIdentity = new LocalMiniappUserIdentity({\n get(): string | null {\n const result = mmkvStorage.load<string>(LOCAL_MINIAPP_USER_ID_KEY)\n return result.is_ok() ? result.value : null\n },\n set(userId: string): void {\n const result = mmkvStorage.save(LOCAL_MINIAPP_USER_ID_KEY, userId)\n if (result.is_error()) throw result.error\n },\n remove(): void {\n const result = mmkvStorage.remove(LOCAL_MINIAPP_USER_ID_KEY)\n if (result.is_error()) throw result.error\n },\n})\n\nconst transcriptListeners = new Set<(d: TranscriptionData) => void>()\nconst translationListeners = new Set<(d: TranslationData) => void>()\nconst statusListeners = new Set<(snapshot: CloudClientStatusSnapshot) => void>()\nconst connectionListeners = new Set<(connected: boolean) => void>()\n\nfunction resolveEndpoints(): {core?: string; runtime: string} {\n return resolveCloudEndpoints(getConfigValues(), endpointsOverride)\n}\n\nfunction getCoreClient(): CloudCore {\n if (!client) construct()\n const core = client?.core\n if (!core) throw new Error(\"cloud client core not configured\")\n return core\n}\n\nfunction syncCoreAccessTokenToBluetooth(): Promise<string> {\n if (coreTokenSyncPromise) return coreTokenSyncPromise\n\n coreTokenSyncPromise = syncCoreAccessTokenToBluetoothInternal().finally(() => {\n coreTokenSyncPromise = null\n })\n return coreTokenSyncPromise\n}\n\nasync function syncCoreAccessTokenToBluetoothInternal(): Promise<string> {\n if (!client) construct()\n const c = client\n if (!c) throw new Error(\"cloud client not initialized\")\n\n const token = await c.auth.getCoreToken()\n if (c !== client) {\n throw new Error(\"cloud client changed while syncing core token\")\n }\n localMiniappUserIdentity.remember(c.auth.identity.mentraUserId)\n const result = await useSettingsStore.getState().setSetting(SETTINGS.core_token.key, token, false)\n if (result.is_error()) {\n throw result.error\n }\n\n try {\n await BluetoothSdk.updateBluetoothSettings({[SETTINGS.core_token.key]: token})\n } catch (err) {\n console.warn(`${LOG_TAG}: direct Bluetooth core_token sync failed: ${(err as Error)?.message ?? err}`)\n }\n\n return token\n}\n\nfunction frameSizeBytes(): Lc3FrameSizeBytes {\n // Read LIVE from the engine settings store (the source of truth) so a\n // reconnect after a glasses swap (G1=20 ↔ G2=40) picks up the new frame size,\n // not the one-time engine.configure({config}) snapshot. Falls back to the\n // config value (set at boot) then 20 when the setting is unset.\n const fromSettings = useSettingsStore.getState().getSetting(SETTINGS.lc3_frame_size.key)\n const size = fromSettings ?? getConfigValues().audioFrameSizeBytes\n return size === 20 || size === 40 || size === 60 ? size : 20\n}\n\nasync function getSubjectToken(): Promise<{token: string; type: SubjectTokenType}> {\n const a = getAuth()\n if (!a?.getSubjectToken) throw new Error(\"cloudClient: Core subject-token auth is not configured\")\n const r = await a.getSubjectToken()\n // IslandAuth's SubjectTokenType is intentionally open (`string & {}`) so OEMs\n // can use other token kinds; cloud-client's is a closed union. The host's\n // actual value (\"supabase\") is valid — narrow at this boundary.\n return {token: r.token, type: r.type as SubjectTokenType}\n}\n\nfunction normalizeExpiresAt(expiresAt: number): number {\n return expiresAt < 10_000_000_000 ? expiresAt * 1000 : expiresAt\n}\n\nfunction shouldUseLocalDevRuntimeToken(endpoints: {runtime: string}): boolean {\n if (!__DEV__) return false\n try {\n const host = new URL(endpoints.runtime).hostname\n return host === \"localhost\" || host === \"127.0.0.1\" || host === \"10.0.2.2\"\n } catch {\n return false\n }\n}\n\nasync function getLocalDevRuntimeToken(runtimeEndpoint: string, opts?: {forceRefresh?: boolean}): Promise<string> {\n const now = Date.now()\n if (\n !opts?.forceRefresh &&\n localDevRuntimeToken?.runtimeUrl === runtimeEndpoint &&\n localDevRuntimeToken.expiresAtMs - now > 60_000\n ) {\n return localDevRuntimeToken.token\n }\n\n const base = new URL(runtimeEndpoint)\n base.port = String(LOCAL_AUTH_PORT)\n base.pathname = \"/api/dev/runtime-token\"\n base.search = new URLSearchParams({userId: \"local-phone-user\", tenantId: \"mentra\"}).toString()\n\n const res = await fetch(base.toString())\n if (!res.ok) {\n throw new Error(`cloudClient: local dev runtime token failed (${res.status})`)\n }\n const body = (await res.json()) as {access_token?: string; expires_in?: number}\n if (!body.access_token) {\n throw new Error(\"cloudClient: local dev runtime token response missing access_token\")\n }\n localDevRuntimeToken = {\n runtimeUrl: runtimeEndpoint,\n token: body.access_token,\n expiresAtMs: now + (body.expires_in ?? 300) * 1000,\n }\n return body.access_token\n}\n\nfunction toCloudClientStatusSnapshot(snapshot: RuntimeSnapshot): CloudClientStatusSnapshot {\n return {status: snapshot.status, audioTransport: snapshot.audioTransport}\n}\n\nfunction currentRuntimeStatus(): CloudClientStatusSnapshot {\n const state = useCloudClientStatusStore.getState()\n return {status: state.status, audioTransport: state.audioTransport}\n}\n\nfunction setRuntimeStatus(snapshot: RuntimeSnapshot): void {\n useCloudClientStatusStore.getState().setSnapshot(snapshot)\n emitStatus(toCloudClientStatusSnapshot(snapshot))\n}\n\nfunction resetRuntimeStatus(): void {\n useCloudClientStatusStore.getState().reset()\n emitStatus(currentRuntimeStatus())\n}\n\nfunction stringifyMeta(meta: unknown): string {\n if (!meta || typeof meta !== \"object\") return \"\"\n try {\n return ` ${JSON.stringify(meta)}`\n } catch {\n return \"\"\n }\n}\n\nconst cloudLogger = {\n debug: (msg: string, meta?: unknown) => console.log(`${LOG_TAG}: debug: ${msg}${stringifyMeta(meta)}`),\n info: (msg: string, meta?: unknown) => console.log(`${LOG_TAG}: info: ${msg}${stringifyMeta(meta)}`),\n warn: (msg: string, meta?: unknown) => console.warn(`${LOG_TAG}: warn: ${msg}${stringifyMeta(meta)}`),\n error: (msg: string, meta?: unknown) => console.warn(`${LOG_TAG}: error: ${msg}${stringifyMeta(meta)}`),\n}\n\nfunction notifyConnectionListeners(next: boolean): void {\n for (const l of connectionListeners) {\n try {\n l(next)\n } catch (err) {\n console.warn(`${LOG_TAG}: connection listener threw: ${(err as Error)?.message ?? err}`)\n }\n }\n}\n\nfunction extractUnsubscribe(sub: unknown): (() => void) | null {\n const candidates: unknown[] = []\n const s = sub as Record<string, unknown> | null | undefined\n if (s && typeof s === \"object\") {\n candidates.push(s)\n candidates.push((s.value as Record<string, unknown>)?.subscription)\n candidates.push((s.data as Record<string, unknown>)?.subscription)\n candidates.push(s.subscription)\n }\n for (const c of candidates) {\n const unsub = (c as {unsubscribe?: unknown})?.unsubscribe\n if (typeof unsub === \"function\") return unsub as () => void\n }\n return null\n}\n\nfunction ensureAuthWatch(): void {\n if (authStateUnsubscribe) return\n authStateUnsubscribe = () => {}\n\n const auth = getAuth()\n if (!auth?.onStateChange) return\n\n let reconnectPending = false\n try {\n const sub = auth.onStateChange((event, session) => {\n if (event === \"SIGNED_OUT\") {\n localMiniappUserIdentity.forget()\n return\n }\n // A new sign-in may belong to a different account. Force the next\n // storage request to resolve and persist that account's Core identity.\n if (event === \"SIGNED_IN\") localMiniappUserIdentity.forget()\n if (!session?.token) return\n if (connected || reconnectPending) return\n\n reconnectPending = true\n console.log(`${LOG_TAG}: auth session available (${event}) while disconnected — reconnecting`)\n try {\n cloudClientService.reconnect()\n } finally {\n setTimeout(() => {\n reconnectPending = false\n }, 0)\n }\n })\n\n const unsub = extractUnsubscribe(sub)\n if (unsub) authStateUnsubscribe = unsub\n } catch (err) {\n console.warn(`${LOG_TAG}: auth watch subscribe failed: ${(err as Error)?.message ?? err}`)\n }\n}\n\nfunction stopAuthWatch(): void {\n authStateUnsubscribe?.()\n authStateUnsubscribe = null\n}\n\nfunction emitTranscript(data: TranscriptionData): void {\n for (const l of transcriptListeners) {\n try {\n l(data)\n } catch (err) {\n console.warn(`${LOG_TAG}: transcript listener threw: ${(err as Error)?.message ?? err}`)\n }\n }\n}\n\nfunction emitTranslation(data: TranslationData): void {\n for (const l of translationListeners) {\n try {\n l(data)\n } catch (err) {\n console.warn(`${LOG_TAG}: translation listener threw: ${(err as Error)?.message ?? err}`)\n }\n }\n}\n\nfunction emitStatus(snapshot: CloudClientStatusSnapshot): void {\n for (const l of statusListeners) {\n try {\n l(snapshot)\n } catch (err) {\n console.warn(`${LOG_TAG}: status listener threw: ${(err as Error)?.message ?? err}`)\n }\n }\n}\n\nfunction ensureTransports(): void {\n if (transportsReady) return\n transportsReady = true\n setNativeUdp(() => createCloudUdpSocket())\n setSecureStorage(cloudSecureStore)\n if (Platform.OS !== \"android\") return\n setNativeHttp(async (input, init) => {\n if (typeof input !== \"string\" || (init?.body != null && typeof init.body !== \"string\")) {\n return globalThis.fetch(input, init)\n }\n const headers = Object.fromEntries(new Headers(init?.headers).entries())\n const result = await CrustModule.nativeHttpRequest(\n init?.method ?? \"GET\",\n input,\n headers,\n (init?.body as string | undefined) ?? null,\n )\n return new Response(nativeHttpResponseBody(result.status, result.body), {\n status: result.status,\n statusText: result.statusText,\n headers: result.headers,\n })\n })\n}\n\nfunction clearRuntimeEventSubscriptions(): void {\n runtimeStatusUnsubscribe?.()\n runtimeStatusUnsubscribe = null\n transcriptUnsubscribe?.()\n transcriptUnsubscribe = null\n translationUnsubscribe?.()\n translationUnsubscribe = null\n}\n\nfunction startLc3FrameSizeWatcher(): void {\n if (lc3FrameSizeUnsubscribe) return\n\n let last = frameSizeBytes()\n lc3FrameSizeUnsubscribe = useSettingsStore.subscribe(\n (state) => state.getSetting(SETTINGS.lc3_frame_size.key),\n () => {\n const next = frameSizeBytes()\n if (next === last) return\n last = next\n if (!client) return\n console.log(`${LOG_TAG}: LC3 frame size changed to ${next}; reconnecting runtime`)\n cloudClientService.reconnect()\n },\n )\n}\n\nfunction stopLc3FrameSizeWatcher(): void {\n lc3FrameSizeUnsubscribe?.()\n lc3FrameSizeUnsubscribe = null\n}\n\nfunction construct(): void {\n ensureTransports()\n\n const endpoints = resolveEndpoints()\n console.log(`${LOG_TAG}: endpoints ${JSON.stringify(endpoints)}`)\n\n const configuredAuth = getAuth()\n if (!configuredAuth) throw new Error(\"cloudClient: engine.configure({auth}) not called\")\n const coreAuth = configuredAuth.getSubjectToken ? {getSubjectToken} : undefined\n const auth = configuredAuth.getRuntimeToken\n ? {\n ...(coreAuth && endpoints.core ? {core: coreAuth} : {}),\n runtime: {getToken: configuredAuth.getRuntimeToken},\n }\n : shouldUseLocalDevRuntimeToken(endpoints)\n ? {\n ...(coreAuth ? {core: coreAuth} : {}),\n runtime: {getToken: (opts?: {forceRefresh?: boolean}) => getLocalDevRuntimeToken(endpoints.runtime, opts)},\n }\n : coreAuth && endpoints.core\n ? {core: coreAuth, runtime: {source: \"core\" as const}}\n : null\n if (!auth) throw new Error(\"cloudClient: no Runtime authentication mode is configured\")\n\n client = new CloudClient({\n endpoints,\n // The phone LC3-encodes mic audio (even in phone/simulated mode); announce\n // LC3 at 16 kHz with the frame size the encoder emits.\n audio: {codec: \"lc3\", sampleRate: 16000, frameSizeBytes: frameSizeBytes()},\n auth,\n authStorageKey: getConfigValues().cloudAuthStorageKey,\n timers: {\n setTimeout: (callback, delayMs) => BgTimer.setTimeout(callback, delayMs),\n clearTimeout: (handle) => BgTimer.clearTimeout(handle as number),\n setInterval: (callback, intervalMs) => BgTimer.setInterval(callback, intervalMs),\n clearInterval: (handle) => BgTimer.clearInterval(handle as number),\n },\n logger: cloudLogger,\n })\n\n const c = client\n clearRuntimeEventSubscriptions()\n runtimeStatusUnsubscribe = c.runtime.onStatusChanged((status) => {\n if (c !== client) return\n setRuntimeStatus(status)\n })\n transcriptUnsubscribe = c.runtime.onTranscript((data) => {\n if (c !== client) return\n logCloudV2TranscriptMetric(data)\n emitTranscript(data)\n })\n translationUnsubscribe = c.runtime.onTranslation((data) => {\n if (c !== client) return\n emitTranslation(data)\n })\n setRuntimeStatus(c.runtime.getStatus())\n\n c.runtime.onConnected(() => {\n if (c !== client) return\n connected = true\n console.log(`${LOG_TAG}: runtime connected`)\n console.log(`${LOG_TAG}: debug: ws-session-debug connected`)\n // Cloud is up — cancel any pending persistent-failure alarm and re-arm for the\n // next outage.\n clearPersistentFailureAlarm()\n // Re-apply the authoritative subscription set, including the empty set, so\n // a fresh phone launch clears any stale server-side audio subscriptions.\n c.runtime\n .setSubscriptions(audioSubscriptions)\n .catch((err) =>\n console.warn(`${LOG_TAG}: re-applying queued subscriptions failed: ${(err as Error)?.message ?? err}`),\n )\n notifyConnectionListeners(true)\n })\n c.runtime.onDisconnected((info) => {\n if (c !== client) return\n connected = false\n console.log(`${LOG_TAG}: runtime disconnected (${info.reason})`)\n console.log(\n `${LOG_TAG}: debug: ws-session-debug disconnected reason=${\n info.reason\n } willStayDown=${/superseded by newer session/i.test(info.reason)}`,\n )\n // Arm the persistent-failure alarm once; if we're still down when it fires, raise\n // the notification. A reconnect within the window cancels it (onConnected above).\n if (!persistentFailureTimer && !persistentFailureNotified) {\n persistentFailureTimer = BgTimer.setTimeout(() => {\n persistentFailureTimer = null\n if (connected) return\n persistentFailureNotified = true\n islandNotifications.emit({\n kind: \"connection_failed_persistent\",\n reason: `Cloud session has been disconnected for over ${Math.round(CLOUD_PERSISTENT_FAILURE_MS / 1000)}s`,\n metadata: {downForMs: CLOUD_PERSISTENT_FAILURE_MS, lastReason: info.reason},\n timestamp: Date.now(),\n })\n }, CLOUD_PERSISTENT_FAILURE_MS)\n }\n notifyConnectionListeners(false)\n })\n c.runtime.onError((err) => {\n console.warn(`${LOG_TAG}: runtime error: ${err.code}`)\n })\n\n if (getConfigValues().runtimeRealtimeSession !== false) {\n // Best-effort connect. Do not crash the app if the dev cloud is unreachable.\n c.runtime\n .connect()\n .then(() => console.log(`${LOG_TAG}: connect() resolved`))\n .catch((err) => console.warn(`${LOG_TAG}: connect() failed: ${err?.message ?? err}`))\n startLc3FrameSizeWatcher()\n } else {\n console.log(`${LOG_TAG}: Runtime live session disabled; REST capabilities remain available`)\n }\n\n if (c.core) {\n syncCoreAccessTokenToBluetooth().catch((err) =>\n console.warn(`${LOG_TAG}: initial Bluetooth core_token sync failed: ${(err as Error)?.message ?? err}`),\n )\n }\n}\n\n/**\n * engine's cloud client. Owns the singleton CloudClient, its connection state,\n * and the runtime-hook wiring.\n */\nexport const cloudClientService = {\n async clearAuthSession(): Promise<void> {\n if (client) {\n await client.auth.clearSession()\n return\n }\n await cloudSecureStore.delete(getConfigValues().cloudAuthStorageKey ?? DEFAULT_REFRESH_TOKEN_KEY)\n },\n\n /**\n * Construct (once) + connect the client. Idempotent. Best-effort connect — a\n * failure is logged and the app keeps running. Requires\n * `engine.configure({auth, config})` first.\n */\n init(): void {\n if (client) return\n ensureAuthWatch()\n construct()\n },\n\n /**\n * Tear down + rebuild. Pass new endpoints to switch URLs; pass `null` to CLEAR\n * a prior override and resume the host resolver or boot config (so cleared/default cloud\n * URLs don't keep reconnecting to a stale override); omit to keep the current.\n */\n reconnect(endpoints?: {core?: string; runtime: string} | null): void {\n if (endpoints !== undefined) endpointsOverride = endpoints\n try {\n client?.runtime.close()\n } catch (err) {\n console.warn(`${LOG_TAG}: reconnect close() failed: ${(err as Error)?.message ?? err}`)\n }\n clearRuntimeEventSubscriptions()\n clearPersistentFailureAlarm()\n\n const wasConnected = connected\n client = null\n localDevRuntimeToken = null\n connected = false\n resetRuntimeStatus()\n if (wasConnected) notifyConnectionListeners(false)\n\n construct()\n },\n\n async getPreinstalledMiniappRegistry(): Promise<PreinstalledMiniappRegistry> {\n if (!client) this.init()\n const c = client\n if (!c?.core) throw new Error(\"cloud client core is unavailable\")\n return c.core.miniapps.getRegistry()\n },\n\n /**\n * Resolve the stable Core-owned Mentra user id.\n *\n * Storage must use this identity rather than the short-lived Core access\n * token. A previously verified id is restored from MMKV so local miniapps\n * remain available after an offline process restart. On first sign-in,\n * callers join the auth module's single-flight exchange/refresh instead of\n * falling back to an anonymous namespace.\n */\n async resolveMentraUserId(): Promise<string> {\n return localMiniappUserIdentity.resolve(async () => {\n const hostIdentity = getAuth()?.getUserId\n if (hostIdentity) return await hostIdentity()\n if (!client) this.init()\n const c = client\n if (!c) throw new Error(\"cloud client not initialized\")\n\n await c.auth.getCoreToken()\n if (c !== client) throw new Error(\"cloud client changed while resolving user identity\")\n return c.auth.identity.mentraUserId\n })\n },\n\n /** Read the stable Mentra user id after async identity resolution. */\n getMentraUserId(): string {\n const userId = localMiniappUserIdentity.get()\n if (!userId) throw new Error(\"Mentra user identity is unavailable\")\n return userId\n },\n\n async getMiniappAuthToken(\n packageName: string,\n opts?: {minTtlMs?: number; devAttestation?: string},\n ): Promise<MiniappAuthToken> {\n if (!client) this.init()\n const c = client\n if (!c) throw new Error(\"cloud client not initialized\")\n\n const {token, expiresAt} = await c.auth.getMiniappToken(packageName, opts)\n const identity = c.auth.identity\n return {\n mentraUserId: identity.mentraUserId,\n tenantId: identity.tenantId,\n token,\n expiresAt: normalizeExpiresAt(expiresAt),\n }\n },\n\n /** Tear down the client + connection (the engine.stop() lifecycle). */\n stop(): void {\n try {\n client?.runtime.close()\n } catch (err) {\n console.warn(`${LOG_TAG}: stop close() failed: ${(err as Error)?.message ?? err}`)\n }\n stopLc3FrameSizeWatcher()\n stopAuthWatch()\n clearRuntimeEventSubscriptions()\n clearPersistentFailureAlarm()\n const wasConnected = connected\n client = null\n // stop() is part of the logout lifecycle and runs before the host emits\n // SIGNED_OUT. Remove the persisted namespace owner here so a later account\n // can never inherit it. A force-stop/process kill does not call stop(), so\n // the cached id still survives the offline cold-start case.\n localMiniappUserIdentity.forget()\n localDevRuntimeToken = null\n connected = false\n resetRuntimeStatus()\n if (wasConnected) notifyConnectionListeners(false)\n },\n\n /** Device-side managed photo (cloud-v2): presign now, deliver bytes, await ready. */\n startManagedPhoto() {\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.startManagedPhoto()\n },\n awaitManagedPhotoReady(requestId: string) {\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.awaitManagedPhotoReady(requestId)\n },\n\n /** Managed stream (cloud-v2): provision ingest+playback on the runtime. */\n startManagedStream(opts: Record<string, unknown> = {}) {\n if (!isFeatureEnabled(\"managedStreams\")) throw new Error(\"managed streams are disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.startManagedStream(opts)\n },\n getManagedStreamStatus(streamId: string) {\n if (!isFeatureEnabled(\"managedStreams\")) throw new Error(\"managed streams are disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.getManagedStreamStatus(streamId)\n },\n stopManagedStream(streamId: string) {\n if (!isFeatureEnabled(\"managedStreams\")) throw new Error(\"managed streams are disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.stopManagedStream(streamId)\n },\n\n /** Current live-session connection state (handshake completed). */\n isConnected(): boolean {\n return connected\n },\n\n /** Subscribe to connection-state transitions. Returns an unsubscribe fn. */\n onConnectionChange(listener: (connected: boolean) => void): () => void {\n connectionListeners.add(listener)\n return () => {\n connectionListeners.delete(listener)\n }\n },\n\n /** Replace the v2 cloud's audio subscription set for the live session. */\n async setSubscriptions(subs: AudioSubscription[]): Promise<void> {\n // Cache unconditionally so the desired set survives a not-yet-connected\n // session and reconnects; the onConnected handler re-applies the cached set.\n audioSubscriptions = subs\n const c = client\n if (connected && c) {\n await c.runtime.setSubscriptions(subs)\n }\n },\n\n sendAudioFrame(frame: Uint8Array): void {\n client?.runtime.sendAudioFrame(frame)\n },\n\n onTranscript(cb: (d: TranscriptionData) => void): () => void {\n transcriptListeners.add(cb)\n return () => {\n transcriptListeners.delete(cb)\n }\n },\n\n onTranslation(cb: (d: TranslationData) => void): () => void {\n translationListeners.add(cb)\n return () => {\n translationListeners.delete(cb)\n }\n },\n\n getStatus(): CloudClientStatusSnapshot {\n return currentRuntimeStatus()\n },\n\n getCoreUrl(): string {\n const core = resolveEndpoints().core\n if (!core) throw new Error(\"cloud client core is unavailable\")\n return core\n },\n\n hasCore(): boolean {\n return Boolean(client?.core)\n },\n\n syncCoreTokenToBluetooth(): Promise<string> {\n return syncCoreAccessTokenToBluetooth()\n },\n\n onStatusChanged(cb: (snapshot: CloudClientStatusSnapshot) => void): () => void {\n statusListeners.add(cb)\n return () => {\n statusListeners.delete(cb)\n }\n },\n\n tts: {\n speak(text: string, options?: Parameters<CloudClient[\"runtime\"][\"tts\"][\"speak\"]>[1]) {\n if (!isFeatureEnabled(\"cloudSpeech\")) throw new Error(\"cloud speech is disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.tts.speak(text, options)\n },\n },\n\n maps: {\n directions(req: Parameters<CloudClient[\"runtime\"][\"maps\"][\"directions\"]>[0]) {\n if (!isFeatureEnabled(\"navigation\")) throw new Error(\"navigation is disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.maps.directions(req)\n },\n reverseGeocode(coord: Parameters<CloudClient[\"runtime\"][\"maps\"][\"reverseGeocode\"]>[0]) {\n if (!isFeatureEnabled(\"navigation\")) throw new Error(\"navigation is disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.maps.reverseGeocode(coord)\n },\n placeAutocomplete(req: Parameters<CloudClient[\"runtime\"][\"maps\"][\"placeAutocomplete\"]>[0]) {\n if (!isFeatureEnabled(\"navigation\")) throw new Error(\"navigation is disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.maps.placeAutocomplete(req)\n },\n placeDetails(req: Parameters<CloudClient[\"runtime\"][\"maps\"][\"placeDetails\"]>[0]) {\n if (!isFeatureEnabled(\"navigation\")) throw new Error(\"navigation is disabled by this deployment\")\n if (!client) throw new Error(\"cloud client not connected\")\n return client.runtime.maps.placeDetails(req)\n },\n },\n\n core: {\n reports: {\n submit(...args: Parameters<CloudCore[\"reports\"][\"submit\"]>) {\n return getCoreClient().reports.submit(...args)\n },\n addLogs(...args: Parameters<CloudCore[\"reports\"][\"addLogs\"]>) {\n return getCoreClient().reports.addLogs(...args)\n },\n addScreenshots(...args: Parameters<CloudCore[\"reports\"][\"addScreenshots\"]>) {\n return getCoreClient().reports.addScreenshots(...args)\n },\n complete(...args: Parameters<CloudCore[\"reports\"][\"complete\"]>) {\n return getCoreClient().reports.complete(...args)\n },\n },\n supportProfile: {\n update(...args: Parameters<CloudCore[\"supportProfile\"][\"update\"]>) {\n return getCoreClient().supportProfile.update(...args)\n },\n },\n },\n\n hasAudioSubscriptions(): boolean {\n return audioSubscriptions.length > 0\n },\n}\n"]}
|
|
@@ -51,6 +51,16 @@ declare class LocalMiniappRuntime {
|
|
|
51
51
|
* before the first `await` and is what every later stage checks itself against.
|
|
52
52
|
*/
|
|
53
53
|
private softapAttempt;
|
|
54
|
+
/**
|
|
55
|
+
* The outer generation. Every async callback that can outlive an attempt checks itself against
|
|
56
|
+
* it and traces `softap_stale_callback` when it loses: ACS state, SoftAP progress, glasses
|
|
57
|
+
* stream status, scoped-network loss, and each checkpoint through the join.
|
|
58
|
+
*
|
|
59
|
+
* There are inner generations below this one — `AcsMeetingSession.joinGeneration` and
|
|
60
|
+
* `LocalWhipIngestSource.generation` — and they are not redundant. They fence work inside one
|
|
61
|
+
* native session against itself; this one fences whole attempts against each other, and only it
|
|
62
|
+
* knows that the wearer pressed Cancel before any of that native work existed.
|
|
63
|
+
*/
|
|
54
64
|
private softapAttemptSeq;
|
|
55
65
|
/**
|
|
56
66
|
* Why the previous SoftAP call's cleanup failed, if it did.
|
|
@@ -59,6 +69,13 @@ declare class LocalMiniappRuntime {
|
|
|
59
69
|
* would not turn off is precisely what makes the next call fail somewhere far less legible.
|
|
60
70
|
*/
|
|
61
71
|
private softapCleanupError;
|
|
72
|
+
/**
|
|
73
|
+
* SoftAP teardown disables the glasses hotspot from the transport and again
|
|
74
|
+
* from the host barrier. Native used to throw `request_in_flight` on the
|
|
75
|
+
* second call, which was recorded as a cleanup failure and refused the next
|
|
76
|
+
* join. One queue so those overlapping disables wait their turn.
|
|
77
|
+
*/
|
|
78
|
+
private glassesHotspotCommand;
|
|
62
79
|
/** Connected miniapps keyed by packageName. */
|
|
63
80
|
private connectedApps;
|
|
64
81
|
/**
|
|
@@ -368,6 +385,15 @@ declare class LocalMiniappRuntime {
|
|
|
368
385
|
* `permission`; the caller must return without doing the work.
|
|
369
386
|
*/
|
|
370
387
|
private requireManifestPermission;
|
|
388
|
+
/**
|
|
389
|
+
* OS-permission gate: checked, never requested.
|
|
390
|
+
*
|
|
391
|
+
* The prompt belongs at miniapp-open time, where it can be explained. Requesting here would put
|
|
392
|
+
* a system dialog on top of a join that has already started building a hotspot, and a wearer who
|
|
393
|
+
* denies it gets a call that half-exists. Missing means the join is refused with the permission
|
|
394
|
+
* named, so the miniapp can send them to Settings.
|
|
395
|
+
*/
|
|
396
|
+
private requireOsPermission;
|
|
371
397
|
private handlePhoto;
|
|
372
398
|
private handleCameraWarmUp;
|
|
373
399
|
private handleVideoRecordingStart;
|
|
@@ -445,6 +471,31 @@ declare class LocalMiniappRuntime {
|
|
|
445
471
|
* is what lets the next call start on leaked state.
|
|
446
472
|
*/
|
|
447
473
|
private teardownSoftapAttempt;
|
|
474
|
+
private setGlassesHotspotState;
|
|
475
|
+
/**
|
|
476
|
+
* The last two gates, and the point where a timeout stops being treated as consent.
|
|
477
|
+
*
|
|
478
|
+
* Four things have to be true before the next call may start: this device is out of the ACS
|
|
479
|
+
* call, the WHIP listener's port is released, the glasses have acknowledged their hotspot off,
|
|
480
|
+
* and the phone has a validated default route again. The first and last already ran; this adds
|
|
481
|
+
* the two that were never waited for at all, and the ones that produced the stop-then-start
|
|
482
|
+
* failure — the listener was still inside its 3s tombstone and the glasses AP was still up.
|
|
483
|
+
*
|
|
484
|
+
* A bound that expires is not success. It means the resource is still held by a call nobody is
|
|
485
|
+
* in any more, so it is taken by force and re-verified. Only if *that* fails does the next join
|
|
486
|
+
* get refused, which is a worse outcome than a slow teardown and a better one than two calls
|
|
487
|
+
* sharing a port.
|
|
488
|
+
*
|
|
489
|
+
* @returns failures to record; a non-empty list refuses the next join.
|
|
490
|
+
*/
|
|
491
|
+
private settleSoftapTeardown;
|
|
492
|
+
/**
|
|
493
|
+
* Take back what the bounded waits could not confirm was released.
|
|
494
|
+
*
|
|
495
|
+
* Runs only after a gate timed out, and re-verifies rather than assuming: the whole reason the
|
|
496
|
+
* barrier exists is that "it has probably finished by now" is what broke restarts.
|
|
497
|
+
*/
|
|
498
|
+
private forceSoftapCleanup;
|
|
448
499
|
private handleMeetingLeave;
|
|
449
500
|
/**
|
|
450
501
|
* End the meeting for everyone, then tear this device down.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalMiniappRuntime.d.ts","sourceRoot":"","sources":["../../src/services/LocalMiniappRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"LocalMiniappRuntime.d.ts","sourceRoot":"","sources":["../../src/services/LocalMiniappRuntime.ts"],"names":[],"mappings":"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"}
|