Help us shape the future of Go! Take the 2026 Go Developer Survey

iotwireless

package
v1.8.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 20, 2026 License: MIT Imports: 36 Imported by: 0

README

IoT Wireless

Parity grade: A · SDK aws-sdk-go-v2/service/iotwireless@v1.59.4 · last audited 2026-10-07 (da97fccdb)

Coverage

Metric Value
PARITY entries audited 21 (21 ok)
Feature families 22 (22 ok)
Known gaps none
Structural gaps (can't be emulated) 2
Deferred items 0
Resource leaks clean
Structural gaps

These do not block an A grade — no implementation could produce real data here because the underlying data source cannot exist in an emulator.

  • StartBulkAssociate/DisassociateWirelessDevice QueryString (fleet-indexing search, syntax unspecified in the SDK) and Tags (no resource to attach to): bulk ops act on every device.
  • GetPositionEstimate: positions come from third-party solvers (HERE, MaxMind, LoRa Cloud) and the inputs carry no coordinates, so a validated request returns ResourceNotFoundException instead of a fabricated point; ListDevicesForWirelessDeviceImportTask list and Status filter (no import engine creates devices); StartSingleWirelessDeviceImportTask Sidewalk.SidewalkManufacturingSn has no read member in the SDK.

More

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrDeviceNotFound is returned when a wireless device does not exist.
	ErrDeviceNotFound = errors.New("ResourceNotFoundException: Wireless device not found")
	// ErrGatewayNotFound is returned when a wireless gateway does not exist.
	ErrGatewayNotFound = errors.New("ResourceNotFoundException: Wireless gateway not found")
	// ErrServiceProfileNotFound is returned when a service profile does not exist.
	ErrServiceProfileNotFound = errors.New("ResourceNotFoundException: Service profile not found")
	// ErrDestinationNotFound is returned when a destination does not exist.
	ErrDestinationNotFound = errors.New("ResourceNotFoundException: Destination not found")
	// ErrDeviceProfileNotFound is returned when a device profile does not exist.
	ErrDeviceProfileNotFound = errors.New("ResourceNotFoundException: Device profile not found")
	// ErrFuotaTaskNotFound is returned when a FUOTA task does not exist.
	ErrFuotaTaskNotFound = errors.New("ResourceNotFoundException: FUOTA task not found")
	// ErrMulticastGroupNotFound is returned when a multicast group does not exist.
	ErrMulticastGroupNotFound = errors.New("ResourceNotFoundException: Multicast group not found")
	// ErrNetworkAnalyzerConfigNotFound is returned when a network analyzer configuration does not exist.
	ErrNetworkAnalyzerConfigNotFound = errors.New("ResourceNotFoundException: Network analyzer configuration not found")
	// ErrValidation is returned when a request contains invalid parameters.
	ErrValidation = errors.New("ValidationException: invalid request parameters")
)

Sentinel errors for IoT Wireless backend operations.

View Source
var (
	// ErrPartnerAccountNotFound is returned when a partner account does not exist.
	ErrPartnerAccountNotFound = errors.New("ResourceNotFoundException: Partner account not found")
	// ErrImportTaskNotFound is returned when a wireless device import task does not exist.
	ErrImportTaskNotFound = errors.New("ResourceNotFoundException: Wireless device import task not found")
	// ErrGatewayTaskNotFound is returned when a wireless gateway task does not exist.
	ErrGatewayTaskNotFound = errors.New(
		"ResourceNotFoundException: Wireless gateway task not found",
	)
	// ErrGatewayTaskDefNotFound is returned when a wireless gateway task definition does not exist.
	ErrGatewayTaskDefNotFound = errors.New(
		"ResourceNotFoundException: Wireless gateway task definition not found",
	)
	// ErrMulticastGroupSessionNotFound is returned when a multicast group has no active session.
	ErrMulticastGroupSessionNotFound = errors.New(
		"ResourceNotFoundException: Multicast group session not found",
	)
)

Sentinel errors for new backend operations.

View Source
var (
	// ErrDeviceProfileInUse is returned when a device profile is still
	// referenced by a wireless device.
	ErrDeviceProfileInUse = errors.New("ConflictException: Device profile is in use")
	// ErrServiceProfileInUse is returned when a service profile is still
	// referenced by a wireless device.
	ErrServiceProfileInUse = errors.New("ConflictException: Service profile is in use")
	// ErrDestinationInUse is returned when a destination is still referenced
	// by a wireless device.
	ErrDestinationInUse = errors.New("ConflictException: Destination is in use")
	// ErrDestinationExists is returned when a destination with the name already exists.
	ErrDestinationExists = errors.New("ConflictException: Destination already exists")
	// ErrMulticastGroupInUse is returned when a multicast group is still
	// associated with a FUOTA task (api_op_DeleteMulticastGroup.go: "Deletes
	// a multicast group if it is not in use by a FUOTA task").
	ErrMulticastGroupInUse = errors.New("ConflictException: Multicast group is in use by a FUOTA task")
)

Sentinel errors for delete preconditions.

View Source
var ErrNilAppContext = errors.New("iotwireless: nil AppContext")

ErrNilAppContext is returned by Init when a nil AppContext is provided.

View Source
var ErrNoPositionSolver = errors.New(
	"ResourceNotFoundException: no positioning solver is available to resolve a position",
)

ErrNoPositionSolver is returned by GetPositionEstimate: no positioning solver exists to resolve measurements.

Functions

This section is empty.

Types

type AbpV1_0X added in v1.3.1

type AbpV1_0X struct {
	SessionKeys *SessionKeysAbpV1_0X `json:"SessionKeys,omitempty"`
	DevAddr     *string              `json:"DevAddr,omitempty"`
	FCntStart   *int32               `json:"FCntStart,omitempty"`
}

AbpV1_0X mirrors types.AbpV1_0X (types.go:11).

type AbpV1_1 added in v1.3.1

type AbpV1_1 struct {
	SessionKeys *SessionKeysAbpV1_1 `json:"SessionKeys,omitempty"`
	DevAddr     *string             `json:"DevAddr,omitempty"`
	FCntStart   *int32              `json:"FCntStart,omitempty"`
}

AbpV1_1 mirrors types.AbpV1_1 (types.go:26).

type ApplicationConfig added in v1.3.1

type ApplicationConfig struct {
	DestinationName *string `json:"DestinationName,omitempty"`
	FPort           *int32  `json:"FPort,omitempty"`
	Type            string  `json:"Type,omitempty"`
}

ApplicationConfig mirrors types.ApplicationConfig (types.go:67).

type Beaconing added in v1.3.1

type Beaconing struct {
	DataRate    *int32  `json:"DataRate,omitempty"`
	Frequencies []int32 `json:"Frequencies,omitempty"`
}

Beaconing mirrors types.Beaconing (types.go:84).

type CertificateList added in v1.3.1

type CertificateList struct {
	Value      *string `json:"Value,omitempty"`
	SigningAlg string  `json:"SigningAlg,omitempty"`
}

CertificateList mirrors types.CertificateList (types.go:197).

type DakCertificateMetadata added in v1.3.1

type DakCertificateMetadata struct {
	CertificateID       *string `json:"CertificateId,omitempty"`
	ApID                *string `json:"ApId,omitempty"`
	DeviceTypeID        *string `json:"DeviceTypeId,omitempty"`
	MaxAllowedSignature *int32  `json:"MaxAllowedSignature,omitempty"`
	FactorySupport      *bool   `json:"FactorySupport,omitempty"`
}

DakCertificateMetadata mirrors types.DakCertificateMetadata (types.go:238).

type DefaultSessionParametersMulticast added in v1.3.1

type DefaultSessionParametersMulticast struct {
	DlDr   *int32 `json:"DlDr,omitempty"`
	DlFreq *int32 `json:"DlFreq,omitempty"`
}

DefaultSessionParametersMulticast mirrors types.DefaultSessionParametersMulticast (types.go:263).

type Destination

type Destination struct {
	CreatedAt      time.Time         `json:"createdAt"`
	Tags           map[string]string `json:"tags,omitempty"`
	Name           string            `json:"name"`
	ARN            string            `json:"arn"`
	Expression     string            `json:"expression,omitempty"`
	ExpressionType string            `json:"expressionType,omitempty"`
	RoleArn        string            `json:"roleArn,omitempty"`
	Description    string            `json:"description,omitempty"`
	// AccountID and Region exist purely for store.Table's keyFn; see the
	// identical comment on WirelessDevice above.
	AccountID string `json:"-"`
	Region    string `json:"-"`
}

Destination routes messages from a device to AWS services.

type DeviceProfile

type DeviceProfile struct {
	CreatedAt time.Time         `json:"createdAt"`
	Tags      map[string]string `json:"tags,omitempty"`
	// LoRaWAN uses the types.LoRaWANDeviceProfile shape shared verbatim by
	// Create and Get. Sidewalk is stored as the richer SidewalkGetDeviceProfile
	// (get) shape; CreateDeviceProfile's SidewalkCreateDeviceProfile request
	// (no fields of its own) is converted via sidewalkGetDeviceProfileFromCreate.
	LoRaWAN  *LoRaWANDeviceProfile     `json:"loRaWAN,omitempty"`
	Sidewalk *SidewalkGetDeviceProfile `json:"sidewalk,omitempty"`
	Name     string                    `json:"name"`
	ID       string                    `json:"id"`
	ARN      string                    `json:"arn"`
	// AccountID and Region exist purely for store.Table's keyFn; see the
	// identical comment on WirelessDevice above.
	AccountID string `json:"-"`
	Region    string `json:"-"`
}

DeviceProfile contains LoRaWAN device profile settings.

type EventConfigDoc

type EventConfigDoc struct {
	ConnectionStatus        map[string]any `json:"ConnectionStatus,omitempty"`
	DeviceRegistrationState map[string]any `json:"DeviceRegistrationState,omitempty"`
	Join                    map[string]any `json:"Join,omitempty"`
	MessageDeliveryStatus   map[string]any `json:"MessageDeliveryStatus,omitempty"`
	Proximity               map[string]any `json:"Proximity,omitempty"`
}

EventConfigDoc is an event-notification configuration document keyed by AWS's five event-type fields. Each value is stored and echoed back exactly as submitted by the client (real mutate/read state, not fabricated).

type ExportedServiceProfile

type ExportedServiceProfile = ServiceProfile

ExportedServiceProfile is a compatibility alias used by the dashboard package.

type ExportedWirelessDevice

type ExportedWirelessDevice = WirelessDevice

ExportedWirelessDevice is a compatibility alias used by the dashboard package.

type FPorts added in v1.3.1

type FPorts struct {
	Positioning  *Positioning        `json:"Positioning,omitempty"`
	ClockSync    *int32              `json:"ClockSync,omitempty"`
	Fuota        *int32              `json:"Fuota,omitempty"`
	Multicast    *int32              `json:"Multicast,omitempty"`
	Applications []ApplicationConfig `json:"Applications,omitempty"`
}

FPorts mirrors types.FPorts (types.go:411).

type FuotaTask

type FuotaTask struct {
	CreatedAt time.Time `json:"createdAt"`

	Tags map[string]string `json:"tags,omitempty"`
	// LoRaWAN is the create/update-shape config; GetFuotaTask converts it via loRaWANFuotaTaskGetInfoFrom.
	LoRaWAN *LoRaWANFuotaTask `json:"loRaWAN,omitempty"`
	// StartTime is set by StartFuotaTask from StartFuotaTaskInput.LoRaWAN.StartTime.
	StartTime           *time.Time `json:"startTime,omitempty"`
	FirmwareUpdateImage string     `json:"firmwareUpdateImage,omitempty"`
	AccountID           string     `json:"-"`
	Description         string     `json:"description,omitempty"`
	ID                  string     `json:"id"`
	FirmwareUpdateRole  string     `json:"firmwareUpdateRole,omitempty"`
	Descriptor          string     `json:"descriptor,omitempty"`
	// Status is a types.FuotaTaskStatus value: Pending at creation, advanced by StartFuotaTask.
	Status string `json:"status,omitempty"`
	ARN    string `json:"arn"`
	Region string `json:"-"`
	Name   string `json:"name"`

	FragmentSizeBytes  int32 `json:"fragmentSizeBytes,omitempty"`
	RedundancyPercent  int32 `json:"redundancyPercent,omitempty"`
	FragmentIntervalMS int32 `json:"fragmentIntervalMs,omitempty"`
	// contains filtered or unexported fields
}

