Compare commits

..

7 commits
0.25.0 ... main

Author SHA1 Message Date
Benjamin Nussbaum
730260bf42 chore: update dependencies
Some checks are pending
tests / ci (push) Waiting to run
2026-01-14 10:44:09 +01:00
Benjamin Nussbaum
d7f6237265 fix(#158): do not require ID header on /display endpoint
Some checks are pending
tests / ci (push) Waiting to run
2026-01-13 17:32:12 +01:00
Benjamin Nussbaum
c2c553461f fix: codemirror readonly when render_markup_view is set 2026-01-13 17:06:13 +01:00
Benjamin Nussbaum
fceacfe4b3 fix(#157): migrations and seeders for pgsql 2026-01-13 16:48:48 +01:00
Benjamin Nussbaum
3032c09778 fix: markup for recipe 'Zen Quotes'
Some checks are pending
tests / ci (push) Waiting to run
2026-01-12 17:58:22 +01:00
Benjamin Nussbaum
f1903bcbe8 chore: change button variant 2026-01-12 17:42:25 +01:00
Benjamin Nussbaum
621c108e78 chore: Alias improve wording 2026-01-12 16:32:26 +01:00
10 changed files with 259 additions and 87 deletions

3
.gitignore vendored
View file

@ -34,3 +34,6 @@ yarn-error.log
/boost.json
/.gemini
/GEMINI.md
/.claude
/AGENTS.md
/opencode.json

View file

@ -25,6 +25,7 @@
"livewire/flux": "^2.0",
"livewire/volt": "^1.7",
"om/icalparser": "^3.2",
"simplesoftwareio/simple-qrcode": "^4.2",
"spatie/browsershot": "^5.0",
"stevebauman/purify": "^6.3",
"symfony/yaml": "^7.3",

286
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "25c2a1a4a2f2594adefe25ddb6a072fb",
"content-hash": "4de5f1df0160f59d08f428e36e81262e",
"packages": [
{
"name": "aws/aws-crt-php",
@ -62,16 +62,16 @@
},
{
"name": "aws/aws-sdk-php",
"version": "3.369.10",
"version": "3.369.12",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "e179090bf2d658be7be37afc146111966ba6f41b"
"reference": "36ee8894743a254ae2650bad4968c874b76bc7de"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e179090bf2d658be7be37afc146111966ba6f41b",
"reference": "e179090bf2d658be7be37afc146111966ba6f41b",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/36ee8894743a254ae2650bad4968c874b76bc7de",
"reference": "36ee8894743a254ae2650bad4968c874b76bc7de",
"shasum": ""
},
"require": {
@ -153,9 +153,63 @@
"support": {
"forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues",
"source": "https://github.com/aws/aws-sdk-php/tree/3.369.10"
"source": "https://github.com/aws/aws-sdk-php/tree/3.369.12"
},
"time": "2026-01-09T19:08:12+00:00"
"time": "2026-01-13T19:12:08+00:00"
},
{
"name": "bacon/bacon-qr-code",
"version": "2.0.8",
"source": {
"type": "git",
"url": "https://github.com/Bacon/BaconQrCode.git",
"reference": "8674e51bb65af933a5ffaf1c308a660387c35c22"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22",
"reference": "8674e51bb65af933a5ffaf1c308a660387c35c22",
"shasum": ""
},
"require": {
"dasprid/enum": "^1.0.3",
"ext-iconv": "*",
"php": "^7.1 || ^8.0"
},
"require-dev": {
"phly/keep-a-changelog": "^2.1",
"phpunit/phpunit": "^7 | ^8 | ^9",
"spatie/phpunit-snapshot-assertions": "^4.2.9",
"squizlabs/php_codesniffer": "^3.4"
},
"suggest": {
"ext-imagick": "to generate QR code images"
},
"type": "library",
"autoload": {
"psr-4": {
"BaconQrCode\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-2-Clause"
],
"authors": [
{
"name": "Ben Scholzen 'DASPRiD'",
"email": "mail@dasprids.de",
"homepage": "https://dasprids.de/",
"role": "Developer"
}
],
"description": "BaconQrCode is a QR code generator for PHP.",
"homepage": "https://github.com/Bacon/BaconQrCode",
"support": {
"issues": "https://github.com/Bacon/BaconQrCode/issues",
"source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8"
},
"time": "2022-12-07T17:46:57+00:00"
},
{
"name": "bnussbau/laravel-trmnl-blade",
@ -441,6 +495,56 @@
],
"time": "2024-02-09T16:56:22+00:00"
},
{
"name": "dasprid/enum",
"version": "1.0.7",
"source": {
"type": "git",
"url": "https://github.com/DASPRiD/Enum.git",
"reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce",
"reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce",
"shasum": ""
},
"require": {
"php": ">=7.1 <9.0"
},
"require-dev": {
"phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11",
"squizlabs/php_codesniffer": "*"
},
"type": "library",
"autoload": {
"psr-4": {
"DASPRiD\\Enum\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-2-Clause"
],
"authors": [
{
"name": "Ben Scholzen 'DASPRiD'",
"email": "mail@dasprids.de",
"homepage": "https://dasprids.de/",
"role": "Developer"
}
],
"description": "PHP 7.1 enum implementation",
"keywords": [
"enum",
"map"
],
"support": {
"issues": "https://github.com/DASPRiD/Enum/issues",
"source": "https://github.com/DASPRiD/Enum/tree/1.0.7"
},
"time": "2025-09-16T12:23:56+00:00"
},
{
"name": "dflydev/dot-access-data",
"version": "v3.0.3",
@ -1678,16 +1782,16 @@
},
{
"name": "laravel/framework",
"version": "v12.46.0",
"version": "v12.47.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "9dcff48d25a632c1fadb713024c952fec489c4ae"
"reference": "ab8114c2e78f32e64eb238fc4b495bea3f8b80ec"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/9dcff48d25a632c1fadb713024c952fec489c4ae",
"reference": "9dcff48d25a632c1fadb713024c952fec489c4ae",
"url": "https://api.github.com/repos/laravel/framework/zipball/ab8114c2e78f32e64eb238fc4b495bea3f8b80ec",
"reference": "ab8114c2e78f32e64eb238fc4b495bea3f8b80ec",
"shasum": ""
},
"require": {
@ -1896,20 +2000,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2026-01-07T23:26:53+00:00"
"time": "2026-01-13T15:29:06+00:00"
},
{
"name": "laravel/prompts",
"version": "v0.3.8",
"version": "v0.3.9",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
"reference": "096748cdfb81988f60090bbb839ce3205ace0d35"
"reference": "5c41bf0555b7cfefaad4e66d3046675829581ac4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/prompts/zipball/096748cdfb81988f60090bbb839ce3205ace0d35",
"reference": "096748cdfb81988f60090bbb839ce3205ace0d35",
"url": "https://api.github.com/repos/laravel/prompts/zipball/5c41bf0555b7cfefaad4e66d3046675829581ac4",
"reference": "5c41bf0555b7cfefaad4e66d3046675829581ac4",
"shasum": ""
},
"require": {
@ -1953,22 +2057,22 @@
"description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": {
"issues": "https://github.com/laravel/prompts/issues",
"source": "https://github.com/laravel/prompts/tree/v0.3.8"
"source": "https://github.com/laravel/prompts/tree/v0.3.9"
},
"time": "2025-11-21T20:52:52+00:00"
"time": "2026-01-07T21:00:29+00:00"
},
{
"name": "laravel/sanctum",
"version": "v4.2.2",
"version": "v4.2.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/sanctum.git",
"reference": "fd447754d2d3f56950d53b930128af2e3b617de9"
"reference": "47d26f1d310879ff757b971f5a6fc631d18663fd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/sanctum/zipball/fd447754d2d3f56950d53b930128af2e3b617de9",
"reference": "fd447754d2d3f56950d53b930128af2e3b617de9",
"url": "https://api.github.com/repos/laravel/sanctum/zipball/47d26f1d310879ff757b971f5a6fc631d18663fd",
"reference": "47d26f1d310879ff757b971f5a6fc631d18663fd",
"shasum": ""
},
"require": {
@ -2018,20 +2122,20 @@
"issues": "https://github.com/laravel/sanctum/issues",
"source": "https://github.com/laravel/sanctum"
},
"time": "2026-01-06T23:11:51+00:00"
"time": "2026-01-11T18:20:25+00:00"
},
{
"name": "laravel/serializable-closure",
"version": "v2.0.7",
"version": "v2.0.8",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
"reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd"
"reference": "7581a4407012f5f53365e11bafc520fd7f36bc9b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/cb291e4c998ac50637c7eeb58189c14f5de5b9dd",
"reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd",
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/7581a4407012f5f53365e11bafc520fd7f36bc9b",
"reference": "7581a4407012f5f53365e11bafc520fd7f36bc9b",
"shasum": ""
},
"require": {
@ -2079,20 +2183,20 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
"time": "2025-11-21T20:52:36+00:00"
"time": "2026-01-08T16:22:46+00:00"
},
{
"name": "laravel/socialite",
"version": "v5.24.1",
"version": "v5.24.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/socialite.git",
"reference": "25e28c14d55404886777af1d77cf030e0f633142"
"reference": "5cea2eebf11ca4bc6c2f20495c82a70a9b3d1613"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/socialite/zipball/25e28c14d55404886777af1d77cf030e0f633142",
"reference": "25e28c14d55404886777af1d77cf030e0f633142",
"url": "https://api.github.com/repos/laravel/socialite/zipball/5cea2eebf11ca4bc6c2f20495c82a70a9b3d1613",
"reference": "5cea2eebf11ca4bc6c2f20495c82a70a9b3d1613",
"shasum": ""
},
"require": {
@ -2151,7 +2255,7 @@
"issues": "https://github.com/laravel/socialite/issues",
"source": "https://github.com/laravel/socialite"
},
"time": "2026-01-01T02:57:21+00:00"
"time": "2026-01-10T16:07:28+00:00"
},
{
"name": "laravel/tinker",
@ -4818,6 +4922,74 @@
},
"time": "2025-12-14T04:43:48+00:00"
},
{
"name": "simplesoftwareio/simple-qrcode",
"version": "4.2.0",
"source": {
"type": "git",
"url": "https://github.com/SimpleSoftwareIO/simple-qrcode.git",
"reference": "916db7948ca6772d54bb617259c768c9cdc8d537"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/SimpleSoftwareIO/simple-qrcode/zipball/916db7948ca6772d54bb617259c768c9cdc8d537",
"reference": "916db7948ca6772d54bb617259c768c9cdc8d537",
"shasum": ""
},
"require": {
"bacon/bacon-qr-code": "^2.0",
"ext-gd": "*",
"php": ">=7.2|^8.0"
},
"require-dev": {
"mockery/mockery": "~1",
"phpunit/phpunit": "~9"
},
"suggest": {
"ext-imagick": "Allows the generation of PNG QrCodes.",
"illuminate/support": "Allows for use within Laravel."
},
"type": "library",
"extra": {
"laravel": {
"aliases": {
"QrCode": "SimpleSoftwareIO\\QrCode\\Facades\\QrCode"
},
"providers": [
"SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"SimpleSoftwareIO\\QrCode\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Simple Software LLC",
"email": "support@simplesoftware.io"
}
],
"description": "Simple QrCode is a QR code generator made for Laravel.",
"homepage": "https://www.simplesoftware.io/#/docs/simple-qrcode",
"keywords": [
"Simple",
"generator",
"laravel",
"qrcode",
"wrapper"
],
"support": {
"issues": "https://github.com/SimpleSoftwareIO/simple-qrcode/issues",
"source": "https://github.com/SimpleSoftwareIO/simple-qrcode/tree/4.2.0"
},
"time": "2021-02-08T20:43:55+00:00"
},
{
"name": "spatie/browsershot",
"version": "5.2.0",
@ -4949,16 +5121,16 @@
},
{
"name": "spatie/temporary-directory",
"version": "2.3.0",
"version": "2.3.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/temporary-directory.git",
"reference": "580eddfe9a0a41a902cac6eeb8f066b42e65a32b"
"reference": "662e481d6ec07ef29fd05010433428851a42cd07"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/temporary-directory/zipball/580eddfe9a0a41a902cac6eeb8f066b42e65a32b",
"reference": "580eddfe9a0a41a902cac6eeb8f066b42e65a32b",
"url": "https://api.github.com/repos/spatie/temporary-directory/zipball/662e481d6ec07ef29fd05010433428851a42cd07",
"reference": "662e481d6ec07ef29fd05010433428851a42cd07",
"shasum": ""
},
"require": {
@ -4994,7 +5166,7 @@
],
"support": {
"issues": "https://github.com/spatie/temporary-directory/issues",
"source": "https://github.com/spatie/temporary-directory/tree/2.3.0"
"source": "https://github.com/spatie/temporary-directory/tree/2.3.1"
},
"funding": [
{
@ -5006,7 +5178,7 @@
"type": "github"
}
],
"time": "2025-01-13T13:04:43+00:00"
"time": "2026-01-12T07:42:22+00:00"
},
{
"name": "stevebauman/purify",
@ -10149,16 +10321,16 @@
},
{
"name": "phpstan/phpdoc-parser",
"version": "2.3.0",
"version": "2.3.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495"
"reference": "16dbf9937da8d4528ceb2145c9c7c0bd29e26374"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495",
"reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/16dbf9937da8d4528ceb2145c9c7c0bd29e26374",
"reference": "16dbf9937da8d4528ceb2145c9c7c0bd29e26374",
"shasum": ""
},
"require": {
@ -10190,9 +10362,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
"source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0"
"source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.1"
},
"time": "2025-08-30T15:50:23+00:00"
"time": "2026-01-12T11:33:04+00:00"
},
{
"name": "phpstan/phpstan",
@ -10688,16 +10860,16 @@
},
{
"name": "rector/rector",
"version": "2.3.0",
"version": "2.3.1",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
"reference": "f7166355dcf47482f27be59169b0825995f51c7d"
"reference": "9afc1bb43571b25629f353c61a9315b5ef31383a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/f7166355dcf47482f27be59169b0825995f51c7d",
"reference": "f7166355dcf47482f27be59169b0825995f51c7d",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/9afc1bb43571b25629f353c61a9315b5ef31383a",
"reference": "9afc1bb43571b25629f353c61a9315b5ef31383a",
"shasum": ""
},
"require": {
@ -10736,7 +10908,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
"source": "https://github.com/rectorphp/rector/tree/2.3.0"
"source": "https://github.com/rectorphp/rector/tree/2.3.1"
},
"funding": [
{
@ -10744,7 +10916,7 @@
"type": "github"
}
],
"time": "2025-12-25T22:00:18+00:00"
"time": "2026-01-13T15:13:58+00:00"
},
{
"name": "sebastian/cli-parser",
@ -11806,16 +11978,16 @@
},
{
"name": "webmozart/assert",
"version": "2.1.1",
"version": "2.1.2",
"source": {
"type": "git",
"url": "https://github.com/webmozarts/assert.git",
"reference": "bdbabc199a7ba9965484e4725d66170e5711323b"
"reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/bdbabc199a7ba9965484e4725d66170e5711323b",
"reference": "bdbabc199a7ba9965484e4725d66170e5711323b",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/ce6a2f100c404b2d32a1dd1270f9b59ad4f57649",
"reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649",
"shasum": ""
},
"require": {
@ -11862,9 +12034,9 @@
],
"support": {
"issues": "https://github.com/webmozarts/assert/issues",
"source": "https://github.com/webmozarts/assert/tree/2.1.1"
"source": "https://github.com/webmozarts/assert/tree/2.1.2"
},
"time": "2026-01-08T11:28:40+00:00"
"time": "2026-01-13T14:02:24+00:00"
}
],
"aliases": [],

