@mentra/bluetooth-sdk 3.2.0-dev.255 → 3.2.0-dev.259
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/android/src/main/java/com/mentra/bluetoothsdk/GeneratedReleaseMetadata.kt +5 -5
- package/android/src/main/java/com/mentra/bluetoothsdk/streaming/StreamModels.kt +3 -0
- package/android/src/test/java/com/mentra/bluetoothsdk/StreamRequestTest.kt +134 -0
- package/android/src/test/java/com/mentra/bluetoothsdk/utils/BleJsonCompactTest.java +31 -0
- package/build/BluetoothSdk.types.d.ts +2 -0
- package/build/BluetoothSdk.types.d.ts.map +1 -1
- package/build/BluetoothSdk.types.js.map +1 -1
- package/build/_private/BluetoothSdkModule.d.ts.map +1 -1
- package/build/_private/BluetoothSdkModule.js +5 -0
- package/build/_private/BluetoothSdkModule.js.map +1 -1
- package/build/_private/streamRequestPayload.d.ts +8 -0
- package/build/_private/streamRequestPayload.d.ts.map +1 -0
- package/build/_private/streamRequestPayload.js +42 -0
- package/build/_private/streamRequestPayload.js.map +1 -0
- package/build/generated/releaseMetadata.js +5 -5
- package/build/generated/releaseMetadata.js.map +1 -1
- package/ios/Source/BluetoothSdkDefaults.swift +1 -1
- package/ios/Source/GeneratedReleaseMetadata.swift +5 -5
- package/ios/Source/streaming/StreamModels.swift +18 -2
- package/ios/Tests/StreamRequestTests.swift +113 -0
- package/package.json +2 -2
- package/src/BluetoothSdk.types.ts +2 -0
- package/src/_private/BluetoothSdkModule.ts +9 -0
- package/src/_private/streamRequestPayload.ts +43 -0
- package/src/generated/releaseMetadata.ts +5 -5
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalizes stream start request parameters for the native module bridge.
|
|
3
|
+
* Preserves omission of telemetry when undefined so the glasses use their build default,
|
|
4
|
+
* and forwards explicit true / false.
|
|
5
|
+
*/
|
|
6
|
+
export function streamRequestParamsForNative(params) {
|
|
7
|
+
const payload = {
|
|
8
|
+
streamUrl: params.streamUrl,
|
|
9
|
+
};
|
|
10
|
+
if (params.type !== undefined) {
|
|
11
|
+
payload.type = params.type;
|
|
12
|
+
}
|
|
13
|
+
if (params.streamId !== undefined) {
|
|
14
|
+
payload.streamId = params.streamId;
|
|
15
|
+
}
|
|
16
|
+
if (params.sound !== undefined) {
|
|
17
|
+
payload.sound = params.sound;
|
|
18
|
+
}
|
|
19
|
+
if (params.video !== undefined) {
|
|
20
|
+
payload.video = params.video;
|
|
21
|
+
}
|
|
22
|
+
if (params.audio !== undefined) {
|
|
23
|
+
payload.audio = params.audio;
|
|
24
|
+
}
|
|
25
|
+
if (params.ice !== undefined) {
|
|
26
|
+
payload.ice = params.ice;
|
|
27
|
+
}
|
|
28
|
+
if (params.captureAudio !== undefined) {
|
|
29
|
+
payload.captureAudio = params.captureAudio;
|
|
30
|
+
}
|
|
31
|
+
if (params.traceId !== undefined && params.traceId.length > 0) {
|
|
32
|
+
payload.traceId = params.traceId;
|
|
33
|
+
}
|
|
34
|
+
if (params.authToken !== undefined && params.authToken.length > 0) {
|
|
35
|
+
payload.authToken = params.authToken;
|
|
36
|
+
}
|
|
37
|
+
if (params.telemetry !== undefined) {
|
|
38
|
+
payload.telemetry = params.telemetry;
|
|
39
|
+
}
|
|
40
|
+
return payload;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=streamRequestPayload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamRequestPayload.js","sourceRoot":"","sources":["../../src/_private/streamRequestPayload.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAA0B;IACrE,MAAM,OAAO,GAA4B;QACvC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAA;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAC5B,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;IACpC,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IAC9B,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IAC9B,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IAC9B,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;IAC1B,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;IAC5C,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IAClC,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;IACtC,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;IACtC,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC","sourcesContent":["import type {StreamStartRequest} from \"../BluetoothSdk.types\"\n\n/**\n * Normalizes stream start request parameters for the native module bridge.\n * Preserves omission of telemetry when undefined so the glasses use their build default,\n * and forwards explicit true / false.\n */\nexport function streamRequestParamsForNative(params: StreamStartRequest): Record<string, unknown> {\n const payload: Record<string, unknown> = {\n streamUrl: params.streamUrl,\n }\n if (params.type !== undefined) {\n payload.type = params.type\n }\n if (params.streamId !== undefined) {\n payload.streamId = params.streamId\n }\n if (params.sound !== undefined) {\n payload.sound = params.sound\n }\n if (params.video !== undefined) {\n payload.video = params.video\n }\n if (params.audio !== undefined) {\n payload.audio = params.audio\n }\n if (params.ice !== undefined) {\n payload.ice = params.ice\n }\n if (params.captureAudio !== undefined) {\n payload.captureAudio = params.captureAudio\n }\n if (params.traceId !== undefined && params.traceId.length > 0) {\n payload.traceId = params.traceId\n }\n if (params.authToken !== undefined && params.authToken.length > 0) {\n payload.authToken = params.authToken\n }\n if (params.telemetry !== undefined) {\n payload.telemetry = params.telemetry\n }\n return payload\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export const BLUETOOTH_SDK_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.259",
|
|
5
|
+
"releaseSetId": "mentra-3.2.0-dev.259",
|
|
6
|
+
"sourceCommit": "a813257666fd73103cf743ec50a4a158ed021d41",
|
|
7
|
+
"otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.259.json",
|
|
8
|
+
"otaManifestSha256": "b72673f29592ac9357d40b639d093bd50914c8f6f0f4bb02cf0f4fe03fbf0f38"
|
|
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,8BAA8B,GAA0C,MAAM,CAAC,MAAM,CAAC;IACjG,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 BluetoothSdkReleaseMetadata {\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 BLUETOOTH_SDK_RELEASE_METADATA: Readonly<BluetoothSdkReleaseMetadata> = 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,8BAA8B,GAA0C,MAAM,CAAC,MAAM,CAAC;IACjG,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 BluetoothSdkReleaseMetadata {\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 BLUETOOTH_SDK_RELEASE_METADATA: Readonly<BluetoothSdkReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"3.2.0\",\n \"releaseIdentity\": \"3.2.0-dev.259\",\n \"releaseSetId\": \"mentra-3.2.0-dev.259\",\n \"sourceCommit\": \"a813257666fd73103cf743ec50a4a158ed021d41\",\n \"otaManifestUrl\": \"https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.259.json\",\n \"otaManifestSha256\": \"b72673f29592ac9357d40b639d093bd50914c8f6f0f4bb02cf0f4fe03fbf0f38\"\n})\n"]}
|
|
@@ -11,7 +11,7 @@ enum BluetoothSdkDefaults {
|
|
|
11
11
|
static let voiceActivityDetectionEnabled = false
|
|
12
12
|
static let loudnessGateEnabled = false
|
|
13
13
|
private static let infoSdkVersionKey = "MentraBluetoothSdkVersion"
|
|
14
|
-
private static let swiftPackageSdkVersion = "3.2.0-dev.
|
|
14
|
+
private static let swiftPackageSdkVersion = "3.2.0-dev.259"
|
|
15
15
|
private static let swiftPackageSdkVersionPlaceholder = "__MENTRA" + "_BLUETOOTH_SDK_VERSION__"
|
|
16
16
|
|
|
17
17
|
private static func normalizedSdkVersion(_ value: String?) -> String? {
|
|
@@ -3,9 +3,9 @@ import Foundation
|
|
|
3
3
|
/// Generated by release CI. Do not edit in a release checkout.
|
|
4
4
|
enum GeneratedReleaseMetadata {
|
|
5
5
|
static let familyBaseVersion = "3.2.0"
|
|
6
|
-
static let releaseIdentity = "3.2.0-dev.
|
|
7
|
-
static let releaseSetId = "mentra-3.2.0-dev.
|
|
8
|
-
static let sourceCommit = "
|
|
9
|
-
static let otaManifestUrl = "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.
|
|
10
|
-
static let otaManifestSha256 = "
|
|
6
|
+
static let releaseIdentity = "3.2.0-dev.259"
|
|
7
|
+
static let releaseSetId = "mentra-3.2.0-dev.259"
|
|
8
|
+
static let sourceCommit = "a813257666fd73103cf743ec50a4a158ed021d41"
|
|
9
|
+
static let otaManifestUrl = "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.259.json"
|
|
10
|
+
static let otaManifestSha256 = "b72673f29592ac9357d40b639d093bd50914c8f6f0f4bb02cf0f4fe03fbf0f38"
|
|
11
11
|
}
|
|
@@ -330,6 +330,7 @@ public struct StreamRequest {
|
|
|
330
330
|
/// Correlation id the glasses echo in every SOFTAP_TRACE line, so phone and glasses logs can
|
|
331
331
|
/// be joined despite unsynchronised clocks.
|
|
332
332
|
public let traceId: String?
|
|
333
|
+
public let telemetry: Bool?
|
|
333
334
|
|
|
334
335
|
public init(
|
|
335
336
|
streamUrl: String,
|
|
@@ -340,7 +341,8 @@ public struct StreamRequest {
|
|
|
340
341
|
authToken: String? = nil,
|
|
341
342
|
captureAudio: Bool = true,
|
|
342
343
|
ice: StreamIceConfig? = nil,
|
|
343
|
-
traceId: String? = nil
|
|
344
|
+
traceId: String? = nil,
|
|
345
|
+
telemetry: Bool? = nil
|
|
344
346
|
) {
|
|
345
347
|
self.streamUrl = streamUrl
|
|
346
348
|
self.streamId = streamId
|
|
@@ -351,9 +353,19 @@ public struct StreamRequest {
|
|
|
351
353
|
self.captureAudio = captureAudio
|
|
352
354
|
self.ice = ice
|
|
353
355
|
self.traceId = traceId
|
|
356
|
+
self.telemetry = telemetry
|
|
354
357
|
}
|
|
355
358
|
|
|
356
359
|
init(values: [String: Any]) {
|
|
360
|
+
let telemetryValue: Bool?
|
|
361
|
+
if let telemetry = values["telemetry"] as? Bool {
|
|
362
|
+
telemetryValue = telemetry
|
|
363
|
+
} else if let tl = values["tl"] as? Bool {
|
|
364
|
+
telemetryValue = tl
|
|
365
|
+
} else {
|
|
366
|
+
telemetryValue = nil
|
|
367
|
+
}
|
|
368
|
+
|
|
357
369
|
self.init(
|
|
358
370
|
streamUrl: values["streamUrl"] as? String
|
|
359
371
|
?? values["rtmpUrl"] as? String
|
|
@@ -369,7 +381,8 @@ public struct StreamRequest {
|
|
|
369
381
|
ice: StreamIceConfig(
|
|
370
382
|
values: (values["ice"] as? [String: Any]) ?? (values["i"] as? [String: Any])
|
|
371
383
|
),
|
|
372
|
-
traceId: values["traceId"] as? String
|
|
384
|
+
traceId: values["traceId"] as? String,
|
|
385
|
+
telemetry: telemetryValue
|
|
373
386
|
)
|
|
374
387
|
}
|
|
375
388
|
|
|
@@ -397,6 +410,9 @@ public struct StreamRequest {
|
|
|
397
410
|
if let traceId, !traceId.isEmpty {
|
|
398
411
|
values["traceId"] = traceId
|
|
399
412
|
}
|
|
413
|
+
if let telemetry {
|
|
414
|
+
values["telemetry"] = telemetry
|
|
415
|
+
}
|
|
400
416
|
return values
|
|
401
417
|
}
|
|
402
418
|
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
@testable import MentraBluetoothSDK
|
|
2
|
+
import XCTest
|
|
3
|
+
|
|
4
|
+
final class StreamRequestTests: XCTestCase {
|
|
5
|
+
|
|
6
|
+
func testOmissionPreservesBuildDefaultInValues() {
|
|
7
|
+
let request = StreamRequest(
|
|
8
|
+
streamUrl: "https://example.com/whip",
|
|
9
|
+
streamId: "s-1"
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
XCTAssertNil(request.telemetry)
|
|
13
|
+
XCTAssertNil(request.values["telemetry"])
|
|
14
|
+
XCTAssertNil(request.values["tl"])
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
func testInitFromValuesPreservesOmissionWhenKeyAbsent() {
|
|
18
|
+
let request = StreamRequest(values: [
|
|
19
|
+
"streamUrl": "https://example.com/whip",
|
|
20
|
+
"streamId": "s-1"
|
|
21
|
+
])
|
|
22
|
+
|
|
23
|
+
XCTAssertNil(request.telemetry)
|
|
24
|
+
XCTAssertNil(request.values["telemetry"])
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
func testForwardsExplicitTrueInValues() {
|
|
28
|
+
let request = StreamRequest(
|
|
29
|
+
streamUrl: "https://example.com/whip",
|
|
30
|
+
streamId: "s-1",
|
|
31
|
+
telemetry: true
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
XCTAssertEqual(request.telemetry, true)
|
|
35
|
+
XCTAssertEqual(request.values["telemetry"] as? Bool, true)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
func testInitFromValuesForwardsExplicitTrue() {
|
|
39
|
+
let request = StreamRequest(values: [
|
|
40
|
+
"streamUrl": "https://example.com/whip",
|
|
41
|
+
"streamId": "s-1",
|
|
42
|
+
"telemetry": true
|
|
43
|
+
])
|
|
44
|
+
|
|
45
|
+
XCTAssertEqual(request.telemetry, true)
|
|
46
|
+
XCTAssertEqual(request.values["telemetry"] as? Bool, true)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
func testForwardsExplicitFalseInValues() {
|
|
50
|
+
let request = StreamRequest(
|
|
51
|
+
streamUrl: "https://example.com/whip",
|
|
52
|
+
streamId: "s-1",
|
|
53
|
+
telemetry: false
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
XCTAssertEqual(request.telemetry, false)
|
|
57
|
+
XCTAssertEqual(request.values["telemetry"] as? Bool, false)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
func testInitFromValuesForwardsExplicitFalse() {
|
|
61
|
+
let request = StreamRequest(values: [
|
|
62
|
+
"streamUrl": "https://example.com/whip",
|
|
63
|
+
"streamId": "s-1",
|
|
64
|
+
"telemetry": false
|
|
65
|
+
])
|
|
66
|
+
|
|
67
|
+
XCTAssertEqual(request.telemetry, false)
|
|
68
|
+
XCTAssertEqual(request.values["telemetry"] as? Bool, false)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
func testInitFromValuesAcceptsCompactTlKeyWhenTelemetryAbsent() {
|
|
72
|
+
let request = StreamRequest(values: [
|
|
73
|
+
"streamUrl": "https://example.com/whip",
|
|
74
|
+
"tl": true
|
|
75
|
+
])
|
|
76
|
+
|
|
77
|
+
XCTAssertEqual(request.telemetry, true)
|
|
78
|
+
XCTAssertEqual(request.values["telemetry"] as? Bool, true)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
func testInitFromValuesGivesTelemetryPrecedenceOverCompactTl() {
|
|
82
|
+
let request = StreamRequest(values: [
|
|
83
|
+
"streamUrl": "https://example.com/whip",
|
|
84
|
+
"telemetry": false,
|
|
85
|
+
"tl": true
|
|
86
|
+
])
|
|
87
|
+
|
|
88
|
+
XCTAssertEqual(request.telemetry, false)
|
|
89
|
+
XCTAssertEqual(request.values["telemetry"] as? Bool, false)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
func testFullStreamRequestSerializesAllFields() {
|
|
93
|
+
let request = StreamRequest(
|
|
94
|
+
streamUrl: "https://example.com/whip",
|
|
95
|
+
streamId: "stream-123",
|
|
96
|
+
sound: false,
|
|
97
|
+
video: StreamVideoConfig(width: 1280, height: 720, bitrate: 2_000_000, fps: 15),
|
|
98
|
+
audio: StreamAudioConfig(bitrate: 64000, sampleRate: 48000, echoCancellation: true),
|
|
99
|
+
authToken: "bearer-token",
|
|
100
|
+
telemetry: true
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
let values = request.values
|
|
104
|
+
XCTAssertEqual(values["type"] as? String, "start_stream")
|
|
105
|
+
XCTAssertEqual(values["streamUrl"] as? String, "https://example.com/whip")
|
|
106
|
+
XCTAssertEqual(values["streamId"] as? String, "stream-123")
|
|
107
|
+
XCTAssertEqual(values["sound"] as? Bool, false)
|
|
108
|
+
XCTAssertEqual(values["authToken"] as? String, "bearer-token")
|
|
109
|
+
XCTAssertEqual(values["telemetry"] as? Bool, true)
|
|
110
|
+
XCTAssertNotNil(values["video"])
|
|
111
|
+
XCTAssertNotNil(values["audio"])
|
|
112
|
+
}
|
|
113
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mentra/bluetooth-sdk",
|
|
3
|
-
"version": "3.2.0-dev.
|
|
3
|
+
"version": "3.2.0-dev.259",
|
|
4
4
|
"description": "SDK for communicating with smart glasses",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"react-native": "src/index.ts",
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
"registry": "https://registry.npmjs.org/"
|
|
115
115
|
},
|
|
116
116
|
"dependencies": {
|
|
117
|
-
"@mentra/cloud-protocol": "3.2.0-dev.
|
|
117
|
+
"@mentra/cloud-protocol": "3.2.0-dev.259"
|
|
118
118
|
},
|
|
119
119
|
"devDependencies": {
|
|
120
120
|
"@types/node": "^25.9.3",
|
|
@@ -61,6 +61,7 @@ import {
|
|
|
61
61
|
} from "../BluetoothSdk.types"
|
|
62
62
|
import {warmUpCameraParamsForNative} from "./cameraRequestPayload"
|
|
63
63
|
import {photoRequestParamsForNative} from "./photoRequestPayload"
|
|
64
|
+
import {streamRequestParamsForNative} from "./streamRequestPayload"
|
|
64
65
|
|
|
65
66
|
/**
|
|
66
67
|
* Private React Native native-module facade.
|
|
@@ -669,5 +670,13 @@ NativeBluetoothSdkModule.warmUpCamera = function (params: WarmUpCameraParams) {
|
|
|
669
670
|
return nativeWarmUpCamera(warmUpCameraParamsForNative(params) as unknown as WarmUpCameraParams)
|
|
670
671
|
}
|
|
671
672
|
|
|
673
|
+
const nativeStartStream = bindNativeMethod<(params: StreamStartRequest) => Promise<StreamStatusEvent>>(
|
|
674
|
+
NativeBluetoothSdkModule as unknown as Record<string, unknown>,
|
|
675
|
+
"startStream",
|
|
676
|
+
)
|
|
677
|
+
NativeBluetoothSdkModule.startStream = function (params: StreamStartRequest) {
|
|
678
|
+
return nativeStartStream(streamRequestParamsForNative(params) as unknown as StreamStartRequest)
|
|
679
|
+
}
|
|
680
|
+
|
|
672
681
|
export default NativeBluetoothSdkModule
|
|
673
682
|
export const BluetoothSdk = NativeBluetoothSdkModule as BluetoothSdkInternalModule
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type {StreamStartRequest} from "../BluetoothSdk.types"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Normalizes stream start request parameters for the native module bridge.
|
|
5
|
+
* Preserves omission of telemetry when undefined so the glasses use their build default,
|
|
6
|
+
* and forwards explicit true / false.
|
|
7
|
+
*/
|
|
8
|
+
export function streamRequestParamsForNative(params: StreamStartRequest): Record<string, unknown> {
|
|
9
|
+
const payload: Record<string, unknown> = {
|
|
10
|
+
streamUrl: params.streamUrl,
|
|
11
|
+
}
|
|
12
|
+
if (params.type !== undefined) {
|
|
13
|
+
payload.type = params.type
|
|
14
|
+
}
|
|
15
|
+
if (params.streamId !== undefined) {
|
|
16
|
+
payload.streamId = params.streamId
|
|
17
|
+
}
|
|
18
|
+
if (params.sound !== undefined) {
|
|
19
|
+
payload.sound = params.sound
|
|
20
|
+
}
|
|
21
|
+
if (params.video !== undefined) {
|
|
22
|
+
payload.video = params.video
|
|
23
|
+
}
|
|
24
|
+
if (params.audio !== undefined) {
|
|
25
|
+
payload.audio = params.audio
|
|
26
|
+
}
|
|
27
|
+
if (params.ice !== undefined) {
|
|
28
|
+
payload.ice = params.ice
|
|
29
|
+
}
|
|
30
|
+
if (params.captureAudio !== undefined) {
|
|
31
|
+
payload.captureAudio = params.captureAudio
|
|
32
|
+
}
|
|
33
|
+
if (params.traceId !== undefined && params.traceId.length > 0) {
|
|
34
|
+
payload.traceId = params.traceId
|
|
35
|
+
}
|
|
36
|
+
if (params.authToken !== undefined && params.authToken.length > 0) {
|
|
37
|
+
payload.authToken = params.authToken
|
|
38
|
+
}
|
|
39
|
+
if (params.telemetry !== undefined) {
|
|
40
|
+
payload.telemetry = params.telemetry
|
|
41
|
+
}
|
|
42
|
+
return payload
|
|
43
|
+
}
|
|
@@ -12,9 +12,9 @@ export interface BluetoothSdkReleaseMetadata {
|
|
|
12
12
|
export const BLUETOOTH_SDK_RELEASE_METADATA: Readonly<BluetoothSdkReleaseMetadata> = Object.freeze({
|
|
13
13
|
"schemaVersion": 1,
|
|
14
14
|
"familyBaseVersion": "3.2.0",
|
|
15
|
-
"releaseIdentity": "3.2.0-dev.
|
|
16
|
-
"releaseSetId": "mentra-3.2.0-dev.
|
|
17
|
-
"sourceCommit": "
|
|
18
|
-
"otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.
|
|
19
|
-
"otaManifestSha256": "
|
|
15
|
+
"releaseIdentity": "3.2.0-dev.259",
|
|
16
|
+
"releaseSetId": "mentra-3.2.0-dev.259",
|
|
17
|
+
"sourceCommit": "a813257666fd73103cf743ec50a4a158ed021d41",
|
|
18
|
+
"otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.2.0/mentra-live-ota-3.2.0-dev.259.json",
|
|
19
|
+
"otaManifestSha256": "b72673f29592ac9357d40b639d093bd50914c8f6f0f4bb02cf0f4fe03fbf0f38"
|
|
20
20
|
})
|