@therealitycrafters/react-native-evskit 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/README.md +151 -2
  2. package/android/build.gradle +46 -0
  3. package/android/src/main/java/expo/modules/evskit/EvsKitModule.kt +380 -0
  4. package/build/EvsKit.types.d.ts +76 -0
  5. package/build/EvsKit.types.d.ts.map +1 -0
  6. package/build/EvsKit.types.js +10 -0
  7. package/build/EvsKit.types.js.map +1 -0
  8. package/build/EvsKitModule.d.ts +43 -0
  9. package/build/EvsKitModule.d.ts.map +1 -0
  10. package/build/EvsKitModule.js +3 -0
  11. package/build/EvsKitModule.js.map +1 -0
  12. package/build/index.d.ts +118 -0
  13. package/build/index.d.ts.map +1 -0
  14. package/build/index.js +146 -0
  15. package/build/index.js.map +1 -0
  16. package/expo-module.config.json +9 -0
  17. package/ios/EvsKit.xcframework/Info.plist +44 -0
  18. package/ios/EvsKit.xcframework/_CodeSignature/CodeDirectory +0 -0
  19. package/ios/EvsKit.xcframework/_CodeSignature/CodeRequirements +0 -0
  20. package/ios/EvsKit.xcframework/_CodeSignature/CodeResources +945 -0
  21. package/ios/EvsKit.xcframework/_CodeSignature/CodeSignature +0 -0
  22. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/Assets.car +0 -0
  23. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/BitTableViewCell.nib +0 -0
  24. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/EvsGlassesNameTableViewCell.nib +0 -0
  25. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/EvsKit +0 -0
  26. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/EvsSliderTableViewCell.nib +0 -0
  27. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/EvsSwitchTableViewCell.nib +0 -0
  28. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/Headers/EvsKit-Swift.h +390 -0
  29. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/Headers/EvsKit.h +19 -0
  30. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/Info.plist +0 -0
  31. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/Modules/EvsKit.swiftmodule/arm64-apple-ios.abi.json +13039 -0
  32. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/Modules/EvsKit.swiftmodule/arm64-apple-ios.private.swiftinterface +239 -0
  33. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/Modules/EvsKit.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  34. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/Modules/EvsKit.swiftmodule/arm64-apple-ios.swiftinterface +239 -0
  35. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/Modules/module.modulemap +11 -0
  36. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemInfoViewCell.nib +0 -0
  37. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/09f-ri-9sL-view-zGn-Zv-q7U.nib +0 -0
  38. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/8yY-DT-9Da-view-iUR-D7-FGu.nib +0 -0
  39. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/BbY-tb-eSR-view-4D3-sx-xbY.nib +0 -0
  40. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/GlassesOtaModalViewControllerIId.nib +0 -0
  41. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/GlassesSettingsModalViewControllerIId.nib +0 -0
  42. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/Info.plist +0 -0
  43. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/UIViewController-8yY-DT-9Da.nib +0 -0
  44. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/debugViewController.nib +0 -0
  45. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/glassesConfigureViewController.nib +0 -0
  46. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/jne-LB-b9D-view-ci7-nK-5Un.nib +0 -0
  47. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/kuB-So-Ae6-view-aJi-AM-lyl.nib +0 -0
  48. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/l9h-6a-xMo-view-vJS-2W-16K.nib +0 -0
  49. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/SystemUI.storyboardc/settingsViewController.nib +0 -0
  50. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/common_glasses_resources/battery_notification.png +0 -0
  51. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/common_glasses_resources/goodbye.png +0 -0
  52. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/common_glasses_resources/personal_adjust_default_final_result.png +0 -0
  53. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/evs_logo_green.png +0 -0
  54. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/ota/max32650.121.enc.bin +0 -0
  55. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/ota/ota_info.json +17 -0
  56. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/ota/stm32wb.color.121.enc.bin +0 -0
  57. package/ios/EvsKit.xcframework/ios-arm64/EvsKit.framework/ota_background_big.png +0 -0
  58. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Assets.car +0 -0
  59. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/BitTableViewCell.nib +0 -0
  60. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/EvsGlassesNameTableViewCell.nib +0 -0
  61. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/EvsKit +0 -0
  62. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/EvsSliderTableViewCell.nib +0 -0
  63. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/EvsSwitchTableViewCell.nib +0 -0
  64. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Headers/EvsKit-Swift.h +776 -0
  65. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Headers/EvsKit.h +19 -0
  66. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Info.plist +0 -0
  67. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Modules/EvsKit.swiftmodule/arm64-apple-ios-simulator.abi.json +13039 -0
  68. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Modules/EvsKit.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +239 -0
  69. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Modules/EvsKit.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  70. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Modules/EvsKit.swiftmodule/arm64-apple-ios-simulator.swiftinterface +239 -0
  71. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Modules/EvsKit.swiftmodule/x86_64-apple-ios-simulator.abi.json +13039 -0
  72. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Modules/EvsKit.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +239 -0
  73. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Modules/EvsKit.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  74. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Modules/EvsKit.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +239 -0
  75. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/Modules/module.modulemap +11 -0
  76. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemInfoViewCell.nib +0 -0
  77. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/09f-ri-9sL-view-zGn-Zv-q7U.nib +0 -0
  78. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/8yY-DT-9Da-view-iUR-D7-FGu.nib +0 -0
  79. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/BbY-tb-eSR-view-4D3-sx-xbY.nib +0 -0
  80. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/GlassesOtaModalViewControllerIId.nib +0 -0
  81. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/GlassesSettingsModalViewControllerIId.nib +0 -0
  82. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/Info.plist +0 -0
  83. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/UIViewController-8yY-DT-9Da.nib +0 -0
  84. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/debugViewController.nib +0 -0
  85. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/glassesConfigureViewController.nib +0 -0
  86. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/jne-LB-b9D-view-ci7-nK-5Un.nib +0 -0
  87. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/kuB-So-Ae6-view-aJi-AM-lyl.nib +0 -0
  88. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/l9h-6a-xMo-view-vJS-2W-16K.nib +0 -0
  89. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/SystemUI.storyboardc/settingsViewController.nib +0 -0
  90. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/_CodeSignature/CodeResources +542 -0
  91. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/common_glasses_resources/battery_notification.png +0 -0
  92. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/common_glasses_resources/goodbye.png +0 -0
  93. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/common_glasses_resources/personal_adjust_default_final_result.png +0 -0
  94. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/evs_logo_green.png +0 -0
  95. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/ota/max32650.121.enc.bin +0 -0
  96. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/ota/ota_info.json +17 -0
  97. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/ota/stm32wb.color.121.enc.bin +0 -0
  98. package/ios/EvsKit.xcframework/ios-arm64_x86_64-simulator/EvsKit.framework/ota_background_big.png +0 -0
  99. package/ios/EvsKitModule.swift +321 -0
  100. package/ios/NativeEvsKit.xcframework/Info.plist +44 -0
  101. package/ios/NativeEvsKit.xcframework/_CodeSignature/CodeDirectory +0 -0
  102. package/ios/NativeEvsKit.xcframework/_CodeSignature/CodeRequirements +0 -0
  103. package/ios/NativeEvsKit.xcframework/_CodeSignature/CodeResources +186 -0
  104. package/ios/NativeEvsKit.xcframework/_CodeSignature/CodeSignature +0 -0
  105. package/ios/NativeEvsKit.xcframework/ios-arm64/NativeEvsKit.framework/Headers/NativeEvsKit.h +3634 -0
  106. package/ios/NativeEvsKit.xcframework/ios-arm64/NativeEvsKit.framework/Info.plist +35 -0
  107. package/ios/NativeEvsKit.xcframework/ios-arm64/NativeEvsKit.framework/Modules/module.modulemap +8 -0
  108. package/ios/NativeEvsKit.xcframework/ios-arm64/NativeEvsKit.framework/NativeEvsKit +0 -0
  109. package/ios/NativeEvsKit.xcframework/ios-arm64_x86_64-simulator/NativeEvsKit.framework/Headers/NativeEvsKit.h +3634 -0
  110. package/ios/NativeEvsKit.xcframework/ios-arm64_x86_64-simulator/NativeEvsKit.framework/Info.plist +31 -0
  111. package/ios/NativeEvsKit.xcframework/ios-arm64_x86_64-simulator/NativeEvsKit.framework/Modules/module.modulemap +8 -0
  112. package/ios/NativeEvsKit.xcframework/ios-arm64_x86_64-simulator/NativeEvsKit.framework/NativeEvsKit +0 -0
  113. package/ios/RNEvsKit.podspec +27 -0
  114. package/package.json +50 -4
  115. package/src/EvsKit.types.ts +122 -0
  116. package/src/EvsKitModule.ts +65 -0
  117. package/src/index.ts +172 -0