FuotaTask represents a Firmware Update Over the Air (FUOTA) task.

type GatewayTask

type GatewayTask struct {
	CreatedAt         time.Time
	WirelessGatewayID string
	TaskDefID         string
	Status            string
}

GatewayTask represents a wireless gateway task.

type GatewayTaskDefinition

type GatewayTaskDefinition struct {
	Update          *UpdateWirelessGatewayTaskCreate
	ID              string
	ARN             string
	Name            string
	AutoCreateTasks bool
}

GatewayTaskDefinition represents a wireless gateway task definition.

type Handler

type Handler struct {
	Backend       StorageBackend
	AccountID     string
	DefaultRegion string
	// contains filtered or unexported fields
}

Handler is the HTTP handler for the IoT Wireless REST API.

func NewHandler

func NewHandler(backend StorageBackend) *Handler

NewHandler creates a new IoT Wireless handler.

func (*Handler) BackendFor

func (h *Handler) BackendFor(region string) StorageBackend

BackendFor returns the backend serving region: the home backend, or the sibling built on first use.

func (*Handler) ChaosOperations

func (h *Handler) ChaosOperations() []string

ChaosOperations returns all operations that can be fault-injected.

func (*Handler) ChaosRegions

func (h *Handler) ChaosRegions() []string

ChaosRegions returns all regions this IoT Wireless instance handles.

func (*Handler) ChaosServiceName

func (h *Handler) ChaosServiceName() string

ChaosServiceName returns the lowercase AWS service name for fault rule matching.

func (*Handler) EnableRegions

func (h *Handler) EnableRegions()

EnableRegions makes h serve every other region through lazily built per-region siblings.

func (*Handler) ExtractOperation

func (h *Handler) ExtractOperation(c *echo.Context) string

ExtractOperation extracts the IoT Wireless operation name from the request.

func (*Handler) ExtractResource

func (h *Handler) ExtractResource(c *echo.Context) string

ExtractResource extracts the resource ID from the URL path. Tag operations are the one exception: their resource ARN travels as the "resourceArn" query parameter rather than a path segment (see parseIoTWirelessPath's "tags" case), so it's read from the query here for CloudTrail capture.

func (*Handler) GetSupportedOperations

func (h *Handler) GetSupportedOperations() []string

GetSupportedOperations returns the list of supported IoT Wireless operations.

func (*Handler) Handler

func (h *Handler) Handler() echo.HandlerFunc

Handler serves each request from the handler of its region.

func (*Handler) MatchPriority

func (h *Handler) MatchPriority() int

MatchPriority returns the routing priority.

func (*Handler) Name

func (h *Handler) Name() string

Name returns the service name.

func (*Handler) RegionBackends

func (h *Handler) RegionBackends() []StorageBackend

RegionBackends returns the home backend followed by every sibling built so far.

func (*Handler) RegionHandler

func (h *Handler) RegionHandler(region string) *Handler

RegionHandler returns the handler serving region: h itself for the home region, else its sibling.

func (*Handler) Reset

func (h *Handler) Reset()

Reset clears every region.

func (*Handler) Restore

func (h *Handler) Restore(ctx context.Context, data []byte) error

Restore implements persistence.Persistable.

func (*Handler) RouteMatcher

func (h *Handler) RouteMatcher() service.Matcher

RouteMatcher returns a function that matches IoT Wireless REST API requests. All paths are disambiguated via the SigV4 credential-scope service name to prevent mis-routing with other REST-JSON services that share similar paths.

func (*Handler) Snapshot

func (h *Handler) Snapshot(ctx context.Context) []byte

Snapshot implements persistence.Persistable; other regions ride in an additive "regions" key.

type InMemoryBackend

type InMemoryBackend struct {
	// contains filtered or unexported fields
}

InMemoryBackend is the in-memory backend for IoT Wireless.

func NewInMemoryBackend

func NewInMemoryBackend() *InMemoryBackend

NewInMemoryBackend creates a new in-memory IoT Wireless backend.

func (*InMemoryBackend) AddDestinationInternal

func (b *InMemoryBackend) AddDestinationInternal(accountID, region string, dest *Destination)

AddDestinationInternal inserts a Destination directly into the backend, bypassing ID generation. Intended for test setup only.

func (*InMemoryBackend) AddDeviceProfileInternal

func (b *InMemoryBackend) AddDeviceProfileInternal(accountID, region string, dp *DeviceProfile)

AddDeviceProfileInternal inserts a DeviceProfile directly into the backend, bypassing ID generation. Intended for test setup only.

func (*InMemoryBackend) AddFuotaTaskInternal

func (b *InMemoryBackend) AddFuotaTaskInternal(accountID, region string, ft *FuotaTask)

AddFuotaTaskInternal inserts a FuotaTask directly into the backend, bypassing ID generation. Intended for test setup only.

func (*InMemoryBackend) AddServiceProfileInternal

func (b *InMemoryBackend) AddServiceProfileInternal(accountID, region string, sp *ServiceProfile)

AddServiceProfileInternal inserts a ServiceProfile directly into the backend, bypassing ID generation. Intended for test setup only.

func (*InMemoryBackend) AddWirelessDeviceInternal

func (b *InMemoryBackend) AddWirelessDeviceInternal(accountID, region string, d *WirelessDevice)

AddWirelessDeviceInternal inserts a WirelessDevice directly into the backend, bypassing ID generation. Intended for test setup only.

func (*InMemoryBackend) AddWirelessGatewayInternal

func (b *InMemoryBackend) AddWirelessGatewayInternal(accountID, region string, gw *WirelessGateway)

AddWirelessGatewayInternal inserts a WirelessGateway directly into the backend, bypassing ID generation. Intended for test setup only.

func (*InMemoryBackend) AssociateAwsAccountWithPartnerAccount

func (b *InMemoryBackend) AssociateAwsAccountWithPartnerAccount(
	accountID, region, partnerAccountID string,
	tags map[string]string,
) (string, error)

AssociateAwsAccountWithPartnerAccount stores a partner account association and returns its ARN.

func (*InMemoryBackend) AssociateMulticastGroupWithFuotaTask

func (b *InMemoryBackend) AssociateMulticastGroupWithFuotaTask(fuotaTaskID, multicastGroupID string) error

AssociateMulticastGroupWithFuotaTask records the association of a multicast group with a FUOTA task. A FUOTA task can have several associated multicast groups (ListMulticastGroupsByFuotaTask returns a list), so this adds to a per-task set rather than overwriting a single slot.

func (*InMemoryBackend) AssociateWirelessDeviceWithFuotaTask

func (b *InMemoryBackend) AssociateWirelessDeviceWithFuotaTask(fuotaTaskID, wirelessDeviceID string) error

AssociateWirelessDeviceWithFuotaTask records the association of a wireless device with a FUOTA task. A FUOTA task can have several associated devices (ListWirelessDevices' FuotaTaskId filter implies more than one), so this adds to a per-task set rather than overwriting a single slot.

func (*InMemoryBackend) AssociateWirelessDeviceWithMulticastGroup

func (b *InMemoryBackend) AssociateWirelessDeviceWithMulticastGroup(multicastGroupID, wirelessDeviceID string) error

AssociateWirelessDeviceWithMulticastGroup records the association of a wireless device with a multicast group. A multicast group can have many associated devices, so this adds to a per-group set rather than overwriting a single slot.

func (*InMemoryBackend) AssociateWirelessDeviceWithThing

func (b *InMemoryBackend) AssociateWirelessDeviceWithThing(
	accountID, region, wirelessDeviceID, thingArn string,
) error

AssociateWirelessDeviceWithThing associates a wireless device with an IoT Thing. Returns ErrDeviceNotFound when the device does not exist.

func (*InMemoryBackend) AssociateWirelessGatewayWithCertificate

func (b *InMemoryBackend) AssociateWirelessGatewayWithCertificate(
	accountID, region, gatewayID, iotCertificateID string,
) (string, error)

AssociateWirelessGatewayWithCertificate associates a wireless gateway with an IoT certificate and returns the certificate ARN. Returns ErrGatewayNotFound when the gateway does not exist.

func (*InMemoryBackend) AssociateWirelessGatewayWithThing

func (b *InMemoryBackend) AssociateWirelessGatewayWithThing(
	accountID, region, gatewayID, thingArn string,
) error

AssociateWirelessGatewayWithThing associates a wireless gateway with an IoT Thing. Returns ErrGatewayNotFound when the gateway does not exist.

func (*InMemoryBackend) CancelMulticastGroupSession

func (b *InMemoryBackend) CancelMulticastGroupSession(multicastGroupID string) error

CancelMulticastGroupSession marks the multicast group session as cancelled. If no session is active, the call is a no-op (idempotent).

func (*InMemoryBackend) CreateDestination

func (b *InMemoryBackend) CreateDestination(
	accountID, region, name, expression, expressionType, roleArn, description string,
	tags map[string]string,
) (*Destination, error)

CreateDestination creates a new destination.

func (*InMemoryBackend) CreateDeviceProfile

func (b *InMemoryBackend) CreateDeviceProfile(
	accountID, region, name string,
	loRaWAN *LoRaWANDeviceProfile,
	sidewalk *SidewalkCreateDeviceProfile,
	tags map[string]string,
) (*DeviceProfile, error)

CreateDeviceProfile creates a new device profile. sidewalk being non-nil (even if empty -- SidewalkCreateDeviceProfile has no fields of its own) distinguishes a request that asked for a Sidewalk profile from one that didn't -- see sidewalkGetDeviceProfileFromCreate.

func (*InMemoryBackend) CreateFuotaTask

func (b *InMemoryBackend) CreateFuotaTask(
	accountID, region, name, description, firmwareUpdateImage, firmwareUpdateRole, descriptor string,
	fragmentIntervalMS, fragmentSizeBytes, redundancyPercent int32,
	loRaWAN *LoRaWANFuotaTask,
	tags map[string]string,
) (*FuotaTask, error)

CreateFuotaTask creates a new FUOTA task.

func (*InMemoryBackend) CreateMulticastGroup

func (b *InMemoryBackend) CreateMulticastGroup(
	accountID, region, name, description string,
	loRaWAN *LoRaWANMulticast,
	tags map[string]string,
) (*MulticastGroup, error)

CreateMulticastGroup creates a new multicast group.

func (*InMemoryBackend) CreateNetworkAnalyzerConfig

func (b *InMemoryBackend) CreateNetworkAnalyzerConfig(
	accountID, region, name, description string,
	wirelessDevices, wirelessGateways, multicastGroups []string,
	traceContent *TraceContent,
	tags map[string]string,
) (*NetworkAnalyzerConfig, error)

CreateNetworkAnalyzerConfig creates a new network analyzer configuration.

func (*InMemoryBackend) CreateServiceProfile

func (b *InMemoryBackend) CreateServiceProfile(
	accountID, region, name string,
	loRaWAN *LoRaWANServiceProfile,
	tags map[string]string,
) (*ServiceProfile, error)

CreateServiceProfile creates a new service profile.

func (*InMemoryBackend) CreateWirelessDevice

func (b *InMemoryBackend) CreateWirelessDevice(
	accountID, region, name, devType, destinationName, description, positioning string,
	loRaWAN *LoRaWANDevice, sidewalk *SidewalkCreateWirelessDevice,
	tags map[string]string,
) (*WirelessDevice, error)

CreateWirelessDevice creates a new wireless device.

func (*InMemoryBackend) CreateWirelessGateway

func (b *InMemoryBackend) CreateWirelessGateway(
	accountID, region, name, description string,
	loRaWAN *LoRaWANGateway,
	tags map[string]string,
) (*WirelessGateway, error)

CreateWirelessGateway creates a new wireless gateway.

func (*InMemoryBackend) CreateWirelessGatewayTask

func (b *InMemoryBackend) CreateWirelessGatewayTask(
	gatewayID, taskDefID string,
) (*GatewayTask, error)

CreateWirelessGatewayTask creates a task for a wireless gateway.

func (*InMemoryBackend) CreateWirelessGatewayTaskDefinition

func (b *InMemoryBackend) CreateWirelessGatewayTaskDefinition(
	accountID, region, name string,
	autoCreateTasks bool,
	update *UpdateWirelessGatewayTaskCreate,
) (*GatewayTaskDefinition, error)

CreateWirelessGatewayTaskDefinition creates a new gateway task definition.

func (*InMemoryBackend) DeleteDestination

func (b *InMemoryBackend) DeleteDestination(accountID, region, name string) error

DeleteDestination deletes a destination by name. Real AWS models ConflictException on this op; a wireless device's DestinationName is the only referrer a destination has (CreateWirelessDeviceInput.DestinationName is required), so deletion is refused while any device in the account/region still references it.

func (*InMemoryBackend) DeleteDeviceProfile

func (b *InMemoryBackend) DeleteDeviceProfile(accountID, region, id string) error

DeleteDeviceProfile deletes a device profile by ID. Real AWS models ConflictException on this op; the only referrer a device profile has is a wireless device's LoRaWAN.DeviceProfileID/Sidewalk.DeviceProfileID, so deletion is refused while any device in the account/region still references it.

func (*InMemoryBackend) DeleteFuotaTask

func (b *InMemoryBackend) DeleteFuotaTask(accountID, region, id string) error

DeleteFuotaTask deletes a FUOTA task by ID.

func (*InMemoryBackend) DeleteMulticastGroup

func (b *InMemoryBackend) DeleteMulticastGroup(accountID, region, id string) error

DeleteMulticastGroup deletes a multicast group by ID, cascading the cleanup to its wireless-device association set so no ghost entry survives the group's deletion. Real AWS refuses this while the group is in use by a FUOTA task (api_op_DeleteMulticastGroup.go: "Deletes a multicast group if it is not in use by a FUOTA task").

func (*InMemoryBackend) DeleteNetworkAnalyzerConfig

func (b *InMemoryBackend) DeleteNetworkAnalyzerConfig(accountID, region, name string) error

DeleteNetworkAnalyzerConfig deletes a network analyzer configuration by name.

func (*InMemoryBackend) DeleteQueuedMessage

func (b *InMemoryBackend) DeleteQueuedMessage(wirelessDeviceID, messageID string) error

DeleteQueuedMessage removes one queued message, or every queued message when messageID is "*".

func (*InMemoryBackend) DeleteQueuedMessages

func (b *InMemoryBackend) DeleteQueuedMessages(wirelessDeviceID string) error

DeleteQueuedMessages clears the message queue for a wireless device.

func (*InMemoryBackend) DeleteServiceProfile

func (b *InMemoryBackend) DeleteServiceProfile(accountID, region, id string) error

DeleteServiceProfile deletes a service profile. Real AWS models ConflictException on this op; the only referrer a service profile has is a LoRaWAN wireless device's LoRaWAN.ServiceProfileID, so deletion is refused while any device in the account/region still references it.

func (*InMemoryBackend) DeleteWirelessDevice

func (b *InMemoryBackend) DeleteWirelessDevice(accountID, region, id string) error

DeleteWirelessDevice deletes a wireless device.

func (*InMemoryBackend) DeleteWirelessDeviceImportTask

func (b *InMemoryBackend) DeleteWirelessDeviceImportTask(id string) error

DeleteWirelessDeviceImportTask removes a wireless device import task.

func (*InMemoryBackend) DeleteWirelessGateway

func (b *InMemoryBackend) DeleteWirelessGateway(accountID, region, id string) error

DeleteWirelessGateway deletes a wireless gateway.

func (*InMemoryBackend) DeleteWirelessGatewayTask

func (b *InMemoryBackend) DeleteWirelessGatewayTask(gatewayID string) error

DeleteWirelessGatewayTask removes the task for a wireless gateway.

func (*InMemoryBackend) DeleteWirelessGatewayTaskDefinition

func (b *InMemoryBackend) DeleteWirelessGatewayTaskDefinition(id string) error

DeleteWirelessGatewayTaskDefinition removes a gateway task definition.

func (*InMemoryBackend) DisassociateAwsAccountFromPartnerAccount

func (b *InMemoryBackend) DisassociateAwsAccountFromPartnerAccount(partnerAccountID string) error

DisassociateAwsAccountFromPartnerAccount removes a partner account association.

func (*InMemoryBackend) DisassociateMulticastGroupFromFuotaTask

func (b *InMemoryBackend) DisassociateMulticastGroupFromFuotaTask(fuotaTaskID, multicastGroupID string) error

DisassociateMulticastGroupFromFuotaTask removes a single multicast group from a FUOTA task's association set. multicastGroupID is the {MulticastGroupId} path segment of DELETE /fuota-tasks/{Id}/multicast-groups/{MulticastGroupId}; an empty value falls back to clearing every group associated with the task, preserving the prior behavior.

func (*InMemoryBackend) DisassociateWirelessDeviceFromFuotaTask

func (b *InMemoryBackend) DisassociateWirelessDeviceFromFuotaTask(fuotaTaskID, wirelessDeviceID string) error

DisassociateWirelessDeviceFromFuotaTask removes a single device from a FUOTA task's association set. wirelessDeviceID is the {WirelessDeviceId} path segment of DELETE /fuota-tasks/{Id}/wireless-devices/{WirelessDeviceId}; an empty value falls back to clearing every device associated with the task, preserving the prior behavior.

func (*InMemoryBackend) DisassociateWirelessDeviceFromMulticastGroup

func (b *InMemoryBackend) DisassociateWirelessDeviceFromMulticastGroup(
	multicastGroupID, wirelessDeviceID string,
) error

DisassociateWirelessDeviceFromMulticastGroup removes a single device from a multicast group's association set. wirelessDeviceID is the {WirelessDeviceId} path segment of DELETE /multicast-groups/{Id}/wireless-devices/{WirelessDeviceId}; an empty value (e.g. from a caller that can't recover it) falls back to clearing every device associated with the group, preserving the prior behavior.

func (*InMemoryBackend) DisassociateWirelessDeviceFromThing

func (b *InMemoryBackend) DisassociateWirelessDeviceFromThing(
	accountID, region, wirelessDeviceID string,
) error

DisassociateWirelessDeviceFromThing clears the thing association for a wireless device.

func (*InMemoryBackend) DisassociateWirelessGatewayFromCertificate

func (b *InMemoryBackend) DisassociateWirelessGatewayFromCertificate(
	accountID, region, gatewayID string,
) error

DisassociateWirelessGatewayFromCertificate clears the certificate association for a gateway.

func (*InMemoryBackend) DisassociateWirelessGatewayFromThing

func (b *InMemoryBackend) DisassociateWirelessGatewayFromThing(
	accountID, region, gatewayID string,
) error

DisassociateWirelessGatewayFromThing clears the thing association for a gateway.

func (*InMemoryBackend) EnqueueMessage

func (b *InMemoryBackend) EnqueueMessage(wirelessDeviceID string, msg QueuedMessage)

EnqueueMessage appends a downlink message to a wireless device's message queue, so that a subsequent ListQueuedMessages reflects messages sent via SendDataToWirelessDevice.

func (*InMemoryBackend) GetDestination

func (b *InMemoryBackend) GetDestination(accountID, region, name string) (*Destination, error)

GetDestination returns a destination by name.

func (*InMemoryBackend) GetDeviceProfile

func (b *InMemoryBackend) GetDeviceProfile(accountID, region, id string) (*DeviceProfile, error)

GetDeviceProfile returns a device profile by ID.

func (*InMemoryBackend) GetEventConfigurationByResourceTypes

func (b *InMemoryBackend) GetEventConfigurationByResourceTypes() *EventConfigDoc

GetEventConfigurationByResourceTypes returns the account-wide default event configuration. Returns an empty (zero-value) document if never configured.

func (*InMemoryBackend) GetFuotaTask

func (b *InMemoryBackend) GetFuotaTask(accountID, region, id string) (*FuotaTask, error)

GetFuotaTask returns a FUOTA task by ID.

func (*InMemoryBackend) GetLogLevelsByResourceTypes

func (b *InMemoryBackend) GetLogLevelsByResourceTypes() LogLevelsConfig

GetLogLevelsByResourceTypes returns the account-wide default log-level configuration. Defaults to DefaultLogLevel "INFO" with empty option lists when never explicitly configured.

func (*InMemoryBackend) GetMetricConfigurationStatus

func (b *InMemoryBackend) GetMetricConfigurationStatus() string

GetMetricConfigurationStatus returns the account's summary metric aggregation status. Defaults to "Enabled" (AWS's documented default) when never explicitly configured.

