layrz_sdk 4.4.5
layrz_sdk: ^4.4.5 copied to clipboard
A Flutter SDK for Layrz, providing tools and utilities for integrating Layrz services into your Flutter applications.
Changelog #
4.4.5 #
4.4.4 #
Dart #
- Removed the
layrz_iconsdependency; icons are now generated directly fromflutter_material_design_icons. - Added
MdiRemapIcon, exposing each icon'sname, searchabletagsanddata. - Added the
MdiRemapIconsClassesregistry and theiconMappingname lookup, covering 7447 Material Design Icons. - Icon
tagsare now available for search and categorisation, whichlayrz_iconsdid not provide. - Breaking:
LayrzIcon,LayrzIconsandLayrzIconsClassesare replaced byMdiRemapIconandMdiRemapIconsClasses. - Breaking:
solar-*andfa-*icon names no longer resolve. Unknown names now fall back tomdi-help-circle-outline, previouslysolar-outline-question-square. - Apps consuming this package must build with
--no-tree-shake-icons.
Python #
- No changes made to the Python module in this release.
Go #
- No changes made to the Go module in this release.
4.4.3 #
- Fixes on CI that prevented the rollout
4.4.2 #
Dart #
- Ported 13 modules from
layrz_models:a11y,api,app,avatar,converters,department,employee,i18n,mfa,permissions,time_of_day,token,utils— all exported frompackage:layrz_sdk/layrz_sdk.dart. - Includes key types:
LayrzConnector,ApiResponse,ApiStatus, GraphQL builders (Gql,GqlQuery,GqlMutation,GqlSubscription,GqlField,GqlFragment,GqlUnion,GqlVariable),UserPreferences,ColorblindMode,Employee,Token, and more. - Framework-independent
TimeOfDayclass — JSON-serializable and intentionally shadows Flutter'sTimeOfDay. - Full dartdoc documentation across all public declarations.
- Added comprehensive test suite: 797 tests with 99.73% line coverage; new
make testandmake coveragetargets indart/Makefile.
Python #
- No changes made to the Python module in this release.
Go #
- No changes made to the Go module in this release.
4.4.1 #
- Fixed
BroadcastStatus.BAD_REQUEST(Go and Python) value toBAD_REQUEST, matching the platform's actual API response (was incorrectlyBADREQUEST). - Added validation to
BroadcastResult.status(Python) that accepts the legacyBADREQUESTstring and coerces it toBAD_REQUEST. - Initial version on Dart implementation
4.4.0 #
- Added
PUSH_NOTIFICATIONvalue toOperationTypefor Layrz Push (Firebase) operations. - Added
push_service_account(pushServiceAccount),push_devices(pushDevices), andpush_app_id(pushAppId) fields toOperationPayloadcarrying decrypted FCM credentials, bound device UUIDs, and the owning RegisteredApp ID. - Go module now provides the shared
OperationPayloadandOperationTypeKafka wire-contract entities used across Python and Go consumers.
4.3.16 #
- Fixed
BroadcastStatus.INTERNAL_ERROR(Go and Python) value toINTERNALERROR, matching the platform's actual API response. - Added validation to
BroadcastResult.statusandRawBroadcastResult.status(Python) that accepts the legacyINTERNAL_ERRORstring and coerces it toINTERNALERROR.
4.3.15 #
- Added
ActionKind.ZIGBEE_CHANGE(Python) for actions that send a command to a Zigbee device. - Added
zigbee_device_idandzigbee_settingsfields to theActionentity (Python), carrying the bound connectivity Device ID and the{device_id, settings: [{key, value}]}payload for ZIGBEE_CHANGE actions.
4.3.14 #
- Added
AuthenticatedAssetentity (Python and Go) withpk/idandnamefields. - Added
authenticated_users(list ofUser) andauthenticated_assets(list ofAuthenticatedAsset) fields to theAssetentity in both Python and Go, defaulting to an empty list.
4.3.11 #
- Fixed
types.UnixTimeJSON unmarshaling to also accept ISO 8601 datetime strings (e.g."2026-05-06T03:24:51.099415Z");MarshalJSONalways emits a float regardless of input format.
4.3.10 #
- Fixed
types.UnixTimeJSON unmarshaling to accept string-encoded timestamps (e.g."1746518400.123") in addition to bare numbers, preventing message drops in Go consumers when producers emit quoted floats.
4.3.9 #
- Fixed
DeviceMessage.IdJSON tag: removedomitemptyso null id serializes as"id": nullmatching Python. - Fixed
DeviceMessageandAssetMessagenil maps/slices to serialize as{}/[]instead ofnull(matching Pythondefault_factory=dict/list). - Fixed
DeviceMessageFromMapto read"timestamp"key for received-at (was incorrectly reading"received_at"), with fallback to current time when missing. - Added
RejectedKeysfiltering inDeviceMessageFromMap— keys likeident,protocol.id,device.id,server.timestampare now excluded from payload, matching Python'sREJECTED_KEYSconstant. - Fixed
position.*values inDeviceMessageFromMapto only accept numeric types (matching Python'sisinstance(value, (float, int))guard). - Fixed
AssetMessageFromDeviceMessageto derive position fromasset.OperationMode:DISCONNECTED→ empty,STATIC→ static position,ZONE→ centroid of points, default → device position. - Fixed
AssetMessageFromDeviceMessageto prefix all payload keys with"{ident}."matching Python'sf'{device_message.ident}.{key}'. - Replaced haversine distance formula with Vincenty inverse on WGS-84 in
AssetMessage.ComputeDistanceTraveled, matchinggeopy.distance.geodesicoutput. - Added UUIDv7 validation on
DeviceMessage.IdandAssetMessage.Idvia customUnmarshalJSON, matching Python'spkfield validator.
4.3.8 #
- Fixed
BroadcastPayload.assetto be required (non-optional) to match Python parity. - Fixed
BroadcastPayload.message_idtype from*int64totypes.Uuidto match PythonUUIDfield. - Fixed
BroadcastPayload.received_atto be required (non-optional) to match Python parity. - Fixed
BroadcastPayload.position,payload, andsensorsfields to always serialize (noomitempty) to match Pythondefault_factory=dictbehavior. - Fixed
types.Uuid.MarshalJSONto return a properly quoted JSON string instead of raw unquoted text bytes.