package/README.md CHANGED
@@ -1,3 +1,152 @@
1
- # Temporary Holding Version
1
+ # react-native-evskit
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ A modular Expo Module bridge for Everysight's [Maverick SDK](https://everysight.github.io/maverick_docs/) (`EvsKit` + `NativeEvsKit`), covering communication (BLE connect/pair), glasses state, display/brightness, sensors, auth, and the SDK's built-in stock UI screens.
4
+
5
+ ## Status
6
+
7
+ The native module calls into `Evs.instance()...` are wired up in both `EvsKitModule.kt` and `EvsKitModule.swift`. The sample app consumes this package from a local `link:` dependency. You need an Everysight `sdk.key` and GitHub Packages access to compile the Android SDK.
8
+
9
+ ## Project layout
10
+
11
+ ```
12
+ react-native-evskit/
13
+ ├─ src/
14
+ │ ├─ EvsKit.types.ts # Shared TS types (mirrors SDK interfaces)
15
+ │ ├─ EvsKitModule.ts # Raw native module binding (1:1 with SDK methods)
16
+ │ └─ index.ts # Public API: EvsComm / EvsGlasses / EvsDisplay /
17
+ │ # EvsSensors / EvsAuth / EvsUI + useEvsKitEvent hook
18
+ ├─ android/
19
+ │ ├─ build.gradle
20
+ │ └─ src/main/java/expo/modules/evskit/EvsKitModule.kt
21
+ ├─ ios/
22
+ │ ├─ RNEvsKit.podspec
23
+ │ └─ EvsKitModule.swift
24
+ ├─ plugin/
25
+ │ └─ withEverysightBundleResources.js # Adds SDK key files to the app bundle
26
+ ├─ app.plugin.js # Config plugin entry point Expo looks for
27
+ └─ expo-module.config.json
28
+ ```
29
+
30
+ The JS API is grouped to match the SDK's own `IEvsApp` service breakdown (`comm()`, `glasses()`, `display()`, `sensors()`, `auth()`), so anything in the Maverick docs maps directly onto an equivalent call here. Initialise the SDK from within a `React.useEffect`, the exported screen/component itself must remain synchronous:
31
+
32
+ ```ts
33
+ import * as React from 'react';
34
+ import { EvsKit, EvsComm, EvsDisplay, EvsSensors, useEvsKitEvent } from '@therealitycrafters/react-native-evskit';
35
+
36
+ export function HomeScreen() {
37
+ React.useEffect(() => {
38
+ async function initEvsKit() {
39
+ await EvsKit.start();
40
+ if (await EvsComm.hasConfiguredDevice()) {
41
+ await EvsComm.connect();
42
+ } else {
43
+ await EvsKit.ui.show('configure');
44
+ }
45
+ await EvsSensors.enableTouch(true);
46
+ await EvsDisplay.setAutoBrightness({ enabled: true });
47
+ }
48
+
49
+ void initEvsKit();
50
+ }, []);
51
+
52
+ useEvsKitEvent('onTouch', (direction) => {
53
+ if (direction === 'tap') {
54
+ // show a popup, trigger an action, etc.
55
+ }
56
+ });
57
+
58
+ return null;
59
+ }
60
+ ```
61
+
62
+ ## Setup
63
+
64
+ ### 1. Install this module
65
+
66
+ The sample app currently uses the package directly from this repository:
67
+
68
+ ```json
69
+ {
70
+ "dependencies": {
71
+ "react-native-evskit": "link:../react-native-evskit"
72
+ }
73
+ }
74
+ ```
75
+
76
+ From `SampleEvsKitProject/`, install dependencies with `pnpm install`. Expo autolinking discovers the package through `expo-module.config.json`. If you use another app, install the published package or use an equivalent local dependency and add `@therealitycrafters/react-native-evskit` to that app's Expo plugins.
77
+
78
+ ### 2. Android
79
+
80
+ Follow the [Android setup guide](https://everysight.github.io/maverick_docs/libraries-api/android/):
81
+
82
+ - Add the Everysight GitHub Packages Maven repo (already referenced in `android/build.gradle` — set `EVERYSIGHT_GITHUB_USERNAME` / `EVERYSIGHT_GITHUB_TOKEN` env vars, or the equivalent `gradle.properties` keys, with a PAT scoped to `read:packages`).
83
+ - Add the `proguard-rules.pro` entries from the docs if you enable minify.
84
+ - Place your `sdk.key` (development) or `app.key` (production) file as an Android resource.
85
+ - Add `<uses-permission android:name="android.permission.INTERNET" />` — this module doesn't touch your `AndroidManifest.xml`, since you're likely managing permissions via an Expo config plugin already, given your `expo-build-properties` workarounds elsewhere in the project.
86
+
87
+ ### 3. iOS
88
+
89
+ This package includes the prebuilt `EvsKit.xcframework` and `NativeEvsKit.xcframework` in its podspec. Expo autolinking adds `RNEvsKit.podspec` to the app's Podfile, and CocoaPods links both frameworks when you run `pnpm ios` or regenerate native projects.
90
+
91
+ The active config plugin adds key files to the app bundle. Enable the package plugin in `app.config.ts` and provide the key path:
92
+
93
+ ```json
94
+ {
95
+ "plugins": [
96
+ ["@therealitycrafters/react-native-evskit", { "bundleResources": ["./sdk.key"] }]
97
+ ]
98
+ }
99
+ ```
100
+
101
+ Typically, this is configured in `app.config.ts`:
102
+
103
+ ```ts
104
+ ['@therealitycrafters/react-native-evskit', { bundleResources: ['./sdk.key'] }]
105
+ ```
106
+ Do not commit key files. Keep `sdk.key` at the project root and then the plugin adds it to the generated iOS Resources build phase.
107
+
108
+ #### Android — GitHub Packages credentials
109
+
110
+ The Everysight Android SDK is published to a private GitHub Packages Maven registry. **Anyone building an app that includes this bridge** needs a GitHub **Personal Access Token (PAT)** with the `read:packages` scope — this isn't just for developing the bridge itself, because the SDK `.aar` artifacts are pulled at build time by Gradle:
111
+
112
+ 1. Go to GitHub → Settings → Developer settings → Personal access tokens
113
+ 2. Click **Generate new token (classic)**
114
+ 3. Select the `read:packages` scope
115
+ 4. Generate and copy the token
116
+
117
+ Set it as an environment variable before building:
118
+
119
+ ```bash
120
+ export EVERYSIGHT_GITHUB_USERNAME=your-github-username
121
+ export EVERYSIGHT_GITHUB_TOKEN=ghp_xxxxxxxxxxxx
122
+ ```
123
+
124
+ Or add it to `~/.gradle/gradle.properties` (do NOT commit this file):
125
+
126
+ ```properties
127
+ everysightGithubUsername=your-github-username
128
+ everysightGithubToken=ghp_xxxxxxxxxxxx
129
+ ```
130
+
131
+ You can also keep these in a `.env` file in the project root and load them before building:
132
+
133
+ ```bash
134
+ source .env
135
+ ./gradlew build
136
+ ```
137
+
138
+ **Make sure `.env` is in `.gitignore`** — never commit real credentials.
139
+
140
+ Then run `./gradlew build` to verify.
141
+
142
+ #### iOS — local Metro development
143
+
144
+ When running in simulator, as you'll see in the sample app, you may need the `ios` script to run something like this `cross-env REACT_NATIVE_PACKAGER_HOSTNAME=localhost expo run:ios`.
145
+
146
+ This is apparently required when macOS selects an interface such as an iPhone hotspot address (`192.0.0.2`). Without it, the simulator can try to load Metro over an HTTP address that iOS App Transport Security rejects. For another app, use `REACT_NATIVE_PACKAGER_HOSTNAME=localhost` with `expo run:ios` when the simulator and Metro run on the same Mac.
147
+
148
+ ## Notes / deliberate scope cuts
149
+
150
+ - **BLE scanning** isn't wrapped here — the SDK docs specify scanning uses the platform's standard BLE APIs directly (`CBCentralManager` / `BluetoothLeScanner`) against `BTConstants.serviceUUID`, filtering for `EV####`-style device names. Pair this module with a BLE library (e.g. `react-native-ble-plx`) for a custom scan UI, or just call `EvsKit.ui.show('configure')` to use the SDK's built-in scan/pair screen.
151
+ - **Custom auto-brightness providers** (`IEvsAutoBrightnessProvider`) aren't exposed to JS — round-tripping ambient-lux → brightness through the RN bridge on every reading isn't a good fit for a hot sensor loop. Use the SDK's default `AutoBrightnessGainProvider` (wired via `setAutoBrightness`) or implement a custom `IEvsAutoBrightnessController` natively if you need different behaviour.
152
+ - The **UI Kit** (`Screen`, custom controls, animations) and **Line of Sight** kit are separate, larger surfaces not covered by this bridge — they're typically implemented natively per-screen rather than driven from JS, since they involve the glasses' own rendering pipeline.
@@ -0,0 +1,46 @@
1
+ apply plugin: 'com.android.library'
2
+ apply plugin: 'kotlin-android'
3
+
4
+ group = 'expo.modules.evskit'
5
+ version = '0.1.0'
6
+
7
+ android {
8
+ namespace "expo.modules.evskit"
9
+ defaultConfig {
10
+ minSdkVersion getExpoModuleDefaultMinSdkVersion()
11
+ targetSdkVersion getExpoModuleDefaultTargetSdkVersion()
12
+ versionCode 1
13
+ versionName "0.1.0"
14
+ }
15
+ compileSdkVersion getExpoModuleDefaultCompileSdkVersion()
16
+
17
+ compileOptions {
18
+ sourceCompatibility JavaVersion.VERSION_17
19
+ targetCompatibility JavaVersion.VERSION_17
20
+ }
21
+
22
+ kotlinOptions {
23
+ jvmTarget = "17"
24
+ }
25
+ }
26
+
27
+ repositories {
28
+ google()
29
+ mavenCentral()
30
+ // Everysight SDK — see https://everysight.github.io/maverick_docs/libraries-api/android/
31
+ maven {
32
+ url = uri("https://maven.pkg.github.com/everysight-maverick/m1-android-maven")
33
+ credentials {
34
+ // Populate these via gradle.properties / env vars — do not commit real
35
+ // credentials. A GitHub PAT with `read:packages` scope is required.
36
+ username = findProperty("everysightGithubUsername") ?: System.getenv("EVERYSIGHT_GITHUB_USERNAME")
37
+ password = findProperty("everysightGithubToken") ?: System.getenv("EVERYSIGHT_GITHUB_TOKEN")
38
+ }
39
+ }
40
+ }
41
+
42
+ dependencies {
43
+ implementation project(':expo-modules-core')
44
+ implementation "com.everysight:evskit:2.6.1"
45
+ implementation "com.everysight:nativeevskit:2.6.1"
46
+ }
@@ -0,0 +1,380 @@
1
+ package expo.modules.evskit
2
+
3
+ import android.util.Base64
4
+ import expo.modules.kotlin.modules.Module
5
+ import expo.modules.kotlin.modules.ModuleDefinition
6
+ import expo.modules.kotlin.Promise
7
+ import expo.modules.kotlin.records.Field
8
+ import expo.modules.kotlin.records.Record
9
+
10
+ // ---------------------------------------------------------------------------
11
+ // The SDK's service interfaces live in the UIKit.* package hierarchy, not
12
+ // under com.everysight.nativeevskit.*. The Evs entry point is at
13
+ // com.everysight.evskit.android.Evs (Android) / com.everysight.evskit.Evs
14
+ // (generic).
15
+ // ---------------------------------------------------------------------------
16
+ import com.everysight.evskit.Evs
17
+ import UIKit.services.IEvsGlassesEvents
18
+ import UIKit.services.IEvsSensorsEvents
19
+ import UIKit.services.IEvsYprSensorsEvents
20
+ import UIKit.services.IEvsQuaternionSensorsEvents
21
+ import UIKit.services.IEvsCommunicationService
22
+ import UIKit.services.IEvsDisplayService
23
+ import UIKit.services.IEvsAutoBrightnessController
24
+ import UIKit.app.data.TouchDirection
25
+ import UIKit.app.data.CalibrationStatus
26
+ import UIKit.app.data.PowerButtonAction
27
+ import UIKit.app.data.ProximityActionType
28
+ import UIKit.app.data.YprData
29
+ import UIKit.app.data.QuaternionData
30
+
31
+ class DeviceInfoRecord : Record {
32
+ @Field val deviceId: String = ""
33
+ @Field val name: String = ""
34
+ }
35
+
36
+ class AutoBrightnessOptionsRecord : Record {
37
+ @Field val enabled: Boolean = false
38
+ }
39
+
40
+ class EvsKitModule : Module() {
41
+
42
+ // Keep a reference so listeners registered against the SDK can be torn
43
+ // down cleanly if the module is invalidated (app reload, etc).
44
+ private var glassesEventsHandle: IEvsGlassesEvents? = null
45
+ private var sensorsEventsHandle: IEvsSensorsEvents? = null
46
+
47
+ override fun definition() = ModuleDefinition {
48
+ Name("RNEvsKit")
49
+
50
+ Events(
51
+ "onConnectionStateChanged",
52
+ "onBeginAuth",
53
+ "onGlassesInfoChanged",
54
+ "onTouch",
55
+ "onProximity",
56
+ "onAmbient",
57
+ "onYpr",
58
+ "onQuaternion",
59
+ "onError"
60
+ )
61
+
62
+ OnCreate {
63
+ registerNativeListeners()
64
+ }
65
+
66
+ OnDestroy {
67
+ unregisterNativeListeners()
68
+ }
69
+
70
+ // --- Lifecycle -----------------------------------------------------------
71
+
72
+ AsyncFunction("start") { promise: Promise ->
73
+ try {
74
+ val context = appContext.reactContext ?: throw IllegalStateException("No context")
75
+ Evs.init(context).start()
76
+ if (Evs.instance().comm().hasConfiguredDevice()) {
77
+ Evs.instance().comm().connect()
78
+ }
79
+ promise.resolve(null)
80
+ } catch (e: Exception) {
81
+ promise.reject("EVSKIT_START_FAILED", e.message, e)
82
+ }
83
+ }
84
+
85
+ AsyncFunction("isStarted") { promise: Promise ->
86
+ promise.resolve(Evs.isStarted())
87
+ }
88
+
89
+ // --- Stock UI --------------------------------------------------------------
90
+
91
+ AsyncFunction("showUI") { screen: String, promise: Promise ->
92
+ try {
93
+ Evs.instance().showUI(screen)
94
+ promise.resolve(null)
95
+ } catch (e: Exception) {
96
+ promise.reject("EVSKIT_SHOW_UI_FAILED", e.message, e)
97
+ }
98
+ }
99
+
100
+ // --- Communication (IEvsCommunicationService) -----------------------------
101
+
102
+ AsyncFunction("setDeviceInfo") { info: DeviceInfoRecord, promise: Promise ->
103
+ try {
104
+ Evs.instance().comm().setDeviceInfo(info.deviceId, info.name)
105
+ promise.resolve(null)
106
+ } catch (e: Exception) {
107
+ promise.reject("EVSKIT_SET_DEVICE_INFO_FAILED", e.message, e)
108
+ }
109
+ }
110
+
111
+ AsyncFunction("connect") { promise: Promise ->
112
+ try {
113
+ Evs.instance().comm().connect()
114
+ promise.resolve(null)
115
+ } catch (e: Exception) {
116
+ promise.reject("EVSKIT_CONNECT_FAILED", e.message, e)
117
+ }
118
+ }
119
+
120
+ AsyncFunction("connectSecured") { promise: Promise ->
121
+ try {
122
+ Evs.instance().comm().connectSecured()
123
+ promise.resolve(null)
124
+ } catch (e: Exception) {
125
+ promise.reject("EVSKIT_CONNECT_SECURED_FAILED", e.message, e)
126
+ }
127
+ }
128
+
129
+ AsyncFunction("disconnect") { promise: Promise ->
130
+ try {
131
+ Evs.instance().comm().disconnect()
132
+ promise.resolve(null)
133
+ } catch (e: Exception) {
134
+ promise.reject("EVSKIT_DISCONNECT_FAILED", e.message, e)
135
+ }
136
+ }
137
+
138
+ AsyncFunction("hasConfiguredDevice") { promise: Promise ->
139
+ promise.resolve(Evs.instance().comm().hasConfiguredDevice())
140
+ }
141
+
142
+ // --- Glasses (IEvsGlassesStateService) -------------------------------------
143
+
144
+ AsyncFunction("getGlassesInfo") { promise: Promise ->
145
+ try {
146
+ val glasses = Evs.instance().glasses()
147
+ val info = mapOf(
148
+ "batteryLevel" to glasses.batteryPercentage(),
149
+ "batteryStatus" to glasses.batteryLevel().name,
150
+ "estimatedRemainingTime" to glasses.estimatedRemainingTime(),
151
+ "firmwareVersion" to glasses.fwVersion()
152
+ )
153
+ promise.resolve(info)
154
+ } catch (e: Exception) {
155
+ promise.reject("EVSKIT_GLASSES_INFO_FAILED", e.message, e)
156
+ }
157
+ }
158
+
159
+ AsyncFunction("turnGlassesOff") { promise: Promise ->
160
+ try {
161
+ Evs.instance().glasses().turnOff()
162
+ promise.resolve(null)
163
+ } catch (e: Exception) {
164
+ promise.reject("EVSKIT_TURN_OFF_FAILED", e.message, e)
165
+ }
166
+ }
167
+
168
+ // --- Display (IEvsDisplayService) ------------------------------------------
169
+
170
+ AsyncFunction("turnDisplayOn") { promise: Promise ->
171
+ try {
172
+ Evs.instance().display().turnDisplayOn()
173
+ promise.resolve(null)
174
+ } catch (e: Exception) {
175
+ promise.reject("EVSKIT_TURN_DISPLAY_ON_FAILED", e.message, e)
176
+ }
177
+ }
178
+
179
+ AsyncFunction("setBrightness") { value: Int, promise: Promise ->
180
+ try {
181
+ Evs.instance().display().setBrightness(value)
182
+ promise.resolve(null)
183
+ } catch (e: Exception) {
184
+ promise.reject("EVSKIT_SET_BRIGHTNESS_FAILED", e.message, e)
185
+ }
186
+ }
187
+
188
+ AsyncFunction("setBrightnessLevel") { level: Int, promise: Promise ->
189
+ try {
190
+ Evs.instance().display().desecrateBrightness().setBrightnessLevel(level)
191
+ promise.resolve(null)
192
+ } catch (e: Exception) {
193
+ promise.reject("EVSKIT_SET_BRIGHTNESS_LEVEL_FAILED", e.message, e)
194
+ }
195
+ }
196
+
197
+ AsyncFunction("setAutoBrightness") { options: AutoBrightnessOptionsRecord, promise: Promise ->
198
+ try {
199
+ Evs.instance().display().autoBrightness().setProvider(AutoBrightnessGainProvider())
200
+ Evs.instance().display().autoBrightness().enable(options.enabled)
201
+ promise.resolve(null)
202
+ } catch (e: Exception) {
203
+ promise.reject("EVSKIT_SET_AUTO_BRIGHTNESS_FAILED", e.message, e)
204
+ }
205
+ }
206
+
207
+ // --- Screens -----------------------------------------------------------------
208
+
209
+ AsyncFunction("setRenderingCenterX") { dx: Float, promise: Promise ->
210
+ try {
211
+ Evs.instance().screens().setRenderingCenterX(dx)
212
+ promise.resolve(null)
213
+ } catch (e: Exception) {
214
+ promise.reject("EVSKIT_SET_RENDERING_CENTER_X_FAILED", e.message, e)
215
+ }
216
+ }
217
+
218
+ AsyncFunction("setRenderingCenterY") { dy: Float, promise: Promise ->
219
+ try {
220
+ Evs.instance().screens().setRenderingCenterY(dy)
221
+ promise.resolve(null)
222
+ } catch (e: Exception) {
223
+ promise.reject("EVSKIT_SET_RENDERING_CENTER_Y_FAILED", e.message, e)
224
+ }
225
+ }
226
+
227
+ // --- Sensors (IEvsSensorsService) -------------------------------------------
228
+
229
+ AsyncFunction("enableTouch") { enabled: Boolean, promise: Promise ->
230
+ try {
231
+ Evs.instance().sensors().enableTouch(enabled)
232
+ promise.resolve(null)
233
+ } catch (e: Exception) {
234
+ promise.reject("EVSKIT_ENABLE_TOUCH_FAILED", e.message, e)
235
+ }
236
+ }
237
+
238
+ AsyncFunction("enableAmbient") { enabled: Boolean, promise: Promise ->
239
+ try {
240
+ Evs.instance().sensors().enableAmbient(enabled)
241
+ promise.resolve(null)
242
+ } catch (e: Exception) {
243
+ promise.reject("EVSKIT_ENABLE_AMBIENT_FAILED", e.message, e)
244
+ }
245
+ }
246
+
247
+ AsyncFunction("enableGyro") { enabled: Boolean, promise: Promise ->
248
+ try {
249
+ if (enabled) Evs.instance().sensors().enableGyro()
250
+ else Evs.instance().sensors().disableInertialSensors()
251
+ promise.resolve(null)
252
+ } catch (e: Exception) {
253
+ promise.reject("EVSKIT_ENABLE_GYRO_FAILED", e.message, e)
254
+ }
255
+ }
256
+
257
+ AsyncFunction("enableMagnetometer") { enabled: Boolean, promise: Promise ->
258
+ try {
259
+ if (enabled) Evs.instance().sensors().enableMagnetometer()
260
+ else Evs.instance().sensors().disableInertialSensors()
261
+ promise.resolve(null)
262
+ } catch (e: Exception) {
263
+ promise.reject("EVSKIT_ENABLE_MAGNETOMETER_FAILED", e.message, e)
264
+ }
265
+ }
266
+
267
+ AsyncFunction("enableAccelerometer") { enabled: Boolean, promise: Promise ->
268
+ try {
269
+ if (enabled) Evs.instance().sensors().enableAccelerometer()
270
+ else Evs.instance().sensors().disableInertialSensors()
271
+ promise.resolve(null)
272
+ } catch (e: Exception) {
273
+ promise.reject("EVSKIT_ENABLE_ACCELEROMETER_FAILED", e.message, e)
274
+ }
275
+ }
276
+
277
+ AsyncFunction("enableSensorsFusion") { enabled: Boolean, promise: Promise ->
278
+ try {
279
+ if (enabled) Evs.instance().sensors().enableSensorsFusion()
280
+ else Evs.instance().sensors().disableInertialSensors()
281
+ promise.resolve(null)
282
+ } catch (e: Exception) {
283
+ promise.reject("EVSKIT_ENABLE_SENSORS_FUSION_FAILED", e.message, e)
284
+ }
285
+ }
286
+
287
+ // --- Auth (IEvsAuthService) --------------------------------------------------
288
+
289
+ AsyncFunction("setApiKeyName") { fileNameWithoutExt: String, promise: Promise ->
290
+ try {
291
+ Evs.instance().auth().setApiKeyName(fileNameWithoutExt)
292
+ promise.resolve(null)
293
+ } catch (e: Exception) {
294
+ promise.reject("EVSKIT_SET_API_KEY_NAME_FAILED", e.message, e)
295
+ }
296
+ }
297
+
298
+ AsyncFunction("setApiKey") { base64Key: String, promise: Promise ->
299
+ try {
300
+ val bytes = Base64.decode(base64Key, Base64.DEFAULT)
301
+ Evs.instance().auth().setApiKey(bytes)
302
+ promise.resolve(null)
303
+ } catch (e: Exception) {
304
+ promise.reject("EVSKIT_SET_API_KEY_FAILED", e.message, e)
305
+ }
306
+ }
307
+ }
308
+
309
+ // ---------------------------------------------------------------------------
310
+ // Wires the SDK's callback-style listeners (IEvsGlassesEvents,
311
+ // IEvsSensorsEvents, IEvsYprSensorsEvents, IEvsQuaternionSensorsEvents) to
312
+ // this module's `sendEvent(...)`, so JS can subscribe via
313
+ // `addEvsKitListener` / `useEvsKitEvent` instead of touching native code.
314
+ // ---------------------------------------------------------------------------
315
+
316
+ private fun registerNativeListeners() {
317
+ glassesEventsHandle = object : IEvsGlassesEvents {
318
+ override fun onTouch(touch: TouchDirection) {
319
+ sendEvent("onTouch", mapOf("direction" to touch.name))
320
+ }
321
+ override fun onBatteryChanged(percentage: Int) {
322
+ sendEvent("onGlassesInfoChanged", mapOf("batteryLevel" to percentage))
323
+ }
324
+ override fun onChargerStateChanged(isChargerConnected: Boolean) {
325
+ sendEvent("onGlassesInfoChanged", mapOf("isCharging" to isChargerConnected))
326
+ }
327
+ override fun onDisplayState(isDisplayOn: Boolean) {
328
+ // Not mapped to JS — display state is internal
329
+ }
330
+ override fun onPowerButton(action: PowerButtonAction) {
331
+ // Not mapped to JS — power button is a hardware event
332
+ }
333
+ override fun onBrightnessChangeRequested(value: Short) {
334
+ // Not mapped to JS — brightness changes are handled by setBrightness
335
+ }
336
+ }
337
+ Evs.instance().glasses().registerGlassesEvents(glassesEventsHandle)
338
+
339
+ sensorsEventsHandle = object : IEvsSensorsEvents {
340
+ override fun onAmbient(lux: Float) {
341
+ sendEvent("onAmbient", lux)
342
+ }
343
+ override fun onProximity(proximity: ProximityActionType): Boolean {
344
+ sendEvent("onProximity", if (proximity == ProximityActionType.OnFace) "onFace" else "offFace")
345
+ return true
346
+ }
347
+ }
348
+ Evs.instance().sensors().registerSensorsEvents(sensorsEventsHandle)
349
+
350
+ Evs.instance().sensors().registerYprSensorsEvents(object : IEvsYprSensorsEvents {
351
+ override fun onYpr(timestampMs: Long, yprData: YprData, calibrationStatus: CalibrationStatus) {
352
+ sendEvent("onYpr", mapOf(
353
+ "timestampMs" to timestampMs,
354
+ "data" to mapOf("yaw" to yprData.yaw, "pitch" to yprData.pitch, "roll" to yprData.roll),
355
+ "calibrationStatus" to calibrationStatus.name
356
+ ))
357
+ }
358
+ })
359
+
360
+ Evs.instance().sensors().registerQuaternionSensorsEvents(object : IEvsQuaternionSensorsEvents {
361
+ override fun onQuaternion(timestampMs: Long, quaternionsData: QuaternionData, calibrationStatus: CalibrationStatus) {
362
+ sendEvent("onQuaternion", mapOf(
363
+ "timestampMs" to timestampMs,
364
+ "data" to mapOf(
365
+ "w" to quaternionsData.w,
366
+ "x" to quaternionsData.x,
367
+ "y" to quaternionsData.y,
368
+ "z" to quaternionsData.z
369
+ ),
370
+ "calibrationStatus" to calibrationStatus.name
371
+ ))
372
+ }
373
+ })
374
+ }
375
+
376
+ private fun unregisterNativeListeners() {
377
+ glassesEventsHandle?.let { Evs.instance().glasses().unregisterGlassesEvents(it) }
378
+ sensorsEventsHandle?.let { Evs.instance().sensors().unregisterSensorsEvents(it) }
379
+ }
380
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Type definitions mirroring Everysight's Maverick SDK interfaces
3
+ * (IEvsCommunicationService, IEvsGlassesStateService, IEvsDisplayService,
4
+ * IEvsSensorsService, IEvsAuthService).
5
+ *
6
+ * Signatures confirmed against the everysight-maverick/samples repo (v2.6.1)
7
+ * and the MCP API reference.
8
+ */
9
+ export interface EvsDeviceInfo {
10
+ /** Bluetooth device address/id, e.g. from a BLE scan (EV0080 style name). */
11
+ deviceId: string;
12
+ /** Bluetooth device name. */
13
+ name: string;
14
+ }
15
+ export type EvsConnectionState = "disconnected" | "connecting" | "connected" | "authenticating" | "error";
16
+ export interface EvsGlassesInfo {
17
+ /** Battery percentage 0-100 from IEvsGlassesStateService.batteryPercentage(). */
18
+ batteryLevel: number;
19
+ /** Battery level category (Unknown/Critical/Low/Medium/High) from batteryLevel(). */
20
+ batteryStatus: string;
21
+ /** Estimated remaining operation time in minutes. */
22
+ estimatedRemainingTime: number;
23
+ /** Firmware version number (Int from fwVersion()). */
24
+ firmwareVersion: number;
25
+ }
26
+ export type TouchDirection = "backward" | "forward" | "tap" | "longTap";
27
+ export type ProximityEvent = "onFace" | "offFace";
28
+ export interface EvsAutoBrightnessOptions {
29
+ enabled: boolean;
30
+ }
31
+ export type CalibrationStatus = "calibrated" | "inProgress" | "required";
32
+ /** Currently only rate0 and rate1 are operational per the SDK docs; the rest are experimental. */
33
+ export type SensorRate = "rate0" | "rate1" | "rate2" | "rate3";
34
+ export interface EvsYprData {
35
+ yaw: number;
36
+ pitch: number;
37
+ roll: number;
38
+ }
39
+ export interface EvsQuaternionData {
40
+ w: number;
41
+ x: number;
42
+ y: number;
43
+ z: number;
44
+ }
45
+ export interface EvsVector3 {
46
+ x: number;
47
+ y: number;
48
+ z: number;
49
+ }
50
+ export interface EvsSensorSample<T> {
51
+ timestampMs: number;
52
+ data: T;
53
+ }
54
+ export interface EvsYprSample extends EvsSensorSample<EvsYprData> {
55
+ calibrationStatus: CalibrationStatus;
56
+ }
57
+ export interface EvsQuaternionSample extends EvsSensorSample<EvsQuaternionData> {
58
+ calibrationStatus: CalibrationStatus;
59
+ }
60
+ export type EvsStockUIScreen = "configure" | "adjust" | "calibrate";
61
+ export interface EvsBeginAuthEvent {
62
+ serial: string;
63
+ fwVersion: number;
64
+ }
65
+ export type EvsKitEvents = {
66
+ onConnectionStateChanged: (state: EvsConnectionState) => void;
67
+ onBeginAuth: (event: EvsBeginAuthEvent) => void;
68
+ onGlassesInfoChanged: (info: EvsGlassesInfo) => void;
69
+ onTouch: (direction: TouchDirection) => void;
70
+ onProximity: (event: ProximityEvent) => void;
71
+ onAmbient: (lux: number) => void;
72
+ onYpr: (sample: EvsYprSample) => void;
73
+ onQuaternion: (sample: EvsQuaternionSample) => void;
74
+ onError: (message: string) => void;
75
+ };
76
+ //# sourceMappingURL=EvsKit.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvsKit.types.d.ts","sourceRoot":"","sources":["../src/EvsKit.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,kBAAkB,GAC5B,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,gBAAgB,GAAG,OAAO,CAAC;AAM3E,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,aAAa,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sDAAsD;IACtD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;AAExE,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAMlD,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;AAEzE,kGAAkG;AAClG,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,CAAC,CAAC;CACT;AAED,MAAM,WAAW,YAAa,SAAQ,eAAe,CAAC,UAAU,CAAC;IAC/D,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED,MAAM,WAAW,mBAAoB,SAAQ,eAAe,CAAC,iBAAiB,CAAC;IAC7E,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAMD,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAMpE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAOD,MAAM,MAAM,YAAY,GAAG;IACzB,wBAAwB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9D,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,oBAAoB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACrD,OAAO,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,WAAW,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,KAAK,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IACtC,YAAY,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpD,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Type definitions mirroring Everysight's Maverick SDK interfaces
3
+ * (IEvsCommunicationService, IEvsGlassesStateService, IEvsDisplayService,
4
+ * IEvsSensorsService, IEvsAuthService).
5
+ *
6
+ * Signatures confirmed against the everysight-maverick/samples repo (v2.6.1)
7
+ * and the MCP API reference.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=EvsKit.types.js.map