func (*InMemoryBackend) GetMulticastGroup

func (b *InMemoryBackend) GetMulticastGroup(accountID, region, id string) (*MulticastGroup, error)

GetMulticastGroup returns a multicast group by ID.

func (*InMemoryBackend) GetMulticastGroupSession

func (b *InMemoryBackend) GetMulticastGroupSession(multicastGroupID string) (time.Time, error)

GetMulticastGroupSession returns the start time of a multicast group's active session. Returns ErrMulticastGroupSessionNotFound if no session has been started (or it has since been cancelled), matching real AWS's ResourceNotFoundException for a group with no active session.

func (*InMemoryBackend) GetNetworkAnalyzerConfig

func (b *InMemoryBackend) GetNetworkAnalyzerConfig(accountID, region, name string) (*NetworkAnalyzerConfig, error)

GetNetworkAnalyzerConfig returns a network analyzer configuration by name.

func (*InMemoryBackend) GetPartnerAccount

func (b *InMemoryBackend) GetPartnerAccount(partnerAccountID string) (string, error)

GetPartnerAccount returns the ARN for a partner account.

func (*InMemoryBackend) GetPosition

func (b *InMemoryBackend) GetPosition(resourceID string) map[string]any

GetPosition returns the position data for a resource.

func (*InMemoryBackend) GetPositionConfiguration

func (b *InMemoryBackend) GetPositionConfiguration(resourceID string) (*PositionConfigEntry, bool)

GetPositionConfiguration returns the stored position configuration for a resource, if any.

func (*InMemoryBackend) GetResourceEventConfiguration

func (b *InMemoryBackend) GetResourceEventConfiguration(identifier string) (*ResourceEventConfigEntry, bool)

GetResourceEventConfiguration returns the stored event configuration for a specific resource identifier, if any.

func (*InMemoryBackend) GetResourceLogLevel

func (b *InMemoryBackend) GetResourceLogLevel(resourceID string) string

GetResourceLogLevel returns the log level for a specific resource.

func (*InMemoryBackend) GetServiceProfile

func (b *InMemoryBackend) GetServiceProfile(accountID, region, id string) (*ServiceProfile, error)

GetServiceProfile returns a service profile by ID.

func (*InMemoryBackend) GetWirelessDevice

func (b *InMemoryBackend) GetWirelessDevice(accountID, region, id string) (*WirelessDevice, error)

GetWirelessDevice returns a wireless device by ID.

func (*InMemoryBackend) GetWirelessDeviceImportTask

func (b *InMemoryBackend) GetWirelessDeviceImportTask(id string) (*WirelessDeviceImportTask, error)

GetWirelessDeviceImportTask returns a wireless device import task by ID.

func (*InMemoryBackend) GetWirelessDeviceThingArn

func (b *InMemoryBackend) GetWirelessDeviceThingArn(wirelessDeviceID string) string

GetWirelessDeviceThingArn returns the ARN of the IoT Thing associated with a wireless device, or "" if AssociateWirelessDeviceWithThing was never called (or the association was since cleared).

func (*InMemoryBackend) GetWirelessGateway

func (b *InMemoryBackend) GetWirelessGateway(accountID, region, id string) (*WirelessGateway, error)

GetWirelessGateway returns a wireless gateway by ID.

func (*InMemoryBackend) GetWirelessGatewayCertificate

