diff --git a/resources/views/livewire/plugins/api.blade.php b/resources/views/livewire/plugins/api.blade.php
index 6fe1eff..08bcafc 100644
--- a/resources/views/livewire/plugins/api.blade.php
+++ b/resources/views/livewire/plugins/api.blade.php
@@ -74,5 +74,20 @@ new class extends Component {
+
+
+
+ GET
+ {{ route('display.status') }}?device_id={{ $selected_device }}
+
+
+
Headers
+
Authorization Bearer {{$token ?? '**********'}}
+
+ Regenerate Token
+
+
+
+
diff --git a/routes/api.php b/routes/api.php
index 9a6762d..bdc4c94 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -201,6 +201,36 @@ Route::post('/display/update', function (Request $request) {
->name('display.update')
->middleware('auth:sanctum', 'ability:update-screen');
+Route::get('/display/status', function (Request $request) {
+ $request->validate([
+ 'device_id' => 'required|exists:devices,id',
+ ]);
+
+ $deviceId = $request['device_id'];
+ abort_unless($request->user()->devices->contains($deviceId), 403);
+
+ $device = Device::where('id', $deviceId)->get()->first();
+
+ return response()->json(
+ $device->only([
+ 'id',
+ 'mac_address',
+ 'name',
+ 'friendly_id',
+ 'last_rssi_level',
+ 'last_battery_voltage',
+ 'last_firmware_version',
+ 'battery_percent',
+ 'wifi_strengh',
+ 'current_screen_image',
+ 'default_refresh_interval',
+ 'updated_at',
+ ]),
+ );
+})
+ ->name('display.status')
+ ->middleware('auth:sanctum');
+
Route::post('custom_plugins/{plugin_uuid}', function (string $plugin_uuid) {
$plugin = \App\Models\Plugin::where('uuid', $plugin_uuid)->firstOrFail();
diff --git a/tests/Feature/Api/DeviceEndpointsTest.php b/tests/Feature/Api/DeviceEndpointsTest.php
index b10c2f6..09643f2 100644
--- a/tests/Feature/Api/DeviceEndpointsTest.php
+++ b/tests/Feature/Api/DeviceEndpointsTest.php
@@ -243,3 +243,69 @@ test('update_firmware flag is only returned once', function () {
$device->refresh();
expect($device->proxy_cloud_response['update_firmware'])->toBeFalse();
});
+
+test('authenticated user can fetch device status', function () {
+ $user = User::factory()->create();
+ $device = Device::factory()->create([
+ 'user_id' => $user->id,
+ 'mac_address' => '00:11:22:33:44:55',
+ 'name' => 'Test Device',
+ 'friendly_id' => 'test-device',
+ 'last_rssi_level' => -70,
+ 'last_battery_voltage' => 3.8,
+ 'last_firmware_version' => '1.0.0',
+ 'current_screen_image' => 'test-image',
+ 'default_refresh_interval' => 900,
+ ]);
+
+ Sanctum::actingAs($user);
+
+ $response = $this->getJson('/api/display/status?device_id='.$device->id);
+
+ $response->assertOk()
+ ->assertJson([
+ 'id' => $device->id,
+ 'mac_address' => '00:11:22:33:44:55',
+ 'name' => 'Test Device',
+ 'friendly_id' => 'test-device',
+ 'last_rssi_level' => -70,
+ 'last_battery_voltage' => 3.8,
+ 'last_firmware_version' => '1.0.0',
+ 'battery_percent' => 67,
+ 'wifi_strength' => 2,
+ 'current_screen_image' => 'test-image',
+ 'default_refresh_interval' => 900,
+ ]);
+});
+
+test('user cannot fetch status for devices they do not own', function () {
+ $user = User::factory()->create();
+ $otherUser = User::factory()->create();
+ $device = Device::factory()->create(['user_id' => $otherUser->id]);
+
+ Sanctum::actingAs($user);
+
+ $response = $this->getJson('/api/display/status?device_id='.$device->id);
+
+ $response->assertForbidden();
+});
+
+test('display status endpoint requires device_id parameter', function () {
+ $user = User::factory()->create();
+ Sanctum::actingAs($user);
+
+ $response = $this->getJson('/api/display/status');
+
+ $response->assertStatus(422)
+ ->assertJsonValidationErrors(['device_id']);
+});
+
+test('display status endpoint requires valid device_id', function () {
+ $user = User::factory()->create();
+ Sanctum::actingAs($user);
+
+ $response = $this->getJson('/api/display/status?device_id=999');
+
+ $response->assertStatus(422)
+ ->assertJsonValidationErrors(['device_id']);
+});