NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #3198 most downloaded on pub.dev
Layrz API models for Dart/Flutter. This package contains the models used by the Layrz API.
Last release 9 days ago
29 Sep 2026
Ships on a steady schedule
a new release about every 9 days
Nearly every release is documented
notes for 59 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
3 years old
562 releases · first in 2023
One column per quarter.
This release includes the following changes:
This release includes the following changes:
365f4d9 by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 4 |
| 🟢 Insertions | $\color{green}\textsf{+17}$ |
| 🔴 Deletions | $\color{red}\textsf{-46}$ |
🤖 Auto-generated by changelog workflow
AtsFuelSubType.ethanolAnidro (ANP 810102001), added in 3.35.0. That ANP is issued by mistake and is normalized to Etanol Hidratado (810101001) by the backend, so it resolves to unknown again and no longer shows up in the fuel subtype selector.This release includes the following changes:
This release includes the following changes:
ef3fa1d by @mask-03, Claude Sonnet 5)| Metric | Count |
|---|---|
| 📄 Files changed | 10 |
| 🟢 Insertions | $\color{green}\textsf{+8}$ |
| 🔴 Deletions | $\color{red}\textsf{-1261}$ |
🤖 Auto-generated by changelog workflow
layrz_sdk to ^4.8.2, which adds assetsInStorageTerminal/assetsInStorageTerminalIds to Asset — the inverse relation of linkedStorageTerminals/linkedStorageTerminalsIds, listing the assets that selected this asset as a storage terminal.ReportScheduler/ReportSchedulerInput/RelativeChoices/kDefaultFieldsPerModule copies under lib/src/reports/, which duplicated the versions layrz_sdk 4.8.1 already migrated in. These types are now re-exported from layrz_sdk only, with no functional change other than ReportScheduler.execTime using layrz_sdk's own TimeOfDay type instead of Flutter's.This release includes the following changes:
This release includes the following changes:
5200a97 by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 4 |
| 🟢 Insertions | $\color{green}\textsf{+155}$ |
| 🔴 Deletions | $\color{red}\textsf{-1}$ |
🤖 Auto-generated by changelog workflow
AtsFuelSubType.ethanolAnidro (ETHANOLANIDRO, ANP 810102001, Etanol Anidro without dye), grouped under hydrated. NFe with this ANP code previously resolved to unknown.AtsFuelSubType.dieselS500AAditivado (DIESELS500ADITIVADO_A, ANP 420102005), grouped under diesel.AtsFuelSubType.gasolineAPremium (GASOLINEPREMIUM_A, ANP 320101002), grouped under gasoline.FuelSubtype enum and are listed in getFuelSubTypeList.keep deprecated converter shims for backwards compatibility ( 64ecca2 by @PHKenny , Anthropic Claude)
This release includes the following changes:
9c24e46 by @mask-03, Claude Sonnet 5)64ecca2 by @PHKenny, Anthropic Claude)977e7de by @PHKenny, Claude Opus 4.8)9eb18c7 by @PHKenny, Claude Sonnet 5)3d156f7 by @PHKenny, Claude Opus 4.8)2180822 by @PHKenny, Anthropic Claude)6f34389 by @PHKenny, Claude Opus 4.8)1411857 by @PHKenny, Claude Opus 4.8)8ab1b73 by @PHKenny, Claude Opus 4.8)e6a986a by @PHKenny, Claude Opus 4.8)22118cf by @PHKenny, Anthropic Claude)ea00d66 by @PHKenny, Anthropic Claude)b57b7fc by @PHKenny, Anthropic Claude)1ad7f0e by @PHKenny, Anthropic Claude)| Metric | Count |
|---|---|
| 📄 Files changed | 553 |
| 🟢 Insertions | $\color{green}\textsf{+5903}$ |
| 🔴 Deletions | $\color{red}\textsf{-148084}$ |
🤖 Auto-generated by changelog workflow
AtsOperationMerge and a new merges field on AtsOperation, exposing the mergeOperations history (merge/revert audit trail) so the UI can tell a merged operation apart from a regular one.layrz_sdk to ^4.6.4, which adds commandResultAdd/commandResultDel to AtsHistoryAuthenticationCardOperation.Removed BLE models (BleDevice, BleManufacturerData, BleServiceData); these types now come exclusively from layrz_sdk.
layrz_sdk to ^4.6.2.BleDevice, BleManufacturerData, BleServiceData); these types now come exclusively from layrz_sdk.Removed the local definitions of the models, inputs, enums, and converters that were re-exported from layrz_sdk in 3.34.0+1 (the RegisteredApp/Tag/Cus
layrz_sdk in 3.34.0+1 (the RegisteredApp/Tag/CustomReport closure and related types across access, actions, apps, assets, devices, exchange, geofences, modbus, mqtt, operations, references, sensors, vision, zigbee, and peripheral models across care protocols, charts, commands, concierge, external accounts, inbound protocols, Mappit, outbound services, presets, report templates, triggers, users, and workspace cards). These types now resolve exclusively through the package:layrz_sdk/layrz_sdk.dart re-export already published in package:layrz_models/layrz_models.dart; no public API changes for consumers.layrz_sdk dependency on the published ^4.5.0 release (no local path override).InboundProtocolInput moved to layrz_sdk and is re-exported from package:layrz_models/layrz_models.dart; no public API changes for consumers.
InboundProtocolInput moved to layrz_sdk and is re-exported from package:layrz_models/layrz_models.dart; no public API changes for consumers.layrz_sdk 4.5.0+1 (still resolved via the existing ^4.5.0 dependency pin).Move LayrzNotification to layrz_sdk; re-exported it for backwards compatibility. Deleted the local lib/src/notifications/ module (model, generated fil
LayrzNotification to layrz_sdk; re-exported it for backwards compatibility. Deleted the local lib/src/notifications/ module (model, generated files, and its barrel); LayrzNotification and SoundEffect now resolve exclusively through the existing package:layrz_sdk/layrz_sdk.dart re-export in package:layrz_models/layrz_models.dart. The dropped BuildContext-based formatTitle/formatMessage helpers are not part of the SDK model; translation is now the consumer's responsibility.layrz_sdk to ^4.5.5+1.Moved Model, HwModel, HwModelInput, ConfIoTLayout, RenderWidget, FirmwareBuild, and FirmwareBranch to layrz_sdk; re-exported from package:layrz_models
Model, HwModel, HwModelInput, ConfIoTLayout, RenderWidget, FirmwareBuild, and FirmwareBranch to layrz_sdk; re-exported from package:layrz_models/layrz_models.dart for backwards compatibility.CommandDefinition, CommandPayloadDefinition, CommandDefinitionSource, and CommandPayloadDataType to layrz_sdk; re-exported for backwards compatibility.InboundProtocol, ConfigGrouping, ConfigDefinition, ConfigPayloadDataType, ConfigSource, ConfigKind, OperationMode, and ZigbeeDataType to layrz_sdk; re-exported for backwards compatibility.CredentialField, CredentialFieldType, and CredentialFieldAction to layrz_sdk; re-exported for backwards compatibility.FlespiAcl, FlespiSubmoduleConfig, FlespiUri, FlespiAction, FlespiMethod, and FlespiSubmodule to layrz_sdk; re-exported for backwards compatibility.WebhookStructure, WebhookPath, WebhookHeader, WebhookMethod, and WebhookFormat to layrz_sdk; re-exported for backwards compatibility.SimulationCycle to layrz_sdk; re-exported for backwards compatibility.layrz_sdk to ^4.4.9-dev.1.This release includes the following changes:
This release includes the following changes:
b4ed04e by @PHKenny, Claude Sonnet 5)ef368ca by @PHKenny, Anthropic Claude, Claude Sonnet 5)| Metric | Count |
|---|---|
| 📄 Files changed | 12 |
| 🟢 Insertions | $\color{green}\textsf{+102}$ |
| 🔴 Deletions | $\color{red}\textsf{-747}$ |
🤖 Auto-generated by changelog workflow
Category, CategoryKind, and AssetKind to layrz_sdk; they are re-exported from package:layrz_models/layrz_models.dart for backwards compatibility.CategoryKindConverter, AssetKindOrNullConverter, and AssetKindConverter; kept as compatibility shims delegating to the SDK enums.RealtimeMessage to layrz_sdk; re-exported for backwards compatibility.layrz_sdk to ^4.4.7.Nothing published for this version
Deleted the local BleDevice, BleManufacturerData, BleServiceData, and MapLayerInput sources; these types now come exclusively from layrz_sdk.
BleDevice, BleManufacturerData, BleServiceData, and MapLayerInput sources; these types now come exclusively from layrz_sdk.FlespiProtocol, FlespiModel, FlespiChannel, and their decoders) to layrz_sdk; re-exported from package:layrz_models/layrz_models.dart for backwards compatibility. lib/src/flespi/flespi.dart is now an empty pass-through library.ModelInput and ZigbeeParameterInput to layrz_sdk; re-exported for backwards compatibility. lib/src/models/models.dart is now an empty pass-through library.CommandDefinitionInput and CommandPayloadDefinitionInput to layrz_sdk; re-exported for backwards compatibility. AssetCommand/AssetCommandPossibleDevice and the legacy report converters remain local to lib/src/commands/commands.dart.ConfigGroupingInput and ConfigDefinitionInput to layrz_sdk; re-exported for backwards compatibility.ConfIoTFile and ConfIoTNamespace (with ConfIoTNamespaceConverter/ConfIoTNamespaceOrNullConverter) to layrz_sdk; re-exported for backwards compatibility. lib/src/confiot/confiot.dart is now an empty pass-through library.ReportPreview, ReportPage, ReportRow, ReportHeader, ReportCell, ReportDataType) to layrz_sdk; re-exported for backwards compatibility.layrz_sdk to ^4.5.0+9.package:layrz_sdk/layrz_sdk.dart re-export in package:layrz_models/layrz_models.dart.Kept the deprecated CareProtocolModeOrNullConverter, ConciergeFormBlockTypeConverter, ModbusParameterSchemaConverter, TriggerGeofenceDetectionModeOrNu…
layrz_sdk ^4.5.1, which restores the pre-migration public surface of Action (instance fetch, ActionInput.save returning ApiResponse, the ActionVariant operation-name getters, and Action.gqlFragment), MapLayer (MapLayerInput.save returning ApiResponse, MapLayer.gqlFragment), and the Sensor converter classes, so downstream code that consumed these through layrz_models compiles unchanged.package:layrz_sdk/layrz_sdk.dart (hiding TimeOfDay) and removed the local module barrels and legacy converter files whose types now live in layrz_sdk.CareProtocolModeOrNullConverter, ConciergeFormBlockTypeConverter, ModbusParameterSchemaConverter, TriggerGeofenceDetectionModeOrNullConverter, and their siblings as local shims for backwards compatibility.Nothing published for this version
Nothing published for this version
Removed id from editApp mutation
id from editApp mutationThis release includes the following changes:
This release includes the following changes:
d560bdb by @joseaprieto68, Claude Sonnet 4.6)09c3acb by @joseaprieto68, Claude Sonnet 4.6)| Metric | Count |
|---|---|
| 📄 Files changed | 5 |
| 🟢 Insertions | $\color{green}\textsf{+40}$ |
| 🔴 Deletions | $\color{red}\textsf{-19}$ |
🤖 Auto-generated by changelog workflow
bindConflict (String?) on ZigbeeDevice. Exposes why the ingestion worker refused to auto-bind the device: null/'none', or 'foreign_account' when its ident already belongs to a platform device under an inaccessible account.This release includes the following changes:
origin (String?) on CaclInput, mirroring CaclEntity.origin. Lets the client submit the CACL's manual origin, used by the TFB report format to print ORIGEM for unload (discharge) operations from vessel-type transports instead of falling back to the linked asset's plate/name.This release includes the following changes:
This release includes the following changes:
6b609a7 by @ManuelRomeroA, Claude Sonnet 4.6)| Metric | Count |
|---|---|
| 📄 Files changed | 5 |
| 🟢 Insertions | $\color{green}\textsf{+62}$ |
| 🔴 Deletions | $\color{red}\textsf{-21}$ |
🤖 Auto-generated by changelog workflow
operations (List<AtsOperation>, defaults to []) on AtsPurchaseOrder. A purchase order shared across a road and a fluvial operation exposes each linked operation here with its own transportAsset, so the client can resolve the correct transport by the id returned in operationMatched instead of relying on transportAsset.This release includes the following changes:
This release includes the following changes:
| Metric | Count |
|---|---|
| 📄 Files changed | 4 |
| 🟢 Insertions | $\color{green}\textsf{+77}$ |
| 🔴 Deletions | $\color{red}\textsf{-3}$ |
🤖 Auto-generated by changelog workflow
This release includes the following changes:
This release includes the following changes:
03f04c5 by @LuisReyes98)9f4df5d by @LuisReyes98)| Metric | Count |
|---|---|
| 📄 Files changed | 3 |
| 🟢 Insertions | $\color{green}\textsf{+19}$ |
| 🔴 Deletions | $\color{red}\textsf{-8}$ |
🤖 Auto-generated by changelog workflow
ExternalUnit.fetchAll() GraphQL query: the status/errors/result selection is now nested inside the externalUnits field (with its sourceId argument), instead of being requested at the root of the query.This release includes the following changes:
This release includes the following changes:
07ecb12 by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 3 |
| 🟢 Insertions | $\color{green}\textsf{+8}$ |
| 🔴 Deletions | $\color{red}\textsf{-2}$ |
🤖 Auto-generated by changelog workflow
AtsLoadingParamsSample.transshipment now serializes to its own value TRANSSHIPMENT (both toJson() and fromJson()), replacing the temporary THIRD_PARTY_STORAGE mapping from 3.33.0. The backend now supports the dedicated value.This release includes the following changes:
This release includes the following changes:
7e55947 by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 7 |
| 🟢 Insertions | $\color{green}\textsf{+17}$ |
| 🔴 Deletions | $\color{red}\textsf{-1}$ |
🤖 Auto-generated by changelog workflow
AtsLoadingParamsSample.transshipment, distinguishing a transshipment scan reception from third-party storage. The backend does not support a dedicated value yet, so toJson() serializes it as THIRD_PARTY_STORAGE for now; its local key is ats.loadingParamsSample.transshipment.AppInternalIdentifier.meuSmartank (MEU_SMARTANK).This release includes the following changes:
This release includes the following changes:
96e338b by @LuisReyes98)| Metric | Count |
|---|---|
| 📄 Files changed | 8 |
| 🟢 Insertions | $\color{green}\textsf{+522}$ |
| 🔴 Deletions | $\color{red}\textsf{-21}$ |
🤖 Auto-generated by changelog workflow
WorkspaceInput.icon is now optional (MdiRemapIcon? with @IconOrNullConverter(), instead of required MdiRemapIcon with @IconConverter()). The backend can return icon: null for a workspace, which previously threw on deserialization.3.44.8 in .fvmrc.This release includes the following changes:
This release includes the following changes:
cb6bf80 by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 3 |
| 🟢 Insertions | $\color{green}\textsf{+52}$ |
| 🔴 Deletions | $\color{red}\textsf{-1}$ |
🤖 Auto-generated by changelog workflow
AtsFuelSubType.silProductCode, the numeric SIL (TENTI) product code for the SKID unloading order. SIL only accepts pure products, so only the 6 pure subtypes (anidro → 1, ethanol → 2, biodieselB100 → 3, dieselS500ComunA → 4, gasolineComunA → 5, dieselS10A → 6) return a code; every other subtype returns null (not managed by SIL).This release includes the following changes:
This release includes the following changes:
7718935 by @LuisReyes98)d06cd4d by @LuisReyes98)612414b by @LuisReyes98)ea1569f by @LuisReyes98)| Metric | Count |
|---|---|
| 📄 Files changed | 3 |
| 🟢 Insertions | $\color{green}\textsf{+14}$ |
| 🔴 Deletions | $\color{red}\textsf{-19}$ |
🤖 Auto-generated by changelog workflow
This release includes the following changes:
This release includes the following changes:
| Metric | Count |
|---|---|
| 📄 Files changed | 38 |
| 🟢 Insertions | $\color{green}\textsf{+222}$ |
| 🔴 Deletions | $\color{red}\textsf{-249}$ |
🤖 Auto-generated by changelog workflow
layrz_icons in favor of flutter_material_design_iconslayrz_sdk version dumpThis release includes the following changes:
This release includes the following changes:
| Metric | Count |
|---|---|
| 📄 Files changed | 4 |
| 🟢 Insertions | $\color{green}\textsf{+50}$ |
| 🔴 Deletions | $\color{red}\textsf{-1}$ |
🤖 Auto-generated by changelog workflow
AtsCfSkidModel (none/sil), the enum backing the new ats.custom.skid.model fixed custom field on Terminal assets (kindId 44) that lets ATS Mobile know whether — and with which equipment brand — a terminal receives product via SKID before routing it through the SIL integration. Follows the same manual toJson/fromJson/getLocaleKey pattern as AtsCfFuelType; unlike it, fromJson falls back to none instead of throwing, since the value comes from a custom field that may be empty or hold stale data.This release includes the following changes:
This release includes the following changes:
40c0ec5 by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 10 |
| 🟢 Insertions | $\color{green}\textsf{+2085}$ |
| 🔴 Deletions | $\color{red}\textsf{-375}$ |
🤖 Auto-generated by changelog workflow
createSilUnloadingOrder contract 1:1, and moved them to a dedicated src/ats/src/sil/ folder.
AtsSilInput → AtsSilUnloadingOrderInput, AtsSilCarreta → AtsSilTrailerInput, AtsSilCompartimento → AtsSilCompartmentInput. Fields are now English and aligned with the backend SilUnloadingOrderInput: numRef → operationId (the backend derives SIL Num_Ref from the operation, so the client sends the operation id), nomeMotorista/rgMotorista/cpfMotorista → driverName/driverRg/driverCpf, placaCavalo → truckPlate, carretas → trailers, corDoVeiculo → vehicleColor, possuiDnit → hasDnit, lacres → seals; trailer placaCarreta → trailerPlate, compartimentos → compartments; compartment numCompart → compartmentNumber, volDescarga (now int, backend requires an integer) → dischargeVolume, produto → productCode.result: AtsSilUnloadingOrder (reuses the existing AtsOperation), AtsSilTrailer, AtsSilCompartment and its certified AtsSilCompartmentResult, plus the AtsSilUnloadingOrderStatus enum (pending/sent/sendFailed/completed).This release includes the following changes:
This release includes the following changes:
ff2dfd5 by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 7 |
| 🟢 Insertions | $\color{green}\textsf{+970}$ |
| 🔴 Deletions | $\color{red}\textsf{-1}$ |
🤖 Auto-generated by changelog workflow
AtsSilInput, AtsSilCarreta and AtsSilCompartimento — the payload collected in ATS Mobile for the SKID reception flow and forwarded to the SIL integration. Fields use camelCase (GraphQL convention); the backend maps them to SIL's snake_case keys. Every field is nullable (obligatoriness is enforced by the backend). AtsSilInput/AtsSilCarreta expose a private constructor that seeds their nested lists as growable and with one initial row, so consumers can add/remove without hitting an unmodifiable list.5923 and 6923 to AtsPurchaseOrderCategoriesEntity.cfop, mapping them to AtsPurchaseOrderCategoriesEntity.remittanceSale.This release includes the following changes:
This release includes the following changes:
d4e14e0 by Jose Prieto, Claude Sonnet 4.6)| Metric | Count |
|---|---|
| 📄 Files changed | 3 |
| 🟢 Insertions | $\color{green}\textsf{+36}$ |
| 🔴 Deletions | $\color{red}\textsf{-25}$ |
🤖 Auto-generated by changelog workflow
DeviceCommand.fetchAll(), which documented useFragment and extraFields but honoured neither: the result selection was hardcoded to id, name, source, isGlobal, protocol and model, so callers asking for the full fragment never received data, deviceId, protocolId, modelId, payload, modbusParameter or access. Consumers could not execute a fetched command over BLE, since its definition and payload live in dataThis release includes the following changes:
This release includes the following changes:
| Metric | Count |
|---|---|
| 📄 Files changed | 3 |
| 🟢 Insertions | $\color{green}\textsf{+6}$ |
| 🔴 Deletions | $\color{red}\textsf{-3}$ |
🤖 Auto-generated by changelog workflow
@Deprecated decorator in favor of backwards compatibility and prevent issues on CI until layrz_sdk is completed.This release includes the following changes:
This release includes the following changes:
4e047f3 by @PHKenny)36badb1 by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 4 |
| 🟢 Insertions | $\color{green}\textsf{+45}$ |
| 🔴 Deletions | $\color{red}\textsf{-4}$ |
🤖 Auto-generated by changelog workflow
LayrzAppLocalizations.delegate() to return a LayrzAppLocalizationsDelegate (typed to LayrzAppLocalizations) instead of a LayrzI18nDelegate. The wrong delegate type registered a LayrzI18n in the widget tree, so LayrzAppLocalizations.of(context) never resolved and threw LayrzAppLocalizations was used before it was initialized — breaking any consumer (e.g. layrz_session's login) that still looks up LayrzAppLocalizations. Restored the LayrzAppLocalizationsDelegate class that plants the correct type.replace LayrzAppLocalizationsDelegate with LayrzI18nDelegate and remove deprecated class ( a2e96c6 by @PHKenny )
This release includes the following changes:
f84a8c3 by @PHKenny)a2e96c6 by @PHKenny)d1dd44f by @PHKenny)5fc8fdf by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 7 |
| 🟢 Insertions | $\color{green}\textsf{+26}$ |
| 🔴 Deletions | $\color{red}\textsf{-483}$ |
🤖 Auto-generated by changelog workflow
@Deprecated annotation from LayrzAppLocalizations. The 3.26.0 deprecation (in favor of LayrzI18n from package:layrz_i18n) was premature: layrz_theme and many ecosystem widgets still consume LayrzAppLocalizations, and both localization engines are meant to coexist during the migration. The class is supported again; LayrzI18n remains the recommended API for new code.This release includes the following changes:
This release includes the following changes:
94f8fd7 by Jose Prieto, Claude Sonnet 4.6)| Metric | Count |
|---|---|
| 📄 Files changed | 5 |
| 🟢 Insertions | $\color{green}\textsf{+37}$ |
| 🔴 Deletions | $\color{red}\textsf{-1}$ |
🤖 Auto-generated by changelog workflow
DeviceCommand.delete() and DeviceCommand.deleteMany(), the deleteDeviceCommands field now receives the ids argument. Without it the declared $ids variable went unused and the request failed GraphQL validation with a 400, so nothing was ever deletedFirmwareBuild.fragmentfirmwares to Model.fragment, using FirmwareBuild.fragmentBreaking: The localization engine moved to the layrz_i18n package; LayrzAppLocalizations is now @Deprecated in favor of LayrzI18n from package:layrz_i…
layrz_models to layrz_sdk, with re-exports so consumers keep seeing them: Avatar, Department, Employee, Token, UserPreferences, I18nKey, I18nTranslation, Language, ApiResponse.layrz_sdk: LayrzConnector, LayrzApiExtras, StandardResponse, Gql, GqlQuery, GqlMutation, GqlSubscription, and related types.layrz_sdk: ColorConverter, IconConverter, DurationConverter, TimestampConverter, DateConverter, RegExpConverter, ByteListConverter, TimeOfDayConverter, DynamicMapConverter, ParamDataMapConverter and their nullable variants.TimeOfDay is deliberately hidden from the layrz_sdk re-export to preserve Flutter's TimeOfDay resolution; code annotating Flutter TimeOfDay fields with TimeOfDayConverter must switch to the locally retained FlutterTimeOfDayConverter.layrz_sdk — ApiStatus, AppPlatform, AvatarType, ColorblindMode, MfaMethod and TokenAudience — re-exported so consumers see no change.layrz_i18n package; LayrzAppLocalizations is now @Deprecated in favor of LayrzI18n from package:layrz_i18n/layrz_i18n.dart.dart fix migration that renames LayrzAppLocalizations to LayrzI18n, but the fix does NOT add the import—run dart fix --apply and manually add import 'package:layrz_i18n/layrz_i18n.dart';.Asset.mappitLaborStartTime and Asset.mappitLaborEndTime keep their Flutter TimeOfDay type, with no behavior changes for consumers.layrz_sdk: ^4.4.3 and layrz_i18n: ^1.0.1.Corrected CommandInput.save(), the status/errors/result selection now hangs off the addDeviceCommand/editDeviceCommand mutation field instead of the m
CommandInput.save(), the status/errors/result selection now hangs off the addDeviceCommand/editDeviceCommand mutation field instead of the mutation rootDeviceCommand.execute(), the mutation field is executeDeviceCommand and not deviceCommandsDevice.zigbeePermitJoinExpiresAt, removed the snake_case JsonKey that never matched the fragment field and always decoded to nullDevice.delete(), Device.deleteMany() and Device.importDevicesIntoApp() to be sent as mutations, plus the field is importDevicesIntoApp and not importDevicesToAppInboundProtocol.detailedFragment, which is fragment plus the protocol's models, and used it on InboundProtocol.fetch()Added saleFromThirdPartyDeliveredBySeller value to AtsPurchaseOrderCategoriesEntity enum (SALE_FROM_THIRD_PARTY_DELIVERED_BY_SELLER, CFOP 5120/6120),
saleFromThirdPartyDeliveredBySeller value to AtsPurchaseOrderCategoriesEntity enum (SALE_FROM_THIRD_PARTY_DELIVERED_BY_SELLER, CFOP 5120/6120), so it no longer falls back to notDefined.Added hasPreviousStockClosing value in StockClosingInfoPa model
hasPreviousStockClosing value in StockClosingInfoPa modelAdded totalWithdrawalsByComboio value in StockClosingTank and StockClosingInput models
StockClosingInfoPa modeltotalWithdrawalsByComboio value in StockClosingTank and StockClosingInput modelsThis version was released manually
RegisteredApp.load()Fixes on ZigbeeDeviceExpose and ZigbeeDevice
ZigbeeDeviceExpose and ZigbeeDeviceFlespiSubmoduleConfig, wrong type and fields on GraphQL fragmentThis version was released manually
Corrected lastSeen on ZigbeeDevice to have a converter.
lastSeen on ZigbeeDevice to have a converter.Added an API connector to ExternalAccount, with fetch(), fetchAll() and deleteMany(), plus ExternalAccountInput.save()
ExternalAccount, with fetch(), fetchAll() and deleteMany(), plus ExternalAccountInput.save()ExternalAccountVariant to target the Mappit-prefixed fields, defaulting to standardExternalAccount.gqlFragment, so consumers no longer need to declare the fragment themselvesGeofence now requests the errors field on every API call and logs its content whenever the response status is not OK, matching Action, Operation and ExternalAccountAdded onlyConfiot argument on Device.fetchAll() to include it in the GraphQL query and variables, allowing callers to filter devices that have Confiot
onlyConfiot argument on Device.fetchAll() to include it in the GraphQL query and variables, allowing callers to filter devices that have Confiot enabled.Device, DeviceCommand, DeviceTelemetry and other models related to device entity now use the LayrzConnector.query() and LayrzConnector.mutate().
Device, DeviceCommand, DeviceTelemetry and other models related to device entity now use the LayrzConnector.query() and LayrzConnector.mutate().Added API Connector on DeviceCommand
DeviceCommandStandardResponse<T>Added API connector for InboundProtocol, Model, FlespiProtocol, FlespiModel and FlespiChannel
InboundProtocol, Model, FlespiProtocol, FlespiModel and FlespiChannelUpdated layrz_logging dependency to now include colors on logs emitted by the system
layrz_logging dependency to now include colors on logs emitted by the systemAdded LayrzApiExtras to include extra information on the usage of LayrzConnector, including version and name of the app.
LayrzApiExtras to include extra information on the usage of LayrzConnector, including version and name of the app.Adjustments on User.fetch() to include parentId.
User.fetch() to include parentId.Adjustments on RegisteredApp.load() to use the toJson() on enums
RegisteredApp.load() to use the toJson() on enumsFixed User loginAsSubaccount gql mutation implementation
loginAsSubaccount gql mutation implementationFixed Brickhouse Graphql query name in _getGqlQueryName
_getGqlQueryNameFixed GraphQL fragment emission order. Fragments were collected in pre-order, so a fragment that spread another was written above the fragment it depe
fragment getters to TagOnStudent, TagOnBusRoute and TagOnNotification.fetchAll, fetch and deleteMultiple on the models, and save on the existing TagOnStudentInput, TagOnBusRouteInput and TagOnNotificationInput models.TagOnStudent.bulkLoad for bulk importing students from raw data rows. The data parameter is List<Map<String, dynamic>> (raw rows), not the typed TagOnStudentInput model, because the bulk endpoint resolves bus routes by name from nested objects in the raw data (e.g., {'busRoute': {'name': 'Route 4'}}), whereas TagOnStudentInput only has a flat busRouteId. Returns (ApiStatus, Map<String, dynamic>?) where the map has exactly three keys: 'status' (the serialized ApiStatus), 'errors' and 'studentsWithErrors' (a List<Map<String, dynamic>>, each entry holding errors and data for a row that failed to import).TagOnStudent.export to export students to a downloadable file, returning (ApiStatus, String?) with the generated resultUri.TagOnNotification.send static method to send a notification by its ID.TagOnStudent, TagOnBusRoute, TagOnNotification) authenticate via the Authorization: LayrzToken <token> header that LayrzConnector sets automatically. Authentication is no longer sent as a GraphQL field argument. The apiToken parameter remains on every method signature for consistency.Breaking: Renamed MappitReportInputMulti to MappitReportMultiInput to match the backend GraphQL schema, which renamed the input type. Queries declarin
MappitReportInputMulti to MappitReportMultiInput to match the backend GraphQL schema, which renamed the input type. Queries declaring MappitReportInputMulti are rejected by the server with Unknown type 'MappitReportInputMulti'. The source file was also renamed from report_input_multi.dart to report_multi_input.dart. Field names and types are unchanged.$id variable type in Geofence.fetch, which was declared as String! instead of ID!, causing the server to reject the query with Variable $id of type String! used in position expecting type ID.Geofence.fetchAll, which ignored the variant argument and always queried the geofences field, and referenced an undeclared $id variable in its arguments, making the query invalid for every variant.apiToken GraphQL variable and argument from every caller in the geofences module (Geofence, GeofenceInput and SearchItem). Authentication travels in the Authorization header, which LayrzConnector already sets, so sending it as a query variable was redundant. The apiToken parameter remains on every method signature.Updated Geofence.fetch, Geofence.fetchAll, Geofence.save and Geofence.deleteMultiple to accept a variant argument (standard, mappit, sdm) to resolve t
Geofence.fetch, Geofence.fetchAll, Geofence.save and Geofence.deleteMultiple to accept a variant argument (standard, mappit, sdm) to resolve the query/mutation names and fragments per variant, aligning with the backend GraphQL schema.Fixed Geofence.fragment, removed name on telemetry subgraph
Geofence.fragment, removed name on telemetry subgraphAdded SdmPenInput, SdmIngredientInput, SdmOperatorInput and SdmRecipeInput unfreezed input models for the SDM entities.
SdmPenInput, SdmIngredientInput, SdmOperatorInput and SdmRecipeInput unfreezed input models for the SDM entities.fragment getters to SdmPen, SdmIngredient, SdmOperator and SdmRecipe.fetchAll, fetch, deleteMultiple and save (on the input models).SdmPen, SdmIngredient and SdmRecipe: bulkLoad, export and formatExcel, returning the generated resultUri where applicable.UserVariant enum (standard, ats, atsAdmin, brickhouse, sdm, tagon and the mappit* variants) to drive user queries and mutations from a single source of truth.User: fetchAll, fetch, deleteMultiple and save (on UserInput), resolving the query, mutation and input type names per variant, with optional appId, languageId and mappitModule arguments.User.fragment(variant:) covering access, referencesIds, categoryId, tagsIds plus the variant-specific fields, and a withDetails option on User.fetch for the tags, references, category and allowedApps expansions.User: importIntoApp, resetPassword, setPaymentWarning, lock, suspend, invite and requestActivityReport.User.fetchAll and User.fetchAllForAppUsers to the typed connector.query API; fetchAllForAppUsers remains locked to the standard variant by design.ReferenceVariant enum (standard, mappit, sdm) and ReferenceInput input model.Reference: fragment(variant:), fetchAll, fetch, clone, deleteMultiple and save (on ReferenceInput).GqlVariableType.unix for GraphQL Unix timestamp variables.ReferenceVariant enum (standard, mappit, sdm) to drive reference queries and mutations from a single source of truth.Reference: fetchAll, fetch, deleteMultiple and save (on ReferenceInput), resolving the query, mutation and input type names per variant — references/mappitReferences/sdmReferences for queries, and add/edit/delete mutations with the Mappit and Sdm infixes.Reference.fragment(variant:) covering id, name, category, customFields, qrCode and access, reusing CustomField.fragment and Access.idFragment.Reference.clone, which uses the cloneReference mutation for every variant.Your coding agent can read these notes before it upgrades. Set up the MCP server →