func (b *InMemoryBackend) GetWirelessGatewayCertificate(
	accountID, region, gatewayID string,
) (string, error)

GetWirelessGatewayCertificate returns the certificate ID associated with a gateway.

func (*InMemoryBackend) GetWirelessGatewayTask

func (b *InMemoryBackend) GetWirelessGatewayTask(gatewayID string) (*GatewayTask, error)

GetWirelessGatewayTask returns the task for a wireless gateway.

func (*InMemoryBackend) GetWirelessGatewayTaskDefinition

func (b *InMemoryBackend) GetWirelessGatewayTaskDefinition(
	id string,
) (*GatewayTaskDefinition, error)

GetWirelessGatewayTaskDefinition returns a gateway task definition by ID.

func (*InMemoryBackend) GetWirelessGatewayThingArn

func (b *InMemoryBackend) GetWirelessGatewayThingArn(gatewayID string) string

GetWirelessGatewayThingArn returns the ARN of the IoT Thing associated with a wireless gateway, or "" if AssociateWirelessGatewayWithThing was never called (or the association was since cleared).

func (*InMemoryBackend) ListDestinations

func (b *InMemoryBackend) ListDestinations(accountID, region string) []*Destination

ListDestinations returns all destinations for the given account and region. ListDestinations returns all destinations for the given account and region, sorted by name for deterministic output.

func (*InMemoryBackend) ListDeviceProfiles

func (b *InMemoryBackend) ListDeviceProfiles(accountID, region, deviceProfileType string) []*DeviceProfile

