413 Commits
Author SHA1 Message Date
Brooke Kuhlmann 2f33d0b791 Added designs importer
Necessary to handle the validation and importing of data into the database for a design (screen template).

Milestone: minor
2026-08-12 11:42:35 -06:00
Brooke Kuhlmann 96f8e765a1 Added designs exporter
Necessary to export a design for sharing with others. Will soon be used by the designs export action (not yet implemented).

Milestone: minor
2026-08-11 16:53:52 -06:00
Brooke Kuhlmann ac2837872e Added extension remote import template key transforms for device
Ensures the remote keys are correctly mapped to the internal keys as provided by the `Contextualizer` during screen generation.

Milestone: minor
2026-08-11 11:56:16 -06:00
Brooke Kuhlmann be452356e4 Added extensions contextualizer device attributes
Necessary to access device information via Liquid templates.

Milestone: minor
2026-08-11 11:28:31 -06:00
Brooke Kuhlmann 0e5931441e Fixed models finder to prefer model ID over device ID
Ensures the model ID is preferred in situations where both the a model and device ID are provided.

Milestone: patch
2026-08-11 11:20:07 -06:00
Brooke Kuhlmann 919b8be633 Fixed extension import remote key transformer to map external ID
Ensures the TRMNL Recipe ID is mapped as an external ID in case we need to reference this information. This also ensures the extension's ID will be dynamically sequenced via PostgreSQL when the record is created instead of letting the TRMNL Recipe ID override this value.

Milestone: patch
2026-08-11 11:19:57 -06:00
Brooke Kuhlmann 3272565a34 Added screen mold extension ID
Necessary to capture this information when creating a screen now that a screen can be associated with an extension. The key order was updated to list model, device, extension, and then template.

The screen updater spec was updated to reflect this change as well (for completeness).

Issue: 360
Milestone: minor
2026-08-10 14:49:54 -06:00
Brooke Kuhlmann 3fa381519d Added device deleter
Necessary to handle the deleting of a device and associated screens.

Milestone: minor
2026-08-05 14:43:51 -06:00
Brooke Kuhlmann 8163b13e9e Removed device firmware automatic update from defaults
Necessary to prevent automatic bricking of devices due to unreliable firmware updates. I have a couple issues, via the Core and Firmware projects, to address this but the root cause stems from unreliable and inconsistent firmware version releases.

Milestone: minor
2026-08-05 09:54:20 -06:00
Brooke Kuhlmann 05f85c4093 Refactored fetchers namespace as fetcher (singular)
Clarifies this namespace is for a single entity (and associated objects).

Milestone: patch
2026-08-04 16:05:18 -06:00
Brooke Kuhlmann db790c68ea Removed unnecessary Dry Core requirements
Safe to remove since they are not being used.

Milestone: patch
2026-08-04 11:58:57 -06:00
Brooke Kuhlmann 9b46c6ad14 Fixed extension exchange request builder to handle deeply nested values
Ensures deeply nested values are properly rendered. This cropped up in ed2997a (Added extension exchange request builder) which also added support for HTTP POST bodies. The complication is with the bodies since they can be deeply nested while headers and the template are less so. This fix applies to both headers and bodies while the template can be ignored because it needs a URL per line (no nesting).

In hindsight, the `curler` spec altercation was the give away (which is also why it needed to be updated with this change too) because the value should be `10`, not `"10"`.

Reek has been updated to ignore duplicate method calls because it can't distinguish between different case branches. The too many statements is because of the blocks used in the case statement but, in this case, is acceptable.

Issue: 358
Milestone: patch
2026-07-31 16:49:15 -06:00
Brooke Kuhlmann 30a98d29a5 Updated to TRMNL API 0.20.0
This release adds support for firmware flashes and renames the firmware latest endpoint to `firmware_latest`.

Milestone: minor
2026-07-31 14:03:52 -06:00
Brooke Kuhlmann ef00ee9654 Removed unused request builder dependencies
Safe to remove since they are not used.

Milestone: patch
2026-07-31 09:15:33 -06:00
Brooke Kuhlmann 7efe839f3b Refactored extension curler to inject command
Reduces the lines of code used (slightly) and eliminates a class method now that the command is injected for internal use.

Milestone: patch
2026-07-31 09:15:13 -06:00
Brooke Kuhlmann 7bc55b36bb Removed extensions URI Builder
Safe to remove since it's no longer needed.

Issue: 352
Milestone: minor
2026-07-30 17:02:14 -06:00
Brooke Kuhlmann b49bcc8a44 Refactored extension objects to use request builder
This is being done in order to remove the `URIBuilder` by using the request builder instead. This reduceds duplication across all objects while allowing all objects to use Liquid syntax for headers, URIs, and bodies.

Issue: 352
Milestone: patch
2026-07-30 17:02:13 -06:00
Brooke Kuhlmann ed2997af08 Added extension exchange request builder
Necessary to build fully rendered requests -- via Liquid templates -- for an exchange.

Issue: 352
Milestone: minor
2026-07-30 17:02:13 -06:00
Brooke Kuhlmann 239b6b0dae Refactored extension renderers as generators
Naming of these objects continues to be challenging but this refactors the renderers as generators because they are producing HTML content for building images. The actual rendering of content to HTML is handled by the Liquid renderer.

Issue: 352
Milestone: patch
2026-07-30 15:14:27 -06:00
Brooke Kuhlmann dae484e2d9 Fixed extension importer remote extractor spec to use API again
This is a partial revert of 06e1819 (Added extension importer remote extractor failure spec) now that the Core server is fixed to properly handle Cloudflare SSL certificates. Due to the Core issue, this was also causing issues with Recipe imports (which is also working now as well).

Milestone: patch
2026-07-30 13:20:59 -06:00
Brooke Kuhlmann 06e1819b57 Added extension importer remote extractor failure spec
This tests the failure case but also adds a pending failure for the success path because there is a Cloudflare HTTP 525 status error when downloading content. This definitely isn't ideal but will allow the test suite to pass until issues with the Core server are addressed.

Milestone: patch
2026-07-30 10:06:26 -06:00
Brooke Kuhlmann 8f43b21c3d Fixed downloader to convert response failure to a string before logging
This was causing crashes with the logger so we make the conversion to a string explicit now.

Milestone: patch
2026-07-30 09:49:11 -06:00
Brooke Kuhlmann fa30f6a33f Updated device log UI and API to use commands
Necessary to capture the command used as command in the database and in the UI instead of previously using: `special_function`. The API request payload terminology doesn't change since the Firmware would need to be updated to account for that.

Issue: 345
Milestone: minor
2026-07-21 16:32:18 -06:00
Brooke Kuhlmann f684464a99 Fixed screen upserter failure message
Necessary to provide more context.

Milestone: patch
2026-07-21 10:57:44 -06:00
Brooke Kuhlmann b2aca9a266 Updated device synchronizer to find by API key
Necessary to improve security especially now that the device caches the API key after being provisioned.

Milestone: minor
2026-07-14 17:19:24 -06:00