View file

@ -1,8 +1,8 @@
<?php
use App\Models\Plugin;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
@ -13,16 +13,16 @@ return new class extends Migration
public function up(): void
{
// Find and handle duplicate (user_id, trmnlp_id) combinations
$duplicates = DB::table('plugins')
->select('user_id', 'trmnlp_id', DB::raw('COUNT(*) as count'))
$duplicates = Plugin::query()
->selectRaw('user_id, trmnlp_id, COUNT(*) as duplicate_count')
->whereNotNull('trmnlp_id')
->groupBy('user_id', 'trmnlp_id')
->having('count', '>', 1)
->havingRaw('COUNT(*) > ?', [1])
->get();
// For each duplicate combination, keep the first one (by id) and set others to null
foreach ($duplicates as $duplicate) {
$plugins = DB::table('plugins')
$plugins = Plugin::query()
->where('user_id', $duplicate->user_id)
->where('trmnlp_id', $duplicate->trmnlp_id)
->orderBy('id')
@ -37,9 +37,7 @@ return new class extends Migration
continue;
}
DB::table('plugins')
->where('id', $plugin->id)
->update(['trmnlp_id' => null]);
$plugin->update(['trmnlp_id' => null]);
}
}

View file

@ -13,8 +13,8 @@ class ExampleRecipesSeeder extends Seeder
public function run($user_id = 1): void
{
Plugin::updateOrCreate(
['uuid' => '9e46c6cf-358c-4bfe-8998-436b3a207fec'],
[
'uuid' => '9e46c6cf-358c-4bfe-8998-436b3a207fec',
'name' => 'ÖBB Departures',
'user_id' => $user_id,
'data_payload' => null,
@ -32,8 +32,8 @@ class ExampleRecipesSeeder extends Seeder
);
Plugin::updateOrCreate(
['uuid' => '3b046eda-34e9-4232-b935-c33b989a284b'],
[
'uuid' => '3b046eda-34e9-4232-b935-c33b989a284b',
'name' => 'Weather',
'user_id' => $user_id,
'data_payload' => null,
@ -51,8 +51,8 @@ class ExampleRecipesSeeder extends Seeder
);
Plugin::updateOrCreate(
['uuid' => '21464b16-5f5a-4099-a967-f5c915e3da54'],
[
'uuid' => '21464b16-5f5a-4099-a967-f5c915e3da54',
'name' => 'Zen Quotes',
'user_id' => $user_id,
'data_payload' => null,
@ -70,8 +70,8 @@ class ExampleRecipesSeeder extends Seeder
);
Plugin::updateOrCreate(
['uuid' => '8d472959-400f-46ee-afb2-4a9f1cfd521f'],
[
'uuid' => '8d472959-400f-46ee-afb2-4a9f1cfd521f',
'name' => 'This Day in History',
'user_id' => $user_id,
'data_payload' => null,
@ -89,8 +89,8 @@ class ExampleRecipesSeeder extends Seeder
);
Plugin::updateOrCreate(
['uuid' => '4349fdad-a273-450b-aa00-3d32f2de788d'],
[
'uuid' => '4349fdad-a273-450b-aa00-3d32f2de788d',
'name' => 'Home Assistant',
'user_id' => $user_id,
'data_payload' => null,
@ -108,8 +108,8 @@ class ExampleRecipesSeeder extends Seeder
);
Plugin::updateOrCreate(
['uuid' => 'be5f7e1f-3ad8-4d66-93b2-36f7d6dcbd80'],
[
'uuid' => 'be5f7e1f-3ad8-4d66-93b2-36f7d6dcbd80',
'name' => 'Sunrise/Sunset',
'user_id' => $user_id,
'data_payload' => null,
@ -127,8 +127,8 @@ class ExampleRecipesSeeder extends Seeder
);
Plugin::updateOrCreate(
['uuid' => '82d3ee14-d578-4969-bda5-2bbf825435fe'],
[
'uuid' => '82d3ee14-d578-4969-bda5-2bbf825435fe',
'name' => 'Pollen Forecast',
'user_id' => $user_id,
'data_payload' => null,
@ -146,8 +146,8 @@ class ExampleRecipesSeeder extends Seeder
);
Plugin::updateOrCreate(
['uuid' => '1d98bca4-837d-4b01-b1a1-e3b6e56eca90'],
[
'uuid' => '1d98bca4-837d-4b01-b1a1-e3b6e56eca90',
'name' => 'Holidays (iCal)',
'user_id' => $user_id,
'data_payload' => null,

View file

@ -803,7 +803,7 @@ HTML;
</flux:field>
</div>
<flux:button variant="primary" icon="cloud-arrow-down" wire:click="updateData" class="w-full mt-4">
<flux:button icon="cloud-arrow-down" wire:click="updateData" class="w-full mt-4">
Fetch data now
</flux:button>
</div>
@ -950,7 +950,7 @@ HTML;
/>
<div
x-data="codeEditorFormComponent({
isDisabled: false,
isDisabled: @js((bool)$plugin->render_markup_view),
language: 'liquid',
state: $wire.entangle('markup_code'),
textareaId: @js($textareaId)

View file

@ -76,7 +76,7 @@ new class extends Component {
<flux:field>
<flux:checkbox wire:model.live="alias" label="Enable Alias" />
<flux:description>Enable a public alias URL for this recipe.</flux:description>
<flux:description>Enable an Alias URL for this recipe. Your server does not need to be exposed to the internet, but your device must be able to reach the URL. <a href="https://help.usetrmnl.com/en/articles/10701448-alias-plugin">Docs</a></flux:description>
</flux:field>
@if($alias)
@ -87,7 +87,7 @@ new class extends Component {
readonly
copyable
/>
<flux:description>Use this URL to access the recipe image directly. Add <code>?device-model=name</code> to specify a device model.</flux:description>
<flux:description>Copy this URL to your TRMNL Dashboard. By default, image is created for TRMNL OG; use parameter <code>?device-model=</code> to specify a device model.</flux:description>
</flux:field>
@endif
</div>

View file

@ -3,11 +3,11 @@
<x-trmnl::view size="{{ $size }}">
<x-trmnl::layout>
<x-trmnl::layout class="layout--col">
<div class="b-h-gray-1">{{$data[0]['a']}}</div>
@if (strlen($data[0]['q']) < 300 && $size != 'quadrant')
<p class="value">{{ $data[0]['q'] }}</p>
<div class="b-h-gray-1">{{$data['data'][0]['a'] ?? ''}}</div>
@if (strlen($data['data'][0]['q'] ?? '') < 300 && $size != 'quadrant')
<p class="value">{{ $data['data'][0]['q'] ?? '' }}</p>
@else
<p class="value--small">{{ $data[0]['q'] }}</p>
<p class="value--small">{{ $data['data'][0]['q'] ?? '' }}</p>
@endif
</x-trmnl::layout>
</x-trmnl::layout>

View file

@ -18,15 +18,13 @@ use Illuminate\Support\Str;
Route::get('/display', function (Request $request) {
$mac_address = $request->header('id');
$access_token = $request->header('access-token');
$device = Device::where('mac_address', mb_strtoupper($mac_address ?? ''))
->where('api_key', $access_token)
->first();
$device = Device::where('api_key', $access_token)->first();
if (! $device) {
// Check if there's a user with assign_new_devices enabled
$auto_assign_user = User::where('assign_new_devices', true)->first();
if ($auto_assign_user) {
if ($auto_assign_user && $mac_address) {
// Create a new device and assign it to this user
$device = Device::create([
'mac_address' => mb_strtoupper($mac_address ?? ''),
@ -39,7 +37,7 @@ Route::get('/display', function (Request $request) {
]);
} else {
return response()->json([
'message' => 'MAC Address not registered or invalid access token',
'message' => 'MAC Address not registered (or not set), or invalid access token',
], 404);
}
}

View file

@ -263,7 +263,7 @@ test('invalid device credentials return error', function (): void {
])->get('/api/display');
$response->assertNotFound()
->assertJson(['message' => 'MAC Address not registered or invalid access token']);
->assertJson(['message' => 'MAC Address not registered (or not set), or invalid access token']);
});
test('log endpoint requires valid device credentials', function (): void {