ListDeviceProfiles returns all device profiles for the given account and region, sorted by name for deterministic output. deviceProfileType, if non-empty, filters to "LoRaWAN" or "Sidewalk" profiles (types.go's ListDeviceProfilesInput.DeviceProfileType), determined by which of the profile's LoRaWAN/Sidewalk sub-objects is set -- a profile always has exactly one, never both, since CreateDeviceProfile accepts only one.

func (*InMemoryBackend) ListEventConfigurations

func (b *InMemoryBackend) ListEventConfigurations(resourceType string) []*ResourceEventConfigEntry

ListEventConfigurations returns all stored per-resource event configurations, optionally filtered by resource type.

func (*InMemoryBackend) ListFuotaTaskDeviceIDs added in v1.2.0

func (b *InMemoryBackend) ListFuotaTaskDeviceIDs(fuotaTaskID string) []string

ListFuotaTaskDeviceIDs returns the IDs of wireless devices currently associated with a FUOTA task, sorted for deterministic output.

func (*InMemoryBackend) ListFuotaTasks

func (b *InMemoryBackend) ListFuotaTasks(accountID, region string) []*FuotaTask

ListFuotaTasks returns all FUOTA tasks for the given account and region, sorted by name for deterministic output.

func (*InMemoryBackend) ListMulticastGroupDeviceIDs added in v1.2.0

func (b *InMemoryBackend) ListMulticastGroupDeviceIDs(multicastGroupID string) []string

ListMulticastGroupDeviceIDs returns the IDs of wireless devices currently associated with a multicast group, sorted for deterministic output.

func (*InMemoryBackend) ListMulticastGroups

func (b *InMemoryBackend) ListMulticastGroups(accountID, region string) []*MulticastGroup

ListMulticastGroups returns all multicast groups for the given account and region, sorted by name for deterministic output.

func (*InMemoryBackend) ListMulticastGroupsByFuotaTask

func (b *InMemoryBackend) ListMulticastGroupsByFuotaTask(
	accountID, region, fuotaTaskID string,
) []*MulticastGroup

ListMulticastGroupsByFuotaTask returns every multicast group associated with a FUOTA task.

func (*InMemoryBackend) ListNetworkAnalyzerConfigs

func (b *InMemoryBackend) ListNetworkAnalyzerConfigs(accountID, region string) []*NetworkAnalyzerConfig

ListNetworkAnalyzerConfigs returns all network analyzer configurations for the given account and region, sorted by name for deterministic output.

func (*InMemoryBackend) ListPartnerAccounts

func (b *InMemoryBackend) ListPartnerAccounts() map[string]string

ListPartnerAccounts returns all partner account ARNs.

func (*InMemoryBackend) ListPositionConfigurations

func (b *InMemoryBackend) ListPositionConfigurations(resourceType string) []*PositionConfigEntry

ListPositionConfigurations returns all stored position configurations, optionally filtered by resource type.

func (*InMemoryBackend) ListQueuedMessages

func (b *InMemoryBackend) ListQueuedMessages(wirelessDeviceID string) []QueuedMessage

ListQueuedMessages returns queued messages for a wireless device.

func (*InMemoryBackend) ListServiceProfiles

func (b *InMemoryBackend) ListServiceProfiles(accountID, region string) []*ServiceProfile

ListServiceProfiles returns all service profiles for the given account and region, sorted by name for deterministic output.

func (*InMemoryBackend) ListTagsForResource

func (b *InMemoryBackend) ListTagsForResource(arn string) (map[string]string, error)

ListTagsForResource returns all tags for a resource identified by ARN.

func (*InMemoryBackend) ListWirelessDeviceImportTasks

func (b *InMemoryBackend) ListWirelessDeviceImportTasks() []*WirelessDeviceImportTask

ListWirelessDeviceImportTasks returns all wireless device import tasks.

func (*InMemoryBackend) ListWirelessDevices

func (b *InMemoryBackend) ListWirelessDevices(
	accountID, region string, filter ListWirelessDevicesFilter,
) []*WirelessDevice

ListWirelessDevices returns wireless devices for the given account and region matching filter, sorted by name for deterministic output.

func (*InMemoryBackend) ListWirelessGatewayTaskDefinitions

func (b *InMemoryBackend) ListWirelessGatewayTaskDefinitions() []*GatewayTaskDefinition

ListWirelessGatewayTaskDefinitions returns all gateway task definitions.

func (*InMemoryBackend) ListWirelessGateways

func (b *InMemoryBackend) ListWirelessGateways(accountID, region string) []*WirelessGateway

ListWirelessGateways returns all wireless gateways for the given account and region, sorted by name for deterministic output.

func (*InMemoryBackend) PutPositionConfiguration

func (b *InMemoryBackend) PutPositionConfiguration(
	resourceID, resourceType, destination string, solvers map[string]any,
) error

PutPositionConfiguration stores the position solver configuration for a resource.

func (*InMemoryBackend) PutResourceLogLevel

func (b *InMemoryBackend) PutResourceLogLevel(resourceID, logLevel string) error

PutResourceLogLevel sets the log level for a specific resource.

func (*InMemoryBackend) Reset

func (b *InMemoryBackend) Reset()

Reset clears all in-memory state, returning the backend to a pristine condition.

func (*InMemoryBackend) ResetAllResourceLogLevels

func (b *InMemoryBackend) ResetAllResourceLogLevels() error

ResetAllResourceLogLevels clears all resource-level log level overrides.

func (*InMemoryBackend) ResetResourceLogLevel

func (b *InMemoryBackend) ResetResourceLogLevel(resourceID string) error

ResetResourceLogLevel clears the log level override for a specific resource.

func (*InMemoryBackend) Restore

func (b *InMemoryBackend) Restore(ctx context.Context, data []byte) error

Restore loads backend state from a JSON snapshot. It implements persistence.Persistable.

func (*InMemoryBackend) SetLifecycleDelay

func (b *InMemoryBackend) SetLifecycleDelay(d time.Duration)

SetLifecycleDelay sets the dwell per FUOTA stage after StartFuotaTask (FuotaSession_Waiting, then In_FuotaSession, then FuotaDone). Zero (the default) leaves a started task in FuotaSession_Waiting.

func (*InMemoryBackend) Snapshot

func (b *InMemoryBackend) Snapshot(ctx context.Context) []byte

Snapshot serialises the backend state to JSON. It implements persistence.Persistable.

func (*InMemoryBackend) StartBulkAssociateWirelessDeviceWithMulticastGroup added in v1.2.0

func (b *InMemoryBackend) StartBulkAssociateWirelessDeviceWithMulticastGroup(
	accountID, region, multicastGroupID string,
) error

StartBulkAssociateWirelessDeviceWithMulticastGroup associates every wireless device in the account/region with the multicast group. Real AWS filters candidates by the request's QueryString search expression against device attributes; this backend has no query-expression evaluator, so it emulates the "all qualifying devices" semantics by associating the full device corpus, matching this package's existing convention for List* ops that accept-but-can't-honor a narrowing filter (see PARITY.md gaps).

func (*InMemoryBackend) StartBulkDisassociateWirelessDeviceFromMulticastGroup added in v1.2.0

func (b *InMemoryBackend) StartBulkDisassociateWirelessDeviceFromMulticastGroup(multicastGroupID string) error

StartBulkDisassociateWirelessDeviceFromMulticastGroup disassociates every wireless device in the account/region from the multicast group -- the bulk-disassociate counterpart of StartBulkAssociateWirelessDeviceWithMulticastGroup.

func (*InMemoryBackend) StartFuotaTask

func (b *InMemoryBackend) StartFuotaTask(accountID, region, id string, startTime *time.Time) error

StartFuotaTask transitions the FUOTA task's Status to "FuotaSession_Waiting" (types.FuotaTaskStatusFuotaSessionWaiting), matching real AWS's lifecycle for a task moved out of "Pending" by StartFuotaTask. Previously this corrupted FirmwareUpdateRole by overwriting it with a fabricated status string instead of tracking status as its own field. startTime, when non-nil, is StartFuotaTaskInput.LoRaWAN.StartTime (types.LoRaWANStartFuotaTask, types.go:1202); a nil value leaves any previously recorded start time untouched rather than clearing it.

func (*InMemoryBackend) StartMulticastGroupSession

func (b *InMemoryBackend) StartMulticastGroupSession(multicastGroupID string) error

StartMulticastGroupSession marks a multicast group session as active, recording its start time so GetMulticastGroupSession can report it back.

func (*InMemoryBackend) StartSingleWirelessDeviceImportTask

func (b *InMemoryBackend) StartSingleWirelessDeviceImportTask(
	accountID, region, destinationName string,
	details ...SingleImportDetails,
) (*SingleWirelessDeviceImportTask, error)

StartSingleWirelessDeviceImportTask creates a single wireless device import task.

func (*InMemoryBackend) StartWirelessDeviceImportTask

func (b *InMemoryBackend) StartWirelessDeviceImportTask(
	accountID, region, destinationName, positioning string,
	sidewalk WirelessDeviceImportSidewalk,
) (*WirelessDeviceImportTask, error)

StartWirelessDeviceImportTask creates a bulk wireless device import task.

func (*InMemoryBackend) TagResource

func (b *InMemoryBackend) TagResource(arn string, tags map[string]string) error

TagResource adds or updates tags on a resource identified by ARN.

func (*InMemoryBackend) UntagResource

func (b *InMemoryBackend) UntagResource(arn string, tagKeys []string) error

UntagResource removes tags from a resource identified by ARN. If all tags are removed the empty map entry is cleaned up to prevent memory leaks.

func (*InMemoryBackend) UpdateDestination

func (b *InMemoryBackend) UpdateDestination(
	accountID, region, name, expression, expressionType, roleArn, description string,
) error

UpdateDestination updates mutable fields on an existing destination.

func (*InMemoryBackend) UpdateEventConfigurationByResourceTypes

func (b *InMemoryBackend) UpdateEventConfigurationByResourceTypes(doc *EventConfigDoc)

UpdateEventConfigurationByResourceTypes replaces the account-wide default event configuration.

func (*InMemoryBackend) UpdateFuotaTask

func (b *InMemoryBackend) UpdateFuotaTask(
	accountID, region, id, name, description, descriptor, firmwareUpdateImage, firmwareUpdateRole string,
	fragmentIntervalMS, fragmentSizeBytes, redundancyPercent int32,
	loRaWAN *LoRaWANFuotaTask,
) error

UpdateFuotaTask updates mutable fields on an existing FUOTA task. UpdateFuotaTaskInput.LoRaWAN is the same LoRaWANFuotaTask shape as CreateFuotaTask's (api_op_UpdateFuotaTask.go:64), so a non-nil value replaces the stored LoRaWAN wholesale rather than merging field by field. descriptor, firmwareUpdateImage and firmwareUpdateRole only apply when non-empty, and fragmentIntervalMS/fragmentSizeBytes/redundancyPercent only apply when non-zero, matching the name != "" convention already used for Name -- see UpdateWirelessDevice/UpdateMulticastGroup for the same pattern.

func (*InMemoryBackend) UpdateLogLevelsByResourceTypes

func (b *InMemoryBackend) UpdateLogLevelsByResourceTypes(cfg LogLevelsConfig) error

UpdateLogLevelsByResourceTypes replaces the account-wide default log-level configuration.

func (*InMemoryBackend) UpdateMetricConfigurationStatus

func (b *InMemoryBackend) UpdateMetricConfigurationStatus(status string) error

UpdateMetricConfigurationStatus sets the account's summary metric aggregation status.

func (*InMemoryBackend) UpdateMulticastGroup

func (b *InMemoryBackend) UpdateMulticastGroup(
	accountID, region, id, name, description string,
	loRaWAN *LoRaWANMulticast,
) error

UpdateMulticastGroup updates mutable fields on an existing multicast group. UpdateMulticastGroupInput.LoRaWAN is the same LoRaWANMulticast shape as CreateMulticastGroup's (api_op_UpdateMulticastGroup.go:39), so a non-nil value replaces the stored LoRaWAN wholesale rather than merging field by field.

func (*InMemoryBackend) UpdateNetworkAnalyzerConfig

func (b *InMemoryBackend) UpdateNetworkAnalyzerConfig(
	accountID, region, name, description string,
	wirelessDevicesToAdd, wirelessDevicesToRemove []string,
	wirelessGatewaysToAdd, wirelessGatewaysToRemove []string,
	multicastGroupsToAdd, multicastGroupsToRemove []string,
	traceContent *TraceContent,
) error

UpdateNetworkAnalyzerConfig updates mutable fields on an existing network analyzer configuration. Real AWS's WirelessDevices/WirelessGateways/ MulticastGroups members are only ever mutated via *ToAdd/*ToRemove list pairs -- there is no wholesale-replace field for any of the three. traceContent, if non-nil, replaces the stored TraceContent wholesale rather than merging field-by-field: unlike LoRaWANUpdateDevice, types.TraceContent's fields (LogLevel/MulticastFrameInfo/ WirelessDeviceFrameInfo) aren't optional pointers, so there is no way for a client to express "leave this one sub-field alone".

func (*InMemoryBackend) UpdatePosition

func (b *InMemoryBackend) UpdatePosition(resourceID string, position map[string]any) error

UpdatePosition updates the position data for a resource.

func (*InMemoryBackend) UpdateResourceEventConfiguration

func (b *InMemoryBackend) UpdateResourceEventConfiguration(
	identifier, identifierType, partnerType string, doc *EventConfigDoc,
)

UpdateResourceEventConfiguration stores the event configuration for a specific resource identifier.

func (*InMemoryBackend) UpdateWirelessDevice

func (b *InMemoryBackend) UpdateWirelessDevice(
	accountID, region, id, name, description, destinationName, positioning string,
	loRaWAN *LoRaWANUpdateDevice, sidewalk *SidewalkUpdateWirelessDevice,
) error

UpdateWirelessDevice updates mutable fields on an existing wireless device. loRaWAN/sidewalk are merged field-by-field into the stored configuration (rather than wholesale replaced), matching real AWS's UpdateWirelessDevice semantics of updating only the LoRaWANUpdateDevice/SidewalkUpdateWirelessDevice sub-fields the client actually supplied (e.g. LoRaWANUpdateDevice only carries DeviceProfileID/ServiceProfileID/ABP/FPorts -- not DevEui -- so a full replace would silently drop DevEui that CreateWirelessDevice originally stored).

func (*InMemoryBackend) UpdateWirelessDeviceImportTask

func (b *InMemoryBackend) UpdateWirelessDeviceImportTask(id string, sidewalk WirelessDeviceImportSidewalk) error

UpdateWirelessDeviceImportTask appends a device-creation file to a wireless device import task's Sidewalk list. The real UpdateWirelessDeviceImportTaskInput (iotwireless@v1.59.4) carries only Id and a required Sidewalk.DeviceCreationFile -- it has no DestinationName member, which is otherwise immutable after creation.

func (*InMemoryBackend) UpdateWirelessGateway

func (b *InMemoryBackend) UpdateWirelessGateway(
	accountID, region, id, name, description string,
	joinEuiFilters [][]string, netIDFilters []string, maxEirp *float32,
) error

UpdateWirelessGateway updates mutable fields on an existing wireless gateway. UpdateWirelessGatewayInput carries JoinEuiFilters/MaxEirp/ NetIDFilters as top-level fields (not nested under a LoRaWAN sub-object, unlike Create -- api_op_UpdateWirelessGateway.go:27), so they merge field-by-field into the stored LoRaWANGateway; a nil/empty value leaves the existing field untouched.

type ListWirelessDevicesFilter added in v1.3.1

type ListWirelessDevicesFilter struct {
	DestinationName    string
	DeviceProfileID    string
	ServiceProfileID   string
	FuotaTaskID        string
	MulticastGroupID   string
	WirelessDeviceType string
}

ListWirelessDevicesFilter narrows ListWirelessDevices' result set. Each non-empty field is a query-string filter on ListWirelessDevicesInput (destinationName/deviceProfileId/serviceProfileId/fuotaTaskId/ multicastGroupId/wirelessDeviceType -- api_op_ListWirelessDevices.go:29-56, serializers.go:6439). Multiple set filters combine with AND: this isn't documented in the SDK model (the client just forwards whatever query params are set), so this is a chosen semantic, matching how every other narrowing List filter in this codebase intersects rather than unions.

type LoRaWANDevice added in v1.3.1

type LoRaWANDevice struct {
	AbpV1_0X         *AbpV1_0X  `json:"AbpV1_0_x,omitempty"`
	AbpV1_1          *AbpV1_1   `json:"AbpV1_1,omitempty"`
	FPorts           *FPorts    `json:"FPorts,omitempty"`
	OtaaV1_0X        *OtaaV1_0X `json:"OtaaV1_0_x,omitempty"`
	OtaaV1_1         *OtaaV1_1  `json:"OtaaV1_1,omitempty"`
	DevEui           *string    `json:"DevEui,omitempty"`
	DeviceProfileID  *string    `json:"DeviceProfileId,omitempty"`
	ServiceProfileID *string    `json:"ServiceProfileId,omitempty"`
}

LoRaWANDevice mirrors types.LoRaWANDevice -- the CreateWirelessDevice request / GetWirelessDevice response shape (types.go:723).

type LoRaWANDeviceProfile added in v1.3.1

type LoRaWANDeviceProfile struct {
	PingSlotDr             *int32  `json:"PingSlotDr,omitempty"`
	PingSlotPeriod         *int32  `json:"PingSlotPeriod,omitempty"`
	RegParamsRevision      *string `json:"RegParamsRevision,omitempty"`
	PingSlotFreq           *int32  `json:"PingSlotFreq,omitempty"`
	ClassBTimeout          *int32  `json:"ClassBTimeout,omitempty"`
	ClassCTimeout          *int32  `json:"ClassCTimeout,omitempty"`
	MaxDutyCycle           *int32  `json:"MaxDutyCycle,omitempty"`
	MaxEirp                *int32  `json:"MaxEirp,omitempty"`
	MacVersion             *string `json:"MacVersion,omitempty"`
	SupportsJoin           *bool   `json:"SupportsJoin,omitempty"`
	RfRegion               *string `json:"RfRegion,omitempty"`
	RxDataRate2            *int32  `json:"RxDataRate2,omitempty"`
	RxDelay1               *int32  `json:"RxDelay1,omitempty"`
	RxDrOffset1            *int32  `json:"RxDrOffset1,omitempty"`
	RxFreq2                *int32  `json:"RxFreq2,omitempty"`
	FactoryPresetFreqsList []int32 `json:"FactoryPresetFreqsList,omitempty"`
	Supports32BitFCnt      bool    `json:"Supports32BitFCnt,omitempty"`
	SupportsClassB         bool    `json:"SupportsClassB,omitempty"`
	SupportsClassC         bool    `json:"SupportsClassC,omitempty"`
}

LoRaWANDeviceProfile mirrors types.LoRaWANDeviceProfile -- shared verbatim by CreateDeviceProfile's request and GetDeviceProfile's response (types.go:780), unlike ServiceProfile/FuotaTask/MulticastGroup which each have a narrower create shape and a wider get shape.

type LoRaWANFuotaTask added in v1.3.1

type LoRaWANFuotaTask struct {
	RfRegion string `json:"RfRegion,omitempty"`
}

LoRaWANFuotaTask mirrors types.LoRaWANFuotaTask -- shared by CreateFuotaTask's and UpdateFuotaTask's request (types.go:844).

type LoRaWANFuotaTaskGetInfo added in v1.3.1

type LoRaWANFuotaTaskGetInfo struct {
	RfRegion  *string `json:"RfRegion,omitempty"`
	StartTime *string `json:"StartTime,omitempty"`
}

LoRaWANFuotaTaskGetInfo mirrors types.LoRaWANFuotaTaskGetInfo -- the GetFuotaTask response shape (types.go:853). StartTime is an ISO8601 string on the wire (smithytime.FormatDateTime/ParseDateTime, deserializers.go:19509) set from StartFuotaTaskInput.LoRaWAN.StartTime, captured by StartFuotaTask into FuotaTask.StartTime.

type LoRaWANGateway added in v1.3.1

type LoRaWANGateway struct {
	Beaconing      *Beaconing `json:"Beaconing,omitempty"`
	GatewayEui     *string    `json:"GatewayEui,omitempty"`
	MaxEirp        *float32   `json:"MaxEirp,omitempty"`
	RfRegion       *string    `json:"RfRegion,omitempty"`
	JoinEuiFilters [][]string `json:"JoinEuiFilters,omitempty"`
	NetIDFilters   []string   `json:"NetIdFilters,omitempty"`
	SubBands       []int32    `json:"SubBands,omitempty"`
}

LoRaWANGateway mirrors types.LoRaWANGateway, shared by CreateWirelessGateway/GetWirelessGateway (types.go:865).

type LoRaWANGatewayVersion added in v1.3.1

type LoRaWANGatewayVersion struct {
	Model          *string `json:"Model,omitempty"`
	PackageVersion *string `json:"PackageVersion,omitempty"`
	Station        *string `json:"Station,omitempty"`
}

LoRaWANGatewayVersion mirrors types.LoRaWANGatewayVersion (types.go:918).

type LoRaWANGetServiceProfileInfo added in v1.3.1

type LoRaWANGetServiceProfileInfo struct {
	ChannelMask            *string `json:"ChannelMask,omitempty"`
	DevStatusReqFreq       *int32  `json:"DevStatusReqFreq,omitempty"`
	DlBucketSize           *int32  `json:"DlBucketSize,omitempty"`
	DlRate                 *int32  `json:"DlRate,omitempty"`
	DlRatePolicy           *string `json:"DlRatePolicy,omitempty"`
	MinGwDiversity         *int32  `json:"MinGwDiversity,omitempty"`
	NbTransMax             *int32  `json:"NbTransMax,omitempty"`
	NbTransMin             *int32  `json:"NbTransMin,omitempty"`
	TxPowerIndexMax        *int32  `json:"TxPowerIndexMax,omitempty"`
	TxPowerIndexMin        *int32  `json:"TxPowerIndexMin,omitempty"`
	UlBucketSize           *int32  `json:"UlBucketSize,omitempty"`
	UlRate                 *int32  `json:"UlRate,omitempty"`
	UlRatePolicy           *string `json:"UlRatePolicy,omitempty"`
	DrMax                  int32   `json:"DrMax,omitempty"`
	DrMin                  int32   `json:"DrMin,omitempty"`
	TargetPer              int32   `json:"TargetPer,omitempty"`
	AddGwMetadata          bool    `json:"AddGwMetadata,omitempty"`
	HrAllowed              bool    `json:"HrAllowed,omitempty"`
	NwkGeoLoc              bool    `json:"NwkGeoLoc,omitempty"`
	PrAllowed              bool    `json:"PrAllowed,omitempty"`
	RaAllowed              bool    `json:"RaAllowed,omitempty"`
	ReportDevStatusBattery bool    `json:"ReportDevStatusBattery,omitempty"`
	ReportDevStatusMargin  bool    `json:"ReportDevStatusMargin,omitempty"`
}

LoRaWANGetServiceProfileInfo mirrors types.LoRaWANGetServiceProfileInfo -- the GetServiceProfile response shape (types.go:933), wider than LoRaWANServiceProfile: ChannelMask, DevStatusReqFreq, DlBucketSize, DlRate, DlRatePolicy, HrAllowed, MinGwDiversity, NwkGeoLoc, TargetPer, UlBucketSize, UlRate and UlRatePolicy are AWS-computed and only ever appear on Get, never on Create.

type LoRaWANListDevice added in v1.3.1

type LoRaWANListDevice struct {
	DevEui *string `json:"DevEui,omitempty"`
}

LoRaWANListDevice mirrors types.LoRaWANListDevice -- the ListWirelessDevices entry shape (types.go:1034): DevEui only.

type LoRaWANMulticast added in v1.3.1

type LoRaWANMulticast struct {
	DefaultSessionParameters *DefaultSessionParametersMulticast `json:"DefaultSessionParameters,omitempty"`
	ParticipatingGateways    *ParticipatingGatewaysMulticast    `json:"ParticipatingGateways,omitempty"`
	DlClass                  string                             `json:"DlClass,omitempty"`
	RfRegion                 string                             `json:"RfRegion,omitempty"`
}

LoRaWANMulticast mirrors types.LoRaWANMulticast -- shared by CreateMulticastGroup's and UpdateMulticastGroup's request (types.go:1043).

type LoRaWANMulticastGet added in v1.3.1

type LoRaWANMulticastGet struct {
	DefaultSessionParameters *DefaultSessionParametersMulticast `json:"DefaultSessionParameters,omitempty"`
	ParticipatingGateways    *ParticipatingGatewaysMulticast    `json:"ParticipatingGateways,omitempty"`
	NumberOfDevicesInGroup   *int32                             `json:"NumberOfDevicesInGroup,omitempty"`
	NumberOfDevicesRequested *int32                             `json:"NumberOfDevicesRequested,omitempty"`
	DlClass                  string                             `json:"DlClass,omitempty"`
	RfRegion                 string                             `json:"RfRegion,omitempty"`
}

LoRaWANMulticastGet mirrors types.LoRaWANMulticastGet -- the GetMulticastGroup response shape (types.go:1064): same fields as LoRaWANMulticast plus NumberOfDevicesInGroup/NumberOfDevicesRequested.

type LoRaWANServiceProfile added in v1.3.1

type LoRaWANServiceProfile struct {
	DrMax           *int32 `json:"DrMax,omitempty"`
	DrMin           *int32 `json:"DrMin,omitempty"`
	NbTransMax      *int32 `json:"NbTransMax,omitempty"`
	NbTransMin      *int32 `json:"NbTransMin,omitempty"`
	TxPowerIndexMax *int32 `json:"TxPowerIndexMax,omitempty"`
	TxPowerIndexMin *int32 `json:"TxPowerIndexMin,omitempty"`
	AddGwMetadata   bool   `json:"AddGwMetadata,omitempty"`
	PrAllowed       bool   `json:"PrAllowed,omitempty"`
	RaAllowed       bool   `json:"RaAllowed,omitempty"`
}

LoRaWANServiceProfile mirrors types.LoRaWANServiceProfile -- the CreateServiceProfile request shape (types.go:1161).

type LoRaWANStartFuotaTask added in v1.3.1

type LoRaWANStartFuotaTask struct {
	StartTime *string `json:"StartTime,omitempty"`
}

LoRaWANStartFuotaTask mirrors types.LoRaWANStartFuotaTask -- the StartFuotaTask request shape (types.go:1202). It carries only StartTime; unlike LoRaWANFuotaTask's RfRegion, there is nothing else to set.

type LoRaWANUpdateDevice added in v1.3.1

type LoRaWANUpdateDevice struct {
	AbpV1_0X         *UpdateAbpV1_0X `json:"AbpV1_0_x,omitempty"`
	AbpV1_1          *UpdateAbpV1_1  `json:"AbpV1_1,omitempty"`
	FPorts           *UpdateFPorts   `json:"FPorts,omitempty"`
	DeviceProfileID  *string         `json:"DeviceProfileId,omitempty"`
	ServiceProfileID *string         `json:"ServiceProfileId,omitempty"`
}

LoRaWANUpdateDevice mirrors types.LoRaWANUpdateDevice -- the narrower UpdateWirelessDevice request shape (types.go:1211): only DeviceProfileID/ ServiceProfileID/Abp/FPorts are updatable, DevEui and Otaa are not.

type LoRaWANUpdateGatewayTaskCreate added in v1.3.1

type LoRaWANUpdateGatewayTaskCreate struct {
	CurrentVersion  *LoRaWANGatewayVersion `json:"CurrentVersion,omitempty"`
	UpdateVersion   *LoRaWANGatewayVersion `json:"UpdateVersion,omitempty"`
	UpdateSignature *string                `json:"UpdateSignature,omitempty"`
	SigKeyCrc       *int64                 `json:"SigKeyCrc,omitempty"`
}

LoRaWANUpdateGatewayTaskCreate mirrors types.LoRaWANUpdateGatewayTaskCreate (types.go:1232).

type LoRaWANUpdateGatewayTaskEntry added in v1.3.1

type LoRaWANUpdateGatewayTaskEntry struct {
	CurrentVersion *LoRaWANGatewayVersion `json:"CurrentVersion,omitempty"`
	UpdateVersion  *LoRaWANGatewayVersion `json:"UpdateVersion,omitempty"`
}

LoRaWANUpdateGatewayTaskEntry mirrors types.LoRaWANUpdateGatewayTaskEntry (types.go:1250) -- narrower than LoRaWANUpdateGatewayTaskCreate: real AWS's ListWirelessGatewayTaskDefinitions entry (types.UpdateWirelessGatewayTaskEntry.LoRaWAN, types.go:2206) carries only CurrentVersion/UpdateVersion, not SigKeyCrc/UpdateSignature.

type LogLevelsConfig added in v1.2.0

type LogLevelsConfig struct {
	DefaultLogLevel           string
	FuotaTaskLogOptions       []map[string]any
	WirelessDeviceLogOptions  []map[string]any
	WirelessGatewayLogOptions []map[string]any
}

LogLevelsConfig is the account-wide default log-level configuration set via UpdateLogLevelsByResourceTypes. FuotaTaskLogOptions/ WirelessDeviceLogOptions/WirelessGatewayLogOptions hold the request's nested log-option-list objects verbatim (see the WirelessDevice.LoRaWAN doc comment in models.go for why opaque storage is used for these client-submitted nested configs) -- previously these three fields were silently accepted by UpdateLogLevelsByResourceTypesInput and dropped, always echoing back empty arrays regardless of what was set.

type MulticastGroup

type MulticastGroup struct {
	CreatedAt time.Time         `json:"createdAt"`
	Tags      map[string]string `json:"tags,omitempty"`
	// LoRaWAN holds the create/update-shape LoRaWANMulticast; GetMulticastGroup
	// converts it to LoRaWANMulticastGet via loRaWANMulticastGetFrom
	// (lorawan_types.go), adding the real device-association count.
	LoRaWAN     *LoRaWANMulticast `json:"loRaWAN,omitempty"`
	Name        string            `json:"name"`
	ID          string            `json:"id"`
	ARN         string            `json:"arn"`
	Description string            `json:"description,omitempty"`
	Status      string            `json:"status"`
	// AccountID and Region exist purely for store.Table's keyFn; see the
	// identical comment on WirelessDevice above.
	AccountID string `json:"-"`
	Region    string `json:"-"`
}

MulticastGroup represents an IoT Wireless multicast group.

type NetworkAnalyzerConfig

type NetworkAnalyzerConfig struct {
	Tags             map[string]string `json:"tags,omitempty"`
	Name             string            `json:"name"`
	ARN              string            `json:"arn"`
	Description      string            `json:"description,omitempty"`
	AccountID        string            `json:"-"`
	Region           string            `json:"-"`
	TraceContent     *TraceContent     `json:"traceContent,omitempty"`
	WirelessDevices  []string          `json:"wirelessDevices,omitempty"`
	WirelessGateways []string          `json:"wirelessGateways,omitempty"`
	MulticastGroups  []string          `json:"multicastGroups,omitempty"`
}

NetworkAnalyzerConfig represents an IoT Wireless network analyzer configuration.

type OtaaV1_0X added in v1.3.1

type OtaaV1_0X struct {
	AppEui    *string `json:"AppEui,omitempty"`
	AppKey    *string `json:"AppKey,omitempty"`
	GenAppKey *string `json:"GenAppKey,omitempty"`
	JoinEui   *string `json:"JoinEui,omitempty"`
}

OtaaV1_0X mirrors types.OtaaV1_0X (types.go:1453).

type OtaaV1_1 added in v1.3.1

type OtaaV1_1 struct {
	AppKey  *string `json:"AppKey,omitempty"`
	JoinEui *string `json:"JoinEui,omitempty"`
	NwkKey  *string `json:"NwkKey,omitempty"`
}

OtaaV1_1 mirrors types.OtaaV1_1 (types.go:1473).

type ParticipatingGatewaysMulticast added in v1.3.1

type ParticipatingGatewaysMulticast struct {
	TransmissionInterval *int32   `json:"TransmissionInterval,omitempty"`
	GatewayList          []string `json:"GatewayList,omitempty"`
}

ParticipatingGatewaysMulticast mirrors types.ParticipatingGatewaysMulticast (types.go:1515).

type PositionConfigEntry

type PositionConfigEntry struct {
	Solvers            map[string]any `json:"solvers,omitempty"`
	ResourceIdentifier string         `json:"resourceIdentifier"`
	ResourceType       string         `json:"resourceType"`
	Destination        string         `json:"destination,omitempty"`
}

PositionConfigEntry represents a stored position configuration for a wireless device or gateway resource, as set via PutPositionConfiguration.

type Positioning added in v1.3.1

type Positioning struct {
	ClockSync *int32 `json:"ClockSync,omitempty"`
	Gnss      *int32 `json:"Gnss,omitempty"`
	Stream    *int32 `json:"Stream,omitempty"`
}

Positioning mirrors types.Positioning (types.go:1551): FPort assignments for the GNSS/stream/ClockSync positioning functions.

type Provider

type Provider struct{}

Provider implements service.Provider for the IoT Wireless service.

func (*Provider) Init

Init initializes the IoT Wireless service backend and handler.

func (*Provider) Name

func (p *Provider) Name() string

Name returns the provider name.

type QueuedMessage

type QueuedMessage struct {
	ReceivedAt    time.Time
	MessageID     string
	PayloadBase64 string
	TransmitMode  int32
}

QueuedMessage represents a downlink message queued for a wireless device.

type Resettable

type Resettable interface {
	Reset()
}

Resettable is an optional interface that a StorageBackend may implement to support clearing all state (e.g. for test teardown).

type ResourceEventConfigEntry

type ResourceEventConfigEntry struct {
	Config         EventConfigDoc `json:"config"`
	Identifier     string         `json:"identifier"`
	IdentifierType string         `json:"identifierType"`
	PartnerType    string         `json:"partnerType,omitempty"`
}

ResourceEventConfigEntry represents a stored per-resource event configuration, as set via UpdateResourceEventConfiguration.

type ServiceProfile

type ServiceProfile struct {
	CreatedAt time.Time         `json:"createdAt"`
	Tags      map[string]string `json:"tags,omitempty"`
	// LoRaWAN holds the create-shape LoRaWANServiceProfile; GetServiceProfile
	// converts it to the wider LoRaWANGetServiceProfileInfo via
	// loRaWANGetServiceProfileInfoFrom (lorawan_types.go).
	LoRaWAN *LoRaWANServiceProfile `json:"loRaWAN,omitempty"`
	Name    string                 `json:"name"`
	ID      string                 `json:"id"`
	ARN     string                 `json:"arn"`
	// AccountID and Region exist purely for store.Table's keyFn; see the
	// identical comment on WirelessDevice above.
	AccountID string `json:"-"`
	Region    string `json:"-"`
}

ServiceProfile contains settings for a LoRaWAN service profile.

type SessionKeysAbpV1_0X added in v1.3.1

type SessionKeysAbpV1_0X struct {
	AppSKey *string `json:"AppSKey,omitempty"`
	NwkSKey *string `json:"NwkSKey,omitempty"`
}

SessionKeysAbpV1_0X mirrors types.SessionKeysAbpV1_0X (types.go:1658).

type SessionKeysAbpV1_1 added in v1.3.1

type SessionKeysAbpV1_1 struct {
	AppSKey     *string `json:"AppSKey,omitempty"`
	FNwkSIntKey *string `json:"FNwkSIntKey,omitempty"`
	NwkSEncKey  *string `json:"NwkSEncKey,omitempty"`
	SNwkSIntKey *string `json:"SNwkSIntKey,omitempty"`
}

SessionKeysAbpV1_1 mirrors types.SessionKeysAbpV1_1 (types.go:1670).

type SidewalkCreateDeviceProfile added in v1.3.1

type SidewalkCreateDeviceProfile struct{}

SidewalkCreateDeviceProfile mirrors types.SidewalkCreateDeviceProfile -- the CreateDeviceProfile request shape (types.go:1715). It carries no fields at all: unlike SidewalkCreateWirelessDevice, a Sidewalk device profile has no client-configurable settings, so this struct's only purpose is to distinguish "Sidewalk key present" from "absent" on decode.

type SidewalkCreateWirelessDevice added in v1.3.1

type SidewalkCreateWirelessDevice struct {
	Positioning             *SidewalkPositioning `json:"Positioning,omitempty"`
	DeviceProfileID         *string              `json:"DeviceProfileId,omitempty"`
	SidewalkManufacturingSn *string              `json:"SidewalkManufacturingSn,omitempty"`
}

SidewalkCreateWirelessDevice mirrors types.SidewalkCreateWirelessDevice -- the CreateWirelessDevice request shape (types.go:1720).

type SidewalkDevice added in v1.3.1

type SidewalkDevice struct {
	Positioning             *SidewalkPositioning `json:"Positioning,omitempty"`
	AmazonID                *string              `json:"AmazonId,omitempty"`
	CertificateID           *string              `json:"CertificateId,omitempty"`
	DeviceProfileID         *string              `json:"DeviceProfileId,omitempty"`
	SidewalkID              *string              `json:"SidewalkId,omitempty"`
	SidewalkManufacturingSn *string              `json:"SidewalkManufacturingSn,omitempty"`
	Status                  string               `json:"Status,omitempty"`
	DeviceCertificates      []CertificateList    `json:"DeviceCertificates,omitempty"`
	PrivateKeys             []CertificateList    `json:"PrivateKeys,omitempty"`
}

SidewalkDevice mirrors types.SidewalkDevice -- the GetWirelessDevice response shape (types.go:1735), a superset of SidewalkCreateWirelessDevice carrying AWS-assigned identity fields this backend never fabricates.

type SidewalkGetDeviceProfile added in v1.3.1

type SidewalkGetDeviceProfile struct {
	ApplicationServerPublicKey *string                  `json:"ApplicationServerPublicKey,omitempty"`
	QualificationStatus        *bool                    `json:"QualificationStatus,omitempty"`
	DakCertificateMetadata     []DakCertificateMetadata `json:"DakCertificateMetadata,omitempty"`
}

SidewalkGetDeviceProfile mirrors types.SidewalkGetDeviceProfile -- the GetDeviceProfile response shape (types.go:1796). Its fields are AWS-assigned at provisioning time; this backend never fabricates them, so they stay unset even when the profile is a Sidewalk profile.

type SidewalkListDevice added in v1.3.1

type SidewalkListDevice struct {
	Positioning             *SidewalkPositioning `json:"Positioning,omitempty"`
	AmazonID                *string              `json:"AmazonId,omitempty"`
	DeviceProfileID         *string              `json:"DeviceProfileId,omitempty"`
	SidewalkID              *string              `json:"SidewalkId,omitempty"`
	SidewalkManufacturingSn *string              `json:"SidewalkManufacturingSn,omitempty"`
	Status                  string               `json:"Status,omitempty"`
	DeviceCertificates      []CertificateList    `json:"DeviceCertificates,omitempty"`
}

SidewalkListDevice mirrors types.SidewalkListDevice -- the ListWirelessDevices entry shape (types.go:1828).

type SidewalkPositioning added in v1.3.1

type SidewalkPositioning struct {
	DestinationName *string `json:"DestinationName,omitempty"`
}

SidewalkPositioning mirrors types.SidewalkPositioning (types.go:1865).

type SidewalkUpdateWirelessDevice added in v1.3.1

type SidewalkUpdateWirelessDevice struct {
	Positioning *SidewalkPositioning `json:"Positioning,omitempty"`
}

SidewalkUpdateWirelessDevice mirrors types.SidewalkUpdateWirelessDevice -- the UpdateWirelessDevice request shape (types.go:1948): only Positioning is updatable.

type SingleImportDetails

type SingleImportDetails struct {
	DeviceName                     string
	Positioning                    string
	SidewalkManufacturingSn        string
	SidewalkPositioningDestination string
}

SingleImportDetails carries the optional StartSingleWirelessDeviceImportTask members.

type SingleWirelessDeviceImportTask

type SingleWirelessDeviceImportTask struct {
	CreatedAt                      time.Time `json:"createdAt"`
	ID                             string    `json:"id"`
	ARN                            string    `json:"arn"`
	WirelessDeviceID               string    `json:"wirelessDeviceId"`
	DestinationName                string    `json:"destinationName"`
	Status                         string    `json:"status"`
	DeviceName                     string    `json:"deviceName,omitempty"`
	Positioning                    string    `json:"positioning,omitempty"`
	SidewalkManufacturingSn        string    `json:"sidewalkManufacturingSn,omitempty"`
	SidewalkPositioningDestination string    `json:"sidewalkPositioningDestination,omitempty"`
}

SingleWirelessDeviceImportTask represents an IoT Wireless single-device import task.

type Snapshottable

type Snapshottable interface {
	Snapshot(ctx context.Context) []byte
	Restore(ctx context.Context, data []byte) error
}

Snapshottable is an optional interface that a StorageBackend may implement to support state serialisation and restoration (e.g. for --persist mode). Backends that do not implement it are silently skipped during snapshot/restore.

type StorageBackend

type StorageBackend interface {
	Reset()

	CreateWirelessDevice(
		accountID, region, name, devType, destinationName, description, positioning string,
		loRaWAN *LoRaWANDevice, sidewalk *SidewalkCreateWirelessDevice,
		tags map[string]string,
	) (*WirelessDevice, error)
	GetWirelessDevice(accountID, region, id string) (*WirelessDevice, error)
	ListWirelessDevices(accountID, region string, filter ListWirelessDevicesFilter) []*WirelessDevice
	DeleteWirelessDevice(accountID, region, id string) error

	CreateWirelessGateway(
		accountID, region, name, description string,
		loRaWAN *LoRaWANGateway,
		tags map[string]string,
	) (*WirelessGateway, error)
	GetWirelessGateway(accountID, region, id string) (*WirelessGateway, error)
	ListWirelessGateways(accountID, region string) []*WirelessGateway
	DeleteWirelessGateway(accountID, region, id string) error

	CreateServiceProfile(
		accountID, region, name string,
		loRaWAN *LoRaWANServiceProfile,
		tags map[string]string,
	) (*ServiceProfile, error)
	GetServiceProfile(accountID, region, id string) (*ServiceProfile, error)
	ListServiceProfiles(accountID, region string) []*ServiceProfile
	DeleteServiceProfile(accountID, region, id string) error

	CreateDestination(
		accountID, region, name, expression, expressionType, roleArn, description string,
		tags map[string]string,
	) (*Destination, error)
	GetDestination(accountID, region, name string) (*Destination, error)
	ListDestinations(accountID, region string) []*Destination
	DeleteDestination(accountID, region, name string) error

	CreateDeviceProfile(
		accountID, region, name string,
		loRaWAN *LoRaWANDeviceProfile,
		sidewalk *SidewalkCreateDeviceProfile,
		tags map[string]string,
	) (*DeviceProfile, error)
	GetDeviceProfile(accountID, region, id string) (*DeviceProfile, error)
	ListDeviceProfiles(accountID, region, deviceProfileType string) []*DeviceProfile
	DeleteDeviceProfile(accountID, region, id string) error

	CreateFuotaTask(
		accountID, region, name, description, firmwareUpdateImage, firmwareUpdateRole, descriptor string,
		fragmentIntervalMS, fragmentSizeBytes, redundancyPercent int32,
		loRaWAN *LoRaWANFuotaTask,
		tags map[string]string,
	) (*FuotaTask, error)
	GetFuotaTask(accountID, region, id string) (*FuotaTask, error)
	ListFuotaTasks(accountID, region string) []*FuotaTask
	DeleteFuotaTask(accountID, region, id string) error
	UpdateFuotaTask(
		accountID, region, id, name, description, descriptor, firmwareUpdateImage, firmwareUpdateRole string,
		fragmentIntervalMS, fragmentSizeBytes, redundancyPercent int32,
		loRaWAN *LoRaWANFuotaTask,
	) error

	UpdateWirelessGateway(
		accountID, region, id, name, description string,
		joinEuiFilters [][]string, netIDFilters []string, maxEirp *float32,
	) error

	UpdateDestination(accountID, region, name, expression, expressionType, roleArn, description string) error

	CreateMulticastGroup(
		accountID, region, name, description string,
		loRaWAN *LoRaWANMulticast,
		tags map[string]string,
	) (*MulticastGroup, error)
	GetMulticastGroup(accountID, region, id string) (*MulticastGroup, error)
	ListMulticastGroups(accountID, region string) []*MulticastGroup
	DeleteMulticastGroup(accountID, region, id string) error
	UpdateMulticastGroup(accountID, region, id, name, description string, loRaWAN *LoRaWANMulticast) error

	CreateNetworkAnalyzerConfig(
		accountID, region, name, description string,
		wirelessDevices, wirelessGateways, multicastGroups []string,
		traceContent *TraceContent,
		tags map[string]string,
	) (*NetworkAnalyzerConfig, error)
	GetNetworkAnalyzerConfig(accountID, region, name string) (*NetworkAnalyzerConfig, error)
	ListNetworkAnalyzerConfigs(accountID, region string) []*NetworkAnalyzerConfig
	DeleteNetworkAnalyzerConfig(accountID, region, name string) error
	UpdateNetworkAnalyzerConfig(
		accountID, region, name, description string,
		wirelessDevicesToAdd, wirelessDevicesToRemove []string,
		wirelessGatewaysToAdd, wirelessGatewaysToRemove []string,
		multicastGroupsToAdd, multicastGroupsToRemove []string,
		traceContent *TraceContent,
	) error

	AssociateAwsAccountWithPartnerAccount(
		accountID, region, partnerAccountID string,
		tags map[string]string,
	) (string, error)
	AssociateMulticastGroupWithFuotaTask(fuotaTaskID, multicastGroupID string) error
	AssociateWirelessDeviceWithFuotaTask(fuotaTaskID, wirelessDeviceID string) error
	AssociateWirelessDeviceWithMulticastGroup(multicastGroupID, wirelessDeviceID string) error
	AssociateWirelessDeviceWithThing(accountID, region, wirelessDeviceID, thingArn string) error
	AssociateWirelessGatewayWithCertificate(accountID, region, gatewayID, iotCertificateID string) (string, error)
	AssociateWirelessGatewayWithThing(accountID, region, gatewayID, thingArn string) error
	CancelMulticastGroupSession(multicastGroupID string) error
	ListMulticastGroupDeviceIDs(multicastGroupID string) []string
	ListFuotaTaskDeviceIDs(fuotaTaskID string) []string
	StartBulkAssociateWirelessDeviceWithMulticastGroup(accountID, region, multicastGroupID string) error
	StartBulkDisassociateWirelessDeviceFromMulticastGroup(multicastGroupID string) error

	// GetWirelessDeviceThingArn returns the ARN of the IoT Thing associated
	// with a wireless device via AssociateWirelessDeviceWithThing, or "" if
	// none is associated. Used by GetWirelessDevice to surface ThingArn/
	// ThingName, matching real AWS's response shape.
	GetWirelessDeviceThingArn(wirelessDeviceID string) string
	// GetWirelessGatewayThingArn returns the ARN of the IoT Thing associated
	// with a wireless gateway via AssociateWirelessGatewayWithThing, or "" if
	// none is associated. Used by GetWirelessGateway to surface ThingArn/
	// ThingName, matching real AWS's response shape.
	GetWirelessGatewayThingArn(gatewayID string) string

	// Extended operations implemented across the various <family>.go files.
	StartFuotaTask(accountID, region, id string, startTime *time.Time) error
	DisassociateWirelessDeviceFromFuotaTask(fuotaTaskID, wirelessDeviceID string) error
	ListMulticastGroupsByFuotaTask(accountID, region, fuotaTaskID string) []*MulticastGroup
	DisassociateMulticastGroupFromFuotaTask(fuotaTaskID, multicastGroupID string) error
	DisassociateWirelessDeviceFromMulticastGroup(multicastGroupID, wirelessDeviceID string) error
	StartMulticastGroupSession(multicastGroupID string) error
	GetMulticastGroupSession(multicastGroupID string) (time.Time, error)

	DisassociateWirelessGatewayFromCertificate(accountID, region, gatewayID string) error
	DisassociateWirelessGatewayFromThing(accountID, region, gatewayID string) error
	GetWirelessGatewayCertificate(accountID, region, gatewayID string) (string, error)

	UpdateWirelessDevice(
		accountID, region, id, name, description, destinationName, positioning string,
		loRaWAN *LoRaWANUpdateDevice, sidewalk *SidewalkUpdateWirelessDevice,
	) error
	DisassociateWirelessDeviceFromThing(accountID, region, wirelessDeviceID string) error

	GetPartnerAccount(partnerAccountID string) (string, error)
	ListPartnerAccounts() map[string]string
	DisassociateAwsAccountFromPartnerAccount(partnerAccountID string) error

	GetLogLevelsByResourceTypes() LogLevelsConfig
	UpdateLogLevelsByResourceTypes(cfg LogLevelsConfig) error
	ResetAllResourceLogLevels() error
	GetResourceLogLevel(resourceID string) string
	PutResourceLogLevel(resourceID, logLevel string) error
	ResetResourceLogLevel(resourceID string) error

	CreateWirelessGatewayTask(gatewayID, taskDefID string) (*GatewayTask, error)
	GetWirelessGatewayTask(gatewayID string) (*GatewayTask, error)
	DeleteWirelessGatewayTask(gatewayID string) error
	CreateWirelessGatewayTaskDefinition(
		accountID, region, name string,
		autoCreateTasks bool,
		update *UpdateWirelessGatewayTaskCreate,
	) (*GatewayTaskDefinition, error)
	GetWirelessGatewayTaskDefinition(id string) (*GatewayTaskDefinition, error)
	ListWirelessGatewayTaskDefinitions() []*GatewayTaskDefinition
	DeleteWirelessGatewayTaskDefinition(id string) error

	GetPosition(resourceID string) map[string]any
	UpdatePosition(resourceID string, position map[string]any) error

	PutPositionConfiguration(resourceID, resourceType, destination string, solvers map[string]any) error
	GetPositionConfiguration(resourceID string) (*PositionConfigEntry, bool)
	ListPositionConfigurations(resourceType string) []*PositionConfigEntry

	GetEventConfigurationByResourceTypes() *EventConfigDoc
	UpdateEventConfigurationByResourceTypes(doc *EventConfigDoc)
	ListEventConfigurations(resourceType string) []*ResourceEventConfigEntry
	GetResourceEventConfiguration(identifier string) (*ResourceEventConfigEntry, bool)
	UpdateResourceEventConfiguration(identifier, identifierType, partnerType string, doc *EventConfigDoc)

	GetMetricConfigurationStatus() string
	UpdateMetricConfigurationStatus(status string) error

	ListQueuedMessages(wirelessDeviceID string) []QueuedMessage
	DeleteQueuedMessages(wirelessDeviceID string) error
	DeleteQueuedMessage(wirelessDeviceID, messageID string) error
	EnqueueMessage(wirelessDeviceID string, msg QueuedMessage)

	StartWirelessDeviceImportTask(
		accountID, region, destinationName, positioning string,
		sidewalk WirelessDeviceImportSidewalk,
	) (*WirelessDeviceImportTask, error)
	StartSingleWirelessDeviceImportTask(
		accountID, region, destinationName string,
		details ...SingleImportDetails,
	) (*SingleWirelessDeviceImportTask, error)
	GetWirelessDeviceImportTask(id string) (*WirelessDeviceImportTask, error)
	DeleteWirelessDeviceImportTask(id string) error
	UpdateWirelessDeviceImportTask(id string, sidewalk WirelessDeviceImportSidewalk) error
	ListWirelessDeviceImportTasks() []*WirelessDeviceImportTask

	TagResource(arn string, tags map[string]string) error
	UntagResource(arn string, tagKeys []string) error
	ListTagsForResource(arn string) (map[string]string, error)
}

StorageBackend is the interface for the IoT Wireless backend.

type TraceContent added in v1.3.1

type TraceContent struct {
	LogLevel                string `json:"LogLevel,omitempty"`
	MulticastFrameInfo      string `json:"MulticastFrameInfo,omitempty"`
	WirelessDeviceFrameInfo string `json:"WirelessDeviceFrameInfo,omitempty"`
}

TraceContent mirrors types.TraceContent (types.go:2130), used by NetworkAnalyzerConfig's Create/Get/UpdateNetworkAnalyzerConfiguration.

type UpdateAbpV1_0X added in v1.3.1

type UpdateAbpV1_0X struct {
	FCntStart *int32 `json:"FCntStart,omitempty"`
}

UpdateAbpV1_0X mirrors types.UpdateAbpV1_0X (types.go:2151).

type UpdateAbpV1_1 added in v1.3.1

type UpdateAbpV1_1 struct {
	FCntStart *int32 `json:"FCntStart,omitempty"`
}

UpdateAbpV1_1 mirrors types.UpdateAbpV1_1 (types.go:2160).

type UpdateFPorts added in v1.3.1

type UpdateFPorts struct {
	Positioning  *Positioning        `json:"Positioning,omitempty"`
	Applications []ApplicationConfig `json:"Applications,omitempty"`
}

UpdateFPorts mirrors types.UpdateFPorts (types.go:2169).

type UpdateWirelessGatewayTaskCreate added in v1.3.1

type UpdateWirelessGatewayTaskCreate struct {
	LoRaWAN          *LoRaWANUpdateGatewayTaskCreate `json:"LoRaWAN,omitempty"`
	UpdateDataRole   *string                         `json:"UpdateDataRole,omitempty"`
	UpdateDataSource *string                         `json:"UpdateDataSource,omitempty"`
}

UpdateWirelessGatewayTaskCreate mirrors types.UpdateWirelessGatewayTaskCreate (types.go:2182) -- the "Update" sub-struct of CreateWirelessGatewayTaskDefinitionInput.Update / GetWirelessGatewayTaskDefinitionOutput.Update.

type WirelessDevice

type WirelessDevice struct {
	CreatedAt            time.Time         `json:"createdAt"`
	LastUplinkReceivedAt *time.Time        `json:"lastUplinkReceivedAt,omitempty"`
	Tags                 map[string]string `json:"tags,omitempty"`
	// LoRaWAN uses the types.LoRaWANDevice shape shared by
	// CreateWirelessDevice's request and GetWirelessDevice's response.
	// Sidewalk is stored as the richer types.SidewalkDevice (get) shape;
	// CreateWirelessDevice's narrower SidewalkCreateWirelessDevice request is
	// converted into it via sidewalkDeviceFromCreate (lorawan_types.go).
	LoRaWAN         *LoRaWANDevice  `json:"loRaWAN,omitempty"`
	Sidewalk        *SidewalkDevice `json:"sidewalk,omitempty"`
	Positioning     string          `json:"positioning,omitempty"`
	Name            string          `json:"name"`
	ID              string          `json:"id"`
	ARN             string          `json:"arn"`
	Description     string          `json:"description,omitempty"`
	Type            string          `json:"type"`
	DestinationName string          `json:"destinationName,omitempty"`
	// AccountID and Region are not part of the AWS wire shape for this
	// resource; they exist purely so store.Table's keyFn (store_setup.go) can
	// derive the account+region-scoped composite key this backend requires.
	// Tagged json:"-" so they never leak into an API response; Snapshot/
	// Restore round-trips them via the deviceSnapshot DTO instead (see
	// persistence.go).
	AccountID string `json:"-"`
	Region    string `json:"-"`
}

WirelessDevice represents a LoRaWAN or Sidewalk wireless device.

type WirelessDeviceImportSidewalk

type WirelessDeviceImportSidewalk struct {
	DeviceCreationFile     string
	Role                   string
	PositioningDestination string
}

WirelessDeviceImportSidewalk mirrors the fields this backend stores from types.SidewalkStartImportInfo (create) / types.SidewalkUpdateImportInfo (update), echoed back on Get/List via types.SidewalkGetStartImportInfo.

type WirelessDeviceImportTask

type WirelessDeviceImportTask struct {
	CreatedAt                      time.Time `json:"createdAt"`
	StatusReason                   string    `json:"statusReason,omitempty"`
	ID                             string    `json:"id"`
	ARN                            string    `json:"arn"`
	DestinationName                string    `json:"destinationName"`
	Status                         string    `json:"status"`
	Positioning                    string    `json:"positioning,omitempty"`
	SidewalkRole                   string    `json:"sidewalkRole,omitempty"`
	SidewalkPositioningDestination string    `json:"sidewalkPositioningDestination,omitempty"`
	SidewalkDeviceCreationFiles    []string  `json:"sidewalkDeviceCreationFiles,omitempty"`
	InitializedImportedDeviceCount int64     `json:"initializedImportedDeviceCount"`
	PendingImportedDeviceCount     int64     `json:"pendingImportedDeviceCount"`
	OnboardedImportedDeviceCount   int64     `json:"onboardedImportedDeviceCount"`
	FailedImportedDeviceCount      int64     `json:"failedImportedDeviceCount"`
}

WirelessDeviceImportTask represents an IoT Wireless device bulk-import task.

type WirelessGateway

type WirelessGateway struct {
	CreatedAt            time.Time         `json:"createdAt"`
	LastUplinkReceivedAt *time.Time        `json:"lastUplinkReceivedAt,omitempty"`
	Tags                 map[string]string `json:"tags,omitempty"`
	// LoRaWAN uses the types.LoRaWANGateway shape shared by
	// CreateWirelessGateway/GetWirelessGateway.
	LoRaWAN          *LoRaWANGateway `json:"loRaWAN,omitempty"`
	Name             string          `json:"name"`
	ID               string          `json:"id"`
	ARN              string          `json:"arn"`
	Description      string          `json:"description,omitempty"`
	ConnectionStatus string          `json:"connectionStatus,omitempty"`
	FirmwareVersion  string          `json:"firmwareVersion,omitempty"`
	FirmwareModel    string          `json:"firmwareModel,omitempty"`
	FirmwareStation  string          `json:"firmwareStation,omitempty"`
	// AccountID and Region exist purely for store.Table's keyFn; see the
	// identical comment on WirelessDevice above.
	AccountID string `json:"-"`
	Region    string `json:"-"`
}

WirelessGateway represents a LoRaWAN gateway.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL