From 0ac3ac136535bf497cfb321506a9a842f0b44fa7 Mon Sep 17 00:00:00 2001 From: Viacheslav Klimov Date: Wed, 9 Sep 2026 12:01:48 +0100 Subject: [PATCH] Update PAAS OpenAPI spec in master (from develop/4.4) --- paas/docs/AdminSettings.md | 4 +- paas/docs/AdminSettingsId.md | 2 +- paas/docs/Agent.md | 40 + paas/docs/AgentAppArgument.md | 48 + paas/docs/AgentAppArgumentFormat.md | 23 + paas/docs/AgentAppArgumentSource.md | 35 + paas/docs/AgentAppArgumentValueType.md | 23 + paas/docs/AgentAppConfig.md | 58 + paas/docs/AgentAppConfigType.md | 21 + paas/docs/AgentAppEvent.md | 107 + paas/docs/AgentAppEventActionType.md | 33 + paas/docs/AgentAppEventId.md | 30 + paas/docs/AgentAppEventInfo.md | 108 + paas/docs/AgentAppEventRequest.md | 155 + paas/docs/AgentAppEventStepStatesValue.md | 75 + paas/docs/AgentAppInstallResponse.md | 180 + paas/docs/AgentAppProfile.md | 80 + paas/docs/AgentAppProfileControllerApi.md | 242 + paas/docs/AgentAppProfileId.md | 30 + paas/docs/AgentAppProfileInfo.md | 81 + paas/docs/AgentAppProfileRelationInfo.md | 84 + paas/docs/AgentAppStep.md | 33 + paas/docs/AgentAppStepState.md | 27 + paas/docs/AgentAppStepType.md | 41 + paas/docs/AgentAppTemplate.md | 102 + paas/docs/AgentAppTemplateControllerApi.md | 104 + paas/docs/AgentAppTemplateStartStepsInner.md | 77 + paas/docs/AgentAppUnit.md | 37 + paas/docs/AgentAppUnitId.md | 30 + paas/docs/AgentAppUnitType.md | 25 + paas/docs/AgentApplication.md | 89 + paas/docs/AgentApplicationControllerApi.md | 467 + paas/docs/AgentApplicationId.md | 30 + paas/docs/AgentApplicationInfo.md | 96 + paas/docs/AgentApplicationOrigin.md | 25 + .../{ChatType.md => AgentApplicationType.md} | 8 +- paas/docs/AgentBulkAction.md | 46 + paas/docs/AgentBulkActionControllerApi.md | 89 + paas/docs/AgentBulkActionEventStats.md | 23 + paas/docs/AgentBulkActionId.md | 30 + paas/docs/AgentBulkActionStatus.md | 27 + paas/docs/AgentControllerApi.md | 434 + paas/docs/AgentFinalizeStep.md | 39 + paas/docs/AgentId.md | 30 + paas/docs/AgentInfo.md | 54 + paas/docs/AgentInstructions.md | 22 + paas/docs/AgentPrepareStep.md | 39 + paas/docs/AgentProcessingStatus.md | 31 + paas/docs/AgentProfile.md | 41 + paas/docs/AgentProfileControllerApi.md | 478 + paas/docs/AgentProfileId.md | 30 + paas/docs/AgentProfileInfo.md | 41 + paas/docs/AgentProvisionType.md | 27 + paas/docs/AgentUpgradeRequest.md | 22 + paas/docs/AiChatControllerApi.md | 13 +- paas/docs/AiModel.md | 4 +- paas/docs/AiModelExportData.md | 6 +- paas/docs/AiModelId.md | 2 +- paas/docs/Alarm.md | 4 +- paas/docs/AlarmAssignee.md | 4 +- .../docs/AlarmCalculatedFieldConfiguration.md | 4 +- paas/docs/AlarmComment.md | 4 +- paas/docs/AlarmCommentInfo.md | 4 +- paas/docs/AlarmCountQuery.md | 4 +- paas/docs/AlarmData.md | 4 +- paas/docs/AlarmDataPageLink.md | 4 +- paas/docs/AlarmDataQuery.md | 4 +- paas/docs/AlarmFilterConfig.md | 4 +- paas/docs/AlarmId.md | 2 +- paas/docs/AlarmInfo.md | 4 +- paas/docs/AlarmRule.md | 4 +- paas/docs/AlarmRuleControllerApi.md | 2 +- paas/docs/AlarmRuleDefinition.md | 4 +- paas/docs/AlarmRuleDefinitionInfo.md | 4 +- paas/docs/AlarmTableComponent.md | 4 +- paas/docs/AliasEntityId.md | 2 +- paas/docs/AllowedPermissionsInfo.md | 6 +- paas/docs/ApiKey.md | 4 +- paas/docs/ApiKeyId.md | 2 +- paas/docs/ApiKeyInfo.md | 4 +- paas/docs/ApiUsageStateFilter.md | 4 +- paas/docs/ApiUsageStateId.md | 2 +- paas/docs/Argument.md | 4 +- paas/docs/Asset.md | 4 +- paas/docs/AssetExportData.md | 6 +- paas/docs/AssetId.md | 2 +- paas/docs/AssetInfo.md | 4 +- paas/docs/AssetProfile.md | 4 +- paas/docs/AssetProfileExportData.md | 6 +- paas/docs/AssetProfileId.md | 2 +- paas/docs/AssetProfileInfo.md | 4 +- paas/docs/AssetSearchQuery.md | 4 +- paas/docs/AssetSearchQueryFilter.md | 2 +- paas/docs/AuditLog.md | 4 +- paas/docs/AvailableEntityKeys.md | 2 +- paas/docs/AvailableEntityKeysV2.md | 2 +- paas/docs/BackupVolumesRemoveStep.md | 39 + paas/docs/BackupVolumesStep.md | 56 + paas/docs/BackupVolumesStepState.md | 40 + paas/docs/BillingCustomerId.md | 2 +- paas/docs/BlobEntityId.md | 2 +- paas/docs/BlobEntityInfo.md | 4 +- paas/docs/BlobEntityWithCustomerInfo.md | 4 +- paas/docs/BulkImportRequest.md | 4 +- paas/docs/BulkOperationPreview.md | 45 + paas/docs/BulkOperationRequest.md | 84 + paas/docs/CalculatedField.md | 4 +- paas/docs/CalculatedFieldConfiguration.md | 4 +- paas/docs/CalculatedFieldControllerApi.md | 2 +- paas/docs/CalculatedFieldId.md | 2 +- paas/docs/CalculatedFieldInfo.md | 4 +- paas/docs/CfReprocessingJobConfiguration.md | 56 +- paas/docs/CfReprocessingJobResult.md | 57 + paas/docs/CfReprocessingTaskFailure.md | 4 +- paas/docs/CfReprocessingTaskResult.md | 4 +- paas/docs/CloudDomainInfo.md | 4 +- paas/docs/ComposeDownStep.md | 63 + paas/docs/ComposeDownStepState.md | 47 + paas/docs/ComposeRestartStep.md | 39 + paas/docs/ComposeStartStep.md | 39 + paas/docs/ComposeStep.md | 63 + paas/docs/ComposeStepState.md | 47 + paas/docs/ComposeTypeChoiceStep.md | 40 + paas/docs/Converter.md | 4 +- paas/docs/ConverterExportData.md | 6 +- paas/docs/ConverterId.md | 2 +- paas/docs/CouponId.md | 2 +- paas/docs/CsvReportTemplateConfig.md | 4 +- paas/docs/CustomMenu.md | 4 +- paas/docs/CustomMenuDeleteResult.md | 4 +- paas/docs/CustomMenuInfo.md | 4 +- paas/docs/Customer.md | 4 +- paas/docs/CustomerExportData.md | 6 +- paas/docs/CustomerId.md | 2 +- paas/docs/CustomerInfo.md | 4 +- paas/docs/Dashboard.md | 4 +- paas/docs/DashboardComponent.md | 4 +- paas/docs/DashboardExportData.md | 6 +- paas/docs/DashboardId.md | 2 +- paas/docs/DashboardInfo.md | 4 +- paas/docs/DataSource.md | 4 +- .../docs/DefaultTenantProfileConfiguration.md | 6 + paas/docs/Device.md | 4 +- paas/docs/DeviceCredentials.md | 4 +- paas/docs/DeviceExportData.md | 6 +- paas/docs/DeviceGroupOtaPackage.md | 4 +- paas/docs/DeviceId.md | 2 +- paas/docs/DeviceInfo.md | 4 +- paas/docs/DeviceProfile.md | 70 +- paas/docs/DeviceProfileData.md | 66 +- paas/docs/DeviceProfileExportData.md | 6 +- paas/docs/DeviceProfileId.md | 2 +- paas/docs/DeviceProfileInfo.md | 4 +- .../DeviceProfileTransportConfiguration.md | 66 +- paas/docs/DeviceSearchQuery.md | 4 +- paas/docs/DeviceSearchQueryFilter.md | 2 +- paas/docs/Discount.md | 4 +- paas/docs/DockerComposeConfig.md | 66 + paas/docs/Domain.md | 4 +- paas/docs/DomainId.md | 2 +- paas/docs/DomainInfo.md | 4 +- paas/docs/DummyJobConfiguration.md | 57 + paas/docs/DummyJobResult.md | 57 + paas/docs/Edge.md | 4 +- paas/docs/EdgeControllerApi.md | 2 +- paas/docs/EdgeEvent.md | 4 +- paas/docs/EdgeId.md | 2 +- paas/docs/EdgeInfo.md | 4 +- paas/docs/EdgeSearchQuery.md | 4 +- paas/docs/EdgeSearchQueryFilter.md | 2 +- paas/docs/EntitiesByGroupNameFilter.md | 4 +- ...itiesLimitNotificationRuleTriggerConfig.md | 2 +- .../EntitiesVersionControlControllerApi.md | 10 +- ...tityActionNotificationRuleTriggerConfig.md | 2 +- ...AggregationCalculatedFieldConfiguration.md | 4 +- paas/docs/EntityAlias.md | 4 +- paas/docs/EntityCountQuery.md | 4 +- paas/docs/EntityData.md | 4 +- paas/docs/EntityDataDiff.md | 6 +- paas/docs/EntityDataQuery.md | 4 +- paas/docs/EntityExportData.md | 6 +- paas/docs/EntityFilter.md | 4 +- paas/docs/EntityGroup.md | 11 +- paas/docs/EntityGroupExportData.md | 6 +- paas/docs/EntityGroupFilter.md | 2 +- paas/docs/EntityGroupId.md | 2 +- paas/docs/EntityGroupInfo.md | 11 +- paas/docs/EntityGroupListFilter.md | 2 +- paas/docs/EntityGroupNameFilter.md | 2 +- paas/docs/EntityId.md | 23 +- paas/docs/EntityInfo.md | 4 +- paas/docs/EntityListFilter.md | 2 +- paas/docs/EntityLoadError.md | 4 +- paas/docs/EntityNameFilter.md | 2 +- paas/docs/EntityRelation.md | 6 +- paas/docs/EntityRelationInfo.md | 6 +- paas/docs/EntityRelationsQuery.md | 4 +- paas/docs/EntitySubtype.md | 4 +- paas/docs/EntityTableComponent.md | 4 +- paas/docs/EntityType.md | 14 + paas/docs/EntityTypeFilter.md | 2 +- paas/docs/EntityTypeLoadResult.md | 2 +- paas/docs/EntityView.md | 4 +- paas/docs/EntityViewExportData.md | 6 +- paas/docs/EntityViewId.md | 2 +- paas/docs/EntityViewInfo.md | 4 +- paas/docs/EntityViewSearchQuery.md | 4 +- paas/docs/EntityViewSearchQueryFilter.md | 2 +- paas/docs/EventInfo.md | 4 +- paas/docs/ExportableEntity.md | 4 +- .../GeofencingCalculatedFieldConfiguration.md | 4 +- ...ManagedRelatedEntityIds200ResponseInner.md | 28 + paas/docs/GroupPermission.md | 4 +- paas/docs/GroupPermissionId.md | 2 +- paas/docs/GroupPermissionInfo.md | 4 +- paas/docs/HeaderFooter.md | 4 +- paas/docs/HeadingComponent.md | 4 +- paas/docs/HomeDashboard.md | 4 +- paas/docs/HomeDashboardInfo.md | 4 +- paas/docs/ImageComponent.md | 4 +- paas/docs/Integration.md | 4 +- paas/docs/IntegrationExportData.md | 6 +- paas/docs/IntegrationId.md | 2 +- paas/docs/IntegrationInfo.md | 4 +- paas/docs/Job.md | 36 +- paas/docs/JobConfiguration.md | 52 +- paas/docs/JobId.md | 2 +- paas/docs/JobResult.md | 40 +- paas/docs/LatestChartComponent.md | 4 +- paas/docs/LimitedApi.md | 8 + paas/docs/LoginWhiteLabelingParams.md | 5 +- paas/docs/LwM2MBootstrapServerCredential.md | 66 + ...wm2mDeviceProfileTransportConfiguration.md | 66 +- paas/docs/MergedGroupPermissionInfo.md | 2 +- paas/docs/MergedGroupTypePermissionInfo.md | 4 +- paas/docs/MergedUserPermissions.md | 4 +- paas/docs/MobileApp.md | 4 +- paas/docs/MobileAppBundle.md | 4 +- paas/docs/MobileAppBundleId.md | 2 +- paas/docs/MobileAppBundleInfo.md | 4 +- paas/docs/MobileAppId.md | 2 +- paas/docs/MobileSelfRegistrationParams.md | 4 +- paas/docs/Notification.md | 4 +- paas/docs/NotificationId.md | 2 +- paas/docs/NotificationInfo.md | 4 +- paas/docs/NotificationRequest.md | 5 +- paas/docs/NotificationRequestConfig.md | 4 +- paas/docs/NotificationRequestId.md | 2 +- paas/docs/NotificationRequestInfo.md | 5 +- paas/docs/NotificationRule.md | 6 +- paas/docs/NotificationRuleExportData.md | 6 +- paas/docs/NotificationRuleId.md | 2 +- paas/docs/NotificationRuleInfo.md | 6 +- paas/docs/NotificationRuleTriggerConfig.md | 4 +- paas/docs/NotificationTarget.md | 4 +- paas/docs/NotificationTargetExportData.md | 6 +- paas/docs/NotificationTargetId.md | 2 +- paas/docs/NotificationTemplate.md | 5 +- paas/docs/NotificationTemplateConfig.md | 5 +- paas/docs/NotificationTemplateExportData.md | 6 +- paas/docs/NotificationTemplateId.md | 2 +- paas/docs/OAuth2Client.md | 4 +- paas/docs/OAuth2ClientId.md | 2 +- paas/docs/OAuth2ClientInfo.md | 4 +- paas/docs/OtaPackage.md | 4 +- paas/docs/OtaPackageExportData.md | 6 +- paas/docs/OtaPackageId.md | 2 +- paas/docs/OtaPackageInfo.md | 4 +- paas/docs/PageDataAgent.md | 48 + paas/docs/PageDataAgentAppEvent.md | 115 + paas/docs/PageDataAgentAppEventInfo.md | 116 + paas/docs/PageDataAgentAppProfile.md | 88 + paas/docs/PageDataAgentAppUnit.md | 45 + paas/docs/PageDataAgentApplicationInfo.md | 104 + paas/docs/PageDataAgentBulkAction.md | 54 + paas/docs/PageDataAgentInfo.md | 62 + paas/docs/PageDataAgentProfile.md | 49 + paas/docs/PageDataAgentProfileInfo.md | 49 + paas/docs/PageDataAiModel.md | 4 +- paas/docs/PageDataAlarmCommentInfo.md | 4 +- paas/docs/PageDataAlarmData.md | 4 +- paas/docs/PageDataAlarmInfo.md | 4 +- paas/docs/PageDataAlarmRuleDefinition.md | 4 +- paas/docs/PageDataAlarmRuleDefinitionInfo.md | 4 +- paas/docs/PageDataApiKeyInfo.md | 4 +- paas/docs/PageDataAsset.md | 4 +- paas/docs/PageDataAssetInfo.md | 4 +- paas/docs/PageDataAssetProfile.md | 4 +- paas/docs/PageDataAssetProfileInfo.md | 4 +- paas/docs/PageDataAuditLog.md | 4 +- .../PageDataBlobEntityWithCustomerInfo.md | 4 +- paas/docs/PageDataCalculatedField.md | 4 +- paas/docs/PageDataCalculatedFieldInfo.md | 4 +- paas/docs/PageDataConverter.md | 4 +- paas/docs/PageDataCustomMenuInfo.md | 4 +- paas/docs/PageDataCustomer.md | 4 +- paas/docs/PageDataCustomerInfo.md | 4 +- paas/docs/PageDataDashboardInfo.md | 4 +- paas/docs/PageDataDevice.md | 4 +- paas/docs/PageDataDeviceInfo.md | 4 +- paas/docs/PageDataDeviceProfile.md | 70 +- paas/docs/PageDataDeviceProfileInfo.md | 4 +- paas/docs/PageDataDomainInfo.md | 4 +- paas/docs/PageDataEdge.md | 4 +- paas/docs/PageDataEdgeEvent.md | 4 +- paas/docs/PageDataEdgeInfo.md | 4 +- paas/docs/PageDataEntityData.md | 4 +- paas/docs/PageDataEntityGroupInfo.md | 4 +- paas/docs/PageDataEntityInfo.md | 4 +- paas/docs/PageDataEntitySubtype.md | 4 +- paas/docs/PageDataEntityView.md | 4 +- paas/docs/PageDataEntityViewInfo.md | 4 +- paas/docs/PageDataEventInfo.md | 4 +- paas/docs/PageDataIntegration.md | 4 +- paas/docs/PageDataIntegrationInfo.md | 4 +- paas/docs/PageDataJob.md | 36 +- paas/docs/PageDataMobileApp.md | 4 +- paas/docs/PageDataMobileAppBundleInfo.md | 4 +- paas/docs/PageDataNotification.md | 4 +- paas/docs/PageDataNotificationRequestInfo.md | 5 +- paas/docs/PageDataNotificationRuleInfo.md | 6 +- paas/docs/PageDataNotificationTarget.md | 4 +- paas/docs/PageDataNotificationTemplate.md | 5 +- paas/docs/PageDataOAuth2ClientInfo.md | 4 +- paas/docs/PageDataOtaPackageInfo.md | 4 +- paas/docs/PageDataQueue.md | 4 +- paas/docs/PageDataQueueStats.md | 4 +- paas/docs/PageDataReport.md | 6 +- paas/docs/PageDataReportInfo.md | 6 +- paas/docs/PageDataReportTemplateInfo.md | 4 +- paas/docs/PageDataRole.md | 4 +- paas/docs/PageDataRuleChain.md | 4 +- paas/docs/PageDataScheduledReportInfo.md | 4 +- paas/docs/PageDataSchedulerEventInfo.md | 4 +- .../PageDataSchedulerEventWithCustomerInfo.md | 4 +- paas/docs/PageDataSecretInfo.md | 4 +- paas/docs/PageDataShortEntityView.md | 4 +- paas/docs/PageDataTbResourceInfo.md | 4 +- paas/docs/PageDataTenant.md | 4 +- paas/docs/PageDataTenantInfo.md | 4 +- paas/docs/PageDataTenantProfile.md | 10 +- paas/docs/PageDataUser.md | 4 +- paas/docs/PageDataUserEmailInfo.md | 4 +- paas/docs/PageDataUserInfo.md | 4 +- paas/docs/PageDataWidgetTypeInfo.md | 4 +- paas/docs/PageDataWidgetsBundle.md | 4 +- paas/docs/PdfReportTemplateConfig.md | 4 +- paas/docs/ProcessingStartStatus.md | 25 + paas/docs/ProductId.md | 2 +- ...PropagationCalculatedFieldConfiguration.md | 4 +- paas/docs/QrCodeSettings.md | 4 +- paas/docs/Queue.md | 4 +- paas/docs/QueueId.md | 2 +- paas/docs/QueueStats.md | 4 +- paas/docs/QueueStatsId.md | 2 +- ...RateLimitsNotificationRuleTriggerConfig.md | 2 +- ...AggregationCalculatedFieldConfiguration.md | 4 +- paas/docs/RelationEntityTypeFilter.md | 2 +- paas/docs/RelationTypeGroup.md | 2 + paas/docs/RelationsQueryFilter.md | 2 +- paas/docs/RelationsSearchParameters.md | 4 +- paas/docs/Report.md | 6 +- paas/docs/ReportComponent.md | 4 +- paas/docs/ReportControllerApi.md | 51 + paas/docs/ReportId.md | 2 +- paas/docs/ReportInfo.md | 6 +- paas/docs/ReportJobConfiguration.md | 52 +- paas/docs/ReportJobResult.md | 40 +- paas/docs/ReportRequest.md | 5 +- paas/docs/ReportTaskResult.md | 6 +- paas/docs/ReportTemplate.md | 4 +- paas/docs/ReportTemplateConfig.md | 4 +- paas/docs/ReportTemplateExportData.md | 6 +- paas/docs/ReportTemplateId.md | 2 +- paas/docs/ReportTemplateInfo.md | 4 +- paas/docs/Resource.md | 8 + paas/docs/RichTextComponent.md | 4 +- paas/docs/Role.md | 4 +- paas/docs/RoleExportData.md | 6 +- paas/docs/RoleId.md | 2 +- paas/docs/RollBackStep.md | 61 + paas/docs/RollBackStepState.md | 45 + paas/docs/Rpc.md | 4 +- paas/docs/RpcId.md | 2 +- paas/docs/RuleChain.md | 4 +- paas/docs/RuleChainConnectionInfo.md | 4 +- paas/docs/RuleChainData.md | 4 +- paas/docs/RuleChainExportData.md | 6 +- paas/docs/RuleChainId.md | 2 +- paas/docs/RuleChainImportResult.md | 4 +- paas/docs/RuleChainMetaData.md | 4 +- paas/docs/RuleChainOutputLabelsUsage.md | 4 +- paas/docs/RuleNode.md | 4 +- paas/docs/RuleNodeId.md | 2 +- paas/docs/RunJobStep.md | 82 + paas/docs/RunJobStepState.md | 66 + paas/docs/SaveDeviceWithCredentialsRequest.md | 4 +- paas/docs/SaveOtaPackageInfoRequest.md | 4 +- paas/docs/ScheduledReportInfo.md | 4 +- paas/docs/SchedulerEvent.md | 4 +- paas/docs/SchedulerEventExportData.md | 6 +- paas/docs/SchedulerEventFilter.md | 2 +- paas/docs/SchedulerEventId.md | 2 +- paas/docs/SchedulerEventInfo.md | 4 +- paas/docs/SchedulerEventWithCustomerInfo.md | 4 +- .../ScriptCalculatedFieldConfiguration.md | 4 +- paas/docs/Secret.md | 4 +- paas/docs/SecretId.md | 2 +- paas/docs/SecretInfo.md | 4 +- paas/docs/SelfRegistrationParams.md | 4 +- paas/docs/ShareGroupRequest.md | 4 +- paas/docs/ShortCustomerInfo.md | 4 +- paas/docs/ShortEntityView.md | 4 +- .../SimpleCalculatedFieldConfiguration.md | 4 +- paas/docs/SingleEntityFilter.md | 2 +- paas/docs/SingleEntityVersionCreateRequest.md | 4 +- paas/docs/SingleEntityVersionLoadRequest.md | 4 +- paas/docs/SkipReason.md | 27 + paas/docs/SkippedApp.md | 37 + paas/docs/SolutionData.md | 6 +- paas/docs/SolutionExportRequest.md | 4 +- paas/docs/SolutionExportResponse.md | 6 +- paas/docs/StateEntityFilter.md | 2 +- paas/docs/StateEntityOwnerFilter.md | 2 +- paas/docs/StepFieldAgentAppEventId.md | 30 + paas/docs/StepFieldBoolean.md | 23 + paas/docs/StepFieldInteger.md | 23 + paas/docs/StepFieldListString.md | 23 + paas/docs/StepFieldString.md | 23 + paas/docs/SubReportComponent.md | 4 +- paas/docs/SubscriptionAddonId.md | 2 +- paas/docs/SubscriptionDetails.md | 4 +- paas/docs/SubscriptionEntry.md | 4 + paas/docs/SubscriptionId.md | 2 +- paas/docs/SubscriptionPlanId.md | 2 +- paas/docs/TaskResult.md | 61 + paas/docs/TbImageDeleteResult.md | 4 +- paas/docs/TbResource.md | 4 +- paas/docs/TbResourceDeleteResult.md | 4 +- paas/docs/TbResourceExportData.md | 6 +- paas/docs/TbResourceId.md | 2 +- paas/docs/TbResourceInfo.md | 4 +- paas/docs/TbSecretDeleteResult.md | 4 +- paas/docs/TelemetryMappingConfiguration.md | 2 +- paas/docs/TelemetryObserveStrategy.md | 8 +- paas/docs/Tenant.md | 4 +- paas/docs/TenantId.md | 2 +- paas/docs/TenantInfo.md | 4 +- paas/docs/TenantProfile.md | 10 +- paas/docs/TenantProfileConfiguration.md | 6 + paas/docs/TenantProfileData.md | 6 + paas/docs/TenantProfileId.md | 2 +- .../ThingsboardCredentialsExpiredResponse.md | 2 +- paas/docs/ThingsboardErrorResponse.md | 2 +- paas/docs/TimeseriesChartComponent.md | 4 +- paas/docs/TimeseriesTableComponent.md | 4 +- paas/docs/User.md | 4 +- paas/docs/UserEmailInfo.md | 4 +- paas/docs/UserExportData.md | 6 +- paas/docs/UserId.md | 2 +- paas/docs/UserInfo.md | 4 +- paas/docs/UserMobileInfo.md | 4 +- paas/docs/VersionCreateRequest.md | 4 +- paas/docs/VersionLoadRequest.md | 4 +- paas/docs/VersionLoadResult.md | 4 +- paas/docs/VersionedEntityInfo.md | 4 +- paas/docs/WebSelfRegistrationParams.md | 4 +- paas/docs/WhiteLabeling.md | 4 +- paas/docs/WhiteLabelingParams.md | 1 + paas/docs/WidgetBundleInfo.md | 4 +- paas/docs/WidgetType.md | 4 +- paas/docs/WidgetTypeDetails.md | 4 +- paas/docs/WidgetTypeExportData.md | 6 +- paas/docs/WidgetTypeId.md | 2 +- paas/docs/WidgetTypeInfo.md | 4 +- paas/docs/WidgetsBundle.md | 4 +- paas/docs/WidgetsBundleExportData.md | 6 +- paas/docs/WidgetsBundleId.md | 2 +- paas/docs/ZoneGroupConfiguration.md | 4 +- paas/spec/openapi.json | 56325 ++++++++++------ .../org/thingsboard/client/ApiClient.java | 4 +- .../org/thingsboard/client/Configuration.java | 2 +- .../client/api/ThingsboardApi.java | 7272 +- .../org/thingsboard/client/model/Agent.java | 531 + .../client/model/AgentAppArgument.java | 412 + .../client/model/AgentAppArgumentFormat.java | 80 + .../client/model/AgentAppArgumentSource.java | 92 + .../model/AgentAppArgumentValueType.java | 80 + .../client/model/AgentAppConfig.java | 264 + ...{ChatType.java => AgentAppConfigType.java} | 14 +- .../client/model/AgentAppEvent.java | 849 + .../client/model/AgentAppEventActionType.java | 90 + .../client/model/AgentAppEventId.java | 155 + .../client/model/AgentAppEventInfo.java | 877 + .../client/model/AgentAppEventRequest.java | 355 + .../model/AgentAppEventStepStatesValue.java | 483 + .../client/model/AgentAppInstallResponse.java | 193 + .../client/model/AgentAppProfile.java | 438 + .../client/model/AgentAppProfileId.java | 155 + .../client/model/AgentAppProfileInfo.java | 466 + .../model/AgentAppProfileRelationInfo.java | 551 + .../client/model/AgentAppStep.java | 413 + .../client/model/AgentAppStepState.java | 184 + .../client/model/AgentAppStepType.java | 98 + .../client/model/AgentAppTemplate.java | 549 + .../AgentAppTemplateStartStepsInner.java | 800 + .../client/model/AgentAppUnit.java | 338 + .../client/model/AgentAppUnitId.java | 155 + .../client/model/AgentAppUnitType.java | 82 + .../client/model/AgentApplication.java | 657 + .../client/model/AgentApplicationId.java | 155 + .../client/model/AgentApplicationInfo.java | 854 + .../client/model/AgentApplicationOrigin.java | 82 + .../client/model/AgentApplicationType.java | 82 + .../client/model/AgentBulkAction.java | 568 + .../model/AgentBulkActionEventStats.java | 205 + .../client/model/AgentBulkActionId.java | 155 + .../client/model/AgentBulkActionStatus.java | 84 + .../client/model/AgentFinalizeStep.java | 210 + .../org/thingsboard/client/model/AgentId.java | 155 + .../thingsboard/client/model/AgentInfo.java | 779 + .../client/model/AgentInstructions.java | 155 + .../client/model/AgentPrepareStep.java | 210 + .../client/model/AgentProcessingStatus.java | 88 + .../client/model/AgentProfile.java | 473 + .../client/model/AgentProfileId.java | 155 + .../client/model/AgentProfileInfo.java | 473 + .../client/model/AgentProvisionType.java | 84 + .../client/model/AgentUpgradeRequest.java | 155 + .../client/model/BackupVolumesRemoveStep.java | 210 + .../client/model/BackupVolumesStep.java | 248 + .../client/model/BackupVolumesStepState.java | 181 + .../client/model/BulkOperationPreview.java | 293 + .../client/model/BulkOperationRequest.java | 208 + .../client/model/ComposeDownStep.java | 248 + .../client/model/ComposeDownStepState.java | 218 + .../client/model/ComposeRestartStep.java | 210 + .../client/model/ComposeStartStep.java | 210 + .../thingsboard/client/model/ComposeStep.java | 248 + .../client/model/ComposeStepState.java | 218 + .../client/model/ComposeTypeChoiceStep.java | 261 + .../DefaultTenantProfileConfiguration.java | 218 +- .../client/model/DockerComposeConfig.java | 246 + .../thingsboard/client/model/EntityGroup.java | 14 + .../client/model/EntityGroupInfo.java | 14 + .../thingsboard/client/model/EntityId.java | 14 + .../thingsboard/client/model/EntityType.java | 14 + ...nagedRelatedEntityIds200ResponseInner.java | 3503 + .../thingsboard/client/model/LimitedApi.java | 8 + .../model/LoginWhiteLabelingParams.java | 38 +- .../model/LwM2MBootstrapServerCredential.java | 16 +- .../model/NotificationTemplateConfig.java | 42 +- .../client/model/PageDataAgent.java | 261 + .../client/model/PageDataAgentAppEvent.java | 261 + .../model/PageDataAgentAppEventInfo.java | 261 + .../client/model/PageDataAgentAppProfile.java | 261 + .../client/model/PageDataAgentAppUnit.java | 261 + .../model/PageDataAgentApplicationInfo.java | 261 + .../client/model/PageDataAgentBulkAction.java | 261 + .../client/model/PageDataAgentInfo.java | 261 + .../client/model/PageDataAgentProfile.java | 261 + .../model/PageDataAgentProfileInfo.java | 261 + .../client/model/ProcessingStartStatus.java | 82 + .../client/model/RelationTypeGroup.java | 4 +- .../org/thingsboard/client/model/Report.java | 78 +- .../thingsboard/client/model/ReportInfo.java | 78 +- .../client/model/ReportJobConfiguration.java | 38 +- .../client/model/ReportRequest.java | 38 +- .../thingsboard/client/model/Resource.java | 8 + .../client/model/RollBackStep.java | 242 + .../client/model/RollBackStepState.java | 181 + .../thingsboard/client/model/RunJobStep.java | 242 + .../client/model/RunJobStepState.java | 472 + .../thingsboard/client/model/SkipReason.java | 84 + .../thingsboard/client/model/SkippedApp.java | 338 + .../model/StepFieldAgentAppEventId.java | 192 + .../client/model/StepFieldBoolean.java | 191 + .../client/model/StepFieldInteger.java | 191 + .../client/model/StepFieldListString.java | 205 + .../client/model/StepFieldString.java | 191 + .../client/model/SubscriptionEntry.java | 4 + .../thingsboard/client/model/TaskResult.java | 12 +- .../model/TelemetryObserveStrategy.java | 8 +- .../client/model/WhiteLabelingParams.java | 38 +- 584 files changed, 77124 insertions(+), 21901 deletions(-) create mode 100644 paas/docs/Agent.md create mode 100644 paas/docs/AgentAppArgument.md create mode 100644 paas/docs/AgentAppArgumentFormat.md create mode 100644 paas/docs/AgentAppArgumentSource.md create mode 100644 paas/docs/AgentAppArgumentValueType.md create mode 100644 paas/docs/AgentAppConfig.md create mode 100644 paas/docs/AgentAppConfigType.md create mode 100644 paas/docs/AgentAppEvent.md create mode 100644 paas/docs/AgentAppEventActionType.md create mode 100644 paas/docs/AgentAppEventId.md create mode 100644 paas/docs/AgentAppEventInfo.md create mode 100644 paas/docs/AgentAppEventRequest.md create mode 100644 paas/docs/AgentAppEventStepStatesValue.md create mode 100644 paas/docs/AgentAppInstallResponse.md create mode 100644 paas/docs/AgentAppProfile.md create mode 100644 paas/docs/AgentAppProfileControllerApi.md create mode 100644 paas/docs/AgentAppProfileId.md create mode 100644 paas/docs/AgentAppProfileInfo.md create mode 100644 paas/docs/AgentAppProfileRelationInfo.md create mode 100644 paas/docs/AgentAppStep.md create mode 100644 paas/docs/AgentAppStepState.md create mode 100644 paas/docs/AgentAppStepType.md create mode 100644 paas/docs/AgentAppTemplate.md create mode 100644 paas/docs/AgentAppTemplateControllerApi.md create mode 100644 paas/docs/AgentAppTemplateStartStepsInner.md create mode 100644 paas/docs/AgentAppUnit.md create mode 100644 paas/docs/AgentAppUnitId.md create mode 100644 paas/docs/AgentAppUnitType.md create mode 100644 paas/docs/AgentApplication.md create mode 100644 paas/docs/AgentApplicationControllerApi.md create mode 100644 paas/docs/AgentApplicationId.md create mode 100644 paas/docs/AgentApplicationInfo.md create mode 100644 paas/docs/AgentApplicationOrigin.md rename paas/docs/{ChatType.md => AgentApplicationType.md} (74%) create mode 100644 paas/docs/AgentBulkAction.md create mode 100644 paas/docs/AgentBulkActionControllerApi.md create mode 100644 paas/docs/AgentBulkActionEventStats.md create mode 100644 paas/docs/AgentBulkActionId.md create mode 100644 paas/docs/AgentBulkActionStatus.md create mode 100644 paas/docs/AgentControllerApi.md create mode 100644 paas/docs/AgentFinalizeStep.md create mode 100644 paas/docs/AgentId.md create mode 100644 paas/docs/AgentInfo.md create mode 100644 paas/docs/AgentInstructions.md create mode 100644 paas/docs/AgentPrepareStep.md create mode 100644 paas/docs/AgentProcessingStatus.md create mode 100644 paas/docs/AgentProfile.md create mode 100644 paas/docs/AgentProfileControllerApi.md create mode 100644 paas/docs/AgentProfileId.md create mode 100644 paas/docs/AgentProfileInfo.md create mode 100644 paas/docs/AgentProvisionType.md create mode 100644 paas/docs/AgentUpgradeRequest.md create mode 100644 paas/docs/BackupVolumesRemoveStep.md create mode 100644 paas/docs/BackupVolumesStep.md create mode 100644 paas/docs/BackupVolumesStepState.md create mode 100644 paas/docs/BulkOperationPreview.md create mode 100644 paas/docs/BulkOperationRequest.md create mode 100644 paas/docs/ComposeDownStep.md create mode 100644 paas/docs/ComposeDownStepState.md create mode 100644 paas/docs/ComposeRestartStep.md create mode 100644 paas/docs/ComposeStartStep.md create mode 100644 paas/docs/ComposeStep.md create mode 100644 paas/docs/ComposeStepState.md create mode 100644 paas/docs/ComposeTypeChoiceStep.md create mode 100644 paas/docs/DockerComposeConfig.md create mode 100644 paas/docs/GetManagedRelatedEntityIds200ResponseInner.md create mode 100644 paas/docs/PageDataAgent.md create mode 100644 paas/docs/PageDataAgentAppEvent.md create mode 100644 paas/docs/PageDataAgentAppEventInfo.md create mode 100644 paas/docs/PageDataAgentAppProfile.md create mode 100644 paas/docs/PageDataAgentAppUnit.md create mode 100644 paas/docs/PageDataAgentApplicationInfo.md create mode 100644 paas/docs/PageDataAgentBulkAction.md create mode 100644 paas/docs/PageDataAgentInfo.md create mode 100644 paas/docs/PageDataAgentProfile.md create mode 100644 paas/docs/PageDataAgentProfileInfo.md create mode 100644 paas/docs/ProcessingStartStatus.md create mode 100644 paas/docs/RollBackStep.md create mode 100644 paas/docs/RollBackStepState.md create mode 100644 paas/docs/RunJobStep.md create mode 100644 paas/docs/RunJobStepState.md create mode 100644 paas/docs/SkipReason.md create mode 100644 paas/docs/SkippedApp.md create mode 100644 paas/docs/StepFieldAgentAppEventId.md create mode 100644 paas/docs/StepFieldBoolean.md create mode 100644 paas/docs/StepFieldInteger.md create mode 100644 paas/docs/StepFieldListString.md create mode 100644 paas/docs/StepFieldString.md create mode 100644 paas/src/main/java/org/thingsboard/client/model/Agent.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppArgument.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppArgumentFormat.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppArgumentSource.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppArgumentValueType.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppConfig.java rename paas/src/main/java/org/thingsboard/client/model/{ChatType.java => AgentAppConfigType.java} (86%) create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppEvent.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppEventActionType.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppEventId.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppEventInfo.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppEventRequest.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppEventStepStatesValue.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppInstallResponse.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppProfile.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppProfileId.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppProfileInfo.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppProfileRelationInfo.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppStep.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppStepState.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppStepType.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppTemplate.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppTemplateStartStepsInner.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppUnit.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppUnitId.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentAppUnitType.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentApplication.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentApplicationId.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentApplicationInfo.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentApplicationOrigin.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentApplicationType.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentBulkAction.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentBulkActionEventStats.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentBulkActionId.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentBulkActionStatus.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentFinalizeStep.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentId.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentInfo.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentInstructions.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentPrepareStep.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentProcessingStatus.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentProfile.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentProfileId.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentProfileInfo.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentProvisionType.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/AgentUpgradeRequest.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/BackupVolumesRemoveStep.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/BackupVolumesStep.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/BackupVolumesStepState.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/BulkOperationPreview.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/BulkOperationRequest.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/ComposeDownStep.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/ComposeDownStepState.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/ComposeRestartStep.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/ComposeStartStep.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/ComposeStep.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/ComposeStepState.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/ComposeTypeChoiceStep.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/DockerComposeConfig.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/GetManagedRelatedEntityIds200ResponseInner.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/PageDataAgent.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppEvent.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppEventInfo.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppProfile.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppUnit.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/PageDataAgentApplicationInfo.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/PageDataAgentBulkAction.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/PageDataAgentInfo.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/PageDataAgentProfile.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/PageDataAgentProfileInfo.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/ProcessingStartStatus.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/RollBackStep.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/RollBackStepState.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/RunJobStep.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/RunJobStepState.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/SkipReason.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/SkippedApp.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/StepFieldAgentAppEventId.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/StepFieldBoolean.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/StepFieldInteger.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/StepFieldListString.java create mode 100644 paas/src/main/java/org/thingsboard/client/model/StepFieldString.java diff --git a/paas/docs/AdminSettings.md b/paas/docs/AdminSettings.md index bd202287..62c051b3 100644 --- a/paas/docs/AdminSettings.md +++ b/paas/docs/AdminSettings.md @@ -19,10 +19,10 @@ A JSON value representing the Mail Settings. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AdminSettingsId.md b/paas/docs/AdminSettingsId.md index 08b1faa0..3857de55 100644 --- a/paas/docs/AdminSettingsId.md +++ b/paas/docs/AdminSettingsId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/Agent.md b/paas/docs/Agent.md new file mode 100644 index 00000000..37147629 --- /dev/null +++ b/paas/docs/Agent.md @@ -0,0 +1,40 @@ + +# Agent + +`org.thingsboard.client.model.Agent` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentId** | JSON object with the Agent Id. Specify this field to update the Agent. Referencing non-existing Agent Id will cause error. Omit this field to create new Agent. | [optional] | +| **createdTime** | **Long** | Timestamp of the agent creation, in milliseconds | [optional] [readonly] | +| **additionalInfo** | **com.fasterxml.jackson.databind.JsonNode** | | [optional] | +| **tenantId** | **TenantId** | JSON object with Tenant Id. Use 'assignAgentToTenant' to change the Tenant Id. | [optional] [readonly] | +| **customerId** | **CustomerId** | JSON object with Customer Id. | [optional] [readonly] | +| **name** | **String** | Unique Agent Name in scope of Tenant | | +| **description** | **String** | Agent description | [optional] | +| **routingKey** | **String** | Agent routing key used for authentication | | +| **secret** | **String** | Agent secret used for authentication | | +| **agentProfileId** | **AgentProfileId** | JSON object with Agent Profile Id. Nullable. | [optional] | +| **version** | **Long** | | [optional] | +| **ownerId** | **EntityId** | JSON object with Customer or Tenant Id | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppArgument.md b/paas/docs/AgentAppArgument.md new file mode 100644 index 00000000..6f8fd1a5 --- /dev/null +++ b/paas/docs/AgentAppArgument.md @@ -0,0 +1,48 @@ + +# AgentAppArgument + +`org.thingsboard.client.model.AgentAppArgument` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **name** | **String** | Argument name, referenced in the compose as ${tb.}. | [optional] | +| **sourceType** | **AgentAppArgumentSource** | Source entity the value is resolved from. | [optional] | +| **sourceEntityId** | **EntityId** | Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. | [optional] | +| **valueType** | **AgentAppArgumentValueType** | Whether the value is read from an attribute or the latest telemetry. | [optional] | +| **scope** | **AttributeScope** | Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. | [optional] | +| **key** | **String** | Attribute or latest telemetry key to read. | [optional] | +| **defaultValue** | **String** | Optional fallback value used when the source has no value for the key. | [optional] | +| **format** | **AgentAppArgumentFormat** | How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppArgumentSource (enum) +`AGENT` | `OWNER` | `RELATED_ENTITY` | `TENANT` | `DEVICE` | `ASSET` | `CUSTOMER` | `EDGE` + +#### AgentAppArgumentValueType (enum) +`ATTRIBUTE` | `LATEST_TELEMETRY` + +#### AttributeScope (enum) +`CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` + +#### AgentAppArgumentFormat (enum) +`STRING` | `JSON` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppArgumentFormat.md b/paas/docs/AgentAppArgumentFormat.md new file mode 100644 index 00000000..4d6f0ce9 --- /dev/null +++ b/paas/docs/AgentAppArgumentFormat.md @@ -0,0 +1,23 @@ + +# AgentAppArgumentFormat + +`org.thingsboard.client.model.AgentAppArgumentFormat` + +## Enum Values + + +* `STRING` (value: `"STRING"`) + +* `JSON` (value: `"JSON"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppArgumentSource.md b/paas/docs/AgentAppArgumentSource.md new file mode 100644 index 00000000..445fd869 --- /dev/null +++ b/paas/docs/AgentAppArgumentSource.md @@ -0,0 +1,35 @@ + +# AgentAppArgumentSource + +`org.thingsboard.client.model.AgentAppArgumentSource` + +## Enum Values + + +* `AGENT` (value: `"AGENT"`) + +* `OWNER` (value: `"OWNER"`) + +* `RELATED_ENTITY` (value: `"RELATED_ENTITY"`) + +* `TENANT` (value: `"TENANT"`) + +* `DEVICE` (value: `"DEVICE"`) + +* `ASSET` (value: `"ASSET"`) + +* `CUSTOMER` (value: `"CUSTOMER"`) + +* `EDGE` (value: `"EDGE"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppArgumentValueType.md b/paas/docs/AgentAppArgumentValueType.md new file mode 100644 index 00000000..521d77d4 --- /dev/null +++ b/paas/docs/AgentAppArgumentValueType.md @@ -0,0 +1,23 @@ + +# AgentAppArgumentValueType + +`org.thingsboard.client.model.AgentAppArgumentValueType` + +## Enum Values + + +* `ATTRIBUTE` (value: `"ATTRIBUTE"`) + +* `LATEST_TELEMETRY` (value: `"LATEST_TELEMETRY"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppConfig.md b/paas/docs/AgentAppConfig.md new file mode 100644 index 00000000..a1710574 --- /dev/null +++ b/paas/docs/AgentAppConfig.md @@ -0,0 +1,58 @@ + +# AgentAppConfig + +`org.thingsboard.client.model.AgentAppConfig` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **arguments** | **List\** | | [optional] | +| **edgeRoutingKey** | **String** | | [optional] | +| **type** | **AgentAppConfigType** | | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppArgument +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| name | String | Argument name, referenced in the compose as ${tb.}. | [optional] | +| sourceType | AgentAppArgumentSource | Source entity the value is resolved from. | [optional] | +| sourceEntityId | EntityId | Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. | [optional] | +| valueType | AgentAppArgumentValueType | Whether the value is read from an attribute or the latest telemetry. | [optional] | +| scope | AttributeScope | Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. | [optional] | +| key | String | Attribute or latest telemetry key to read. | [optional] | +| defaultValue | String | Optional fallback value used when the source has no value for the key. | [optional] | +| format | AgentAppArgumentFormat | How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. | [optional] | + +#### AgentAppConfigType (enum) +`DOCKER_COMPOSE` + +#### AgentAppArgumentSource (enum) +`AGENT` | `OWNER` | `RELATED_ENTITY` | `TENANT` | `DEVICE` | `ASSET` | `CUSTOMER` | `EDGE` + +#### AgentAppArgumentValueType (enum) +`ATTRIBUTE` | `LATEST_TELEMETRY` + +#### AttributeScope (enum) +`CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` + +#### AgentAppArgumentFormat (enum) +`STRING` | `JSON` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppConfigType.md b/paas/docs/AgentAppConfigType.md new file mode 100644 index 00000000..a45dfb28 --- /dev/null +++ b/paas/docs/AgentAppConfigType.md @@ -0,0 +1,21 @@ + +# AgentAppConfigType + +`org.thingsboard.client.model.AgentAppConfigType` + +## Enum Values + + +* `DOCKER_COMPOSE` (value: `"DOCKER_COMPOSE"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppEvent.md b/paas/docs/AgentAppEvent.md new file mode 100644 index 00000000..f1828563 --- /dev/null +++ b/paas/docs/AgentAppEvent.md @@ -0,0 +1,107 @@ + +# AgentAppEvent + +`org.thingsboard.client.model.AgentAppEvent` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentAppEventId** | JSON object with the Agent App Event Id. | [optional] | +| **createdTime** | **Long** | Timestamp of the event creation, in milliseconds | [optional] [readonly] | +| **tenantId** | **TenantId** | | [optional] | +| **applicationId** | **AgentApplicationId** | | [optional] | +| **agentId** | **AgentId** | | [optional] | +| **applicationName** | **String** | | [optional] | +| **actionType** | **AgentAppEventActionType** | | [optional] | +| **startStatus** | **ProcessingStartStatus** | | [optional] | +| **processingStatus** | **AgentProcessingStatus** | | [optional] | +| **currentStepId** | **UUID** | | [optional] | +| **currentActivity** | **String** | | [optional] | +| **errorMessage** | **String** | | [optional] | +| **updatedTime** | **Long** | | [optional] | +| **stepStates** | **Map\** | | [optional] | +| **bulkActionId** | **UUID** | | [optional] | +| **resolvedArguments** | **Map\** | | [optional] | +| **winnerContainerId** | **String** | | [optional] | +| **finalizeDeadlineTs** | **Long** | | [optional] | +| **contextMetadata** | **Map\** | | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppEventActionType (enum) +`INSTALL` | `UPDATE` | `DELETE` | `RESTART` | `ROLLBACK` | `UPGRADE` | `AGENT_UPGRADE` + +#### ProcessingStartStatus (enum) +`DELIVERY_FAIL` | `PENDING` | `DELIVERED` + +#### AgentProcessingStatus (enum) +`PENDING` | `QUEUED` | `PROCESSING` | `FINISHED` | `ERROR` | `START_FAILED` + +#### AgentAppEventStepStatesValue +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | +| backupVolumes | StepFieldListString | | [optional] | +| serviceImageRegexPatterns | StepFieldListString | | [optional] | +| removeVolumes | StepFieldBoolean | | [optional] | +| pullImages | StepFieldBoolean | | [optional] | +| failedEventId | StepFieldAgentAppEventId | | [optional] | +| image | StepFieldString | | [optional] | +| entrypoint | StepFieldListString | | [optional] | +| cmd | StepFieldListString | | [optional] | +| env | StepFieldListString | | [optional] | +| binds | StepFieldListString | | [optional] | +| networks | StepFieldListString | | [optional] | +| retries | StepFieldInteger | | [optional] | +| networkFromServiceImageRegexPattern | StepFieldString | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldAgentAppEventId +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | AgentAppEventId | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | String | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldInteger +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Integer | | [optional] | +| userChoice | Boolean | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppEventActionType.md b/paas/docs/AgentAppEventActionType.md new file mode 100644 index 00000000..4f96f5d9 --- /dev/null +++ b/paas/docs/AgentAppEventActionType.md @@ -0,0 +1,33 @@ + +# AgentAppEventActionType + +`org.thingsboard.client.model.AgentAppEventActionType` + +## Enum Values + + +* `INSTALL` (value: `"INSTALL"`) + +* `UPDATE` (value: `"UPDATE"`) + +* `DELETE` (value: `"DELETE"`) + +* `RESTART` (value: `"RESTART"`) + +* `ROLLBACK` (value: `"ROLLBACK"`) + +* `UPGRADE` (value: `"UPGRADE"`) + +* `AGENT_UPGRADE` (value: `"AGENT_UPGRADE"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppEventId.md b/paas/docs/AgentAppEventId.md new file mode 100644 index 00000000..3139ebf9 --- /dev/null +++ b/paas/docs/AgentAppEventId.md @@ -0,0 +1,30 @@ + +# AgentAppEventId + +`org.thingsboard.client.model.AgentAppEventId` + +**Extends:** **EntityId** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| + + + +## Referenced Types + +> **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppEventInfo.md b/paas/docs/AgentAppEventInfo.md new file mode 100644 index 00000000..8e45c651 --- /dev/null +++ b/paas/docs/AgentAppEventInfo.md @@ -0,0 +1,108 @@ + +# AgentAppEventInfo + +`org.thingsboard.client.model.AgentAppEventInfo` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentAppEventId** | JSON object with the Agent App Event Id. | [optional] | +| **createdTime** | **Long** | Timestamp of the event creation, in milliseconds | [optional] [readonly] | +| **tenantId** | **TenantId** | | [optional] | +| **applicationId** | **AgentApplicationId** | | [optional] | +| **agentId** | **AgentId** | | [optional] | +| **applicationName** | **String** | | [optional] | +| **actionType** | **AgentAppEventActionType** | | [optional] | +| **startStatus** | **ProcessingStartStatus** | | [optional] | +| **processingStatus** | **AgentProcessingStatus** | | [optional] | +| **currentStepId** | **UUID** | | [optional] | +| **currentActivity** | **String** | | [optional] | +| **errorMessage** | **String** | | [optional] | +| **updatedTime** | **Long** | | [optional] | +| **stepStates** | **Map\** | | [optional] | +| **bulkActionId** | **UUID** | | [optional] | +| **resolvedArguments** | **Map\** | | [optional] | +| **winnerContainerId** | **String** | | [optional] | +| **finalizeDeadlineTs** | **Long** | | [optional] | +| **contextMetadata** | **Map\** | | [optional] | +| **agentName** | **String** | Name of the Agent that owns the Application. | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppEventActionType (enum) +`INSTALL` | `UPDATE` | `DELETE` | `RESTART` | `ROLLBACK` | `UPGRADE` | `AGENT_UPGRADE` + +#### ProcessingStartStatus (enum) +`DELIVERY_FAIL` | `PENDING` | `DELIVERED` + +#### AgentProcessingStatus (enum) +`PENDING` | `QUEUED` | `PROCESSING` | `FINISHED` | `ERROR` | `START_FAILED` + +#### AgentAppEventStepStatesValue +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | +| backupVolumes | StepFieldListString | | [optional] | +| serviceImageRegexPatterns | StepFieldListString | | [optional] | +| removeVolumes | StepFieldBoolean | | [optional] | +| pullImages | StepFieldBoolean | | [optional] | +| failedEventId | StepFieldAgentAppEventId | | [optional] | +| image | StepFieldString | | [optional] | +| entrypoint | StepFieldListString | | [optional] | +| cmd | StepFieldListString | | [optional] | +| env | StepFieldListString | | [optional] | +| binds | StepFieldListString | | [optional] | +| networks | StepFieldListString | | [optional] | +| retries | StepFieldInteger | | [optional] | +| networkFromServiceImageRegexPattern | StepFieldString | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldAgentAppEventId +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | AgentAppEventId | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | String | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldInteger +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Integer | | [optional] | +| userChoice | Boolean | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppEventRequest.md b/paas/docs/AgentAppEventRequest.md new file mode 100644 index 00000000..6fb75dd7 --- /dev/null +++ b/paas/docs/AgentAppEventRequest.md @@ -0,0 +1,155 @@ + +# AgentAppEventRequest + +`org.thingsboard.client.model.AgentAppEventRequest` + +Request payload for creating an agent application event (install, update, upgrade, restart, delete, etc.). + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **actionType** | **AgentAppEventActionType** | Action to perform against the agent application. | [optional] | +| **application** | **AgentApplication** | Agent application payload supplied by the caller. Used to carry name/config changes for UPDATE and the target state for INSTALL/UPGRADE. | [optional] | +| **stepInputs** | **Map\** | Per-step input overrides keyed by step id (e.g. pullImages flag, backup volume selection). | [optional] | +| **relatedEntityId** | **EntityId** | INSTALL-action optional related entity (Edge or Gateway Device) to link to the application in the same operation. When set, the application is created and the relation is assigned atomically. Ignored for non-INSTALL actions. | [optional] | +| **bulkActionId** | **UUID** | Optional bulk-action correlation id. When the same value is used across multiple application events, duplicates are deduplicated server-side. | [optional] | +| **skipProfileRefetch** | **Boolean** | UPDATE-action flag for profile-managed apps. When true, the compose is not re-resolved from the (possibly upgraded) profile — only the credentials carried by `application.config` are applied. Ignored for non-UPDATE actions and for non-profile-managed apps. | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppEventActionType (enum) +`INSTALL` | `UPDATE` | `DELETE` | `RESTART` | `ROLLBACK` | `UPGRADE` | `AGENT_UPGRADE` + +#### AgentApplication +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentApplicationId | JSON object with the Agent Application Id. | [optional] | +| createdTime | Long | Timestamp of the agent application creation, in milliseconds | [optional] [readonly] | +| tenantId | TenantId | JSON object with Tenant Id. | [optional] [readonly] | +| agentId | AgentId | Agent this application belongs to | | +| name | String | Application name (not unique across tenant) | [optional] | +| templateVersion | String | Template version this application is based on | | +| desiredTemplateVersion | String | | [optional] | +| appType | AgentApplicationType | Application type | | +| config | DockerComposeConfig | | [optional] | +| version | Long | | [optional] | +| projectName | String | | [optional] | +| pendingDeletion | Boolean | | [optional] | +| origin | AgentApplicationOrigin | Origin of the application (INSTALLED or DISCOVERED) | [optional] | +| applicationProfileId | AgentAppProfileId | Application Profile Id. When set, config is read-only and inherited from the profile. | [optional] | +| profileConfigVersion | Long | | [optional] | + +#### AgentAppEventStepStatesValue +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | +| backupVolumes | StepFieldListString | | [optional] | +| serviceImageRegexPatterns | StepFieldListString | | [optional] | +| removeVolumes | StepFieldBoolean | | [optional] | +| pullImages | StepFieldBoolean | | [optional] | +| failedEventId | StepFieldAgentAppEventId | | [optional] | +| image | StepFieldString | | [optional] | +| entrypoint | StepFieldListString | | [optional] | +| cmd | StepFieldListString | | [optional] | +| env | StepFieldListString | | [optional] | +| binds | StepFieldListString | | [optional] | +| networks | StepFieldListString | | [optional] | +| retries | StepFieldInteger | | [optional] | +| networkFromServiceImageRegexPattern | StepFieldString | | [optional] | + +#### AgentApplicationType (enum) +`GENERIC` | `EDGE` | `GATEWAY` + +#### DockerComposeConfig *(extends AgentAppConfig)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| compose | com.fasterxml.jackson.databind.JsonNode | | [optional] | +| composeType | String | | [optional] | + +#### AgentApplicationOrigin (enum) +`INSTALLED` | `DISCOVERED` | `AUTO_PROVISIONED` + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldAgentAppEventId +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | AgentAppEventId | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | String | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldInteger +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Integer | | [optional] | +| userChoice | Boolean | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### AgentAppConfig +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| arguments | List | | [optional] | +| edgeRoutingKey | String | | [optional] | +| type | AgentAppConfigType | | [optional] | + +#### AgentAppArgument +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| name | String | Argument name, referenced in the compose as ${tb.}. | [optional] | +| sourceType | AgentAppArgumentSource | Source entity the value is resolved from. | [optional] | +| sourceEntityId | EntityId | Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. | [optional] | +| valueType | AgentAppArgumentValueType | Whether the value is read from an attribute or the latest telemetry. | [optional] | +| scope | AttributeScope | Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. | [optional] | +| key | String | Attribute or latest telemetry key to read. | [optional] | +| defaultValue | String | Optional fallback value used when the source has no value for the key. | [optional] | +| format | AgentAppArgumentFormat | How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. | [optional] | + +#### AgentAppConfigType (enum) +`DOCKER_COMPOSE` + +#### AgentAppArgumentSource (enum) +`AGENT` | `OWNER` | `RELATED_ENTITY` | `TENANT` | `DEVICE` | `ASSET` | `CUSTOMER` | `EDGE` + +#### AgentAppArgumentValueType (enum) +`ATTRIBUTE` | `LATEST_TELEMETRY` + +#### AttributeScope (enum) +`CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` + +#### AgentAppArgumentFormat (enum) +`STRING` | `JSON` + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppEventStepStatesValue.md b/paas/docs/AgentAppEventStepStatesValue.md new file mode 100644 index 00000000..dfd5a9a0 --- /dev/null +++ b/paas/docs/AgentAppEventStepStatesValue.md @@ -0,0 +1,75 @@ + +# AgentAppEventStepStatesValue + +`org.thingsboard.client.model.AgentAppEventStepStatesValue` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **type** | **AgentAppStepType** | | [optional] | +| **backupVolumes** | **StepFieldListString** | | [optional] | +| **serviceImageRegexPatterns** | **StepFieldListString** | | [optional] | +| **removeVolumes** | **StepFieldBoolean** | | [optional] | +| **pullImages** | **StepFieldBoolean** | | [optional] | +| **failedEventId** | **StepFieldAgentAppEventId** | | [optional] | +| **image** | **StepFieldString** | | [optional] | +| **entrypoint** | **StepFieldListString** | | [optional] | +| **cmd** | **StepFieldListString** | | [optional] | +| **env** | **StepFieldListString** | | [optional] | +| **binds** | **StepFieldListString** | | [optional] | +| **networks** | **StepFieldListString** | | [optional] | +| **retries** | **StepFieldInteger** | | [optional] | +| **networkFromServiceImageRegexPattern** | **StepFieldString** | | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldAgentAppEventId +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | AgentAppEventId | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | String | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldInteger +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Integer | | [optional] | +| userChoice | Boolean | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppInstallResponse.md b/paas/docs/AgentAppInstallResponse.md new file mode 100644 index 00000000..7eda736a --- /dev/null +++ b/paas/docs/AgentAppInstallResponse.md @@ -0,0 +1,180 @@ + +# AgentAppInstallResponse + +`org.thingsboard.client.model.AgentAppInstallResponse` + +Response payload for the install-agent-application endpoint. Carries both the created application and the INSTALL event so the caller can open a progress dialog without a second round-trip. + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **application** | **AgentApplication** | The newly created agent application. | [optional] | +| **event** | **AgentAppEvent** | The INSTALL event created alongside the application. | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentApplication +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentApplicationId | JSON object with the Agent Application Id. | [optional] | +| createdTime | Long | Timestamp of the agent application creation, in milliseconds | [optional] [readonly] | +| tenantId | TenantId | JSON object with Tenant Id. | [optional] [readonly] | +| agentId | AgentId | Agent this application belongs to | | +| name | String | Application name (not unique across tenant) | [optional] | +| templateVersion | String | Template version this application is based on | | +| desiredTemplateVersion | String | | [optional] | +| appType | AgentApplicationType | Application type | | +| config | DockerComposeConfig | | [optional] | +| version | Long | | [optional] | +| projectName | String | | [optional] | +| pendingDeletion | Boolean | | [optional] | +| origin | AgentApplicationOrigin | Origin of the application (INSTALLED or DISCOVERED) | [optional] | +| applicationProfileId | AgentAppProfileId | Application Profile Id. When set, config is read-only and inherited from the profile. | [optional] | +| profileConfigVersion | Long | | [optional] | + +#### AgentAppEvent +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentAppEventId | JSON object with the Agent App Event Id. | [optional] | +| createdTime | Long | Timestamp of the event creation, in milliseconds | [optional] [readonly] | +| tenantId | TenantId | | [optional] | +| applicationId | AgentApplicationId | | [optional] | +| agentId | AgentId | | [optional] | +| applicationName | String | | [optional] | +| actionType | AgentAppEventActionType | | [optional] | +| startStatus | ProcessingStartStatus | | [optional] | +| processingStatus | AgentProcessingStatus | | [optional] | +| currentStepId | UUID | | [optional] | +| currentActivity | String | | [optional] | +| errorMessage | String | | [optional] | +| updatedTime | Long | | [optional] | +| stepStates | Map | | [optional] | +| bulkActionId | UUID | | [optional] | +| resolvedArguments | Map | | [optional] | +| winnerContainerId | String | | [optional] | +| finalizeDeadlineTs | Long | | [optional] | +| contextMetadata | Map | | [optional] | + +#### AgentApplicationType (enum) +`GENERIC` | `EDGE` | `GATEWAY` + +#### DockerComposeConfig *(extends AgentAppConfig)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| compose | com.fasterxml.jackson.databind.JsonNode | | [optional] | +| composeType | String | | [optional] | + +#### AgentApplicationOrigin (enum) +`INSTALLED` | `DISCOVERED` | `AUTO_PROVISIONED` + +#### AgentAppEventActionType (enum) +`INSTALL` | `UPDATE` | `DELETE` | `RESTART` | `ROLLBACK` | `UPGRADE` | `AGENT_UPGRADE` + +#### ProcessingStartStatus (enum) +`DELIVERY_FAIL` | `PENDING` | `DELIVERED` + +#### AgentProcessingStatus (enum) +`PENDING` | `QUEUED` | `PROCESSING` | `FINISHED` | `ERROR` | `START_FAILED` + +#### AgentAppEventStepStatesValue +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | +| backupVolumes | StepFieldListString | | [optional] | +| serviceImageRegexPatterns | StepFieldListString | | [optional] | +| removeVolumes | StepFieldBoolean | | [optional] | +| pullImages | StepFieldBoolean | | [optional] | +| failedEventId | StepFieldAgentAppEventId | | [optional] | +| image | StepFieldString | | [optional] | +| entrypoint | StepFieldListString | | [optional] | +| cmd | StepFieldListString | | [optional] | +| env | StepFieldListString | | [optional] | +| binds | StepFieldListString | | [optional] | +| networks | StepFieldListString | | [optional] | +| retries | StepFieldInteger | | [optional] | +| networkFromServiceImageRegexPattern | StepFieldString | | [optional] | + +#### AgentAppConfig +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| arguments | List | | [optional] | +| edgeRoutingKey | String | | [optional] | +| type | AgentAppConfigType | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldAgentAppEventId +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | AgentAppEventId | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | String | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldInteger +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Integer | | [optional] | +| userChoice | Boolean | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### AgentAppArgument +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| name | String | Argument name, referenced in the compose as ${tb.}. | [optional] | +| sourceType | AgentAppArgumentSource | Source entity the value is resolved from. | [optional] | +| sourceEntityId | EntityId | Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. | [optional] | +| valueType | AgentAppArgumentValueType | Whether the value is read from an attribute or the latest telemetry. | [optional] | +| scope | AttributeScope | Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. | [optional] | +| key | String | Attribute or latest telemetry key to read. | [optional] | +| defaultValue | String | Optional fallback value used when the source has no value for the key. | [optional] | +| format | AgentAppArgumentFormat | How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. | [optional] | + +#### AgentAppConfigType (enum) +`DOCKER_COMPOSE` + +#### AgentAppArgumentSource (enum) +`AGENT` | `OWNER` | `RELATED_ENTITY` | `TENANT` | `DEVICE` | `ASSET` | `CUSTOMER` | `EDGE` + +#### AgentAppArgumentValueType (enum) +`ATTRIBUTE` | `LATEST_TELEMETRY` + +#### AttributeScope (enum) +`CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` + +#### AgentAppArgumentFormat (enum) +`STRING` | `JSON` + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppProfile.md b/paas/docs/AgentAppProfile.md new file mode 100644 index 00000000..53f6fd2f --- /dev/null +++ b/paas/docs/AgentAppProfile.md @@ -0,0 +1,80 @@ + +# AgentAppProfile + +`org.thingsboard.client.model.AgentAppProfile` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentAppProfileId** | JSON object with the Agent Application Profile Id. | [optional] | +| **createdTime** | **Long** | Timestamp of the profile creation, in milliseconds | [optional] [readonly] | +| **tenantId** | **TenantId** | JSON object with Tenant Id. | [optional] [readonly] | +| **name** | **String** | Unique profile name within tenant | | +| **description** | **String** | Profile description | [optional] | +| **appType** | **AgentApplicationType** | Application type: EDGE, GATEWAY, or GENERIC | | +| **templateVersion** | **String** | Template version this profile is based on | | +| **config** | **DockerComposeConfig** | | [optional] | +| **version** | **Long** | | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentApplicationType (enum) +`GENERIC` | `EDGE` | `GATEWAY` + +#### DockerComposeConfig *(extends AgentAppConfig)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| compose | com.fasterxml.jackson.databind.JsonNode | | [optional] | +| composeType | String | | [optional] | + +#### AgentAppConfig +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| arguments | List | | [optional] | +| edgeRoutingKey | String | | [optional] | +| type | AgentAppConfigType | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### AgentAppArgument +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| name | String | Argument name, referenced in the compose as ${tb.}. | [optional] | +| sourceType | AgentAppArgumentSource | Source entity the value is resolved from. | [optional] | +| sourceEntityId | EntityId | Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. | [optional] | +| valueType | AgentAppArgumentValueType | Whether the value is read from an attribute or the latest telemetry. | [optional] | +| scope | AttributeScope | Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. | [optional] | +| key | String | Attribute or latest telemetry key to read. | [optional] | +| defaultValue | String | Optional fallback value used when the source has no value for the key. | [optional] | +| format | AgentAppArgumentFormat | How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. | [optional] | + +#### AgentAppConfigType (enum) +`DOCKER_COMPOSE` + +#### AgentAppArgumentSource (enum) +`AGENT` | `OWNER` | `RELATED_ENTITY` | `TENANT` | `DEVICE` | `ASSET` | `CUSTOMER` | `EDGE` + +#### AgentAppArgumentValueType (enum) +`ATTRIBUTE` | `LATEST_TELEMETRY` + +#### AttributeScope (enum) +`CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` + +#### AgentAppArgumentFormat (enum) +`STRING` | `JSON` + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppProfileControllerApi.md b/paas/docs/AgentAppProfileControllerApi.md new file mode 100644 index 00000000..47668764 --- /dev/null +++ b/paas/docs/AgentAppProfileControllerApi.md @@ -0,0 +1,242 @@ +# AgentAppProfileControllerApi + +`ThingsboardClient` methods: + +``` +void deleteAgentAppProfile(@Nonnull String profileId) // Delete Agent Application Profile (deleteAgentAppProfile) +AgentAppProfile getAgentAppProfileById(@Nonnull String profileId) // Get Agent Application Profile (getAgentAppProfileById) +AgentAppProfileInfo getAgentAppProfileInfoById(@Nonnull String profileId) // Get Agent Application Profile Info (getAgentAppProfileInfoById) +List getAgentAppProfilesByAppType(@Nonnull AgentApplicationType appType) // Get Agent Application Profiles by app type (getAgentAppProfilesByAppType) +List getAgentAppProfilesByIds(@Nonnull List agentAppProfileIds) // Get Agent Application Profiles By Ids (getAgentAppProfilesByIds) +PageDataAgentAppProfile getTenantAgentAppProfiles(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) // Get Tenant Agent Application Profiles (getTenantAgentAppProfiles) +AgentAppProfile materializeAgentAppProfile(@Nonnull AgentApplicationType appType, @Nonnull String templateVersion, @Nullable String composeType) // Create Agent Application Profile from template (materializeAgentAppProfile) +AgentAppProfile mergeAgentAppProfileForPreview(@Nonnull String templateVersion, @Nonnull AgentAppProfile agentAppProfile, @Nullable String composeType, @Nullable AgentAppEventActionType actionType, @Nullable Boolean setHostValues) // Merge template into application profile for preview (mergeAgentAppProfileForPreview) +AgentAppProfile saveAgentAppProfile(@Nonnull AgentAppProfile agentAppProfile) // Create or Update Agent Application Profile (saveAgentAppProfile) +``` + + +## deleteAgentAppProfile + +``` +void deleteAgentAppProfile(@Nonnull String profileId) +``` + +**DELETE** `/api/agent/app/profile/{profileId}` + +Delete Agent Application Profile (deleteAgentAppProfile) + +Deletes the agent application profile. Cannot delete if referenced by applications. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **profileId** | **String** | Profile Id | | + +### Return type + +null (empty response body) + + +## getAgentAppProfileById + +``` +AgentAppProfile getAgentAppProfileById(@Nonnull String profileId) +``` + +**GET** `/api/agent/app/profile/{profileId}` + +Get Agent Application Profile (getAgentAppProfileById) + +Fetch the Agent Application Profile by Id. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **profileId** | **String** | Profile Id | | + +### Return type + +**AgentAppProfile** + + +## getAgentAppProfileInfoById + +``` +AgentAppProfileInfo getAgentAppProfileInfoById(@Nonnull String profileId) +``` + +**GET** `/api/agent/app/profile/info/{profileId}` + +Get Agent Application Profile Info (getAgentAppProfileInfoById) + +Fetch the Agent Application Profile Info by Id. Readable by any tenant admin without AGENT_APP_PROFILE permission, so agent/application screens can resolve the linked profile. Returns the full profile, config and arguments included - an application profile carries deployment configuration rather than credentials, so it is not gated like other profiles. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **profileId** | **String** | Profile Id | | + +### Return type + +**AgentAppProfileInfo** + + +## getAgentAppProfilesByAppType + +``` +List getAgentAppProfilesByAppType(@Nonnull AgentApplicationType appType) +``` + +**GET** `/api/agent/app/profiles/{appType}` + +Get Agent Application Profiles by app type (getAgentAppProfilesByAppType) + +Returns a list of agent application profiles filtered by application type. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **appType** | **AgentApplicationType** | Application type, e.g. 'EDGE', 'GATEWAY', 'GENERIC' | [enum: GENERIC, EDGE, GATEWAY] | + +### Return type + +**List** + + +## getAgentAppProfilesByIds + +``` +List getAgentAppProfilesByIds(@Nonnull List agentAppProfileIds) +``` + +**GET** `/api/agent/app/profiles` + +Get Agent Application Profiles By Ids (getAgentAppProfilesByIds) + +Requested agent application profiles must be owned by tenant which is performing the request. Security check is performed to verify that the user has 'READ' permission for the entity (entities). + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentAppProfileIds** | **List** | A list of agent application profile ids, separated by comma ',' | | + +### Return type + +**List** + + +## getTenantAgentAppProfiles + +``` +PageDataAgentAppProfile getTenantAgentAppProfiles(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/tenant/agent/app/profiles` + +Get Tenant Agent Application Profiles (getTenantAgentAppProfiles) + +Returns a page of agent application profiles owned by tenant.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | Optional search text | [optional] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] [enum: createdTime, name] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] [enum: ASC, DESC] | + +### Return type + +**PageDataAgentAppProfile** + + +## materializeAgentAppProfile + +``` +AgentAppProfile materializeAgentAppProfile(@Nonnull AgentApplicationType appType, @Nonnull String templateVersion, @Nullable String composeType) +``` + +**POST** `/api/agent/app/profile/materialize/{appType}/{templateVersion}` + +Create Agent Application Profile from template (materializeAgentAppProfile) + +Creates an agent application profile from the default configuration of the template with the given app type and version. Used to materialize a predefined (virtual) profile shown in the UI into a real profile on first use. If a profile with the given app type and template version already exists, the existing profile is returned (the oldest one by created time) instead of creating a new one. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **appType** | **AgentApplicationType** | Application type, e.g. 'EDGE', 'GATEWAY', 'GENERIC' | [enum: GENERIC, EDGE, GATEWAY] | +| **templateVersion** | **String** | The template version to materialize (e.g. '4.3.1.2EDGEPE') | | +| **composeType** | **String** | The compose type to select from the template (e.g. 'in_memory', 'kafka'). Defaults to the template's first compose type. | [optional] | + +### Return type + +**AgentAppProfile** + + +## mergeAgentAppProfileForPreview + +``` +AgentAppProfile mergeAgentAppProfileForPreview(@Nonnull String templateVersion, @Nonnull AgentAppProfile agentAppProfile, @Nullable String composeType, @Nullable AgentAppEventActionType actionType, @Nullable Boolean setHostValues) +``` + +**POST** `/api/agent/app/profiles/merge/{templateVersion}/preview` + +Merge template into application profile for preview (mergeAgentAppProfileForPreview) + +Merges the specified template into an agent application profile for preview purposes. The compose type determines which compose configuration variant from the template is used. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **templateVersion** | **String** | The template version to merge (e.g. '4.3.1.2EDGEPE') | | +| **agentAppProfile** | **AgentAppProfile** | Agent application profile to merge template with | | +| **composeType** | **String** | The compose type to select from the template (e.g. 'monolith', 'microservices') | [optional] | +| **actionType** | **AgentAppEventActionType** | The event action this merge previews (e.g. UPGRADE). Drives action-specific merge rules. | [optional] [enum: INSTALL, UPDATE, DELETE, RESTART, ROLLBACK, UPGRADE, AGENT_UPGRADE] | +| **setHostValues** | **Boolean** | Whether to auto-fill host values (e.g. CLOUD_RPC_HOST) from the platform base URL. Should be true only for the install preview; keep false when previewing the saved compose of an existing profile to preserve user-configured host values. | [optional] [default to false] | + +### Return type + +**AgentAppProfile** + + +## saveAgentAppProfile + +``` +AgentAppProfile saveAgentAppProfile(@Nonnull AgentAppProfile agentAppProfile) +``` + +**POST** `/api/agent/app/profile` + +Create or Update Agent Application Profile (saveAgentAppProfile) + +Creates or updates an agent application profile. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentAppProfile** | **AgentAppProfile** | | | + +### Return type + +**AgentAppProfile** + diff --git a/paas/docs/AgentAppProfileId.md b/paas/docs/AgentAppProfileId.md new file mode 100644 index 00000000..f1356c30 --- /dev/null +++ b/paas/docs/AgentAppProfileId.md @@ -0,0 +1,30 @@ + +# AgentAppProfileId + +`org.thingsboard.client.model.AgentAppProfileId` + +**Extends:** **EntityId** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| + + + +## Referenced Types + +> **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppProfileInfo.md b/paas/docs/AgentAppProfileInfo.md new file mode 100644 index 00000000..bfa7c727 --- /dev/null +++ b/paas/docs/AgentAppProfileInfo.md @@ -0,0 +1,81 @@ + +# AgentAppProfileInfo + +`org.thingsboard.client.model.AgentAppProfileInfo` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentAppProfileId** | JSON object with the Agent Application Profile Id. | [optional] | +| **createdTime** | **Long** | Timestamp of the profile creation, in milliseconds | [optional] [readonly] | +| **tenantId** | **TenantId** | JSON object with Tenant Id. | [optional] [readonly] | +| **name** | **String** | Unique profile name within tenant | | +| **description** | **String** | Profile description | [optional] | +| **appType** | **AgentApplicationType** | Application type: EDGE, GATEWAY, or GENERIC | | +| **templateVersion** | **String** | Template version this profile is based on | | +| **config** | **DockerComposeConfig** | | [optional] | +| **version** | **Long** | | [optional] | +| **templateCurrentVersion** | **String** | Current version of the template this profile points to. | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentApplicationType (enum) +`GENERIC` | `EDGE` | `GATEWAY` + +#### DockerComposeConfig *(extends AgentAppConfig)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| compose | com.fasterxml.jackson.databind.JsonNode | | [optional] | +| composeType | String | | [optional] | + +#### AgentAppConfig +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| arguments | List | | [optional] | +| edgeRoutingKey | String | | [optional] | +| type | AgentAppConfigType | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### AgentAppArgument +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| name | String | Argument name, referenced in the compose as ${tb.}. | [optional] | +| sourceType | AgentAppArgumentSource | Source entity the value is resolved from. | [optional] | +| sourceEntityId | EntityId | Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. | [optional] | +| valueType | AgentAppArgumentValueType | Whether the value is read from an attribute or the latest telemetry. | [optional] | +| scope | AttributeScope | Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. | [optional] | +| key | String | Attribute or latest telemetry key to read. | [optional] | +| defaultValue | String | Optional fallback value used when the source has no value for the key. | [optional] | +| format | AgentAppArgumentFormat | How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. | [optional] | + +#### AgentAppConfigType (enum) +`DOCKER_COMPOSE` + +#### AgentAppArgumentSource (enum) +`AGENT` | `OWNER` | `RELATED_ENTITY` | `TENANT` | `DEVICE` | `ASSET` | `CUSTOMER` | `EDGE` + +#### AgentAppArgumentValueType (enum) +`ATTRIBUTE` | `LATEST_TELEMETRY` + +#### AttributeScope (enum) +`CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` + +#### AgentAppArgumentFormat (enum) +`STRING` | `JSON` + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppProfileRelationInfo.md b/paas/docs/AgentAppProfileRelationInfo.md new file mode 100644 index 00000000..fd2bed7b --- /dev/null +++ b/paas/docs/AgentAppProfileRelationInfo.md @@ -0,0 +1,84 @@ + +# AgentAppProfileRelationInfo + +`org.thingsboard.client.model.AgentAppProfileRelationInfo` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentAppProfileId** | JSON object with the Agent Application Profile Id. | [optional] | +| **createdTime** | **Long** | Timestamp of the profile creation, in milliseconds | [optional] [readonly] | +| **tenantId** | **TenantId** | JSON object with Tenant Id. | [optional] [readonly] | +| **name** | **String** | Unique profile name within tenant | | +| **description** | **String** | Profile description | [optional] | +| **appType** | **AgentApplicationType** | Application type: EDGE, GATEWAY, or GENERIC | | +| **templateVersion** | **String** | Template version this profile is based on | | +| **config** | **DockerComposeConfig** | | [optional] | +| **version** | **Long** | | [optional] | +| **templateCurrentVersion** | **String** | Current version of the template this profile points to. | [optional] [readonly] | +| **agentProfileId** | **AgentProfileId** | JSON object with the Agent Profile Id this app profile is assigned to. | [optional] [readonly] | +| **assignedApplicationsCount** | **Long** | Number of AgentApplications using this app profile within the agent profile. | [optional] [readonly] | +| **additionalInfo** | **com.fasterxml.jackson.databind.JsonNode** | Additional info of the assignment relation between the agent profile and this app profile. | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentApplicationType (enum) +`GENERIC` | `EDGE` | `GATEWAY` + +#### DockerComposeConfig *(extends AgentAppConfig)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| compose | com.fasterxml.jackson.databind.JsonNode | | [optional] | +| composeType | String | | [optional] | + +#### AgentAppConfig +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| arguments | List | | [optional] | +| edgeRoutingKey | String | | [optional] | +| type | AgentAppConfigType | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### AgentAppArgument +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| name | String | Argument name, referenced in the compose as ${tb.}. | [optional] | +| sourceType | AgentAppArgumentSource | Source entity the value is resolved from. | [optional] | +| sourceEntityId | EntityId | Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. | [optional] | +| valueType | AgentAppArgumentValueType | Whether the value is read from an attribute or the latest telemetry. | [optional] | +| scope | AttributeScope | Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. | [optional] | +| key | String | Attribute or latest telemetry key to read. | [optional] | +| defaultValue | String | Optional fallback value used when the source has no value for the key. | [optional] | +| format | AgentAppArgumentFormat | How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. | [optional] | + +#### AgentAppConfigType (enum) +`DOCKER_COMPOSE` + +#### AgentAppArgumentSource (enum) +`AGENT` | `OWNER` | `RELATED_ENTITY` | `TENANT` | `DEVICE` | `ASSET` | `CUSTOMER` | `EDGE` + +#### AgentAppArgumentValueType (enum) +`ATTRIBUTE` | `LATEST_TELEMETRY` + +#### AttributeScope (enum) +`CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` + +#### AgentAppArgumentFormat (enum) +`STRING` | `JSON` + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppStep.md b/paas/docs/AgentAppStep.md new file mode 100644 index 00000000..c9800a28 --- /dev/null +++ b/paas/docs/AgentAppStep.md @@ -0,0 +1,33 @@ + +# AgentAppStep + +`org.thingsboard.client.model.AgentAppStep` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **UUID** | | [optional] | +| **nextId** | **UUID** | | [optional] | +| **title** | **String** | | [optional] | +| **templateOnly** | **Boolean** | | [optional] | +| **condition** | **String** | | [optional] | +| **stateful** | **Boolean** | | [optional] | +| **type** | **AgentAppStepType** | | [optional] | + + + +## Referenced Types + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppStepState.md b/paas/docs/AgentAppStepState.md new file mode 100644 index 00000000..bb077145 --- /dev/null +++ b/paas/docs/AgentAppStepState.md @@ -0,0 +1,27 @@ + +# AgentAppStepState + +`org.thingsboard.client.model.AgentAppStepState` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **type** | **AgentAppStepType** | | [optional] | + + + +## Referenced Types + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppStepType.md b/paas/docs/AgentAppStepType.md new file mode 100644 index 00000000..378b7d14 --- /dev/null +++ b/paas/docs/AgentAppStepType.md @@ -0,0 +1,41 @@ + +# AgentAppStepType + +`org.thingsboard.client.model.AgentAppStepType` + +## Enum Values + + +* `COMPOSE_TEMPLATE` (value: `"COMPOSE_TEMPLATE"`) + +* `COMPOSE` (value: `"COMPOSE"`) + +* `COMPOSE_START` (value: `"COMPOSE_START"`) + +* `COMPOSE_DOWN` (value: `"COMPOSE_DOWN"`) + +* `ROLLBACK` (value: `"ROLLBACK"`) + +* `BACKUP_VOLUME` (value: `"BACKUP_VOLUME"`) + +* `BACKUP_VOLUME_REMOVE` (value: `"BACKUP_VOLUME_REMOVE"`) + +* `COMPOSE_RESTART` (value: `"COMPOSE_RESTART"`) + +* `RUN_JOB` (value: `"RUN_JOB"`) + +* `AGENT_PREPARE` (value: `"AGENT_PREPARE"`) + +* `AGENT_FINALIZE` (value: `"AGENT_FINALIZE"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppTemplate.md b/paas/docs/AgentAppTemplate.md new file mode 100644 index 00000000..d7074d06 --- /dev/null +++ b/paas/docs/AgentAppTemplate.md @@ -0,0 +1,102 @@ + +# AgentAppTemplate + +`org.thingsboard.client.model.AgentAppTemplate` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **tenantId** | **TenantId** | JSON object with Tenant Id. | [optional] [readonly] | +| **appType** | **AgentApplicationType** | Application type | | +| **configType** | **AgentAppConfigType** | Config type (e.g. 'DOCKER_COMPOSE'); the compose body lives in the template's compose-template step, not here | [optional] | +| **currentVersion** | **String** | Current template version | | +| **nextVersion** | **String** | Next template version | [optional] | +| **startSteps** | **List\** | Start steps | [optional] | +| **upgradeSteps** | **List\** | Upgrade steps | [optional] | +| **deleteSteps** | **List\** | Delete steps | [optional] | +| **rollbackSteps** | **List\** | Rollback steps | [optional] | +| **restartSteps** | **List\** | Restart steps | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentApplicationType (enum) +`GENERIC` | `EDGE` | `GATEWAY` + +#### AgentAppConfigType (enum) +`DOCKER_COMPOSE` + +#### AgentAppTemplateStartStepsInner +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | UUID | | [optional] | +| nextId | UUID | | [optional] | +| title | String | | [optional] | +| templateOnly | Boolean | | [optional] | +| condition | String | | [optional] | +| stateful | Boolean | | [optional] | +| type | AgentAppStepType | | [optional] | +| state | RunJobStepState | | [optional] | +| composeTemplates | Map | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### RunJobStepState *(extends AgentAppStepState)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| image | StepFieldString | | [optional] | +| entrypoint | StepFieldListString | | [optional] | +| cmd | StepFieldListString | | [optional] | +| env | StepFieldListString | | [optional] | +| binds | StepFieldListString | | [optional] | +| networks | StepFieldListString | | [optional] | +| pullImages | StepFieldBoolean | | [optional] | +| retries | StepFieldInteger | | [optional] | +| networkFromServiceImageRegexPattern | StepFieldString | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### AgentAppStepState +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | + +#### StepFieldString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | String | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldInteger +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Integer | | [optional] | +| userChoice | Boolean | | [optional] | + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppTemplateControllerApi.md b/paas/docs/AgentAppTemplateControllerApi.md new file mode 100644 index 00000000..39506b9b --- /dev/null +++ b/paas/docs/AgentAppTemplateControllerApi.md @@ -0,0 +1,104 @@ +# AgentAppTemplateControllerApi + +`ThingsboardClient` methods: + +``` +AgentAppTemplate getAgentAppTemplateByCurrentVersion(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType, @Nonnull String currentVersion) // Get Agent App Template by current version (getAgentAppTemplateByCurrentVersion) +List getAgentAppTemplates() // Get all Agent App Templates (getAgentAppTemplates) +List getAgentAppTemplatesByAppType(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType) // Get Agent App Templates by type (getAgentAppTemplatesByAppType) +AgentAppTemplate getLatestAgentAppTemplateByAppTypeAndConfigType(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType) // Get Agent App Template (getLatestAgentAppTemplateByType) +``` + + +## getAgentAppTemplateByCurrentVersion + +``` +AgentAppTemplate getAgentAppTemplateByCurrentVersion(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType, @Nonnull String currentVersion) +``` + +**GET** `/api/agent/app/template/{appType}/{configType}/version/{currentVersion}` + +Get Agent App Template by current version (getAgentAppTemplateByCurrentVersion) + +Fetch the Agent App Template object based on the provided app type, config type, and current version. Matches the version exactly, including a floating tag used as a version such as the gateway 'latest' tag. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **appType** | **AgentApplicationType** | A string value representing the agent application type, e.g. 'EDGE', 'GATEWAY' | [enum: GENERIC, EDGE, GATEWAY] | +| **configType** | **AgentAppConfigType** | A string value representing the agent configuration type, e.g. 'DOCKER_COMPOSE' | [enum: DOCKER_COMPOSE] | +| **currentVersion** | **String** | A string value representing the current version of the template, e.g. '1.0.0' | | + +### Return type + +**AgentAppTemplate** + + +## getAgentAppTemplates + +``` +List getAgentAppTemplates() +``` + +**GET** `/api/agent/app/templates` + +Get all Agent App Templates (getAgentAppTemplates) + +Returns a list of all agent app templates available for the current tenant. Available for users with 'TENANT_ADMIN' authority. + +### Return type + +**List** + + +## getAgentAppTemplatesByAppType + +``` +List getAgentAppTemplatesByAppType(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType) +``` + +**GET** `/api/agent/app/templates/{appType}/{configType}` + +Get Agent App Templates by type (getAgentAppTemplatesByAppType) + +Returns a list of agent app templates filtered by application type and config type. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **appType** | **AgentApplicationType** | A string value representing the agent application type, e.g. 'EDGE', 'GATEWAY' | [enum: GENERIC, EDGE, GATEWAY] | +| **configType** | **AgentAppConfigType** | A string value representing the agent configuration type, e.g. 'DOCKER_COMPOSE' | [enum: DOCKER_COMPOSE] | + +### Return type + +**List** + + +## getLatestAgentAppTemplateByAppTypeAndConfigType + +``` +AgentAppTemplate getLatestAgentAppTemplateByAppTypeAndConfigType(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType) +``` + +**GET** `/api/agent/app/template/{appType}/{configType}/latest` + +Get Agent App Template (getLatestAgentAppTemplateByType) + +Fetch the latest Agent App Template object for the given app type and config type. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **appType** | **AgentApplicationType** | A string value representing the agent application type, e.g. 'EDGE', 'GATEWAY' | [enum: GENERIC, EDGE, GATEWAY] | +| **configType** | **AgentAppConfigType** | A string value representing the agent configuration type, e.g. 'DOCKER_COMPOSE' | [enum: DOCKER_COMPOSE] | + +### Return type + +**AgentAppTemplate** + diff --git a/paas/docs/AgentAppTemplateStartStepsInner.md b/paas/docs/AgentAppTemplateStartStepsInner.md new file mode 100644 index 00000000..7a0e6f89 --- /dev/null +++ b/paas/docs/AgentAppTemplateStartStepsInner.md @@ -0,0 +1,77 @@ + +# AgentAppTemplateStartStepsInner + +`org.thingsboard.client.model.AgentAppTemplateStartStepsInner` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **UUID** | | [optional] | +| **nextId** | **UUID** | | [optional] | +| **title** | **String** | | [optional] | +| **templateOnly** | **Boolean** | | [optional] | +| **condition** | **String** | | [optional] | +| **stateful** | **Boolean** | | [optional] | +| **type** | **AgentAppStepType** | | [optional] | +| **state** | **RunJobStepState** | | [optional] | +| **composeTemplates** | **Map\** | | [optional] | + + + +## Referenced Types + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### RunJobStepState *(extends AgentAppStepState)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| image | StepFieldString | | [optional] | +| entrypoint | StepFieldListString | | [optional] | +| cmd | StepFieldListString | | [optional] | +| env | StepFieldListString | | [optional] | +| binds | StepFieldListString | | [optional] | +| networks | StepFieldListString | | [optional] | +| pullImages | StepFieldBoolean | | [optional] | +| retries | StepFieldInteger | | [optional] | +| networkFromServiceImageRegexPattern | StepFieldString | | [optional] | + +#### AgentAppStepState +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | + +#### StepFieldString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | String | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldInteger +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Integer | | [optional] | +| userChoice | Boolean | | [optional] | + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppUnit.md b/paas/docs/AgentAppUnit.md new file mode 100644 index 00000000..a411e0c8 --- /dev/null +++ b/paas/docs/AgentAppUnit.md @@ -0,0 +1,37 @@ + +# AgentAppUnit + +`org.thingsboard.client.model.AgentAppUnit` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentAppUnitId** | JSON object with the Agent App Unit Id. | [optional] | +| **createdTime** | **Long** | Timestamp of the agent app unit creation, in milliseconds | [optional] [readonly] | +| **tenantId** | **TenantId** | Tenant this unit belongs to | | +| **agentApplicationId** | **AgentApplicationId** | Agent application this unit belongs to | | +| **identifier** | **String** | Unit identifier | | +| **type** | **AgentAppUnitType** | Unit type | | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppUnitType (enum) +`CONTAINER` | `VOLUME` | `NETWORK` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppUnitId.md b/paas/docs/AgentAppUnitId.md new file mode 100644 index 00000000..950cc07c --- /dev/null +++ b/paas/docs/AgentAppUnitId.md @@ -0,0 +1,30 @@ + +# AgentAppUnitId + +`org.thingsboard.client.model.AgentAppUnitId` + +**Extends:** **EntityId** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| + + + +## Referenced Types + +> **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentAppUnitType.md b/paas/docs/AgentAppUnitType.md new file mode 100644 index 00000000..35e9d15f --- /dev/null +++ b/paas/docs/AgentAppUnitType.md @@ -0,0 +1,25 @@ + +# AgentAppUnitType + +`org.thingsboard.client.model.AgentAppUnitType` + +## Enum Values + + +* `CONTAINER` (value: `"CONTAINER"`) + +* `VOLUME` (value: `"VOLUME"`) + +* `NETWORK` (value: `"NETWORK"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentApplication.md b/paas/docs/AgentApplication.md new file mode 100644 index 00000000..4b97cd7e --- /dev/null +++ b/paas/docs/AgentApplication.md @@ -0,0 +1,89 @@ + +# AgentApplication + +`org.thingsboard.client.model.AgentApplication` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentApplicationId** | JSON object with the Agent Application Id. | [optional] | +| **createdTime** | **Long** | Timestamp of the agent application creation, in milliseconds | [optional] [readonly] | +| **tenantId** | **TenantId** | JSON object with Tenant Id. | [optional] [readonly] | +| **agentId** | **AgentId** | Agent this application belongs to | | +| **name** | **String** | Application name (not unique across tenant) | [optional] | +| **templateVersion** | **String** | Template version this application is based on | | +| **desiredTemplateVersion** | **String** | | [optional] | +| **appType** | **AgentApplicationType** | Application type | | +| **config** | **DockerComposeConfig** | | [optional] | +| **version** | **Long** | | [optional] | +| **projectName** | **String** | | [optional] | +| **pendingDeletion** | **Boolean** | | [optional] | +| **origin** | **AgentApplicationOrigin** | Origin of the application (INSTALLED or DISCOVERED) | [optional] | +| **applicationProfileId** | **AgentAppProfileId** | Application Profile Id. When set, config is read-only and inherited from the profile. | [optional] | +| **profileConfigVersion** | **Long** | | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentApplicationType (enum) +`GENERIC` | `EDGE` | `GATEWAY` + +#### DockerComposeConfig *(extends AgentAppConfig)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| compose | com.fasterxml.jackson.databind.JsonNode | | [optional] | +| composeType | String | | [optional] | + +#### AgentApplicationOrigin (enum) +`INSTALLED` | `DISCOVERED` | `AUTO_PROVISIONED` + +#### AgentAppConfig +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| arguments | List | | [optional] | +| edgeRoutingKey | String | | [optional] | +| type | AgentAppConfigType | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### AgentAppArgument +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| name | String | Argument name, referenced in the compose as ${tb.}. | [optional] | +| sourceType | AgentAppArgumentSource | Source entity the value is resolved from. | [optional] | +| sourceEntityId | EntityId | Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. | [optional] | +| valueType | AgentAppArgumentValueType | Whether the value is read from an attribute or the latest telemetry. | [optional] | +| scope | AttributeScope | Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. | [optional] | +| key | String | Attribute or latest telemetry key to read. | [optional] | +| defaultValue | String | Optional fallback value used when the source has no value for the key. | [optional] | +| format | AgentAppArgumentFormat | How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. | [optional] | + +#### AgentAppConfigType (enum) +`DOCKER_COMPOSE` + +#### AgentAppArgumentSource (enum) +`AGENT` | `OWNER` | `RELATED_ENTITY` | `TENANT` | `DEVICE` | `ASSET` | `CUSTOMER` | `EDGE` + +#### AgentAppArgumentValueType (enum) +`ATTRIBUTE` | `LATEST_TELEMETRY` + +#### AttributeScope (enum) +`CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` + +#### AgentAppArgumentFormat (enum) +`STRING` | `JSON` + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentApplicationControllerApi.md b/paas/docs/AgentApplicationControllerApi.md new file mode 100644 index 00000000..ec8e04bf --- /dev/null +++ b/paas/docs/AgentApplicationControllerApi.md @@ -0,0 +1,467 @@ +# AgentApplicationControllerApi + +`ThingsboardClient` methods: + +``` +AgentApplication assignRelatedEntityToAgentApp(@Nonnull String agentApplicationId, @Nonnull String entityType, @Nonnull String entityId) // Assign Related Entity to Agent Application (assignRelatedEntityToAgentApp) +AgentApplication attachToProfile(@Nonnull String agentApplicationId, @Nonnull String profileId) // Attach Application to Profile (attachToProfile) +void cancelAgentAppEvent(@Nonnull String agentApplicationId, @Nonnull String agentAppEventId) // Cancel Agent Application Event (cancelAgentAppEvent) +AgentAppEvent createAgentAppEvent(@Nonnull String agentApplicationId, @Nonnull AgentAppEventRequest agentAppEventRequest) // Execute Agent Application Event (createAgentAppEvent) +AgentApplication detachFromProfile(@Nonnull String agentApplicationId) // Detach Application from Profile (detachFromProfile) +AgentAppEvent getAgentAppEventById(@Nonnull String agentAppEventId) // Get Agent Application Event (getAgentAppEventById) +PageDataAgentAppEvent getAgentAppEvents(@Nonnull String agentApplicationId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus, @Nullable String sortProperty, @Nullable String sortOrder) // Get Agent Application Events (getAgentAppEvents) +PageDataAgentAppUnit getAgentAppUnits(@Nonnull String agentApplicationId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppUnitType type, @Nullable String sortProperty, @Nullable String sortOrder) // Get Agent Application Units (getAgentAppUnits) +AgentApplicationInfo getAgentApplicationById(@Nonnull String agentApplicationId) // Get Agent Application (getAgentApplicationById) +AgentApplication getAgentApplicationByRelatedEntity(@Nonnull String entityType, @Nonnull String entityId) // Get Agent Application by Related Entity (getAgentApplicationByRelatedEntity) +PageDataAgentApplicationInfo getAgentApplicationsByAgentId(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) // Get Agent Applications by Agent Id (getAgentApplicationsByAgentId) +List getManagedRelatedEntityIds(@Nonnull String entityType) // Get Managed Related Entity Ids (getManagedRelatedEntityIds) +PageDataEntityInfo getRelatedEntityCandidates(@Nonnull String entityType, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String currentEntityId) // Get Related Entity Candidates (getRelatedEntityCandidates) +AgentAppInstallResponse installAgentApp(@Nonnull AgentAppEventRequest agentAppEventRequest) // Install Agent Application (installAgentApp) +AgentApplication mergeAgentApplicationForPreview(@Nonnull String templateVersion, @Nullable AgentApplicationType appType, @Nullable String composeType, @Nullable AgentAppEventActionType actionType, @Nullable Boolean setHostValues, @Nullable String relatedEntityType, @Nullable String relatedEntityId, @Nullable AgentApplication agentApplication) // Merge template into application for preview (mergeAgentApplicationForPreview) +AgentApplication unassignRelatedEntityFromAgentApp(@Nonnull String agentApplicationId) // Unassign Related Entity from Agent Application (unassignRelatedEntityFromAgentApp) +AgentApplication updateAgentApplication(@Nonnull AgentApplication agentApplication) // Update Agent Application (saveAgentApplication) +``` + + +## assignRelatedEntityToAgentApp + +``` +AgentApplication assignRelatedEntityToAgentApp(@Nonnull String agentApplicationId, @Nonnull String entityType, @Nonnull String entityId) +``` + +**POST** `/api/agent/app/{agentApplicationId}/relatedEntity/{entityType}/{entityId}` + +Assign Related Entity to Agent Application (assignRelatedEntityToAgentApp) + +Links an Edge or Gateway Device to the specified agent application and re-merges entity credentials into the compose. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentApplicationId** | **String** | A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **entityType** | **String** | Related entity type (EDGE or DEVICE) | | +| **entityId** | **String** | Related entity id | | + +### Return type + +**AgentApplication** + + +## attachToProfile + +``` +AgentApplication attachToProfile(@Nonnull String agentApplicationId, @Nonnull String profileId) +``` + +**POST** `/api/agent/app/{agentApplicationId}/attach/{profileId}` + +Attach Application to Profile (attachToProfile) + +Re-attaches the application to a profile. The application adopts the profile's template version without running any upgrade or downgrade steps. After attachment the profile becomes the source of the config; the app's own credentials are carried over. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentApplicationId** | **String** | A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **profileId** | **String** | | | + +### Return type + +**AgentApplication** + + +## cancelAgentAppEvent + +``` +void cancelAgentAppEvent(@Nonnull String agentApplicationId, @Nonnull String agentAppEventId) +``` + +**POST** `/api/agent/app/{agentApplicationId}/event/{agentAppEventId}/cancel` + +Cancel Agent Application Event (cancelAgentAppEvent) + +Force-cancels an in-flight or pending agent application event, marking it as ERROR. Cannot cancel events that are already in a terminal state (FINISHED or ERROR). Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentApplicationId** | **String** | A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **agentAppEventId** | **String** | A string value representing the agent app event id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | + +### Return type + +null (empty response body) + + +## createAgentAppEvent + +``` +AgentAppEvent createAgentAppEvent(@Nonnull String agentApplicationId, @Nonnull AgentAppEventRequest agentAppEventRequest) +``` + +**POST** `/api/agent/app/{agentApplicationId}/event` + +Execute Agent Application Event (createAgentAppEvent) + +Creates an event for the specified agent application. The action type determines the operation (UPDATE, DELETE, RESTART, UPGRADE, ROLLBACK). Step inputs can be provided for actions that require them. Returns the created event so the caller can open a progress view. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentApplicationId** | **String** | A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **agentAppEventRequest** | **AgentAppEventRequest** | A JSON value representing the event request. | | + +### Return type + +**AgentAppEvent** + + +## detachFromProfile + +``` +AgentApplication detachFromProfile(@Nonnull String agentApplicationId) +``` + +**POST** `/api/agent/app/{agentApplicationId}/detach` + +Detach Application from Profile (detachFromProfile) + +Detaches the application from its profile. The application keeps the effective config it already carries (profile config with its own credentials merged in) and becomes standalone and editable. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentApplicationId** | **String** | A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | + +### Return type + +**AgentApplication** + + +## getAgentAppEventById + +``` +AgentAppEvent getAgentAppEventById(@Nonnull String agentAppEventId) +``` + +**GET** `/api/agent/app/event/{agentAppEventId}` + +Get Agent Application Event (getAgentAppEventById) + +Fetches a single agent application event by id. Works for orphan events whose application has been deleted (application_id is nullable). Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentAppEventId** | **String** | A string value representing the agent app event id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | + +### Return type + +**AgentAppEvent** + + +## getAgentAppEvents + +``` +PageDataAgentAppEvent getAgentAppEvents(@Nonnull String agentApplicationId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/agent/app/{agentApplicationId}/events` + +Get Agent Application Events (getAgentAppEvents) + +Returns a page of events for the specified agent application. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentApplicationId** | **String** | A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | Optional case-insensitive substring matched against the event action type and processing status | [optional] | +| **actionType** | **AgentAppEventActionType** | Optional action type filter | [optional] [enum: INSTALL, UPDATE, DELETE, RESTART, ROLLBACK, UPGRADE, AGENT_UPGRADE] | +| **processingStatus** | **AgentProcessingStatus** | Optional processing status filter | [optional] [enum: PENDING, QUEUED, PROCESSING, FINISHED, ERROR, START_FAILED] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] [enum: createdTime, updatedTime] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] [enum: ASC, DESC] | + +### Return type + +**PageDataAgentAppEvent** + + +## getAgentAppUnits + +``` +PageDataAgentAppUnit getAgentAppUnits(@Nonnull String agentApplicationId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppUnitType type, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/agent/app/{agentApplicationId}/units` + +Get Agent Application Units (getAgentAppUnits) + +Returns a page of units (containers, volumes, networks) for the specified agent application. Live per-unit data such as `image` and `state` lives in server-scope attributes on each unit and should be fetched separately via the standard telemetry/attributes API.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentApplicationId** | **String** | A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | Case-insensitive substring match against the unit identifier | [optional] | +| **type** | **AgentAppUnitType** | Optional unit type filter (CONTAINER, VOLUME, NETWORK) | [optional] [enum: CONTAINER, VOLUME, NETWORK] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] [enum: createdTime, identifier, type] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] [enum: ASC, DESC] | + +### Return type + +**PageDataAgentAppUnit** + + +## getAgentApplicationById + +``` +AgentApplicationInfo getAgentApplicationById(@Nonnull String agentApplicationId) +``` + +**GET** `/api/agent/app/{agentApplicationId}` + +Get Agent Application (getAgentApplicationById) + +Fetch the Agent Application object based on the provided Agent Application Id. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentApplicationId** | **String** | A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | + +### Return type + +**AgentApplicationInfo** + + +## getAgentApplicationByRelatedEntity + +``` +AgentApplication getAgentApplicationByRelatedEntity(@Nonnull String entityType, @Nonnull String entityId) +``` + +**GET** `/api/agent/apps/{entityType}/{entityId}` + +Get Agent Application by Related Entity (getAgentApplicationByRelatedEntity) + +Returns the agent application linked to the specified entity. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **entityType** | **String** | Entity type | | +| **entityId** | **String** | Entity id | | + +### Return type + +**AgentApplication** + + +## getAgentApplicationsByAgentId + +``` +PageDataAgentApplicationInfo getAgentApplicationsByAgentId(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/agent/{agentId}/apps` + +Get Agent Applications by Agent Id (getAgentApplicationsByAgentId) + +Returns a page of agent applications that belong to the specified agent. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentId** | **String** | A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | Optional String value representing application name | [optional] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] [enum: createdTime, name] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] [enum: ASC, DESC] | + +### Return type + +**PageDataAgentApplicationInfo** + + +## getManagedRelatedEntityIds + +``` +List getManagedRelatedEntityIds(@Nonnull String entityType) +``` + +**GET** `/api/agent/app/managedRelatedEntities/{entityType}` + +Get Managed Related Entity Ids (getManagedRelatedEntityIds) + +Returns the ids of entities of the given type that are already linked to an agent application. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **entityType** | **String** | Related entity type (EDGE or DEVICE) | | + +### Return type + +**List** + + +## getRelatedEntityCandidates + +``` +PageDataEntityInfo getRelatedEntityCandidates(@Nonnull String entityType, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String currentEntityId) +``` + +**GET** `/api/agent/app/relatedEntityCandidates` + +Get Related Entity Candidates (getRelatedEntityCandidates) + +Returns a page of Edges or Gateway Devices (devices with 'gateway' set in additional info) that can be linked to an agent application. Entities already linked to another application are excluded unless passed as 'currentEntityId'. Results are sorted by name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **entityType** | **String** | Related entity type (EDGE or DEVICE) | [enum: EDGE, DEVICE] | +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | Optional String value representing entity name | [optional] | +| **currentEntityId** | **String** | Optional id of the entity currently linked to the edited application; it is kept in the result even though it is managed | [optional] | + +### Return type + +**PageDataEntityInfo** + + +## installAgentApp + +``` +AgentAppInstallResponse installAgentApp(@Nonnull AgentAppEventRequest agentAppEventRequest) +``` + +**POST** `/api/agent/app/event` + +Install Agent Application (installAgentApp) + +Creates a new agent application and an INSTALL event in a single operation. Returns both the created application and the INSTALL event so the caller can open a progress view without a second round-trip. The request body must include the application object. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentAppEventRequest** | **AgentAppEventRequest** | A JSON value representing the install event request with the application. | | + +### Return type + +**AgentAppInstallResponse** + + +## mergeAgentApplicationForPreview + +``` +AgentApplication mergeAgentApplicationForPreview(@Nonnull String templateVersion, @Nullable AgentApplicationType appType, @Nullable String composeType, @Nullable AgentAppEventActionType actionType, @Nullable Boolean setHostValues, @Nullable String relatedEntityType, @Nullable String relatedEntityId, @Nullable AgentApplication agentApplication) +``` + +**POST** `/api/agent/app/merge/{templateVersion}/preview` + +Merge template into application for preview (mergeAgentApplicationForPreview) + +Merges the specified template into an agent application for preview purposes. If no application is provided in the body, a new one is created from the template. The compose type determines which compose configuration variant from the template is used. Optionally provide relatedEntityType and relatedEntityId to auto-fill entity credentials (Edge routing key/secret or Gateway access token) into the compose. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **templateVersion** | **String** | The template version to merge (e.g. '4.3.1.2EDGEPE') | | +| **appType** | **AgentApplicationType** | Application type (EDGE, GATEWAY, GENERIC). Required when no application body is supplied. | [optional] [enum: GENERIC, EDGE, GATEWAY] | +| **composeType** | **String** | The compose type to select from the template (e.g. 'monolith', 'microservices') | [optional] | +| **actionType** | **AgentAppEventActionType** | The event action this merge previews (e.g. UPGRADE). Drives action-specific merge rules. | [optional] [enum: INSTALL, UPDATE, DELETE, RESTART, ROLLBACK, UPGRADE, AGENT_UPGRADE] | +| **setHostValues** | **Boolean** | Whether to auto-fill host values (e.g. CLOUD_RPC_HOST) from the platform base URL. Should be true only for the install preview; keep false when previewing the saved compose of an existing application to preserve user-configured host values. | [optional] [default to false] | +| **relatedEntityType** | **String** | Related entity type (EDGE or DEVICE) | [optional] | +| **relatedEntityId** | **String** | Related entity id | [optional] | +| **agentApplication** | **AgentApplication** | Optional agent application to merge with. If null, a new application is created from the template. | [optional] | + +### Return type + +**AgentApplication** + + +## unassignRelatedEntityFromAgentApp + +``` +AgentApplication unassignRelatedEntityFromAgentApp(@Nonnull String agentApplicationId) +``` + +**DELETE** `/api/agent/app/{agentApplicationId}/relatedEntity` + +Unassign Related Entity from Agent Application (unassignRelatedEntityFromAgentApp) + +Removes the link between an agent application and its related Edge or Gateway Device. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentApplicationId** | **String** | A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | + +### Return type + +**AgentApplication** + + +## updateAgentApplication + +``` +AgentApplication updateAgentApplication(@Nonnull AgentApplication agentApplication) +``` + +**PUT** `/api/agent/app` + +Update Agent Application (saveAgentApplication) + +Updates the Agent Application. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentApplication** | **AgentApplication** | A JSON value representing the agent application. | | + +### Return type + +**AgentApplication** + diff --git a/paas/docs/AgentApplicationId.md b/paas/docs/AgentApplicationId.md new file mode 100644 index 00000000..dd8d28de --- /dev/null +++ b/paas/docs/AgentApplicationId.md @@ -0,0 +1,30 @@ + +# AgentApplicationId + +`org.thingsboard.client.model.AgentApplicationId` + +**Extends:** **EntityId** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| + + + +## Referenced Types + +> **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentApplicationInfo.md b/paas/docs/AgentApplicationInfo.md new file mode 100644 index 00000000..17d4ca38 --- /dev/null +++ b/paas/docs/AgentApplicationInfo.md @@ -0,0 +1,96 @@ + +# AgentApplicationInfo + +`org.thingsboard.client.model.AgentApplicationInfo` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentApplicationId** | JSON object with the Agent Application Id. | [optional] | +| **createdTime** | **Long** | Timestamp of the agent application creation, in milliseconds | [optional] [readonly] | +| **tenantId** | **TenantId** | JSON object with Tenant Id. | [optional] [readonly] | +| **agentId** | **AgentId** | Agent this application belongs to | | +| **name** | **String** | Application name (not unique across tenant) | [optional] | +| **templateVersion** | **String** | Template version this application is based on | | +| **desiredTemplateVersion** | **String** | | [optional] | +| **appType** | **AgentApplicationType** | Application type | | +| **config** | **DockerComposeConfig** | | [optional] | +| **version** | **Long** | | [optional] | +| **projectName** | **String** | | [optional] | +| **pendingDeletion** | **Boolean** | | [optional] | +| **origin** | **AgentApplicationOrigin** | Origin of the application (INSTALLED or DISCOVERED) | [optional] | +| **applicationProfileId** | **AgentAppProfileId** | Application Profile Id. When set, config is read-only and inherited from the profile. | [optional] | +| **profileConfigVersion** | **Long** | | [optional] | +| **currentVersion** | **String** | Current version of the template this application is based on. | [optional] [readonly] | +| **nextVersion** | **String** | Next version available for upgrade. | [optional] [readonly] | +| **profileConfigOutdated** | **Boolean** | True if the app's config is outdated relative to its profile. | [optional] [readonly] | +| **profileName** | **String** | Name of the application profile this app is based on. | [optional] [readonly] | +| **profileTemplateVersion** | **String** | Template version of the application profile this app is based on. | [optional] [readonly] | +| **agentName** | **String** | Name of the owning agent. | [optional] [readonly] | +| **relatedEntityId** | **EntityId** | Related entity id (Edge or Gateway device) currently assigned to this application. | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentApplicationType (enum) +`GENERIC` | `EDGE` | `GATEWAY` + +#### DockerComposeConfig *(extends AgentAppConfig)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| compose | com.fasterxml.jackson.databind.JsonNode | | [optional] | +| composeType | String | | [optional] | + +#### AgentApplicationOrigin (enum) +`INSTALLED` | `DISCOVERED` | `AUTO_PROVISIONED` + +#### AgentAppConfig +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| arguments | List | | [optional] | +| edgeRoutingKey | String | | [optional] | +| type | AgentAppConfigType | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### AgentAppArgument +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| name | String | Argument name, referenced in the compose as ${tb.}. | [optional] | +| sourceType | AgentAppArgumentSource | Source entity the value is resolved from. | [optional] | +| sourceEntityId | EntityId | Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. | [optional] | +| valueType | AgentAppArgumentValueType | Whether the value is read from an attribute or the latest telemetry. | [optional] | +| scope | AttributeScope | Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. | [optional] | +| key | String | Attribute or latest telemetry key to read. | [optional] | +| defaultValue | String | Optional fallback value used when the source has no value for the key. | [optional] | +| format | AgentAppArgumentFormat | How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. | [optional] | + +#### AgentAppConfigType (enum) +`DOCKER_COMPOSE` + +#### AgentAppArgumentSource (enum) +`AGENT` | `OWNER` | `RELATED_ENTITY` | `TENANT` | `DEVICE` | `ASSET` | `CUSTOMER` | `EDGE` + +#### AgentAppArgumentValueType (enum) +`ATTRIBUTE` | `LATEST_TELEMETRY` + +#### AttributeScope (enum) +`CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` + +#### AgentAppArgumentFormat (enum) +`STRING` | `JSON` + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentApplicationOrigin.md b/paas/docs/AgentApplicationOrigin.md new file mode 100644 index 00000000..b1cfb41c --- /dev/null +++ b/paas/docs/AgentApplicationOrigin.md @@ -0,0 +1,25 @@ + +# AgentApplicationOrigin + +`org.thingsboard.client.model.AgentApplicationOrigin` + +## Enum Values + + +* `INSTALLED` (value: `"INSTALLED"`) + +* `DISCOVERED` (value: `"DISCOVERED"`) + +* `AUTO_PROVISIONED` (value: `"AUTO_PROVISIONED"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/ChatType.md b/paas/docs/AgentApplicationType.md similarity index 74% rename from paas/docs/ChatType.md rename to paas/docs/AgentApplicationType.md index 4dd1fe97..9e9cc99d 100644 --- a/paas/docs/ChatType.md +++ b/paas/docs/AgentApplicationType.md @@ -1,14 +1,16 @@ -# ChatType +# AgentApplicationType -`org.thingsboard.client.model.ChatType` +`org.thingsboard.client.model.AgentApplicationType` ## Enum Values * `GENERIC` (value: `"GENERIC"`) -* `SOLUTION_BUILDER` (value: `"SOLUTION_BUILDER"`) +* `EDGE` (value: `"EDGE"`) + +* `GATEWAY` (value: `"GATEWAY"`) diff --git a/paas/docs/AgentBulkAction.md b/paas/docs/AgentBulkAction.md new file mode 100644 index 00000000..3aa49994 --- /dev/null +++ b/paas/docs/AgentBulkAction.md @@ -0,0 +1,46 @@ + +# AgentBulkAction + +`org.thingsboard.client.model.AgentBulkAction` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentBulkActionId** | JSON object with the Agent Bulk Action Id. | [optional] | +| **createdTime** | **Long** | Timestamp of the bulk action creation, in milliseconds | [optional] [readonly] | +| **tenantId** | **TenantId** | | [optional] | +| **agentProfileId** | **UUID** | | [optional] | +| **applicationProfileId** | **UUID** | | [optional] | +| **actionType** | **AgentAppEventActionType** | | [optional] | +| **status** | **AgentBulkActionStatus** | | [optional] | +| **errorMsg** | **String** | | [optional] | +| **processingStartedTime** | **Long** | | [optional] | +| **total** | **Integer** | | [optional] | +| **submitted** | **Integer** | | [optional] | +| **skipCounts** | **Map\** | | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppEventActionType (enum) +`INSTALL` | `UPDATE` | `DELETE` | `RESTART` | `ROLLBACK` | `UPGRADE` | `AGENT_UPGRADE` + +#### AgentBulkActionStatus (enum) +`QUEUED` | `IN_PROGRESS` | `STARTED` | `START_FAILED` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentBulkActionControllerApi.md b/paas/docs/AgentBulkActionControllerApi.md new file mode 100644 index 00000000..27682c64 --- /dev/null +++ b/paas/docs/AgentBulkActionControllerApi.md @@ -0,0 +1,89 @@ +# AgentBulkActionControllerApi + +`ThingsboardClient` methods: + +``` +AgentBulkAction getAgentBulkAction(@Nonnull String bulkActionId) // Get Agent Bulk Action (getAgentBulkAction) +AgentBulkActionEventStats getAgentBulkActionEventStats(@Nonnull String bulkActionId) // Get Agent Bulk Action Event Stats (getAgentBulkActionEventStats) +PageDataAgentAppEventInfo getAgentBulkActionEvents(@Nonnull String bulkActionId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus, @Nullable String sortProperty, @Nullable String sortOrder) // Get Agent Bulk Action Events (getAgentBulkActionEvents) +``` + + +## getAgentBulkAction + +``` +AgentBulkAction getAgentBulkAction(@Nonnull String bulkActionId) +``` + +**GET** `/api/agent/bulk/{bulkActionId}` + +Get Agent Bulk Action (getAgentBulkAction) + +Fetch the Agent Bulk Action object based on the provided Bulk Action Id. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **bulkActionId** | **String** | Bulk Action Id | | + +### Return type + +**AgentBulkAction** + + +## getAgentBulkActionEventStats + +``` +AgentBulkActionEventStats getAgentBulkActionEventStats(@Nonnull String bulkActionId) +``` + +**GET** `/api/agent/bulk/{bulkActionId}/eventStats` + +Get Agent Bulk Action Event Stats (getAgentBulkActionEventStats) + +Returns the number of agent application events produced by the given bulk action per processing status, together with their total. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **bulkActionId** | **String** | Bulk Action Id | | + +### Return type + +**AgentBulkActionEventStats** + + +## getAgentBulkActionEvents + +``` +PageDataAgentAppEventInfo getAgentBulkActionEvents(@Nonnull String bulkActionId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/agent/bulk/{bulkActionId}/events` + +Get Agent Bulk Action Events (getAgentBulkActionEvents) + +Returns a page of agent application events produced by the given bulk action, optionally filtered by action type and status. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **bulkActionId** | **String** | Bulk Action Id | | +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | Case-insensitive 'substring' filter based on the event fields | [optional] | +| **actionType** | **AgentAppEventActionType** | A string value representing the action type to filter by, e.g. 'UPDATE' | [optional] [enum: INSTALL, UPDATE, DELETE, RESTART, ROLLBACK, UPGRADE, AGENT_UPGRADE] | +| **processingStatus** | **AgentProcessingStatus** | A string value representing the event status to filter by, e.g. 'FINISHED' | [optional] [enum: PENDING, QUEUED, PROCESSING, FINISHED, ERROR, START_FAILED] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] | + +### Return type + +**PageDataAgentAppEventInfo** + diff --git a/paas/docs/AgentBulkActionEventStats.md b/paas/docs/AgentBulkActionEventStats.md new file mode 100644 index 00000000..f8ca20ff --- /dev/null +++ b/paas/docs/AgentBulkActionEventStats.md @@ -0,0 +1,23 @@ + +# AgentBulkActionEventStats + +`org.thingsboard.client.model.AgentBulkActionEventStats` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **countsByStatus** | **Map\** | Number of events produced by the bulk action per processing status | [optional] | +| **total** | **Long** | Total number of events produced by the bulk action | [optional] | + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentBulkActionId.md b/paas/docs/AgentBulkActionId.md new file mode 100644 index 00000000..4b966ca7 --- /dev/null +++ b/paas/docs/AgentBulkActionId.md @@ -0,0 +1,30 @@ + +# AgentBulkActionId + +`org.thingsboard.client.model.AgentBulkActionId` + +**Extends:** **EntityId** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| + + + +## Referenced Types + +> **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentBulkActionStatus.md b/paas/docs/AgentBulkActionStatus.md new file mode 100644 index 00000000..bc9f4b10 --- /dev/null +++ b/paas/docs/AgentBulkActionStatus.md @@ -0,0 +1,27 @@ + +# AgentBulkActionStatus + +`org.thingsboard.client.model.AgentBulkActionStatus` + +## Enum Values + + +* `QUEUED` (value: `"QUEUED"`) + +* `IN_PROGRESS` (value: `"IN_PROGRESS"`) + +* `STARTED` (value: `"STARTED"`) + +* `START_FAILED` (value: `"START_FAILED"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentControllerApi.md b/paas/docs/AgentControllerApi.md new file mode 100644 index 00000000..ba65b683 --- /dev/null +++ b/paas/docs/AgentControllerApi.md @@ -0,0 +1,434 @@ +# AgentControllerApi + +`ThingsboardClient` methods: + +``` +void deleteAgent(@Nonnull String agentId) // Delete agent (deleteAgent) +PageDataAgentAppEventInfo getAgentAppEventInfosByAgentId(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus) // Get Agent App Event Infos by Agent Id (getAgentAppEventInfosByAgentId) +PageDataAgentAppEvent getAgentAppEventsByAgentId(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) // Get Agent App Events by Agent Id (getAgentAppEventsByAgentId) +Agent getAgentById(@Nonnull String agentId) // Get Agent (getAgentById) +AgentInfo getAgentInfoById(@Nonnull String agentId) // Get Agent Info (getAgentInfoById) +List getAgentInfosByIds(@Nonnull List agentIds) // Get Agent Infos By Ids (getAgentInfosByIds) +AgentInstructions getAgentInstallInstructions(@Nonnull String agentId, @Nonnull String method) // Get Agent Install Instructions (getAgentInstallInstructions) +String getAgentUpgradeTarget(@Nonnull String agentId) // Get the agent upgrade target (getAgentUpgradeTarget) +PageDataAgentInfo getCustomerAgentInfos(@Nonnull String customerId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) // Get Customer Agent Infos (getCustomerAgentInfos) +PageDataAgent getCustomerAgents(@Nonnull String customerId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) // Get Customer Agents (getCustomerAgents) +String getLatestAgentImageRef() // Get the newest published agent image (getLatestAgentImageRef) +PageDataAgentInfo getTenantAgentInfos(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) // Get Tenant Agent Infos (getTenantAgentInfos) +PageDataAgent getTenantAgents(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) // Get Tenant Agents (getTenantAgents) +Boolean isAgentUpgradeAvailable(@Nonnull String agentId) // Is agent upgrade available (isAgentUpgradeAvailable) +Agent saveAgent(@Nonnull Agent agent, @Nullable String entityGroupId, @Nullable List entityGroupIds) // Create Or Update Agent (saveAgent) +AgentAppEvent upgradeAgent(@Nonnull String agentId, @Nonnull AgentUpgradeRequest agentUpgradeRequest) // Upgrade Agent (upgradeAgent) +``` + + +## deleteAgent + +``` +void deleteAgent(@Nonnull String agentId) +``` + +**DELETE** `/api/agent/{agentId}` + +Delete agent (deleteAgent) + +Deletes the agent and all the relations (from and to the agent). Referencing non-existing agent Id will cause an error. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentId** | **String** | A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | + +### Return type + +null (empty response body) + + +## getAgentAppEventInfosByAgentId + +``` +PageDataAgentAppEventInfo getAgentAppEventInfosByAgentId(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus) +``` + +**GET** `/api/agent/{agentId}/eventInfos` + +Get Agent App Event Infos by Agent Id (getAgentAppEventInfosByAgentId) + +Returns a page of agent application events for all applications belonging to the specified agent, enriched with the application name for each event. Supports optional filtering by action type and status, and text search over the application name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentId** | **String** | A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | Optional text value to match against the application name | [optional] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] [enum: createdTime, updatedTime, actionType, startStatus, processingStatus] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] [enum: ASC, DESC] | +| **actionType** | **AgentAppEventActionType** | Optional filter by event action type | [optional] [enum: INSTALL, UPDATE, DELETE, RESTART, ROLLBACK, UPGRADE, AGENT_UPGRADE] | +| **processingStatus** | **AgentProcessingStatus** | Optional filter by event status | [optional] [enum: PENDING, QUEUED, PROCESSING, FINISHED, ERROR, START_FAILED] | + +### Return type + +**PageDataAgentAppEventInfo** + + +## getAgentAppEventsByAgentId + +``` +PageDataAgentAppEvent getAgentAppEventsByAgentId(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/agent/{agentId}/events` + +Get Agent App Events by Agent Id (getAgentAppEventsByAgentId) + +Returns a page of agent application events for all applications belonging to the specified agent. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentId** | **String** | A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | Optional String value reserved for future event filtering | [optional] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] [enum: createdTime, updatedTime] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] [enum: ASC, DESC] | + +### Return type + +**PageDataAgentAppEvent** + + +## getAgentById + +``` +Agent getAgentById(@Nonnull String agentId) +``` + +**GET** `/api/agent/{agentId}` + +Get Agent (getAgentById) + +Fetch the Agent object based on the provided Agent Id. The server checks that the agent is owned by the same tenant. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentId** | **String** | A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | + +### Return type + +**Agent** + + +## getAgentInfoById + +``` +AgentInfo getAgentInfoById(@Nonnull String agentId) +``` + +**GET** `/api/agent/info/{agentId}` + +Get Agent Info (getAgentInfoById) + +Fetch the Agent Info object based on the provided Agent Id. Agent Info extends the Agent object and adds customer title and 'is public' flag. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentId** | **String** | A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | + +### Return type + +**AgentInfo** + + +## getAgentInfosByIds + +``` +List getAgentInfosByIds(@Nonnull List agentIds) +``` + +**GET** `/api/agentInfos` + +Get Agent Infos By Ids (getAgentInfosByIds) + +Requested agents must be owned by tenant or assigned to customer which user is performing the request. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentIds** | **List** | A list of agent ids, separated by comma ',' | | + +### Return type + +**List** + + +## getAgentInstallInstructions + +``` +AgentInstructions getAgentInstallInstructions(@Nonnull String agentId, @Nonnull String method) +``` + +**GET** `/api/agent/instructions/install/{agentId}/{method}` + +Get Agent Install Instructions (getAgentInstallInstructions) + +Returns the docker install command for the specified agent with the server address and gRPC port resolved server-side. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentId** | **String** | A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **method** | **String** | Installation method ('docker') | [enum: docker] | + +### Return type + +**AgentInstructions** + + +## getAgentUpgradeTarget + +``` +String getAgentUpgradeTarget(@Nonnull String agentId) +``` + +**GET** `/api/agent/{agentId}/upgrade/target` + +Get the agent upgrade target (getAgentUpgradeTarget) + +Returns the image reference the agent should be upgraded to, or an empty string when it already runs the newest published image or cannot be placed in the version graph. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentId** | **String** | A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | + +### Return type + +**String** + + +## getCustomerAgentInfos + +``` +PageDataAgentInfo getCustomerAgentInfos(@Nonnull String customerId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/customer/{customerId}/agentInfos` + +Get Customer Agent Infos (getCustomerAgentInfos) + +Returns a page of agent info objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **customerId** | **String** | A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | Optional String value representing agent name | [optional] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] [enum: createdTime, name] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] [enum: ASC, DESC] | + +### Return type + +**PageDataAgentInfo** + + +## getCustomerAgents + +``` +PageDataAgent getCustomerAgents(@Nonnull String customerId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/customer/{customerId}/agents` + +Get Customer Agents (getCustomerAgents) + +Returns a page of agent objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **customerId** | **String** | A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | Optional String value representing agent name | [optional] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] [enum: createdTime, name] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] [enum: ASC, DESC] | + +### Return type + +**PageDataAgent** + + +## getLatestAgentImageRef + +``` +String getLatestAgentImageRef() +``` + +**GET** `/api/agent/upgrade/latest` + +Get the newest published agent image (getLatestAgentImageRef) + +Returns the newest agent image reference known from the version graph, or the floating tag while no version has been published. Lets a list of agents decide locally which rows are upgradable without asking per row. Available for users with 'TENANT_ADMIN' authority. + +### Return type + +**String** + + +## getTenantAgentInfos + +``` +PageDataAgentInfo getTenantAgentInfos(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/tenant/agentInfos` + +Get Tenant Agent Infos (getTenantAgentInfos) + +Returns a page of agent info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | Optional String value representing agent name | [optional] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] [enum: createdTime, name] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] [enum: ASC, DESC] | + +### Return type + +**PageDataAgentInfo** + + +## getTenantAgents + +``` +PageDataAgent getTenantAgents(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/tenant/agents` + +Get Tenant Agents (getTenantAgents) + +Returns a page of agents owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | Optional String value representing agent name | [optional] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] [enum: createdTime, name] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] [enum: ASC, DESC] | + +### Return type + +**PageDataAgent** + + +## isAgentUpgradeAvailable + +``` +Boolean isAgentUpgradeAvailable(@Nonnull String agentId) +``` + +**GET** `/api/agent/{agentId}/upgrade/available` + +Is agent upgrade available (isAgentUpgradeAvailable) + +Returns 'true' when the agent reports an image older than the newest published one, 'false' otherwise — including when the agent runs a floating tag such as 'latest', whose current content cannot be told from the tag. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentId** | **String** | A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | + +### Return type + +**Boolean** + + +## saveAgent + +``` +Agent saveAgent(@Nonnull Agent agent, @Nullable String entityGroupId, @Nullable List entityGroupIds) +``` + +**POST** `/api/agent` + +Create Or Update Agent (saveAgent) + +Creates or Updates the Agent. When creating agent, platform generates Agent Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Agent id will be present in the response. Specify existing Agent id to update the agent. Referencing non-existing Agent Id will cause 'Not Found' error. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Agent entity. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agent** | **Agent** | A JSON value representing the agent. | | +| **entityGroupId** | **String** | | [optional] | +| **entityGroupIds** | **List** | A list of entity group ids, separated by comma ',' | [optional] | + +### Return type + +**Agent** + + +## upgradeAgent + +``` +AgentAppEvent upgradeAgent(@Nonnull String agentId, @Nonnull AgentUpgradeRequest agentUpgradeRequest) +``` + +**POST** `/api/agent/{agentId}/upgrade` + +Upgrade Agent (upgradeAgent) + +Creates an agent-scoped upgrade event that makes the agent replace its own container with the given image. At most one agent upgrade can be active per agent, and it blocks all application events for that agent until it completes. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentId** | **String** | A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **agentUpgradeRequest** | **AgentUpgradeRequest** | | | + +### Return type + +**AgentAppEvent** + diff --git a/paas/docs/AgentFinalizeStep.md b/paas/docs/AgentFinalizeStep.md new file mode 100644 index 00000000..78490d32 --- /dev/null +++ b/paas/docs/AgentFinalizeStep.md @@ -0,0 +1,39 @@ + +# AgentFinalizeStep + +`org.thingsboard.client.model.AgentFinalizeStep` + +**Extends:** **AgentAppStep** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| + + + +## Referenced Types + +#### AgentAppStep +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | UUID | | [optional] | +| nextId | UUID | | [optional] | +| title | String | | [optional] | +| templateOnly | Boolean | | [optional] | +| condition | String | | [optional] | +| stateful | Boolean | | [optional] | +| type | AgentAppStepType | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentId.md b/paas/docs/AgentId.md new file mode 100644 index 00000000..277af9bf --- /dev/null +++ b/paas/docs/AgentId.md @@ -0,0 +1,30 @@ + +# AgentId + +`org.thingsboard.client.model.AgentId` + +**Extends:** **EntityId** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| + + + +## Referenced Types + +> **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentInfo.md b/paas/docs/AgentInfo.md new file mode 100644 index 00000000..88269f6e --- /dev/null +++ b/paas/docs/AgentInfo.md @@ -0,0 +1,54 @@ + +# AgentInfo + +`org.thingsboard.client.model.AgentInfo` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentId** | JSON object with the Agent Id. Specify this field to update the Agent. Referencing non-existing Agent Id will cause error. Omit this field to create new Agent. | [optional] | +| **createdTime** | **Long** | Timestamp of the agent creation, in milliseconds | [optional] [readonly] | +| **additionalInfo** | **com.fasterxml.jackson.databind.JsonNode** | | [optional] | +| **tenantId** | **TenantId** | JSON object with Tenant Id. Use 'assignAgentToTenant' to change the Tenant Id. | [optional] [readonly] | +| **customerId** | **CustomerId** | JSON object with Customer Id. | [optional] [readonly] | +| **name** | **String** | Unique Agent Name in scope of Tenant | | +| **description** | **String** | Agent description | [optional] | +| **routingKey** | **String** | Agent routing key used for authentication | | +| **secret** | **String** | Agent secret used for authentication | | +| **agentProfileId** | **AgentProfileId** | JSON object with Agent Profile Id. Nullable. | [optional] | +| **version** | **Long** | | [optional] | +| **customerTitle** | **String** | Title of the Customer that owns the agent. | [optional] [readonly] | +| **customerIsPublic** | **Boolean** | Indicates special 'Public' Customer that is auto-generated to use the agents on public dashboards. | [optional] [readonly] | +| **agentProfileName** | **String** | Name of the Agent Profile the agent belongs to. | [optional] [readonly] | +| **ownerName** | **String** | Owner name — tenant title if the agent is owned by a tenant, or customer title otherwise. | [optional] [readonly] | +| **groups** | **List\** | Entity groups that contain this agent (excluding the implicit 'All' group). | [optional] | +| **active** | **Boolean** | Whether the agent currently has an active connection (derived from server-scope 'active' attribute). | [optional] [readonly] | +| **agentVersion** | **String** | Agent software version reported on the last connect (derived from server-scope 'agentVersion' attribute). | [optional] [readonly] | +| **upgradeTargetImageRef** | **String** | Image reference this agent should be upgraded to, or null when no upgrade applies. Resolved from the published version graph. | [optional] [readonly] | +| **ownerId** | **EntityId** | JSON object with Customer or Tenant Id | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### EntityInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | EntityId | JSON object with the entity Id. | [optional] | +| name | String | Entity Name | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentInstructions.md b/paas/docs/AgentInstructions.md new file mode 100644 index 00000000..096653a1 --- /dev/null +++ b/paas/docs/AgentInstructions.md @@ -0,0 +1,22 @@ + +# AgentInstructions + +`org.thingsboard.client.model.AgentInstructions` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **instructions** | **String** | Resolved install/provision instructions for the selected method | [optional] | + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentPrepareStep.md b/paas/docs/AgentPrepareStep.md new file mode 100644 index 00000000..0298784d --- /dev/null +++ b/paas/docs/AgentPrepareStep.md @@ -0,0 +1,39 @@ + +# AgentPrepareStep + +`org.thingsboard.client.model.AgentPrepareStep` + +**Extends:** **AgentAppStep** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| + + + +## Referenced Types + +#### AgentAppStep +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | UUID | | [optional] | +| nextId | UUID | | [optional] | +| title | String | | [optional] | +| templateOnly | Boolean | | [optional] | +| condition | String | | [optional] | +| stateful | Boolean | | [optional] | +| type | AgentAppStepType | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentProcessingStatus.md b/paas/docs/AgentProcessingStatus.md new file mode 100644 index 00000000..6f7df351 --- /dev/null +++ b/paas/docs/AgentProcessingStatus.md @@ -0,0 +1,31 @@ + +# AgentProcessingStatus + +`org.thingsboard.client.model.AgentProcessingStatus` + +## Enum Values + + +* `PENDING` (value: `"PENDING"`) + +* `QUEUED` (value: `"QUEUED"`) + +* `PROCESSING` (value: `"PROCESSING"`) + +* `FINISHED` (value: `"FINISHED"`) + +* `ERROR` (value: `"ERROR"`) + +* `START_FAILED` (value: `"START_FAILED"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentProfile.md b/paas/docs/AgentProfile.md new file mode 100644 index 00000000..084e86cb --- /dev/null +++ b/paas/docs/AgentProfile.md @@ -0,0 +1,41 @@ + +# AgentProfile + +`org.thingsboard.client.model.AgentProfile` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentProfileId** | JSON object with the Agent Profile Id. | [optional] | +| **createdTime** | **Long** | Timestamp of the profile creation, in milliseconds | [optional] [readonly] | +| **tenantId** | **TenantId** | JSON object with Tenant Id. | [optional] [readonly] | +| **name** | **String** | Unique profile name within tenant | | +| **description** | **String** | Profile description | [optional] | +| **provisionKey** | **String** | Provision key for future auto-provisioning | [optional] | +| **provisionSecret** | **String** | Provision secret for future auto-provisioning | [optional] | +| **provisionType** | **AgentProvisionType** | Provisioning strategy. DISABLED by default. | [optional] | +| **version** | **Long** | | [optional] | +| **_default** | **Boolean** | Used to mark the default profile that will be assigned to agents when no profile is specified. | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentProvisionType (enum) +`DISABLED` | `NO_AUTO_INSTALL` | `AUTO_INSTALL_PER_APP_TYPE` | `AUTO_INSTALL_PER_APP_PROFILE` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentProfileControllerApi.md b/paas/docs/AgentProfileControllerApi.md new file mode 100644 index 00000000..bad82eb0 --- /dev/null +++ b/paas/docs/AgentProfileControllerApi.md @@ -0,0 +1,478 @@ +# AgentProfileControllerApi + +`ThingsboardClient` methods: + +``` +void assignAppProfileToAgentProfile(@Nonnull String agentProfileId, @Nonnull String applicationProfileId) // Assign App Profile to Agent Profile (assignAppProfileToAgentProfile) +void assignAppProfilesToAgentProfile(@Nonnull String agentProfileId, @Nullable List appProfileIds) // Assign Multiple App Profiles to Agent Profile (assignAppProfilesToAgentProfile) +AgentBulkAction bulkOperation(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull BulkOperationRequest bulkOperationRequest) // Bulk Operation (bulkOperation) +void deleteAgentProfile(@Nonnull String agentProfileId) // Delete Agent Profile (deleteAgentProfile) +PageDataAgentBulkAction getAgentProfileAppProfileBulkActions(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder) // Get Bulk Actions for Agent Profile and Application Profile (getAgentProfileAppProfileBulkActions) +List getAgentProfileAppProfileInfos(@Nonnull String agentProfileId) // Get Agent Profile App Profile Infos (getAgentProfileAppProfileInfos) +PageDataAgentBulkAction getAgentProfileBulkActions(@Nonnull String agentProfileId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder) // Get Bulk Actions for Agent Profile (getAgentProfileBulkActions) +AgentProfile getAgentProfileById(@Nonnull String agentProfileId) // Get Agent Profile (getAgentProfileById) +AgentProfileInfo getAgentProfileInfoById(@Nonnull String agentProfileId) // Get Agent Profile Info (getAgentProfileInfoById) +AgentInstructions getAgentProvisionInstructions(@Nonnull String agentProfileId, @Nonnull String method) // Get Agent Provision Instructions (getAgentProvisionInstructions) +AgentProfileInfo getDefaultAgentProfileInfo() // Get Default Agent Profile (getDefaultAgentProfileInfo) +PageDataAgentProfileInfo getTenantAgentProfileInfos(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) // Get Tenant Agent Profile Infos (getTenantAgentProfileInfos) +PageDataAgentProfile getTenantAgentProfiles(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) // Get Tenant Agent Profiles (getTenantAgentProfiles) +BulkOperationPreview previewBulkOperation(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull BulkOperationRequest bulkOperationRequest) // Preview Bulk Operation (previewBulkOperation) +AgentProfile saveAgentProfile(@Nonnull AgentProfile agentProfile, @Nullable List appProfileIds) // Create or Update Agent Profile (saveAgentProfile) +void setAppProfileRelatesOnAutoDiscovery(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull Boolean relate) // Set App Profile Relates On Auto-Discovery (setAppProfileRelatesOnAutoDiscovery) +AgentProfile setDefaultAgentProfile(@Nonnull String agentProfileId) // Make Agent Profile Default (setDefaultAgentProfile) +void unassignAppProfileFromAgentProfile(@Nonnull String agentProfileId, @Nonnull String applicationProfileId) // Unassign App Profile from Agent Profile (unassignAppProfileFromAgentProfile) +``` + + +## assignAppProfileToAgentProfile + +``` +void assignAppProfileToAgentProfile(@Nonnull String agentProfileId, @Nonnull String applicationProfileId) +``` + +**POST** `/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}` + +Assign App Profile to Agent Profile (assignAppProfileToAgentProfile) + +Assigns the given agent application profile to the agent profile, making it available to applications managed by that agent profile. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | +| **applicationProfileId** | **String** | Agent Application Profile Id | | + +### Return type + +null (empty response body) + + +## assignAppProfilesToAgentProfile + +``` +void assignAppProfilesToAgentProfile(@Nonnull String agentProfileId, @Nullable List appProfileIds) +``` + +**POST** `/api/agent/profile/{agentProfileId}/appProfiles/assign` + +Assign Multiple App Profiles to Agent Profile (assignAppProfilesToAgentProfile) + +Assigns the given set of agent application profiles to the agent profile in a single request, replacing the previous assignment set. An explicitly empty 'appProfileIds' value (e.g. 'appProfileIds=') removes all assignments. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | +| **appProfileIds** | **List** | Agent application profile ids that replace the current assignment set. An explicitly empty value removes all assignments. | [optional] | + +### Return type + +null (empty response body) + + +## bulkOperation + +``` +AgentBulkAction bulkOperation(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull BulkOperationRequest bulkOperationRequest) +``` + +**POST** `/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}/bulk` + +Bulk Operation (bulkOperation) + +Enqueues a bulk operation over the applications of the given agent profile and application profile and returns the created bulk action to track its progress. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | +| **applicationProfileId** | **String** | Agent Application Profile Id | | +| **bulkOperationRequest** | **BulkOperationRequest** | | | + +### Return type + +**AgentBulkAction** + + +## deleteAgentProfile + +``` +void deleteAgentProfile(@Nonnull String agentProfileId) +``` + +**DELETE** `/api/agent/profile/{agentProfileId}` + +Delete Agent Profile (deleteAgentProfile) + +Deletes the Agent Profile. Referencing a non-existing Agent Profile Id will cause an error. The default Agent Profile can not be deleted. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | + +### Return type + +null (empty response body) + + +## getAgentProfileAppProfileBulkActions + +``` +PageDataAgentBulkAction getAgentProfileAppProfileBulkActions(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}/bulk` + +Get Bulk Actions for Agent Profile and Application Profile (getAgentProfileAppProfileBulkActions) + +Returns a page of bulk actions previously submitted for the given agent profile and application profile pair. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | +| **applicationProfileId** | **String** | Agent Application Profile Id | | +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **sortProperty** | **String** | Property of entity to sort by | [optional] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] | + +### Return type + +**PageDataAgentBulkAction** + + +## getAgentProfileAppProfileInfos + +``` +List getAgentProfileAppProfileInfos(@Nonnull String agentProfileId) +``` + +**GET** `/api/agent/profile/{agentProfileId}/appProfilesInfo` + +Get Agent Profile App Profile Infos (getAgentProfileAppProfileInfos) + +Returns app profiles assigned to the given agent profile, enriched with template version, the count of AgentApplications using each app profile within this agent profile and the additional info of the assignment relation. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | + +### Return type + +**List** + + +## getAgentProfileBulkActions + +``` +PageDataAgentBulkAction getAgentProfileBulkActions(@Nonnull String agentProfileId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/agent/profile/{agentProfileId}/bulk` + +Get Bulk Actions for Agent Profile (getAgentProfileBulkActions) + +Returns a page of bulk actions previously submitted for the given agent profile. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **sortProperty** | **String** | Property of entity to sort by | [optional] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] | + +### Return type + +**PageDataAgentBulkAction** + + +## getAgentProfileById + +``` +AgentProfile getAgentProfileById(@Nonnull String agentProfileId) +``` + +**GET** `/api/agent/profile/{agentProfileId}` + +Get Agent Profile (getAgentProfileById) + +Fetch the Agent Profile object based on the provided Agent Profile Id. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | + +### Return type + +**AgentProfile** + + +## getAgentProfileInfoById + +``` +AgentProfileInfo getAgentProfileInfoById(@Nonnull String agentProfileId) +``` + +**GET** `/api/agent/profile/info/{agentProfileId}` + +Get Agent Profile Info (getAgentProfileInfoById) + +Fetch the Agent Profile Info object based on the provided Agent Profile Id. Agent Profile Info is a lightweight object that omits the auto-provision key and secret; it is readable by any tenant admin so agent screens can resolve the linked profile. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | + +### Return type + +**AgentProfileInfo** + + +## getAgentProvisionInstructions + +``` +AgentInstructions getAgentProvisionInstructions(@Nonnull String agentProfileId, @Nonnull String method) +``` + +**GET** `/api/agent/profile/instructions/provision/{agentProfileId}/{method}` + +Get Agent Provision Instructions (getAgentProvisionInstructions) + +Returns the auto-provision docker command for the specified agent profile with the server address and gRPC port resolved server-side. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | +| **method** | **String** | Installation method ('docker') | [enum: docker] | + +### Return type + +**AgentInstructions** + + +## getDefaultAgentProfileInfo + +``` +AgentProfileInfo getDefaultAgentProfileInfo() +``` + +**GET** `/api/agent/profile/info/default` + +Get Default Agent Profile (getDefaultAgentProfileInfo) + +Fetch the Agent Profile Info object that is marked as default within the current tenant scope. Available for users with 'TENANT_ADMIN' authority. + +### Return type + +**AgentProfileInfo** + + +## getTenantAgentProfileInfos + +``` +PageDataAgentProfileInfo getTenantAgentProfileInfos(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/tenant/agent/profileInfos` + +Get Tenant Agent Profile Infos (getTenantAgentProfileInfos) + +Returns a page of Agent Profile Info objects owned by the current tenant. Agent Profile Info is a lightweight object that contains only id and name of the profile. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | | [optional] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] | + +### Return type + +**PageDataAgentProfileInfo** + + +## getTenantAgentProfiles + +``` +PageDataAgentProfile getTenantAgentProfiles(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) +``` + +**GET** `/api/tenant/agent/profiles` + +Get Tenant Agent Profiles (getTenantAgentProfiles) + +Returns a page of Agent Profile objects owned by the current tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **pageSize** | **Integer** | Maximum amount of entities in a one page | | +| **page** | **Integer** | Sequence number of page starting from 0 | | +| **textSearch** | **String** | | [optional] | +| **sortProperty** | **String** | Property of entity to sort by | [optional] | +| **sortOrder** | **String** | Sort order. ASC (ASCENDING) or DESC (DESCENDING) | [optional] | + +### Return type + +**PageDataAgentProfile** + + +## previewBulkOperation + +``` +BulkOperationPreview previewBulkOperation(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull BulkOperationRequest bulkOperationRequest) +``` + +**POST** `/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}/bulk/preview` + +Preview Bulk Operation (previewBulkOperation) + +Previews the effect of a bulk operation over the applications of the given agent profile and application profile without enqueuing it, returning the set of affected applications and the resulting actions. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | +| **applicationProfileId** | **String** | Agent Application Profile Id | | +| **bulkOperationRequest** | **BulkOperationRequest** | | | + +### Return type + +**BulkOperationPreview** + + +## saveAgentProfile + +``` +AgentProfile saveAgentProfile(@Nonnull AgentProfile agentProfile, @Nullable List appProfileIds) +``` + +**POST** `/api/agent/profile` + +Create or Update Agent Profile (saveAgentProfile) + +Creates or updates the Agent Profile. When an id is not present in the request, a new Agent Profile is created, otherwise the existing one is updated. Optionally synchronizes the agent application profile assignments in the same request: when the 'appProfileIds' parameter is absent, existing assignments are left untouched; when it is present, the assignment set is replaced with the given ids — including an explicitly empty value (e.g. 'appProfileIds='), which removes all assignments. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfile** | **AgentProfile** | | | +| **appProfileIds** | **List** | Agent application profile ids to assign to this agent profile. Absent: assignments are not modified. Present: assignments are replaced with the given ids; an explicitly empty value removes all assignments. | [optional] | + +### Return type + +**AgentProfile** + + +## setAppProfileRelatesOnAutoDiscovery + +``` +void setAppProfileRelatesOnAutoDiscovery(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull Boolean relate) +``` + +**POST** `/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}/autoDiscovery` + +Set App Profile Relates On Auto-Discovery (setAppProfileRelatesOnAutoDiscovery) + +Enables or disables automatic assignment of the app profile to new auto-discovered applications with a matching template. Only one app profile per agent profile and template pair may relate on auto-discovery. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | +| **applicationProfileId** | **String** | Agent Application Profile Id | | +| **relate** | **Boolean** | Whether the app profile should be auto-assigned to new auto-discovered applications with a matching template | | + +### Return type + +null (empty response body) + + +## setDefaultAgentProfile + +``` +AgentProfile setDefaultAgentProfile(@Nonnull String agentProfileId) +``` + +**POST** `/api/agent/profile/{agentProfileId}/default` + +Make Agent Profile Default (setDefaultAgentProfile) + +Marks agent profile as default within a tenant scope. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | + +### Return type + +**AgentProfile** + + +## unassignAppProfileFromAgentProfile + +``` +void unassignAppProfileFromAgentProfile(@Nonnull String agentProfileId, @Nonnull String applicationProfileId) +``` + +**DELETE** `/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}` + +Unassign App Profile from Agent Profile (unassignAppProfileFromAgentProfile) + +Removes the assignment of the given agent application profile from the agent profile. Available for users with 'TENANT_ADMIN' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **agentProfileId** | **String** | Agent Profile Id | | +| **applicationProfileId** | **String** | Agent Application Profile Id | | + +### Return type + +null (empty response body) + diff --git a/paas/docs/AgentProfileId.md b/paas/docs/AgentProfileId.md new file mode 100644 index 00000000..1c78f83c --- /dev/null +++ b/paas/docs/AgentProfileId.md @@ -0,0 +1,30 @@ + +# AgentProfileId + +`org.thingsboard.client.model.AgentProfileId` + +**Extends:** **EntityId** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| + + + +## Referenced Types + +> **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentProfileInfo.md b/paas/docs/AgentProfileInfo.md new file mode 100644 index 00000000..34f4667a --- /dev/null +++ b/paas/docs/AgentProfileInfo.md @@ -0,0 +1,41 @@ + +# AgentProfileInfo + +`org.thingsboard.client.model.AgentProfileInfo` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **id** | **AgentProfileId** | JSON object with the Agent Profile Id. | [optional] | +| **createdTime** | **Long** | Timestamp of the profile creation, in milliseconds | [optional] [readonly] | +| **tenantId** | **TenantId** | JSON object with Tenant Id. | [optional] [readonly] | +| **name** | **String** | Unique profile name within tenant | | +| **description** | **String** | Profile description | [optional] | +| **provisionKey** | **String** | Provision key for future auto-provisioning | [optional] | +| **provisionSecret** | **String** | Provision secret for future auto-provisioning | [optional] | +| **provisionType** | **AgentProvisionType** | Provisioning strategy. DISABLED by default. | [optional] | +| **version** | **Long** | | [optional] | +| **_default** | **Boolean** | Used to mark the default profile that will be assigned to agents when no profile is specified. | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentProvisionType (enum) +`DISABLED` | `NO_AUTO_INSTALL` | `AUTO_INSTALL_PER_APP_TYPE` | `AUTO_INSTALL_PER_APP_PROFILE` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentProvisionType.md b/paas/docs/AgentProvisionType.md new file mode 100644 index 00000000..cee8e69f --- /dev/null +++ b/paas/docs/AgentProvisionType.md @@ -0,0 +1,27 @@ + +# AgentProvisionType + +`org.thingsboard.client.model.AgentProvisionType` + +## Enum Values + + +* `DISABLED` (value: `"DISABLED"`) + +* `NO_AUTO_INSTALL` (value: `"NO_AUTO_INSTALL"`) + +* `AUTO_INSTALL_PER_APP_TYPE` (value: `"AUTO_INSTALL_PER_APP_TYPE"`) + +* `AUTO_INSTALL_PER_APP_PROFILE` (value: `"AUTO_INSTALL_PER_APP_PROFILE"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AgentUpgradeRequest.md b/paas/docs/AgentUpgradeRequest.md new file mode 100644 index 00000000..ea78710f --- /dev/null +++ b/paas/docs/AgentUpgradeRequest.md @@ -0,0 +1,22 @@ + +# AgentUpgradeRequest + +`org.thingsboard.client.model.AgentUpgradeRequest` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **imageRef** | **String** | Target agent image reference — a digest-pinned reference in production, or a tag. | | + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/AiChatControllerApi.md b/paas/docs/AiChatControllerApi.md index 3111fde1..2ddd7966 100644 --- a/paas/docs/AiChatControllerApi.md +++ b/paas/docs/AiChatControllerApi.md @@ -6,7 +6,7 @@ com.fasterxml.jackson.databind.JsonNode createChat(@Nonnull Object body) // createChat void deleteChat(@Nonnull UUID chatId) // deleteChat com.fasterxml.jackson.databind.JsonNode getChatMessages(@Nonnull UUID chatId) // getChatMessages -com.fasterxml.jackson.databind.JsonNode listChats(@Nonnull ChatType chatType) // listChats +com.fasterxml.jackson.databind.JsonNode listChats() // listChats List sendChatMessage(@Nonnull UUID chatId, @Nonnull String xAuthorization, @Nonnull Object body, @Nullable String acceptLanguage) // sendChatMessage void updateChat(@Nonnull UUID chatId, @Nonnull Object body) // updateChat ``` @@ -81,20 +81,13 @@ getChatMessages ## listChats ``` -com.fasterxml.jackson.databind.JsonNode listChats(@Nonnull ChatType chatType) +com.fasterxml.jackson.databind.JsonNode listChats() ``` -**GET** `/api/ai/chats/{chatType}` +**GET** `/api/ai/chats` listChats - -### Parameters - -| Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **chatType** | **ChatType** | | [enum: GENERIC, SOLUTION_BUILDER] | - ### Return type **com.fasterxml.jackson.databind.JsonNode** diff --git a/paas/docs/AiModel.md b/paas/docs/AiModel.md index 4d6e43dd..e9d4be07 100644 --- a/paas/docs/AiModel.md +++ b/paas/docs/AiModel.md @@ -18,7 +18,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AiModelConfig | Name | Type | Description | Notes | @@ -151,7 +151,7 @@ | modelType | AiModelType | | [optional] [readonly] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### OpenAiProviderConfig | Name | Type | Description | Notes | diff --git a/paas/docs/AiModelExportData.md b/paas/docs/AiModelExportData.md index 738eb9db..28eea395 100644 --- a/paas/docs/AiModelExportData.md +++ b/paas/docs/AiModelExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/AiModelId.md b/paas/docs/AiModelId.md index 5827f8d6..64954eaf 100644 --- a/paas/docs/AiModelId.md +++ b/paas/docs/AiModelId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/Alarm.md b/paas/docs/Alarm.md index 20aaadfe..64e4e1cc 100644 --- a/paas/docs/Alarm.md +++ b/paas/docs/Alarm.md @@ -35,7 +35,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AlarmSeverity (enum) `CRITICAL` | `MAJOR` | `MINOR` | `WARNING` | `INDETERMINATE` @@ -44,7 +44,7 @@ `ACTIVE_UNACK` | `ACTIVE_ACK` | `CLEARED_UNACK` | `CLEARED_ACK` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AlarmAssignee.md b/paas/docs/AlarmAssignee.md index 0e2092a1..20a81c47 100644 --- a/paas/docs/AlarmAssignee.md +++ b/paas/docs/AlarmAssignee.md @@ -16,10 +16,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AlarmCalculatedFieldConfiguration.md b/paas/docs/AlarmCalculatedFieldConfiguration.md index f159bab3..d111ebb5 100644 --- a/paas/docs/AlarmCalculatedFieldConfiguration.md +++ b/paas/docs/AlarmCalculatedFieldConfiguration.md @@ -22,7 +22,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CalculatedFieldConfiguration | Name | Type | Description | Notes | @@ -111,7 +111,7 @@ `CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ArgumentType (enum) `TS_LATEST` | `ATTRIBUTE` | `TS_ROLLING` diff --git a/paas/docs/AlarmComment.md b/paas/docs/AlarmComment.md index eb326cd7..54edbc53 100644 --- a/paas/docs/AlarmComment.md +++ b/paas/docs/AlarmComment.md @@ -19,7 +19,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AlarmCommentId | Name | Type | Description | Notes | @@ -30,7 +30,7 @@ `SYSTEM` | `OTHER` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AlarmCommentInfo.md b/paas/docs/AlarmCommentInfo.md index 9b2e525a..e0568d56 100644 --- a/paas/docs/AlarmCommentInfo.md +++ b/paas/docs/AlarmCommentInfo.md @@ -22,7 +22,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AlarmCommentId | Name | Type | Description | Notes | @@ -33,7 +33,7 @@ `SYSTEM` | `OTHER` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AlarmCountQuery.md b/paas/docs/AlarmCountQuery.md index 29332e8b..62173edd 100644 --- a/paas/docs/AlarmCountQuery.md +++ b/paas/docs/AlarmCountQuery.md @@ -26,7 +26,7 @@ A JSON value representing the alarm count query. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityFilter | Name | Type | Description | Notes | @@ -263,7 +263,7 @@ A JSON value representing the alarm count query. | id | UUID | ID of the entity, time-based UUID v1 | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` diff --git a/paas/docs/AlarmData.md b/paas/docs/AlarmData.md index 74276958..1556c77e 100644 --- a/paas/docs/AlarmData.md +++ b/paas/docs/AlarmData.md @@ -41,7 +41,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AlarmSeverity (enum) `CRITICAL` | `MAJOR` | `MINOR` | `WARNING` | `INDETERMINATE` @@ -65,7 +65,7 @@ `ACTIVE_UNACK` | `ACTIVE_ACK` | `CLEARED_UNACK` | `CLEARED_ACK` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AlarmDataPageLink.md b/paas/docs/AlarmDataPageLink.md index db081717..413b3617 100644 --- a/paas/docs/AlarmDataPageLink.md +++ b/paas/docs/AlarmDataPageLink.md @@ -25,7 +25,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityDataSortOrder | Name | Type | Description | Notes | @@ -52,7 +52,7 @@ `ATTRIBUTE` | `CLIENT_ATTRIBUTE` | `SHARED_ATTRIBUTE` | `SERVER_ATTRIBUTE` | `TIME_SERIES` | `ENTITY_FIELD` | `ALARM_FIELD` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AlarmDataQuery.md b/paas/docs/AlarmDataQuery.md index d35a7887..e9ba8af6 100644 --- a/paas/docs/AlarmDataQuery.md +++ b/paas/docs/AlarmDataQuery.md @@ -22,7 +22,7 @@ A JSON value representing the alarm data query. See API call notes above for mor ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityFilter | Name | Type | Description | Notes | @@ -285,7 +285,7 @@ A JSON value representing the alarm data query. See API call notes above for mor | id | UUID | ID of the entity, time-based UUID v1 | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` diff --git a/paas/docs/AlarmFilterConfig.md b/paas/docs/AlarmFilterConfig.md index 7b2379c5..8ebf5ae4 100644 --- a/paas/docs/AlarmFilterConfig.md +++ b/paas/docs/AlarmFilterConfig.md @@ -17,7 +17,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AlarmSearchStatus (enum) `ANY` | `ACTIVE` | `CLEARED` | `ACK` | `UNACK` @@ -26,7 +26,7 @@ `CRITICAL` | `MAJOR` | `MINOR` | `WARNING` | `INDETERMINATE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AlarmId.md b/paas/docs/AlarmId.md index aa5fa089..18d53a81 100644 --- a/paas/docs/AlarmId.md +++ b/paas/docs/AlarmId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AlarmInfo.md b/paas/docs/AlarmInfo.md index 4d5425e3..4dc6c520 100644 --- a/paas/docs/AlarmInfo.md +++ b/paas/docs/AlarmInfo.md @@ -39,7 +39,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AlarmSeverity (enum) `CRITICAL` | `MAJOR` | `MINOR` | `WARNING` | `INDETERMINATE` @@ -56,7 +56,7 @@ `ACTIVE_UNACK` | `ACTIVE_ACK` | `CLEARED_UNACK` | `CLEARED_ACK` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AlarmRule.md b/paas/docs/AlarmRule.md index 30b36d41..e85141d2 100644 --- a/paas/docs/AlarmRule.md +++ b/paas/docs/AlarmRule.md @@ -15,7 +15,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AlarmCondition | Name | Type | Description | Notes | @@ -98,7 +98,7 @@ | dynamicValueArgument | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### AlarmConditionFilter | Name | Type | Description | Notes | diff --git a/paas/docs/AlarmRuleControllerApi.md b/paas/docs/AlarmRuleControllerApi.md index 6a1b8cbd..1cd23a40 100644 --- a/paas/docs/AlarmRuleControllerApi.md +++ b/paas/docs/AlarmRuleControllerApi.md @@ -108,7 +108,7 @@ Fetch tenant alarm rules based on the filter. Available for users with 'TENANT_ |------------- | ------------- | ------------- | -------------| | **pageSize** | **Integer** | Maximum amount of entities in a one page | | | **page** | **Integer** | Sequence number of page starting from 0 | | -| **entityType** | **EntityType** | Entity type filter. If not specified, alarm rules for all supported entity types will be returned. | [optional] [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | +| **entityType** | **EntityType** | Entity type filter. If not specified, alarm rules for all supported entity types will be returned. | [optional] [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, AGENT, AGENT_APPLICATION, AGENT_APP_EVENT, AGENT_APP_UNIT, AGENT_APP_PROFILE, AGENT_PROFILE, AGENT_BULK_ACTION, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | | **entities** | **Set** | Entities filter. If not specified, alarm rules for entity type filter will be returned. | [optional] | | **textSearch** | **String** | The case insensitive 'substring' filter based on the calculated field name. | [optional] | | **sortProperty** | **String** | Property of entity to sort by | [optional] [enum: createdTime, name] | diff --git a/paas/docs/AlarmRuleDefinition.md b/paas/docs/AlarmRuleDefinition.md index b80eba9d..d1401008 100644 --- a/paas/docs/AlarmRuleDefinition.md +++ b/paas/docs/AlarmRuleDefinition.md @@ -23,7 +23,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DebugSettings | Name | Type | Description | Notes | @@ -33,7 +33,7 @@ | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### CalculatedFieldConfiguration | Name | Type | Description | Notes | diff --git a/paas/docs/AlarmRuleDefinitionInfo.md b/paas/docs/AlarmRuleDefinitionInfo.md index 2670a604..808d4a73 100644 --- a/paas/docs/AlarmRuleDefinitionInfo.md +++ b/paas/docs/AlarmRuleDefinitionInfo.md @@ -24,7 +24,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DebugSettings | Name | Type | Description | Notes | @@ -34,7 +34,7 @@ | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### CalculatedFieldConfiguration | Name | Type | Description | Notes | diff --git a/paas/docs/AlarmTableComponent.md b/paas/docs/AlarmTableComponent.md index b591aa9e..19e834df 100644 --- a/paas/docs/AlarmTableComponent.md +++ b/paas/docs/AlarmTableComponent.md @@ -25,7 +25,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportComponent | Name | Type | Description | Notes | @@ -258,7 +258,7 @@ | color | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### LineSeriesStepType (enum) `START` | `MIDDLE` | `END` diff --git a/paas/docs/AliasEntityId.md b/paas/docs/AliasEntityId.md index 5e5c6793..3d541ea0 100644 --- a/paas/docs/AliasEntityId.md +++ b/paas/docs/AliasEntityId.md @@ -19,7 +19,7 @@ `CURRENT_CUSTOMER` | `CURRENT_TENANT` | `CURRENT_USER` | `CURRENT_USER_OWNER` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AllowedPermissionsInfo.md b/paas/docs/AllowedPermissionsInfo.md index 4824338e..dbdbec46 100644 --- a/paas/docs/AllowedPermissionsInfo.md +++ b/paas/docs/AllowedPermissionsInfo.md @@ -19,13 +19,13 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Operation (enum) `ALL` | `CREATE` | `READ` | `WRITE` | `DELETE` | `RPC_CALL` | `READ_CREDENTIALS` | `WRITE_CREDENTIALS` | `READ_ATTRIBUTES` | `WRITE_ATTRIBUTES` | … (21 values total) #### Resource (enum) -`ALL` | `PROFILE` | `ADMIN_SETTINGS` | `ALARM` | `DEVICE` | `ASSET` | `CUSTOMER` | `DASHBOARD` | `ENTITY_VIEW` | `EDGE` | … (55 values total) +`ALL` | `PROFILE` | `ADMIN_SETTINGS` | `ALARM` | `DEVICE` | `ASSET` | `CUSTOMER` | `DASHBOARD` | `ENTITY_VIEW` | `EDGE` | … (59 values total) #### MergedUserPermissions | Name | Type | Description | Notes | @@ -50,7 +50,7 @@ | hasGenericRead | Boolean | Indicates if generic permission assigned to the user group. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ApiKey.md b/paas/docs/ApiKey.md index 99f809f4..92e7c641 100644 --- a/paas/docs/ApiKey.md +++ b/paas/docs/ApiKey.md @@ -21,10 +21,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ApiKeyId.md b/paas/docs/ApiKeyId.md index 31452af0..dabcb8c5 100644 --- a/paas/docs/ApiKeyId.md +++ b/paas/docs/ApiKeyId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ApiKeyInfo.md b/paas/docs/ApiKeyInfo.md index 36df8a2e..dcbc746a 100644 --- a/paas/docs/ApiKeyInfo.md +++ b/paas/docs/ApiKeyInfo.md @@ -22,10 +22,10 @@ A JSON value representing the API key. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ApiUsageStateFilter.md b/paas/docs/ApiUsageStateFilter.md index 75bdd427..8e5fac36 100644 --- a/paas/docs/ApiUsageStateFilter.md +++ b/paas/docs/ApiUsageStateFilter.md @@ -15,7 +15,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityFilter | Name | Type | Description | Notes | @@ -23,7 +23,7 @@ | type | String | | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ApiUsageStateId.md b/paas/docs/ApiUsageStateId.md index d3781a27..79a8d6ef 100644 --- a/paas/docs/ApiUsageStateId.md +++ b/paas/docs/ApiUsageStateId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/Argument.md b/paas/docs/Argument.md index 4af8f83a..c37a26f5 100644 --- a/paas/docs/Argument.md +++ b/paas/docs/Argument.md @@ -18,7 +18,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CfArgumentDynamicSourceConfiguration | Name | Type | Description | Notes | @@ -41,7 +41,7 @@ | scope | AttributeScope | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ArgumentType (enum) `TS_LATEST` | `ATTRIBUTE` | `TS_ROLLING` diff --git a/paas/docs/Asset.md b/paas/docs/Asset.md index a1921605..cefd8137 100644 --- a/paas/docs/Asset.md +++ b/paas/docs/Asset.md @@ -23,10 +23,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AssetExportData.md b/paas/docs/AssetExportData.md index 10483c1d..b3c468d0 100644 --- a/paas/docs/AssetExportData.md +++ b/paas/docs/AssetExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/AssetId.md b/paas/docs/AssetId.md index 3b08406d..a99c705b 100644 --- a/paas/docs/AssetId.md +++ b/paas/docs/AssetId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AssetInfo.md b/paas/docs/AssetInfo.md index ec7ca019..9e3253e8 100644 --- a/paas/docs/AssetInfo.md +++ b/paas/docs/AssetInfo.md @@ -25,7 +25,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityInfo | Name | Type | Description | Notes | @@ -34,7 +34,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AssetProfile.md b/paas/docs/AssetProfile.md index 9ccab8ef..0b54df0c 100644 --- a/paas/docs/AssetProfile.md +++ b/paas/docs/AssetProfile.md @@ -26,10 +26,10 @@ A JSON value representing the asset profile. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AssetProfileExportData.md b/paas/docs/AssetProfileExportData.md index cdf056a4..65fa272a 100644 --- a/paas/docs/AssetProfileExportData.md +++ b/paas/docs/AssetProfileExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/AssetProfileId.md b/paas/docs/AssetProfileId.md index 04773ff1..80797251 100644 --- a/paas/docs/AssetProfileId.md +++ b/paas/docs/AssetProfileId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AssetProfileInfo.md b/paas/docs/AssetProfileInfo.md index b19db109..f4d394f2 100644 --- a/paas/docs/AssetProfileInfo.md +++ b/paas/docs/AssetProfileInfo.md @@ -17,10 +17,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AssetSearchQuery.md b/paas/docs/AssetSearchQuery.md index c99877a9..866f25f4 100644 --- a/paas/docs/AssetSearchQuery.md +++ b/paas/docs/AssetSearchQuery.md @@ -26,13 +26,13 @@ | fetchLastLevelOnly | Boolean | Fetch entities that match the last level of search. Useful to find Devices that are strictly 'maxLevel' relations away from the root entity. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` --- diff --git a/paas/docs/AssetSearchQueryFilter.md b/paas/docs/AssetSearchQueryFilter.md index 203d153e..36e9da6f 100644 --- a/paas/docs/AssetSearchQueryFilter.md +++ b/paas/docs/AssetSearchQueryFilter.md @@ -41,7 +41,7 @@ `CURRENT_CUSTOMER` | `CURRENT_TENANT` | `CURRENT_USER` | `CURRENT_USER_OWNER` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AuditLog.md b/paas/docs/AuditLog.md index 56258051..6c257a25 100644 --- a/paas/docs/AuditLog.md +++ b/paas/docs/AuditLog.md @@ -24,7 +24,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AuditLogId | Name | Type | Description | Notes | @@ -38,7 +38,7 @@ `SUCCESS` | `FAILURE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AvailableEntityKeys.md b/paas/docs/AvailableEntityKeys.md index 9faa8bfb..a25845b1 100644 --- a/paas/docs/AvailableEntityKeys.md +++ b/paas/docs/AvailableEntityKeys.md @@ -18,7 +18,7 @@ Contains unique time series and attribute key names discovered from entities mat ## Referenced Types #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/AvailableEntityKeysV2.md b/paas/docs/AvailableEntityKeysV2.md index bccc8e9b..305856e7 100644 --- a/paas/docs/AvailableEntityKeysV2.md +++ b/paas/docs/AvailableEntityKeysV2.md @@ -19,7 +19,7 @@ Contains unique time series and attribute key names discovered from entities mat ## Referenced Types #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### KeyInfo | Name | Type | Description | Notes | diff --git a/paas/docs/BackupVolumesRemoveStep.md b/paas/docs/BackupVolumesRemoveStep.md new file mode 100644 index 00000000..8bd9d20f --- /dev/null +++ b/paas/docs/BackupVolumesRemoveStep.md @@ -0,0 +1,39 @@ + +# BackupVolumesRemoveStep + +`org.thingsboard.client.model.BackupVolumesRemoveStep` + +**Extends:** **AgentAppStep** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| + + + +## Referenced Types + +#### AgentAppStep +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | UUID | | [optional] | +| nextId | UUID | | [optional] | +| title | String | | [optional] | +| templateOnly | Boolean | | [optional] | +| condition | String | | [optional] | +| stateful | Boolean | | [optional] | +| type | AgentAppStepType | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/BackupVolumesStep.md b/paas/docs/BackupVolumesStep.md new file mode 100644 index 00000000..2e1c9257 --- /dev/null +++ b/paas/docs/BackupVolumesStep.md @@ -0,0 +1,56 @@ + +# BackupVolumesStep + +`org.thingsboard.client.model.BackupVolumesStep` + +**Extends:** **AgentAppStep** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **state** | **BackupVolumesStepState** | | [optional] | + + + +## Referenced Types + +#### AgentAppStep +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | UUID | | [optional] | +| nextId | UUID | | [optional] | +| title | String | | [optional] | +| templateOnly | Boolean | | [optional] | +| condition | String | | [optional] | +| stateful | Boolean | | [optional] | +| type | AgentAppStepType | | [optional] | + +#### BackupVolumesStepState *(extends AgentAppStepState)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| backupVolumes | StepFieldListString | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### AgentAppStepState +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/BackupVolumesStepState.md b/paas/docs/BackupVolumesStepState.md new file mode 100644 index 00000000..6c289717 --- /dev/null +++ b/paas/docs/BackupVolumesStepState.md @@ -0,0 +1,40 @@ + +# BackupVolumesStepState + +`org.thingsboard.client.model.BackupVolumesStepState` + +**Extends:** **AgentAppStepState** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **backupVolumes** | **StepFieldListString** | | [optional] | + + + +## Referenced Types + +#### AgentAppStepState +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/BillingCustomerId.md b/paas/docs/BillingCustomerId.md index 81efa0fc..6221589e 100644 --- a/paas/docs/BillingCustomerId.md +++ b/paas/docs/BillingCustomerId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/BlobEntityId.md b/paas/docs/BlobEntityId.md index 80651fe2..ab751f5a 100644 --- a/paas/docs/BlobEntityId.md +++ b/paas/docs/BlobEntityId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/BlobEntityInfo.md b/paas/docs/BlobEntityInfo.md index de795cc1..5dc7aee4 100644 --- a/paas/docs/BlobEntityInfo.md +++ b/paas/docs/BlobEntityInfo.md @@ -30,10 +30,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/BlobEntityWithCustomerInfo.md b/paas/docs/BlobEntityWithCustomerInfo.md index 174678a0..90029ed5 100644 --- a/paas/docs/BlobEntityWithCustomerInfo.md +++ b/paas/docs/BlobEntityWithCustomerInfo.md @@ -32,10 +32,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/BulkImportRequest.md b/paas/docs/BulkImportRequest.md index 84ab3e98..9a95795b 100644 --- a/paas/docs/BulkImportRequest.md +++ b/paas/docs/BulkImportRequest.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Mapping | Name | Type | Description | Notes | @@ -36,7 +36,7 @@ `NAME` | `TYPE` | `LABEL` | `SHARED_ATTRIBUTE` | `SERVER_ATTRIBUTE` | `TIMESERIES` | `ACCESS_TOKEN` | `X509` | `MQTT_CLIENT_ID` | `MQTT_USER_NAME` | … (32 values total) #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/BulkOperationPreview.md b/paas/docs/BulkOperationPreview.md new file mode 100644 index 00000000..e67fc96c --- /dev/null +++ b/paas/docs/BulkOperationPreview.md @@ -0,0 +1,45 @@ + +# BulkOperationPreview + +`org.thingsboard.client.model.BulkOperationPreview` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **total** | **Integer** | Total number of apps targeted by the bulk operation | [optional] | +| **eligible** | **Integer** | Number of apps that would be submitted (total minus skipped) | [optional] | +| **skippedCountsByReason** | **Map\** | Skip count per reason for the targeted apps | [optional] | +| **skippedSample** | **List\** | Sample of skipped apps, capped per reason. Use the run history to inspect the full list. | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### SkippedApp +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| agentId | AgentId | Agent Id owning the application | [optional] | +| agentName | String | Agent name | [optional] | +| applicationId | AgentApplicationId | Application Id | [optional] | +| applicationName | String | Application name | [optional] | +| reason | SkipReason | Reason for skipping | [optional] | +| msg | String | Optional message in case of a failure | [optional] | + +#### SkipReason (enum) +`VERSION_MISMATCH` | `ACTIVE_EVENT` | `RATE_LIMIT_EXCEEDED` | `ERROR` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/BulkOperationRequest.md b/paas/docs/BulkOperationRequest.md new file mode 100644 index 00000000..b3a94355 --- /dev/null +++ b/paas/docs/BulkOperationRequest.md @@ -0,0 +1,84 @@ + +# BulkOperationRequest + +`org.thingsboard.client.model.BulkOperationRequest` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **actionType** | **AgentAppEventActionType** | | [optional] | +| **stepInputs** | **Map\** | | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppEventActionType (enum) +`INSTALL` | `UPDATE` | `DELETE` | `RESTART` | `ROLLBACK` | `UPGRADE` | `AGENT_UPGRADE` + +#### AgentAppEventStepStatesValue +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | +| backupVolumes | StepFieldListString | | [optional] | +| serviceImageRegexPatterns | StepFieldListString | | [optional] | +| removeVolumes | StepFieldBoolean | | [optional] | +| pullImages | StepFieldBoolean | | [optional] | +| failedEventId | StepFieldAgentAppEventId | | [optional] | +| image | StepFieldString | | [optional] | +| entrypoint | StepFieldListString | | [optional] | +| cmd | StepFieldListString | | [optional] | +| env | StepFieldListString | | [optional] | +| binds | StepFieldListString | | [optional] | +| networks | StepFieldListString | | [optional] | +| retries | StepFieldInteger | | [optional] | +| networkFromServiceImageRegexPattern | StepFieldString | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldAgentAppEventId +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | AgentAppEventId | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | String | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldInteger +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Integer | | [optional] | +| userChoice | Boolean | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/CalculatedField.md b/paas/docs/CalculatedField.md index 8ef4c595..a23666f7 100644 --- a/paas/docs/CalculatedField.md +++ b/paas/docs/CalculatedField.md @@ -24,7 +24,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` @@ -104,7 +104,7 @@ | useLatestTs | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### Output | Name | Type | Description | Notes | diff --git a/paas/docs/CalculatedFieldConfiguration.md b/paas/docs/CalculatedFieldConfiguration.md index 903276c5..6f8ac6fb 100644 --- a/paas/docs/CalculatedFieldConfiguration.md +++ b/paas/docs/CalculatedFieldConfiguration.md @@ -77,7 +77,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Output | Name | Type | Description | Notes | @@ -308,7 +308,7 @@ *See AttributesOutputStrategy for properties.* #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ArgumentType (enum) `TS_LATEST` | `ATTRIBUTE` | `TS_ROLLING` diff --git a/paas/docs/CalculatedFieldControllerApi.md b/paas/docs/CalculatedFieldControllerApi.md index 8674c014..54eed6d0 100644 --- a/paas/docs/CalculatedFieldControllerApi.md +++ b/paas/docs/CalculatedFieldControllerApi.md @@ -114,7 +114,7 @@ Fetch tenant calculated fields based on the filter. | **pageSize** | **Integer** | Maximum amount of entities in a one page | | | **page** | **Integer** | Sequence number of page starting from 0 | | | **types** | **Set** | Calculated field types filter. | [optional] | -| **entityType** | **EntityType** | Entity type filter. If not specified, calculated fields for all supported entity types will be returned. | [optional] [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | +| **entityType** | **EntityType** | Entity type filter. If not specified, calculated fields for all supported entity types will be returned. | [optional] [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, AGENT, AGENT_APPLICATION, AGENT_APP_EVENT, AGENT_APP_UNIT, AGENT_APP_PROFILE, AGENT_PROFILE, AGENT_BULK_ACTION, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | | **entities** | **Set** | Entities filter. If not specified, calculated fields for entity type filter will be returned. | [optional] | | **textSearch** | **String** | The case insensitive 'substring' filter based on the calculated field name. | [optional] | | **sortProperty** | **String** | Property of entity to sort by | [optional] [enum: createdTime, name] | diff --git a/paas/docs/CalculatedFieldId.md b/paas/docs/CalculatedFieldId.md index 855c83ac..9092c5a0 100644 --- a/paas/docs/CalculatedFieldId.md +++ b/paas/docs/CalculatedFieldId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/CalculatedFieldInfo.md b/paas/docs/CalculatedFieldInfo.md index 292705d5..8a780ec0 100644 --- a/paas/docs/CalculatedFieldInfo.md +++ b/paas/docs/CalculatedFieldInfo.md @@ -25,7 +25,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` @@ -105,7 +105,7 @@ | useLatestTs | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### Output | Name | Type | Description | Notes | diff --git a/paas/docs/CfReprocessingJobConfiguration.md b/paas/docs/CfReprocessingJobConfiguration.md index 6bbf296a..e3b5f57a 100644 --- a/paas/docs/CfReprocessingJobConfiguration.md +++ b/paas/docs/CfReprocessingJobConfiguration.md @@ -18,7 +18,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### JobConfiguration | Name | Type | Description | Notes | @@ -37,8 +37,60 @@ | error | String | | [optional] | | jobType | String | | | +#### CfReprocessingTaskResult *(extends TaskResult, jobType=`CF_REPROCESSING`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | CfReprocessingTaskFailure | | [optional] | + +#### DummyTaskResult *(extends TaskResult, jobType=`DUMMY`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | DummyTaskFailure | | [optional] | + +#### ReportTaskResult *(extends TaskResult, jobType=`REPORT`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| report | Report | | [optional] | + #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### CfReprocessingTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| entityInfo | EntityInfo | | [optional] | + +#### Report +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | ReportId | | [optional] | +| createdTime | Long | Entity creation timestamp in milliseconds since Unix epoch | [optional] [readonly] | +| tenantId | TenantId | | | +| customerId | CustomerId | | [optional] | +| templateId | ReportTemplateId | | | +| format | TbReportFormat | | | +| name | String | | | +| userId | UserId | | | +| publicKey | String | | [optional] | +| ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | + +#### DummyTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| number | Integer | | [optional] | +| failAlways | Boolean | | [optional] | + +#### EntityInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | EntityId | JSON object with the entity Id. | [optional] | +| name | String | Entity Name | [optional] | + +#### TbReportFormat (enum) +`PDF` | `CSV` --- diff --git a/paas/docs/CfReprocessingJobResult.md b/paas/docs/CfReprocessingJobResult.md index 8aa3b262..fc403aaa 100644 --- a/paas/docs/CfReprocessingJobResult.md +++ b/paas/docs/CfReprocessingJobResult.md @@ -14,6 +14,8 @@ ## Referenced Types +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + #### JobResult | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -38,6 +40,61 @@ | error | String | | [optional] | | jobType | String | | | +#### CfReprocessingTaskResult *(extends TaskResult, jobType=`CF_REPROCESSING`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | CfReprocessingTaskFailure | | [optional] | + +#### DummyTaskResult *(extends TaskResult, jobType=`DUMMY`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | DummyTaskFailure | | [optional] | + +#### ReportTaskResult *(extends TaskResult, jobType=`REPORT`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| report | Report | | [optional] | + +#### CfReprocessingTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| entityInfo | EntityInfo | | [optional] | + +#### Report +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | ReportId | | [optional] | +| createdTime | Long | Entity creation timestamp in milliseconds since Unix epoch | [optional] [readonly] | +| tenantId | TenantId | | | +| customerId | CustomerId | | [optional] | +| templateId | ReportTemplateId | | | +| format | TbReportFormat | | | +| name | String | | | +| userId | UserId | | | +| publicKey | String | | [optional] | +| ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | + +#### DummyTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| number | Integer | | [optional] | +| failAlways | Boolean | | [optional] | + +#### EntityInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | EntityId | JSON object with the entity Id. | [optional] | +| name | String | Entity Name | [optional] | + +#### TbReportFormat (enum) +`PDF` | `CSV` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + --- ### Conventions diff --git a/paas/docs/CfReprocessingTaskFailure.md b/paas/docs/CfReprocessingTaskFailure.md index 8a186bd0..996d86b9 100644 --- a/paas/docs/CfReprocessingTaskFailure.md +++ b/paas/docs/CfReprocessingTaskFailure.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityInfo | Name | Type | Description | Notes | @@ -23,7 +23,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/CfReprocessingTaskResult.md b/paas/docs/CfReprocessingTaskResult.md index 575bd39e..c6554346 100644 --- a/paas/docs/CfReprocessingTaskResult.md +++ b/paas/docs/CfReprocessingTaskResult.md @@ -15,7 +15,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TaskResult | Name | Type | Description | Notes | @@ -40,7 +40,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/CloudDomainInfo.md b/paas/docs/CloudDomainInfo.md index e84807ab..dd96cd94 100644 --- a/paas/docs/CloudDomainInfo.md +++ b/paas/docs/CloudDomainInfo.md @@ -19,7 +19,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CloudDomainId | Name | Type | Description | Notes | @@ -47,7 +47,7 @@ `PENDING_VALIDATION` | `ISSUED` | `INACTIVE` | `EXPIRED` | `VALIDATION_TIMED_OUT` | `REVOKED` | `FAILED` | `UNKNOWN` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ComposeDownStep.md b/paas/docs/ComposeDownStep.md new file mode 100644 index 00000000..8f769ef7 --- /dev/null +++ b/paas/docs/ComposeDownStep.md @@ -0,0 +1,63 @@ + +# ComposeDownStep + +`org.thingsboard.client.model.ComposeDownStep` + +**Extends:** **AgentAppStep** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **state** | **ComposeDownStepState** | | [optional] | + + + +## Referenced Types + +#### AgentAppStep +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | UUID | | [optional] | +| nextId | UUID | | [optional] | +| title | String | | [optional] | +| templateOnly | Boolean | | [optional] | +| condition | String | | [optional] | +| stateful | Boolean | | [optional] | +| type | AgentAppStepType | | [optional] | + +#### ComposeDownStepState *(extends AgentAppStepState)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| serviceImageRegexPatterns | StepFieldListString | | [optional] | +| removeVolumes | StepFieldBoolean | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### AgentAppStepState +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/ComposeDownStepState.md b/paas/docs/ComposeDownStepState.md new file mode 100644 index 00000000..084dd8c3 --- /dev/null +++ b/paas/docs/ComposeDownStepState.md @@ -0,0 +1,47 @@ + +# ComposeDownStepState + +`org.thingsboard.client.model.ComposeDownStepState` + +**Extends:** **AgentAppStepState** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **serviceImageRegexPatterns** | **StepFieldListString** | | [optional] | +| **removeVolumes** | **StepFieldBoolean** | | [optional] | + + + +## Referenced Types + +#### AgentAppStepState +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/ComposeRestartStep.md b/paas/docs/ComposeRestartStep.md new file mode 100644 index 00000000..2ff965ef --- /dev/null +++ b/paas/docs/ComposeRestartStep.md @@ -0,0 +1,39 @@ + +# ComposeRestartStep + +`org.thingsboard.client.model.ComposeRestartStep` + +**Extends:** **AgentAppStep** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| + + + +## Referenced Types + +#### AgentAppStep +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | UUID | | [optional] | +| nextId | UUID | | [optional] | +| title | String | | [optional] | +| templateOnly | Boolean | | [optional] | +| condition | String | | [optional] | +| stateful | Boolean | | [optional] | +| type | AgentAppStepType | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/ComposeStartStep.md b/paas/docs/ComposeStartStep.md new file mode 100644 index 00000000..80d01adc --- /dev/null +++ b/paas/docs/ComposeStartStep.md @@ -0,0 +1,39 @@ + +# ComposeStartStep + +`org.thingsboard.client.model.ComposeStartStep` + +**Extends:** **AgentAppStep** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| + + + +## Referenced Types + +#### AgentAppStep +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | UUID | | [optional] | +| nextId | UUID | | [optional] | +| title | String | | [optional] | +| templateOnly | Boolean | | [optional] | +| condition | String | | [optional] | +| stateful | Boolean | | [optional] | +| type | AgentAppStepType | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/ComposeStep.md b/paas/docs/ComposeStep.md new file mode 100644 index 00000000..fe23ae32 --- /dev/null +++ b/paas/docs/ComposeStep.md @@ -0,0 +1,63 @@ + +# ComposeStep + +`org.thingsboard.client.model.ComposeStep` + +**Extends:** **AgentAppStep** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **state** | **ComposeStepState** | | [optional] | + + + +## Referenced Types + +#### AgentAppStep +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | UUID | | [optional] | +| nextId | UUID | | [optional] | +| title | String | | [optional] | +| templateOnly | Boolean | | [optional] | +| condition | String | | [optional] | +| stateful | Boolean | | [optional] | +| type | AgentAppStepType | | [optional] | + +#### ComposeStepState *(extends AgentAppStepState)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| serviceImageRegexPatterns | StepFieldListString | | [optional] | +| pullImages | StepFieldBoolean | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### AgentAppStepState +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/ComposeStepState.md b/paas/docs/ComposeStepState.md new file mode 100644 index 00000000..a53af53d --- /dev/null +++ b/paas/docs/ComposeStepState.md @@ -0,0 +1,47 @@ + +# ComposeStepState + +`org.thingsboard.client.model.ComposeStepState` + +**Extends:** **AgentAppStepState** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **serviceImageRegexPatterns** | **StepFieldListString** | | [optional] | +| **pullImages** | **StepFieldBoolean** | | [optional] | + + + +## Referenced Types + +#### AgentAppStepState +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/ComposeTypeChoiceStep.md b/paas/docs/ComposeTypeChoiceStep.md new file mode 100644 index 00000000..6b6ae603 --- /dev/null +++ b/paas/docs/ComposeTypeChoiceStep.md @@ -0,0 +1,40 @@ + +# ComposeTypeChoiceStep + +`org.thingsboard.client.model.ComposeTypeChoiceStep` + +**Extends:** **AgentAppStep** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **composeTemplates** | **Map\** | | [optional] | + + + +## Referenced Types + +#### AgentAppStep +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | UUID | | [optional] | +| nextId | UUID | | [optional] | +| title | String | | [optional] | +| templateOnly | Boolean | | [optional] | +| condition | String | | [optional] | +| stateful | Boolean | | [optional] | +| type | AgentAppStepType | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/Converter.md b/paas/docs/Converter.md index 5391dec8..940efe94 100644 --- a/paas/docs/Converter.md +++ b/paas/docs/Converter.md @@ -25,7 +25,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ConverterType (enum) `UPLINK` | `DOWNLINK` @@ -41,7 +41,7 @@ | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ConverterExportData.md b/paas/docs/ConverterExportData.md index 765da894..2ea3c8b2 100644 --- a/paas/docs/ConverterExportData.md +++ b/paas/docs/ConverterExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/ConverterId.md b/paas/docs/ConverterId.md index 5d16b1ad..10773930 100644 --- a/paas/docs/ConverterId.md +++ b/paas/docs/ConverterId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/CouponId.md b/paas/docs/CouponId.md index 68762d81..cb82f2f9 100644 --- a/paas/docs/CouponId.md +++ b/paas/docs/CouponId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/CsvReportTemplateConfig.md b/paas/docs/CsvReportTemplateConfig.md index 94eef4de..1037d7a4 100644 --- a/paas/docs/CsvReportTemplateConfig.md +++ b/paas/docs/CsvReportTemplateConfig.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportTemplateConfig | Name | Type | Description | Notes | @@ -614,7 +614,7 @@ | id | UUID | ID of the entity, time-based UUID v1 | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` diff --git a/paas/docs/CustomMenu.md b/paas/docs/CustomMenu.md index 6d86a5bb..1362eb7a 100644 --- a/paas/docs/CustomMenu.md +++ b/paas/docs/CustomMenu.md @@ -21,7 +21,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CustomMenuId | Name | Type | Description | Notes | @@ -80,7 +80,7 @@ | hideDashboardToolbar | Boolean | Hide the dashboard toolbar | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### MenuItemType (enum) `HOME` | `DEFAULT` | `CUSTOM` diff --git a/paas/docs/CustomMenuDeleteResult.md b/paas/docs/CustomMenuDeleteResult.md index e4d12122..4954beb8 100644 --- a/paas/docs/CustomMenuDeleteResult.md +++ b/paas/docs/CustomMenuDeleteResult.md @@ -15,7 +15,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CMAssigneeType (enum) `NO_ASSIGN` | `ALL` | `CUSTOMERS` | `USERS` | `USER_GROUPS` @@ -27,7 +27,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/CustomMenuInfo.md b/paas/docs/CustomMenuInfo.md index b37a7699..b857dc2c 100644 --- a/paas/docs/CustomMenuInfo.md +++ b/paas/docs/CustomMenuInfo.md @@ -22,7 +22,7 @@ A JSON value representing the custom menu basic info fields ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CustomMenuId | Name | Type | Description | Notes | @@ -36,7 +36,7 @@ A JSON value representing the custom menu basic info fields `NO_ASSIGN` | `ALL` | `CUSTOMERS` | `USERS` | `USER_GROUPS` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/Customer.md b/paas/docs/Customer.md index e0613d85..cb46566a 100644 --- a/paas/docs/Customer.md +++ b/paas/docs/Customer.md @@ -31,7 +31,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CustomMenuId | Name | Type | Description | Notes | @@ -39,7 +39,7 @@ | id | UUID | string | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/CustomerExportData.md b/paas/docs/CustomerExportData.md index 1c819d64..07558219 100644 --- a/paas/docs/CustomerExportData.md +++ b/paas/docs/CustomerExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/CustomerId.md b/paas/docs/CustomerId.md index 51b25b21..44fe6bf7 100644 --- a/paas/docs/CustomerId.md +++ b/paas/docs/CustomerId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/CustomerInfo.md b/paas/docs/CustomerInfo.md index fc436c79..7fbddae3 100644 --- a/paas/docs/CustomerInfo.md +++ b/paas/docs/CustomerInfo.md @@ -33,7 +33,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CustomMenuId | Name | Type | Description | Notes | @@ -47,7 +47,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/Dashboard.md b/paas/docs/Dashboard.md index 00130149..abe813d6 100644 --- a/paas/docs/Dashboard.md +++ b/paas/docs/Dashboard.md @@ -26,7 +26,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ShortCustomerInfo | Name | Type | Description | Notes | @@ -51,7 +51,7 @@ | _public | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ResourceType (enum) `LWM2_M_MODEL` | `JKS` | `PKCS_12` | `JS_MODULE` | `IMAGE` | `DASHBOARD` | `GENERAL` diff --git a/paas/docs/DashboardComponent.md b/paas/docs/DashboardComponent.md index e43e8702..f0da1da7 100644 --- a/paas/docs/DashboardComponent.md +++ b/paas/docs/DashboardComponent.md @@ -25,7 +25,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportComponent | Name | Type | Description | Notes | @@ -236,7 +236,7 @@ | color | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### IntervalType (enum) `MILLISECONDS` | `WEEK` | `WEEK_ISO` | `MONTH` | `QUARTER` diff --git a/paas/docs/DashboardExportData.md b/paas/docs/DashboardExportData.md index db9e0ecc..b73adfb5 100644 --- a/paas/docs/DashboardExportData.md +++ b/paas/docs/DashboardExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/DashboardId.md b/paas/docs/DashboardId.md index 1ebf6c08..1c5e40f2 100644 --- a/paas/docs/DashboardId.md +++ b/paas/docs/DashboardId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/DashboardInfo.md b/paas/docs/DashboardInfo.md index 9b6a3377..b2dbf224 100644 --- a/paas/docs/DashboardInfo.md +++ b/paas/docs/DashboardInfo.md @@ -28,7 +28,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ShortCustomerInfo | Name | Type | Description | Notes | @@ -59,7 +59,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ResourceType (enum) `LWM2_M_MODEL` | `JKS` | `PKCS_12` | `JS_MODULE` | `IMAGE` | `DASHBOARD` | `GENERAL` diff --git a/paas/docs/DataSource.md b/paas/docs/DataSource.md index 609e1bbd..0df79826 100644 --- a/paas/docs/DataSource.md +++ b/paas/docs/DataSource.md @@ -19,7 +19,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DataSourceType (enum) `DEVICE` | `ENTITY` | `ENTITY_COUNT` | `ALARM_COUNT` @@ -179,7 +179,7 @@ | color | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### IntervalType (enum) `MILLISECONDS` | `WEEK` | `WEEK_ISO` | `MONTH` | `QUARTER` diff --git a/paas/docs/DefaultTenantProfileConfiguration.md b/paas/docs/DefaultTenantProfileConfiguration.md index cb5ca6b8..14d9e5e8 100644 --- a/paas/docs/DefaultTenantProfileConfiguration.md +++ b/paas/docs/DefaultTenantProfileConfiguration.md @@ -16,6 +16,8 @@ | **maxDashboards** | **Long** | | [optional] | | **maxRuleChains** | **Long** | | [optional] | | **maxEdges** | **Long** | | [optional] | +| **maxAgents** | **Long** | | [optional] | +| **maxAgentApplications** | **Long** | | [optional] | | **maxResourcesInBytes** | **Long** | | [optional] | | **maxOtaPackagesInBytes** | **Long** | | [optional] | | **maxResourceSize** | **Long** | | [optional] | @@ -79,6 +81,10 @@ | **edgeEventRateLimitsPerEdge** | **String** | | [optional] | | **edgeUplinkMessagesRateLimits** | **String** | | [optional] | | **edgeUplinkMessagesRateLimitsPerEdge** | **String** | | [optional] | +| **agentEventRateLimits** | **String** | | [optional] | +| **agentEventRateLimitsPerAgent** | **String** | | [optional] | +| **agentLogChunkRateLimits** | **String** | | [optional] | +| **agentLogChunkRateLimitsPerAgent** | **String** | | [optional] | | **defaultStorageTtlDays** | **Integer** | | [optional] | | **alarmsTtlDays** | **Integer** | | [optional] | | **rpcTtlDays** | **Integer** | | [optional] | diff --git a/paas/docs/Device.md b/paas/docs/Device.md index 00151848..5d7cc682 100644 --- a/paas/docs/Device.md +++ b/paas/docs/Device.md @@ -26,7 +26,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DeviceData | Name | Type | Description | Notes | @@ -86,7 +86,7 @@ | engineId | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### DeviceProfileType (enum) `DEFAULT` diff --git a/paas/docs/DeviceCredentials.md b/paas/docs/DeviceCredentials.md index 74e11c7b..ddb7ac58 100644 --- a/paas/docs/DeviceCredentials.md +++ b/paas/docs/DeviceCredentials.md @@ -21,7 +21,7 @@ A JSON value representing the device credentials. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DeviceCredentialsId | Name | Type | Description | Notes | @@ -32,7 +32,7 @@ A JSON value representing the device credentials. `ACCESS_TOKEN` | `X509_CERTIFICATE` | `MQTT_BASIC` | `LWM2_M_CREDENTIALS` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/DeviceExportData.md b/paas/docs/DeviceExportData.md index 9193d191..a28afc3e 100644 --- a/paas/docs/DeviceExportData.md +++ b/paas/docs/DeviceExportData.md @@ -15,7 +15,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -83,7 +83,7 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### DeviceCredentialsId | Name | Type | Description | Notes | @@ -94,7 +94,7 @@ `ACCESS_TOKEN` | `X509_CERTIFICATE` | `MQTT_BASIC` | `LWM2_M_CREDENTIALS` #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/DeviceGroupOtaPackage.md b/paas/docs/DeviceGroupOtaPackage.md index 1889f404..0f2b1b0f 100644 --- a/paas/docs/DeviceGroupOtaPackage.md +++ b/paas/docs/DeviceGroupOtaPackage.md @@ -17,13 +17,13 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### OtaPackageType (enum) `FIRMWARE` | `SOFTWARE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/DeviceId.md b/paas/docs/DeviceId.md index b2c99b0a..7082cfc9 100644 --- a/paas/docs/DeviceId.md +++ b/paas/docs/DeviceId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/DeviceInfo.md b/paas/docs/DeviceInfo.md index 14c75e09..bc8824b7 100644 --- a/paas/docs/DeviceInfo.md +++ b/paas/docs/DeviceInfo.md @@ -29,7 +29,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DeviceData | Name | Type | Description | Notes | @@ -95,7 +95,7 @@ | engineId | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### DeviceProfileType (enum) `DEFAULT` diff --git a/paas/docs/DeviceProfile.md b/paas/docs/DeviceProfile.md index 28f9c2f8..fdc08351 100644 --- a/paas/docs/DeviceProfile.md +++ b/paas/docs/DeviceProfile.md @@ -33,7 +33,7 @@ A JSON value representing the device profile. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DeviceProfileType (enum) `DEFAULT` @@ -121,7 +121,7 @@ A JSON value representing the device profile. | allowCreateNewDevicesByX509Certificate | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### TransportPayloadTypeConfiguration | Name | Type | Description | Notes | @@ -157,6 +157,70 @@ A JSON value representing the device profile. |------|------|-------------|-------| | securityMode | String | | | +#### NoSecLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`NO_SEC`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### PSKLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`PSK`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### RPKLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`RPK`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### X509LwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`X509`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + #### OtherConfiguration | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -242,7 +306,7 @@ A JSON value representing the device profile. | epmax | Long | | [optional] | #### TelemetryObserveStrategy (enum) -`SINGLE_0_ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` | `COMPOSITE_ALL_1_ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` | `COMPOSITE_BY_OBJECT_2_GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` +`SINGLE` | `COMPOSITE_ALL` | `COMPOSITE_BY_OBJECT` #### PowerMode (enum) `PSM` | `DRX` | `E_DRX` diff --git a/paas/docs/DeviceProfileData.md b/paas/docs/DeviceProfileData.md index 1cd7c923..e07f0377 100644 --- a/paas/docs/DeviceProfileData.md +++ b/paas/docs/DeviceProfileData.md @@ -118,6 +118,70 @@ |------|------|-------------|-------| | securityMode | String | | | +#### NoSecLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`NO_SEC`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### PSKLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`PSK`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### RPKLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`RPK`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### X509LwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`X509`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + #### OtherConfiguration | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -203,7 +267,7 @@ | epmax | Long | | [optional] | #### TelemetryObserveStrategy (enum) -`SINGLE_0_ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` | `COMPOSITE_ALL_1_ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` | `COMPOSITE_BY_OBJECT_2_GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` +`SINGLE` | `COMPOSITE_ALL` | `COMPOSITE_BY_OBJECT` #### PowerMode (enum) `PSM` | `DRX` | `E_DRX` diff --git a/paas/docs/DeviceProfileExportData.md b/paas/docs/DeviceProfileExportData.md index 4ac4d1ff..4acb502b 100644 --- a/paas/docs/DeviceProfileExportData.md +++ b/paas/docs/DeviceProfileExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/DeviceProfileId.md b/paas/docs/DeviceProfileId.md index f73ee1b6..69cbd199 100644 --- a/paas/docs/DeviceProfileId.md +++ b/paas/docs/DeviceProfileId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/DeviceProfileInfo.md b/paas/docs/DeviceProfileInfo.md index 6cd2e981..f2dbf97c 100644 --- a/paas/docs/DeviceProfileInfo.md +++ b/paas/docs/DeviceProfileInfo.md @@ -19,7 +19,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DeviceProfileType (enum) `DEFAULT` @@ -28,7 +28,7 @@ `DEFAULT` | `MQTT` | `COAP` | `LWM2_M` | `SNMP` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/DeviceProfileTransportConfiguration.md b/paas/docs/DeviceProfileTransportConfiguration.md index 67dc48a4..6e35f4b3 100644 --- a/paas/docs/DeviceProfileTransportConfiguration.md +++ b/paas/docs/DeviceProfileTransportConfiguration.md @@ -89,6 +89,70 @@ Configuration for device profile transport |------|------|-------------|-------| | securityMode | String | | | +#### NoSecLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`NO_SEC`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### PSKLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`PSK`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### RPKLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`RPK`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### X509LwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`X509`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + #### OtherConfiguration | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -174,7 +238,7 @@ Configuration for device profile transport | epmax | Long | | [optional] | #### TelemetryObserveStrategy (enum) -`SINGLE_0_ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` | `COMPOSITE_ALL_1_ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` | `COMPOSITE_BY_OBJECT_2_GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` +`SINGLE` | `COMPOSITE_ALL` | `COMPOSITE_BY_OBJECT` #### SnmpCommunicationSpec (enum) `TELEMETRY_QUERYING` | `CLIENT_ATTRIBUTES_QUERYING` | `SHARED_ATTRIBUTES_SETTING` | `TO_DEVICE_RPC_REQUEST` | `TO_SERVER_RPC_REQUEST` diff --git a/paas/docs/DeviceSearchQuery.md b/paas/docs/DeviceSearchQuery.md index a106db9c..59a2b6d5 100644 --- a/paas/docs/DeviceSearchQuery.md +++ b/paas/docs/DeviceSearchQuery.md @@ -28,13 +28,13 @@ The device search query JSON | fetchLastLevelOnly | Boolean | Fetch entities that match the last level of search. Useful to find Devices that are strictly 'maxLevel' relations away from the root entity. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` --- diff --git a/paas/docs/DeviceSearchQueryFilter.md b/paas/docs/DeviceSearchQueryFilter.md index bbdba181..838d970c 100644 --- a/paas/docs/DeviceSearchQueryFilter.md +++ b/paas/docs/DeviceSearchQueryFilter.md @@ -41,7 +41,7 @@ `CURRENT_CUSTOMER` | `CURRENT_TENANT` | `CURRENT_USER` | `CURRENT_USER_OWNER` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/Discount.md b/paas/docs/Discount.md index 56e97f55..dc94789b 100644 --- a/paas/docs/Discount.md +++ b/paas/docs/Discount.md @@ -21,13 +21,13 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CouponDuration (enum) `FOREVER` | `ONCE` | `REPEATING` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/DockerComposeConfig.md b/paas/docs/DockerComposeConfig.md new file mode 100644 index 00000000..950a8438 --- /dev/null +++ b/paas/docs/DockerComposeConfig.md @@ -0,0 +1,66 @@ + +# DockerComposeConfig + +`org.thingsboard.client.model.DockerComposeConfig` + +**Extends:** **AgentAppConfig** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **compose** | **com.fasterxml.jackson.databind.JsonNode** | | [optional] | +| **composeType** | **String** | | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppConfig +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| arguments | List | | [optional] | +| edgeRoutingKey | String | | [optional] | +| type | AgentAppConfigType | | [optional] | + +#### AgentAppArgument +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| name | String | Argument name, referenced in the compose as ${tb.}. | [optional] | +| sourceType | AgentAppArgumentSource | Source entity the value is resolved from. | [optional] | +| sourceEntityId | EntityId | Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. | [optional] | +| valueType | AgentAppArgumentValueType | Whether the value is read from an attribute or the latest telemetry. | [optional] | +| scope | AttributeScope | Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. | [optional] | +| key | String | Attribute or latest telemetry key to read. | [optional] | +| defaultValue | String | Optional fallback value used when the source has no value for the key. | [optional] | +| format | AgentAppArgumentFormat | How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. | [optional] | + +#### AgentAppConfigType (enum) +`DOCKER_COMPOSE` + +#### AgentAppArgumentSource (enum) +`AGENT` | `OWNER` | `RELATED_ENTITY` | `TENANT` | `DEVICE` | `ASSET` | `CUSTOMER` | `EDGE` + +#### AgentAppArgumentValueType (enum) +`ATTRIBUTE` | `LATEST_TELEMETRY` + +#### AttributeScope (enum) +`CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` + +#### AgentAppArgumentFormat (enum) +`STRING` | `JSON` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/Domain.md b/paas/docs/Domain.md index 1f494718..bc321d35 100644 --- a/paas/docs/Domain.md +++ b/paas/docs/Domain.md @@ -22,10 +22,10 @@ A JSON value representing the Domain. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/DomainId.md b/paas/docs/DomainId.md index 907c4187..08f92464 100644 --- a/paas/docs/DomainId.md +++ b/paas/docs/DomainId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/DomainInfo.md b/paas/docs/DomainInfo.md index 8ec814cc..2e20d1ed 100644 --- a/paas/docs/DomainInfo.md +++ b/paas/docs/DomainInfo.md @@ -21,7 +21,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### OAuth2ClientInfo | Name | Type | Description | Notes | @@ -37,7 +37,7 @@ `WEB` | `ANDROID` | `IOS` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/DummyJobConfiguration.md b/paas/docs/DummyJobConfiguration.md index b0ed8861..10fd361d 100644 --- a/paas/docs/DummyJobConfiguration.md +++ b/paas/docs/DummyJobConfiguration.md @@ -25,6 +25,8 @@ Dummy job configuration ## Referenced Types +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + #### JobConfiguration | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -42,6 +44,61 @@ Dummy job configuration | error | String | | [optional] | | jobType | String | | | +#### CfReprocessingTaskResult *(extends TaskResult, jobType=`CF_REPROCESSING`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | CfReprocessingTaskFailure | | [optional] | + +#### DummyTaskResult *(extends TaskResult, jobType=`DUMMY`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | DummyTaskFailure | | [optional] | + +#### ReportTaskResult *(extends TaskResult, jobType=`REPORT`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| report | Report | | [optional] | + +#### CfReprocessingTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| entityInfo | EntityInfo | | [optional] | + +#### Report +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | ReportId | | [optional] | +| createdTime | Long | Entity creation timestamp in milliseconds since Unix epoch | [optional] [readonly] | +| tenantId | TenantId | | | +| customerId | CustomerId | | [optional] | +| templateId | ReportTemplateId | | | +| format | TbReportFormat | | | +| name | String | | | +| userId | UserId | | | +| publicKey | String | | [optional] | +| ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | + +#### DummyTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| number | Integer | | [optional] | +| failAlways | Boolean | | [optional] | + +#### EntityInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | EntityId | JSON object with the entity Id. | [optional] | +| name | String | Entity Name | [optional] | + +#### TbReportFormat (enum) +`PDF` | `CSV` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + --- ### Conventions diff --git a/paas/docs/DummyJobResult.md b/paas/docs/DummyJobResult.md index 61368c91..0d543156 100644 --- a/paas/docs/DummyJobResult.md +++ b/paas/docs/DummyJobResult.md @@ -14,6 +14,8 @@ ## Referenced Types +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + #### JobResult | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -38,6 +40,61 @@ | error | String | | [optional] | | jobType | String | | | +#### CfReprocessingTaskResult *(extends TaskResult, jobType=`CF_REPROCESSING`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | CfReprocessingTaskFailure | | [optional] | + +#### DummyTaskResult *(extends TaskResult, jobType=`DUMMY`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | DummyTaskFailure | | [optional] | + +#### ReportTaskResult *(extends TaskResult, jobType=`REPORT`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| report | Report | | [optional] | + +#### CfReprocessingTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| entityInfo | EntityInfo | | [optional] | + +#### Report +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | ReportId | | [optional] | +| createdTime | Long | Entity creation timestamp in milliseconds since Unix epoch | [optional] [readonly] | +| tenantId | TenantId | | | +| customerId | CustomerId | | [optional] | +| templateId | ReportTemplateId | | | +| format | TbReportFormat | | | +| name | String | | | +| userId | UserId | | | +| publicKey | String | | [optional] | +| ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | + +#### DummyTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| number | Integer | | [optional] | +| failAlways | Boolean | | [optional] | + +#### EntityInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | EntityId | JSON object with the entity Id. | [optional] | +| name | String | Entity Name | [optional] | + +#### TbReportFormat (enum) +`PDF` | `CSV` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + --- ### Conventions diff --git a/paas/docs/Edge.md b/paas/docs/Edge.md index 5606a85b..fe8f53d8 100644 --- a/paas/docs/Edge.md +++ b/paas/docs/Edge.md @@ -30,13 +30,13 @@ A JSON value representing the edge. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EdgeLicenseType (enum) `LICENSE` | `ADD_ON` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EdgeControllerApi.md b/paas/docs/EdgeControllerApi.md index 934d2427..f8ff8f09 100644 --- a/paas/docs/EdgeControllerApi.md +++ b/paas/docs/EdgeControllerApi.md @@ -572,7 +572,7 @@ BulkImportResultEdge processEdgesBulkImport(@Nonnull BulkImportRequest bulkImpor Import the bulk of edges (processEdgesBulkImport) -There's an ability to import the bulk of edges using the only .csv file. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. +There's an ability to import the bulk of edges using the only .csv file. Available for users with 'TENANT_ADMIN' authority. ### Parameters diff --git a/paas/docs/EdgeEvent.md b/paas/docs/EdgeEvent.md index fb7875fa..9ce30f78 100644 --- a/paas/docs/EdgeEvent.md +++ b/paas/docs/EdgeEvent.md @@ -23,7 +23,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EdgeEventId | Name | Type | Description | Notes | @@ -37,7 +37,7 @@ `DASHBOARD` | `ASSET` | `DEVICE` | `DEVICE_PROFILE` | `ASSET_PROFILE` | `ENTITY_VIEW` | `ALARM` | `ALARM_COMMENT` | `RULE_CHAIN` | `RULE_CHAIN_METADATA` | … (45 values total) #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EdgeId.md b/paas/docs/EdgeId.md index c573448e..0b147751 100644 --- a/paas/docs/EdgeId.md +++ b/paas/docs/EdgeId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EdgeInfo.md b/paas/docs/EdgeInfo.md index 1b7aa689..b6d596ef 100644 --- a/paas/docs/EdgeInfo.md +++ b/paas/docs/EdgeInfo.md @@ -30,7 +30,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EdgeLicenseType (enum) `LICENSE` | `ADD_ON` @@ -42,7 +42,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EdgeSearchQuery.md b/paas/docs/EdgeSearchQuery.md index c39e30af..9a4a9f65 100644 --- a/paas/docs/EdgeSearchQuery.md +++ b/paas/docs/EdgeSearchQuery.md @@ -26,13 +26,13 @@ | fetchLastLevelOnly | Boolean | Fetch entities that match the last level of search. Useful to find Devices that are strictly 'maxLevel' relations away from the root entity. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` --- diff --git a/paas/docs/EdgeSearchQueryFilter.md b/paas/docs/EdgeSearchQueryFilter.md index 62abe43e..6cc1563a 100644 --- a/paas/docs/EdgeSearchQueryFilter.md +++ b/paas/docs/EdgeSearchQueryFilter.md @@ -41,7 +41,7 @@ `CURRENT_CUSTOMER` | `CURRENT_TENANT` | `CURRENT_USER` | `CURRENT_USER_OWNER` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntitiesByGroupNameFilter.md b/paas/docs/EntitiesByGroupNameFilter.md index 21e38d4d..706ff57f 100644 --- a/paas/docs/EntitiesByGroupNameFilter.md +++ b/paas/docs/EntitiesByGroupNameFilter.md @@ -19,7 +19,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityFilter | Name | Type | Description | Notes | @@ -27,7 +27,7 @@ | type | String | | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntitiesLimitNotificationRuleTriggerConfig.md b/paas/docs/EntitiesLimitNotificationRuleTriggerConfig.md index beb065b6..98125eb3 100644 --- a/paas/docs/EntitiesLimitNotificationRuleTriggerConfig.md +++ b/paas/docs/EntitiesLimitNotificationRuleTriggerConfig.md @@ -22,7 +22,7 @@ | triggerType | NotificationRuleTriggerType | | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### NotificationRuleTriggerType (enum) `ENTITY_ACTION` | `ALARM` | `ALARM_COMMENT` | `ALARM_ASSIGNMENT` | `DEVICE_ACTIVITY` | `RULE_ENGINE_COMPONENT_LIFECYCLE_EVENT` | `INTEGRATION_LIFECYCLE_EVENT` | `EDGE_CONNECTION` | `EDGE_COMMUNICATION_FAILURE` | `NEW_PLATFORM_VERSION` | … (15 values total) diff --git a/paas/docs/EntitiesVersionControlControllerApi.md b/paas/docs/EntitiesVersionControlControllerApi.md index f5a33ba3..f521847c 100644 --- a/paas/docs/EntitiesVersionControlControllerApi.md +++ b/paas/docs/EntitiesVersionControlControllerApi.md @@ -35,7 +35,7 @@ Returns an object with current entity data and the one at a specific version. En | Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **entityType** | **EntityType** | A string value representing the entity type. For example, 'DEVICE' | [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | +| **entityType** | **EntityType** | A string value representing the entity type. For example, 'DEVICE' | [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, AGENT, AGENT_APPLICATION, AGENT_APP_EVENT, AGENT_APP_UNIT, AGENT_APP_PROFILE, AGENT_PROFILE, AGENT_BULK_ACTION, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | | **internalEntityUuid** | **UUID** | A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | | **versionId** | **String** | Version id, for example fd82625bdd7d6131cf8027b44ee967012ecaf990. Represents commit hash. | | @@ -62,7 +62,7 @@ Retrieves short info about the remote entity by external id at a concrete versio | Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| | **versionId** | **String** | Version id, for example fd82625bdd7d6131cf8027b44ee967012ecaf990. Represents commit hash. | | -| **entityType** | **EntityType** | A string value representing the entity type. For example, 'DEVICE' | [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | +| **entityType** | **EntityType** | A string value representing the entity type. For example, 'DEVICE' | [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, AGENT, AGENT_APPLICATION, AGENT_APP_EVENT, AGENT_APP_UNIT, AGENT_APP_PROFILE, AGENT_PROFILE, AGENT_BULK_ACTION, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | | **externalEntityUuid** | **UUID** | A string value representing external entity id | | | **internalEntityId** | **UUID** | A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | [optional] | @@ -177,7 +177,7 @@ Returns a list of remote entities of a specific entity type that are available a | Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **entityType** | **EntityType** | A string value representing the entity type. For example, 'DEVICE' | [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | +| **entityType** | **EntityType** | A string value representing the entity type. For example, 'DEVICE' | [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, AGENT, AGENT_APPLICATION, AGENT_APP_EVENT, AGENT_APP_UNIT, AGENT_APP_PROFILE, AGENT_PROFILE, AGENT_BULK_ACTION, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | | **versionId** | **String** | Version id, for example fd82625bdd7d6131cf8027b44ee967012ecaf990. Represents commit hash. | | ### Return type @@ -202,7 +202,7 @@ Returns list of versions of an entity type in a branch. This is a collected list | Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **entityType** | **EntityType** | A string value representing the entity type. For example, 'DEVICE' | [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | +| **entityType** | **EntityType** | A string value representing the entity type. For example, 'DEVICE' | [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, AGENT, AGENT_APPLICATION, AGENT_APP_EVENT, AGENT_APP_UNIT, AGENT_APP_PROFILE, AGENT_PROFILE, AGENT_BULK_ACTION, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | | **branch** | **String** | The name of the working branch, for example 'master' | | | **pageSize** | **Integer** | Maximum amount of entities in a one page | | | **page** | **Integer** | Sequence number of page starting from 0 | | @@ -232,7 +232,7 @@ Returns list of versions for a specific entity in a concrete branch. You need t | Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **entityType** | **EntityType** | A string value representing the entity type. For example, 'DEVICE' | [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | +| **entityType** | **EntityType** | A string value representing the entity type. For example, 'DEVICE' | [enum: TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, ENTITY_GROUP, CONVERTER, INTEGRATION, RULE_CHAIN, RULE_NODE, SCHEDULER_EVENT, BLOB_ENTITY, REPORT_TEMPLATE, REPORT, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, ROLE, GROUP_PERMISSION, TENANT_PROFILE, DEVICE_PROFILE, ASSET_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE, RPC, QUEUE, NOTIFICATION_TARGET, NOTIFICATION_TEMPLATE, NOTIFICATION_REQUEST, NOTIFICATION, NOTIFICATION_RULE, QUEUE_STATS, OAUTH2_CLIENT, DOMAIN, MOBILE_APP, MOBILE_APP_BUNDLE, CALCULATED_FIELD, JOB, SECRET, ADMIN_SETTINGS, AI_MODEL, API_KEY, AGENT, AGENT_APPLICATION, AGENT_APP_EVENT, AGENT_APP_UNIT, AGENT_APP_PROFILE, AGENT_PROFILE, AGENT_BULK_ACTION, BILLING_CUSTOMER, SUBSCRIPTION_PLAN, SUBSCRIPTION, COUPON, PRODUCT, SUBSCRIPTION_ADDON] | | **externalEntityUuid** | **UUID** | A string value representing external entity id. This is `externalId` property of an entity, or otherwise if not set - simply id of this entity. | | | **branch** | **String** | The name of the working branch, for example 'master' | | | **pageSize** | **Integer** | Maximum amount of entities in a one page | | diff --git a/paas/docs/EntityActionNotificationRuleTriggerConfig.md b/paas/docs/EntityActionNotificationRuleTriggerConfig.md index 26a17fe3..0185a239 100644 --- a/paas/docs/EntityActionNotificationRuleTriggerConfig.md +++ b/paas/docs/EntityActionNotificationRuleTriggerConfig.md @@ -24,7 +24,7 @@ | triggerType | NotificationRuleTriggerType | | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### NotificationRuleTriggerType (enum) `ENTITY_ACTION` | `ALARM` | `ALARM_COMMENT` | `ALARM_ASSIGNMENT` | `DEVICE_ACTIVITY` | `RULE_ENGINE_COMPONENT_LIFECYCLE_EVENT` | `INTEGRATION_LIFECYCLE_EVENT` | `EDGE_CONNECTION` | `EDGE_COMMUNICATION_FAILURE` | `NEW_PLATFORM_VERSION` | … (15 values total) diff --git a/paas/docs/EntityAggregationCalculatedFieldConfiguration.md b/paas/docs/EntityAggregationCalculatedFieldConfiguration.md index d451e914..9901c63d 100644 --- a/paas/docs/EntityAggregationCalculatedFieldConfiguration.md +++ b/paas/docs/EntityAggregationCalculatedFieldConfiguration.md @@ -19,7 +19,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CalculatedFieldConfiguration | Name | Type | Description | Notes | @@ -165,7 +165,7 @@ `CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ArgumentType (enum) `TS_LATEST` | `ATTRIBUTE` | `TS_ROLLING` diff --git a/paas/docs/EntityAlias.md b/paas/docs/EntityAlias.md index d4e19874..9c013c4f 100644 --- a/paas/docs/EntityAlias.md +++ b/paas/docs/EntityAlias.md @@ -15,7 +15,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityFilter | Name | Type | Description | Notes | @@ -197,7 +197,7 @@ | id | UUID | ID of the entity, time-based UUID v1 | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` diff --git a/paas/docs/EntityCountQuery.md b/paas/docs/EntityCountQuery.md index 890e2b13..f1d3f783 100644 --- a/paas/docs/EntityCountQuery.md +++ b/paas/docs/EntityCountQuery.md @@ -18,7 +18,7 @@ A JSON value representing the entity count query. See API call notes above for m ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityFilter | Name | Type | Description | Notes | @@ -249,7 +249,7 @@ A JSON value representing the entity count query. See API call notes above for m | id | UUID | ID of the entity, time-based UUID v1 | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` diff --git a/paas/docs/EntityData.md b/paas/docs/EntityData.md index f9bdadf9..1713c73c 100644 --- a/paas/docs/EntityData.md +++ b/paas/docs/EntityData.md @@ -18,7 +18,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TsValue | Name | Type | Description | Notes | @@ -34,7 +34,7 @@ | previous | TsValue | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityDataDiff.md b/paas/docs/EntityDataDiff.md index 6f37b468..f0c4aeff 100644 --- a/paas/docs/EntityDataDiff.md +++ b/paas/docs/EntityDataDiff.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -152,10 +152,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/EntityDataQuery.md b/paas/docs/EntityDataQuery.md index 9cf38d27..77c25a7f 100644 --- a/paas/docs/EntityDataQuery.md +++ b/paas/docs/EntityDataQuery.md @@ -21,7 +21,7 @@ Entity data query to find entities. Page size is capped at 100. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityFilter | Name | Type | Description | Notes | @@ -270,7 +270,7 @@ Entity data query to find entities. Page size is capped at 100. | id | UUID | ID of the entity, time-based UUID v1 | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` diff --git a/paas/docs/EntityExportData.md b/paas/docs/EntityExportData.md index 92825323..a5ce4805 100644 --- a/paas/docs/EntityExportData.md +++ b/paas/docs/EntityExportData.md @@ -102,7 +102,7 @@ Base export container for ThingsBoard entities ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ExportableEntity | Name | Type | Description | Notes | @@ -150,7 +150,7 @@ Base export container for ThingsBoard entities | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### DeviceCredentials | Name | Type | Description | Notes | @@ -198,7 +198,7 @@ Base export container for ThingsBoard entities | notes | List | List of sticky notes placed on the rule chain canvas | [optional] | #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/EntityFilter.md b/paas/docs/EntityFilter.md index 195a9cf1..f1ec0fe1 100644 --- a/paas/docs/EntityFilter.md +++ b/paas/docs/EntityFilter.md @@ -184,7 +184,7 @@ Filter for selecting entities ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AliasEntityId | Name | Type | Description | Notes | @@ -197,7 +197,7 @@ Filter for selecting entities `FROM` | `TO` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationEntityTypeFilter | Name | Type | Description | Notes | diff --git a/paas/docs/EntityGroup.md b/paas/docs/EntityGroup.md index afb91e6e..7e0c250c 100644 --- a/paas/docs/EntityGroup.md +++ b/paas/docs/EntityGroup.md @@ -72,6 +72,13 @@ A JSON value representing the entity group. | ADMIN_SETTINGS | "ADMIN_SETTINGS" | | AI_MODEL | "AI_MODEL" | | API_KEY | "API_KEY" | +| AGENT | "AGENT" | +| AGENT_APPLICATION | "AGENT_APPLICATION" | +| AGENT_APP_EVENT | "AGENT_APP_EVENT" | +| AGENT_APP_UNIT | "AGENT_APP_UNIT" | +| AGENT_APP_PROFILE | "AGENT_APP_PROFILE" | +| AGENT_PROFILE | "AGENT_PROFILE" | +| AGENT_BULK_ACTION | "AGENT_BULK_ACTION" | | BILLING_CUSTOMER | "BILLING_CUSTOMER" | | SUBSCRIPTION_PLAN | "SUBSCRIPTION_PLAN" | | SUBSCRIPTION | "SUBSCRIPTION" | @@ -83,10 +90,10 @@ A JSON value representing the entity group. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityGroupExportData.md b/paas/docs/EntityGroupExportData.md index 87524eb2..7b0e274a 100644 --- a/paas/docs/EntityGroupExportData.md +++ b/paas/docs/EntityGroupExportData.md @@ -18,7 +18,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -98,13 +98,13 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### OtaPackageType (enum) `FIRMWARE` | `SOFTWARE` #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/EntityGroupFilter.md b/paas/docs/EntityGroupFilter.md index fdf7e61b..01a11483 100644 --- a/paas/docs/EntityGroupFilter.md +++ b/paas/docs/EntityGroupFilter.md @@ -25,7 +25,7 @@ | type | String | | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityGroupId.md b/paas/docs/EntityGroupId.md index 7516b42b..c0383ec8 100644 --- a/paas/docs/EntityGroupId.md +++ b/paas/docs/EntityGroupId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityGroupInfo.md b/paas/docs/EntityGroupInfo.md index c28557d4..d562adca 100644 --- a/paas/docs/EntityGroupInfo.md +++ b/paas/docs/EntityGroupInfo.md @@ -71,6 +71,13 @@ | ADMIN_SETTINGS | "ADMIN_SETTINGS" | | AI_MODEL | "AI_MODEL" | | API_KEY | "API_KEY" | +| AGENT | "AGENT" | +| AGENT_APPLICATION | "AGENT_APPLICATION" | +| AGENT_APP_EVENT | "AGENT_APP_EVENT" | +| AGENT_APP_UNIT | "AGENT_APP_UNIT" | +| AGENT_APP_PROFILE | "AGENT_APP_PROFILE" | +| AGENT_PROFILE | "AGENT_PROFILE" | +| AGENT_BULK_ACTION | "AGENT_BULK_ACTION" | | BILLING_CUSTOMER | "BILLING_CUSTOMER" | | SUBSCRIPTION_PLAN | "SUBSCRIPTION_PLAN" | | SUBSCRIPTION | "SUBSCRIPTION" | @@ -82,10 +89,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityGroupListFilter.md b/paas/docs/EntityGroupListFilter.md index 993ec92f..e7618d21 100644 --- a/paas/docs/EntityGroupListFilter.md +++ b/paas/docs/EntityGroupListFilter.md @@ -22,7 +22,7 @@ | type | String | | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityGroupNameFilter.md b/paas/docs/EntityGroupNameFilter.md index dcd14490..967a1079 100644 --- a/paas/docs/EntityGroupNameFilter.md +++ b/paas/docs/EntityGroupNameFilter.md @@ -22,7 +22,7 @@ | type | String | | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityId.md b/paas/docs/EntityId.md index e959a820..af09749c 100644 --- a/paas/docs/EntityId.md +++ b/paas/docs/EntityId.md @@ -17,6 +17,27 @@ #### AdminSettingsId *(entityType=`ADMIN_SETTINGS`)* *(no additional properties)* +#### AgentId *(entityType=`AGENT`)* +*(no additional properties)* + +#### AgentApplicationId *(entityType=`AGENT_APPLICATION`)* +*(no additional properties)* + +#### AgentAppEventId *(entityType=`AGENT_APP_EVENT`)* +*(no additional properties)* + +#### AgentAppProfileId *(entityType=`AGENT_APP_PROFILE`)* +*(no additional properties)* + +#### AgentAppUnitId *(entityType=`AGENT_APP_UNIT`)* +*(no additional properties)* + +#### AgentBulkActionId *(entityType=`AGENT_BULK_ACTION`)* +*(no additional properties)* + +#### AgentProfileId *(entityType=`AGENT_PROFILE`)* +*(no additional properties)* + #### AiModelId *(entityType=`AI_MODEL`)* *(no additional properties)* @@ -173,7 +194,7 @@ ## Referenced Types #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityInfo.md b/paas/docs/EntityInfo.md index 70dc92f0..46c531ed 100644 --- a/paas/docs/EntityInfo.md +++ b/paas/docs/EntityInfo.md @@ -14,10 +14,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityListFilter.md b/paas/docs/EntityListFilter.md index 60aa82cb..a16566ae 100644 --- a/paas/docs/EntityListFilter.md +++ b/paas/docs/EntityListFilter.md @@ -22,7 +22,7 @@ | type | String | | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityLoadError.md b/paas/docs/EntityLoadError.md index c5194971..f2e505e3 100644 --- a/paas/docs/EntityLoadError.md +++ b/paas/docs/EntityLoadError.md @@ -16,10 +16,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityNameFilter.md b/paas/docs/EntityNameFilter.md index 432fe848..2ba3932c 100644 --- a/paas/docs/EntityNameFilter.md +++ b/paas/docs/EntityNameFilter.md @@ -22,7 +22,7 @@ | type | String | | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityRelation.md b/paas/docs/EntityRelation.md index c002e16f..cf0e1a1a 100644 --- a/paas/docs/EntityRelation.md +++ b/paas/docs/EntityRelation.md @@ -20,13 +20,13 @@ A JSON value representing the relation. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityRelationInfo.md b/paas/docs/EntityRelationInfo.md index 89ba6f72..9b2e7000 100644 --- a/paas/docs/EntityRelationInfo.md +++ b/paas/docs/EntityRelationInfo.md @@ -20,13 +20,13 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityRelationsQuery.md b/paas/docs/EntityRelationsQuery.md index a0d0ce27..0c2cdc05 100644 --- a/paas/docs/EntityRelationsQuery.md +++ b/paas/docs/EntityRelationsQuery.md @@ -34,13 +34,13 @@ A JSON value representing the entity relations query object. | negate | Boolean | Negate relation type between root entity and other entity. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` --- diff --git a/paas/docs/EntitySubtype.md b/paas/docs/EntitySubtype.md index b3dfb93c..6e2c0ca0 100644 --- a/paas/docs/EntitySubtype.md +++ b/paas/docs/EntitySubtype.md @@ -15,10 +15,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityTableComponent.md b/paas/docs/EntityTableComponent.md index 253372b2..f1731bc2 100644 --- a/paas/docs/EntityTableComponent.md +++ b/paas/docs/EntityTableComponent.md @@ -24,7 +24,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportComponent | Name | Type | Description | Notes | @@ -254,7 +254,7 @@ | color | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### IntervalType (enum) `MILLISECONDS` | `WEEK` | `WEEK_ISO` | `MONTH` | `QUARTER` diff --git a/paas/docs/EntityType.md b/paas/docs/EntityType.md index 17cf7371..6ea046fa 100644 --- a/paas/docs/EntityType.md +++ b/paas/docs/EntityType.md @@ -98,6 +98,20 @@ * `API_KEY` (value: `"API_KEY"`) +* `AGENT` (value: `"AGENT"`) + +* `AGENT_APPLICATION` (value: `"AGENT_APPLICATION"`) + +* `AGENT_APP_EVENT` (value: `"AGENT_APP_EVENT"`) + +* `AGENT_APP_UNIT` (value: `"AGENT_APP_UNIT"`) + +* `AGENT_APP_PROFILE` (value: `"AGENT_APP_PROFILE"`) + +* `AGENT_PROFILE` (value: `"AGENT_PROFILE"`) + +* `AGENT_BULK_ACTION` (value: `"AGENT_BULK_ACTION"`) + * `BILLING_CUSTOMER` (value: `"BILLING_CUSTOMER"`) * `SUBSCRIPTION_PLAN` (value: `"SUBSCRIPTION_PLAN"`) diff --git a/paas/docs/EntityTypeFilter.md b/paas/docs/EntityTypeFilter.md index fa57f66f..c2857c3b 100644 --- a/paas/docs/EntityTypeFilter.md +++ b/paas/docs/EntityTypeFilter.md @@ -21,7 +21,7 @@ | type | String | | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityTypeLoadResult.md b/paas/docs/EntityTypeLoadResult.md index 138bd6a1..40258d47 100644 --- a/paas/docs/EntityTypeLoadResult.md +++ b/paas/docs/EntityTypeLoadResult.md @@ -20,7 +20,7 @@ ## Referenced Types #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityView.md b/paas/docs/EntityView.md index fcc19f9f..99fc6e80 100644 --- a/paas/docs/EntityView.md +++ b/paas/docs/EntityView.md @@ -27,7 +27,7 @@ A JSON object representing the entity view. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TelemetryEntityView | Name | Type | Description | Notes | @@ -36,7 +36,7 @@ A JSON object representing the entity view. | attributes | AttributesEntityView | JSON object with attributes to expose | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### AttributesEntityView | Name | Type | Description | Notes | diff --git a/paas/docs/EntityViewExportData.md b/paas/docs/EntityViewExportData.md index 1be17a63..9a5f316d 100644 --- a/paas/docs/EntityViewExportData.md +++ b/paas/docs/EntityViewExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/EntityViewId.md b/paas/docs/EntityViewId.md index 6662a810..25e3591a 100644 --- a/paas/docs/EntityViewId.md +++ b/paas/docs/EntityViewId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EntityViewInfo.md b/paas/docs/EntityViewInfo.md index 1f095251..124a61be 100644 --- a/paas/docs/EntityViewInfo.md +++ b/paas/docs/EntityViewInfo.md @@ -27,7 +27,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TelemetryEntityView | Name | Type | Description | Notes | @@ -42,7 +42,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### AttributesEntityView | Name | Type | Description | Notes | diff --git a/paas/docs/EntityViewSearchQuery.md b/paas/docs/EntityViewSearchQuery.md index e8695ba3..c2dac9ee 100644 --- a/paas/docs/EntityViewSearchQuery.md +++ b/paas/docs/EntityViewSearchQuery.md @@ -28,13 +28,13 @@ The entity view search query JSON | fetchLastLevelOnly | Boolean | Fetch entities that match the last level of search. Useful to find Devices that are strictly 'maxLevel' relations away from the root entity. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` --- diff --git a/paas/docs/EntityViewSearchQueryFilter.md b/paas/docs/EntityViewSearchQueryFilter.md index b035fc51..db301332 100644 --- a/paas/docs/EntityViewSearchQueryFilter.md +++ b/paas/docs/EntityViewSearchQueryFilter.md @@ -41,7 +41,7 @@ `CURRENT_CUSTOMER` | `CURRENT_TENANT` | `CURRENT_USER` | `CURRENT_USER_OWNER` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/EventInfo.md b/paas/docs/EventInfo.md index 9a6ae011..c60804c0 100644 --- a/paas/docs/EventInfo.md +++ b/paas/docs/EventInfo.md @@ -19,7 +19,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EventId | Name | Type | Description | Notes | @@ -27,7 +27,7 @@ | id | UUID | string | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ExportableEntity.md b/paas/docs/ExportableEntity.md index d7757786..e8fbb10a 100644 --- a/paas/docs/ExportableEntity.md +++ b/paas/docs/ExportableEntity.md @@ -16,10 +16,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/GeofencingCalculatedFieldConfiguration.md b/paas/docs/GeofencingCalculatedFieldConfiguration.md index b5f40855..4f591fc1 100644 --- a/paas/docs/GeofencingCalculatedFieldConfiguration.md +++ b/paas/docs/GeofencingCalculatedFieldConfiguration.md @@ -18,7 +18,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CalculatedFieldConfiguration | Name | Type | Description | Notes | @@ -85,7 +85,7 @@ `CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### TimeSeriesOutputStrategy | Name | Type | Description | Notes | diff --git a/paas/docs/GetManagedRelatedEntityIds200ResponseInner.md b/paas/docs/GetManagedRelatedEntityIds200ResponseInner.md new file mode 100644 index 00000000..9e940a30 --- /dev/null +++ b/paas/docs/GetManagedRelatedEntityIds200ResponseInner.md @@ -0,0 +1,28 @@ + +# GetManagedRelatedEntityIds200ResponseInner + +`org.thingsboard.client.model.GetManagedRelatedEntityIds200ResponseInner` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **entityType** | **EntityType** | | | +| **id** | **UUID** | ID of the entity, time-based UUID v1 | | + + + +## Referenced Types + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/GroupPermission.md b/paas/docs/GroupPermission.md index f59af65f..d1aae927 100644 --- a/paas/docs/GroupPermission.md +++ b/paas/docs/GroupPermission.md @@ -24,10 +24,10 @@ A JSON value representing the group permission. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/GroupPermissionId.md b/paas/docs/GroupPermissionId.md index 3a013fbc..44e086ac 100644 --- a/paas/docs/GroupPermissionId.md +++ b/paas/docs/GroupPermissionId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/GroupPermissionInfo.md b/paas/docs/GroupPermissionInfo.md index f389721e..bdd46eda 100644 --- a/paas/docs/GroupPermissionInfo.md +++ b/paas/docs/GroupPermissionInfo.md @@ -29,10 +29,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### Role | Name | Type | Description | Notes | diff --git a/paas/docs/HeaderFooter.md b/paas/docs/HeaderFooter.md index 7dacecc0..e664be95 100644 --- a/paas/docs/HeaderFooter.md +++ b/paas/docs/HeaderFooter.md @@ -15,7 +15,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportComponent | Name | Type | Description | Notes | @@ -656,7 +656,7 @@ `CONSTANT` | `RANGE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### IntervalType (enum) `MILLISECONDS` | `WEEK` | `WEEK_ISO` | `MONTH` | `QUARTER` diff --git a/paas/docs/HeadingComponent.md b/paas/docs/HeadingComponent.md index 00d7428a..bea3806f 100644 --- a/paas/docs/HeadingComponent.md +++ b/paas/docs/HeadingComponent.md @@ -27,7 +27,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportComponent | Name | Type | Description | Notes | @@ -238,7 +238,7 @@ | color | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### IntervalType (enum) `MILLISECONDS` | `WEEK` | `WEEK_ISO` | `MONTH` | `QUARTER` diff --git a/paas/docs/HomeDashboard.md b/paas/docs/HomeDashboard.md index 8caca812..76313ebd 100644 --- a/paas/docs/HomeDashboard.md +++ b/paas/docs/HomeDashboard.md @@ -27,7 +27,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ShortCustomerInfo | Name | Type | Description | Notes | @@ -52,7 +52,7 @@ | _public | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ResourceType (enum) `LWM2_M_MODEL` | `JKS` | `PKCS_12` | `JS_MODULE` | `IMAGE` | `DASHBOARD` | `GENERAL` diff --git a/paas/docs/HomeDashboardInfo.md b/paas/docs/HomeDashboardInfo.md index 310afe18..f1418c05 100644 --- a/paas/docs/HomeDashboardInfo.md +++ b/paas/docs/HomeDashboardInfo.md @@ -16,10 +16,10 @@ A JSON object that represents home dashboard id and other parameters ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ImageComponent.md b/paas/docs/ImageComponent.md index 4bb12219..f30302aa 100644 --- a/paas/docs/ImageComponent.md +++ b/paas/docs/ImageComponent.md @@ -26,7 +26,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportComponent | Name | Type | Description | Notes | @@ -226,7 +226,7 @@ | color | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### IntervalType (enum) `MILLISECONDS` | `WEEK` | `WEEK_ISO` | `MONTH` | `QUARTER` diff --git a/paas/docs/Integration.md b/paas/docs/Integration.md index e5d997c3..172d26de 100644 --- a/paas/docs/Integration.md +++ b/paas/docs/Integration.md @@ -32,7 +32,7 @@ A JSON value representing the integration. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### IntegrationType (enum) `OCEANCONNECT` | `SIGFOX` | `THINGPARK` | `TPE` | `CHIRPSTACK` | `PARTICLE` | `TMOBILE_IOT_CDP` | `HTTP` | `MQTT` | `PUB_SUB` | … (29 values total) @@ -45,7 +45,7 @@ A JSON value representing the integration. | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/IntegrationExportData.md b/paas/docs/IntegrationExportData.md index f0a0c438..2eebc784 100644 --- a/paas/docs/IntegrationExportData.md +++ b/paas/docs/IntegrationExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/IntegrationId.md b/paas/docs/IntegrationId.md index 60f14d53..b0ad5fea 100644 --- a/paas/docs/IntegrationId.md +++ b/paas/docs/IntegrationId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/IntegrationInfo.md b/paas/docs/IntegrationInfo.md index 9360cd98..99f27396 100644 --- a/paas/docs/IntegrationInfo.md +++ b/paas/docs/IntegrationInfo.md @@ -26,7 +26,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### IntegrationType (enum) `OCEANCONNECT` | `SIGFOX` | `THINGPARK` | `TPE` | `CHIRPSTACK` | `PARTICLE` | `TMOBILE_IOT_CDP` | `HTTP` | `MQTT` | `PUB_SUB` | … (29 values total) @@ -39,7 +39,7 @@ | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/Job.md b/paas/docs/Job.md index 555541fc..5ff7298a 100644 --- a/paas/docs/Job.md +++ b/paas/docs/Job.md @@ -24,7 +24,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### JobType (enum) `CF_REPROCESSING` | `REPORT` | `DUMMY` @@ -66,6 +66,7 @@ | reportTemplateId | ReportTemplateId | | [optional] | | userId | UserId | | [optional] | | timezone | String | | [optional] | +| makePublic | Boolean | | [optional] | | targets | List | | [optional] | | notificationTemplateId | NotificationTemplateId | | [optional] | | notificationRequests | List | | [optional] | @@ -101,7 +102,7 @@ | report | Report | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### TaskResult | Name | Type | Description | Notes | @@ -113,6 +114,21 @@ | error | String | | [optional] | | jobType | String | | | +#### CfReprocessingTaskResult *(extends TaskResult, jobType=`CF_REPROCESSING`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | CfReprocessingTaskFailure | | [optional] | + +#### DummyTaskResult *(extends TaskResult, jobType=`DUMMY`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | DummyTaskFailure | | [optional] | + +#### ReportTaskResult *(extends TaskResult, jobType=`REPORT`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| report | Report | | [optional] | + #### NotificationRequest | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -163,7 +179,22 @@ | format | TbReportFormat | | | | name | String | | | | userId | UserId | | | +| publicKey | String | | [optional] | | ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | + +#### CfReprocessingTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| entityInfo | EntityInfo | | [optional] | + +#### DummyTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| number | Integer | | [optional] | +| failAlways | Boolean | | [optional] | #### NotificationTemplate | Name | Type | Description | Notes | @@ -221,6 +252,7 @@ | reportTemplateId | ReportTemplateId | | [optional] | | userId | UserId | | [optional] | | timezone | String | | [optional] | +| makePublic | Boolean | | [optional] | #### DeliveryMethodNotificationTemplate | Name | Type | Description | Notes | diff --git a/paas/docs/JobConfiguration.md b/paas/docs/JobConfiguration.md index c98d7981..2c0ffe47 100644 --- a/paas/docs/JobConfiguration.md +++ b/paas/docs/JobConfiguration.md @@ -42,6 +42,7 @@ | reportTemplateId | ReportTemplateId | | [optional] | | userId | UserId | | [optional] | | timezone | String | | [optional] | +| makePublic | Boolean | | [optional] | | targets | List | | [optional] | | notificationTemplateId | NotificationTemplateId | | [optional] | | notificationRequests | List | | [optional] | @@ -53,7 +54,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TaskResult | Name | Type | Description | Notes | @@ -65,6 +66,21 @@ | error | String | | [optional] | | jobType | String | | | +#### CfReprocessingTaskResult *(extends TaskResult, jobType=`CF_REPROCESSING`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | CfReprocessingTaskFailure | | [optional] | + +#### DummyTaskResult *(extends TaskResult, jobType=`DUMMY`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | DummyTaskFailure | | [optional] | + +#### ReportTaskResult *(extends TaskResult, jobType=`REPORT`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| report | Report | | [optional] | + #### NotificationRequest | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -140,7 +156,7 @@ | totalSent | Integer | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### DebugSettings | Name | Type | Description | Notes | @@ -149,6 +165,34 @@ | allEnabled | Boolean | Debug All. Used as a trigger for updating debugAllUntil. | [optional] | | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | +#### CfReprocessingTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| entityInfo | EntityInfo | | [optional] | + +#### Report +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | ReportId | | [optional] | +| createdTime | Long | Entity creation timestamp in milliseconds since Unix epoch | [optional] [readonly] | +| tenantId | TenantId | | | +| customerId | CustomerId | | [optional] | +| templateId | ReportTemplateId | | | +| format | TbReportFormat | | | +| name | String | | | +| userId | UserId | | | +| publicKey | String | | [optional] | +| ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | + +#### DummyTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| number | Integer | | [optional] | +| failAlways | Boolean | | [optional] | + #### NotificationType (enum) `GENERAL` | `ALARM` | `DEVICE_ACTIVITY` | `ENTITY_ACTION` | `ALARM_COMMENT` | `RULE_ENGINE_COMPONENT_LIFECYCLE_EVENT` | `ALARM_ASSIGNMENT` | `NEW_PLATFORM_VERSION` | `ENTITIES_LIMIT` | `ENTITIES_LIMIT_INCREASE_REQUEST` | … (24 values total) @@ -160,6 +204,10 @@ | reportTemplateId | ReportTemplateId | | [optional] | | userId | UserId | | [optional] | | timezone | String | | [optional] | +| makePublic | Boolean | | [optional] | + +#### TbReportFormat (enum) +`PDF` | `CSV` #### DeliveryMethodNotificationTemplate | Name | Type | Description | Notes | diff --git a/paas/docs/JobId.md b/paas/docs/JobId.md index aea81e21..2990fe3d 100644 --- a/paas/docs/JobId.md +++ b/paas/docs/JobId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/JobResult.md b/paas/docs/JobResult.md index ccc750cc..d412cb2c 100644 --- a/paas/docs/JobResult.md +++ b/paas/docs/JobResult.md @@ -37,7 +37,7 @@ Job execution result ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TaskResult | Name | Type | Description | Notes | @@ -49,6 +49,21 @@ Job execution result | error | String | | [optional] | | jobType | String | | | +#### CfReprocessingTaskResult *(extends TaskResult, jobType=`CF_REPROCESSING`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | CfReprocessingTaskFailure | | [optional] | + +#### DummyTaskResult *(extends TaskResult, jobType=`DUMMY`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | DummyTaskFailure | | [optional] | + +#### ReportTaskResult *(extends TaskResult, jobType=`REPORT`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| report | Report | | [optional] | + #### Report | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -60,13 +75,34 @@ Job execution result | format | TbReportFormat | | | | name | String | | | | userId | UserId | | | +| publicKey | String | | [optional] | | ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | #### TbReportFormat (enum) `PDF` | `CSV` +#### CfReprocessingTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| entityInfo | EntityInfo | | [optional] | + +#### DummyTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| number | Integer | | [optional] | +| failAlways | Boolean | | [optional] | + #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### EntityInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | EntityId | JSON object with the entity Id. | [optional] | +| name | String | Entity Name | [optional] | --- diff --git a/paas/docs/LatestChartComponent.md b/paas/docs/LatestChartComponent.md index 79c8d626..a3eb2598 100644 --- a/paas/docs/LatestChartComponent.md +++ b/paas/docs/LatestChartComponent.md @@ -26,7 +26,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportComponent | Name | Type | Description | Notes | @@ -264,7 +264,7 @@ | color | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### IntervalType (enum) `MILLISECONDS` | `WEEK` | `WEEK_ISO` | `MONTH` | `QUARTER` diff --git a/paas/docs/LimitedApi.md b/paas/docs/LimitedApi.md index 828d1110..9ec76d9e 100644 --- a/paas/docs/LimitedApi.md +++ b/paas/docs/LimitedApi.md @@ -42,6 +42,14 @@ * `EDGE_UPLINK_MESSAGES_PER_EDGE` (value: `"EDGE_UPLINK_MESSAGES_PER_EDGE"`) +* `AGENT_EVENTS` (value: `"AGENT_EVENTS"`) + +* `AGENT_EVENTS_PER_AGENT` (value: `"AGENT_EVENTS_PER_AGENT"`) + +* `AGENT_LOG_CHUNKS` (value: `"AGENT_LOG_CHUNKS"`) + +* `AGENT_LOG_CHUNKS_PER_AGENT` (value: `"AGENT_LOG_CHUNKS_PER_AGENT"`) + * `INTEGRATION_MSGS_PER_TENANT` (value: `"INTEGRATION_MSGS_PER_TENANT"`) * `INTEGRATION_MSGS_PER_DEVICE` (value: `"INTEGRATION_MSGS_PER_DEVICE"`) diff --git a/paas/docs/LoginWhiteLabelingParams.md b/paas/docs/LoginWhiteLabelingParams.md index ff312bc0..1cc10fff 100644 --- a/paas/docs/LoginWhiteLabelingParams.md +++ b/paas/docs/LoginWhiteLabelingParams.md @@ -15,6 +15,7 @@ A JSON value representing the login white labeling configuration | **appTitle** | **String** | White-labeled name of the platform | [optional] | | **favicon** | **Favicon** | JSON object that contains website icon url and type | [optional] | | **paletteSettings** | **PaletteSettings** | Complex JSON that describes structure of the Angular Material Palette. See [theming](https://material.angular.io/guide/theming) for more details | [optional] | +| **primaryColorPanels** | **Boolean** | Whether primary-color panels (top toolbar, side navigation, dialog and entity-details headers) use the primary palette color as background. When false, they render on a white background | [optional] | | **helpLinkBaseUrl** | **String** | Base URL for help link | [optional] | | **uiHelpBaseUrl** | **String** | Base URL for the repository with the UI help components (markdown) | [optional] | | **enableHelpLinks** | **Boolean** | Enable or Disable help links | [optional] | @@ -38,7 +39,7 @@ A JSON value representing the login white labeling configuration ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Favicon | Name | Type | Description | Notes | @@ -59,7 +60,7 @@ A JSON value representing the login white labeling configuration | colors | Map | Mapping of hue identifier number to the rgb(a) color code | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/LwM2MBootstrapServerCredential.md b/paas/docs/LwM2MBootstrapServerCredential.md index 6f3c66e5..ce4ea705 100644 --- a/paas/docs/LwM2MBootstrapServerCredential.md +++ b/paas/docs/LwM2MBootstrapServerCredential.md @@ -11,6 +11,72 @@ +## Subtypes + +#### NoSecLwM2MBootstrapServerCredential *(securityMode=`NO_SEC`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### PSKLwM2MBootstrapServerCredential *(securityMode=`PSK`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### RPKLwM2MBootstrapServerCredential *(securityMode=`RPK`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### X509LwM2MBootstrapServerCredential *(securityMode=`X509`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + --- ### Conventions diff --git a/paas/docs/Lwm2mDeviceProfileTransportConfiguration.md b/paas/docs/Lwm2mDeviceProfileTransportConfiguration.md index a8b029d7..78091d6f 100644 --- a/paas/docs/Lwm2mDeviceProfileTransportConfiguration.md +++ b/paas/docs/Lwm2mDeviceProfileTransportConfiguration.md @@ -39,6 +39,70 @@ |------|------|-------------|-------| | securityMode | String | | | +#### NoSecLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`NO_SEC`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### PSKLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`PSK`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### RPKLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`RPK`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### X509LwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`X509`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + #### OtherConfiguration | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -71,7 +135,7 @@ | epmax | Long | | [optional] | #### TelemetryObserveStrategy (enum) -`SINGLE_0_ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` | `COMPOSITE_ALL_1_ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` | `COMPOSITE_BY_OBJECT_2_GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` +`SINGLE` | `COMPOSITE_ALL` | `COMPOSITE_BY_OBJECT` #### PowerMode (enum) `PSM` | `DRX` | `E_DRX` diff --git a/paas/docs/MergedGroupPermissionInfo.md b/paas/docs/MergedGroupPermissionInfo.md index 4ec867e3..77b905d4 100644 --- a/paas/docs/MergedGroupPermissionInfo.md +++ b/paas/docs/MergedGroupPermissionInfo.md @@ -15,7 +15,7 @@ ## Referenced Types #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### Operation (enum) `ALL` | `CREATE` | `READ` | `WRITE` | `DELETE` | `RPC_CALL` | `READ_CREDENTIALS` | `WRITE_CREDENTIALS` | `READ_ATTRIBUTES` | `WRITE_ATTRIBUTES` | … (21 values total) diff --git a/paas/docs/MergedGroupTypePermissionInfo.md b/paas/docs/MergedGroupTypePermissionInfo.md index 52a8a4a9..62af7a49 100644 --- a/paas/docs/MergedGroupTypePermissionInfo.md +++ b/paas/docs/MergedGroupTypePermissionInfo.md @@ -14,10 +14,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/MergedUserPermissions.md b/paas/docs/MergedUserPermissions.md index d24a3577..6ea7b6b1 100644 --- a/paas/docs/MergedUserPermissions.md +++ b/paas/docs/MergedUserPermissions.md @@ -18,7 +18,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Operation (enum) `ALL` | `CREATE` | `READ` | `WRITE` | `DELETE` | `RPC_CALL` | `READ_CREDENTIALS` | `WRITE_CREDENTIALS` | `READ_ATTRIBUTES` | `WRITE_ATTRIBUTES` | … (21 values total) @@ -36,7 +36,7 @@ | hasGenericRead | Boolean | Indicates if generic permission assigned to the user group. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/MobileApp.md b/paas/docs/MobileApp.md index 8ba8c2f5..5bd776b3 100644 --- a/paas/docs/MobileApp.md +++ b/paas/docs/MobileApp.md @@ -25,7 +25,7 @@ A JSON value representing the Mobile Application. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### PlatformType (enum) `WEB` | `ANDROID` | `IOS` @@ -49,7 +49,7 @@ A JSON value representing the Mobile Application. | storeLink | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/MobileAppBundle.md b/paas/docs/MobileAppBundle.md index e9069363..8a5d768d 100644 --- a/paas/docs/MobileAppBundle.md +++ b/paas/docs/MobileAppBundle.md @@ -25,7 +25,7 @@ A JSON value representing the Mobile Application Bundle. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### MobileLayoutConfig | Name | Type | Description | Notes | @@ -105,7 +105,7 @@ A JSON value representing the Mobile Application Bundle. | host | String | Mobile application verification settings. Used for callback to mobile application once user is registered. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### MobilePageType (enum) `DEFAULT` | `DASHBOARD` | `WEB_VIEW` | `CUSTOM` diff --git a/paas/docs/MobileAppBundleId.md b/paas/docs/MobileAppBundleId.md index 67dc9114..0392e3dc 100644 --- a/paas/docs/MobileAppBundleId.md +++ b/paas/docs/MobileAppBundleId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/MobileAppBundleInfo.md b/paas/docs/MobileAppBundleInfo.md index 042e9258..0bd533a2 100644 --- a/paas/docs/MobileAppBundleInfo.md +++ b/paas/docs/MobileAppBundleInfo.md @@ -27,7 +27,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### MobileLayoutConfig | Name | Type | Description | Notes | @@ -120,7 +120,7 @@ `WEB` | `ANDROID` | `IOS` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### MobilePageType (enum) `DEFAULT` | `DASHBOARD` | `WEB_VIEW` | `CUSTOM` diff --git a/paas/docs/MobileAppId.md b/paas/docs/MobileAppId.md index ddac42f5..c49cd381 100644 --- a/paas/docs/MobileAppId.md +++ b/paas/docs/MobileAppId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/MobileSelfRegistrationParams.md b/paas/docs/MobileSelfRegistrationParams.md index 5d1da041..e38cf96c 100644 --- a/paas/docs/MobileSelfRegistrationParams.md +++ b/paas/docs/MobileSelfRegistrationParams.md @@ -17,7 +17,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### SelfRegistrationParams | Name | Type | Description | Notes | @@ -114,7 +114,7 @@ | id | UUID | string | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### SignUpFieldId (enum) `EMAIL` | `PASSWORD` | `REPEAT_PASSWORD` | `FIRST_NAME` | `LAST_NAME` | `PHONE` | `COUNTRY` | `CITY` | `STATE` | `ZIP` | … (12 values total) diff --git a/paas/docs/Notification.md b/paas/docs/Notification.md index 301e08fa..0a93eeff 100644 --- a/paas/docs/Notification.md +++ b/paas/docs/Notification.md @@ -23,7 +23,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### NotificationType (enum) `GENERAL` | `ALARM` | `DEVICE_ACTIVITY` | `ENTITY_ACTION` | `ALARM_COMMENT` | `RULE_ENGINE_COMPONENT_LIFECYCLE_EVENT` | `ALARM_ASSIGNMENT` | `NEW_PLATFORM_VERSION` | `ENTITIES_LIMIT` | `ENTITIES_LIMIT_INCREASE_REQUEST` | … (24 values total) @@ -42,7 +42,7 @@ `SENT` | `READ` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/NotificationId.md b/paas/docs/NotificationId.md index 4065e32d..d03e59ae 100644 --- a/paas/docs/NotificationId.md +++ b/paas/docs/NotificationId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/NotificationInfo.md b/paas/docs/NotificationInfo.md index 378351ab..b9db740b 100644 --- a/paas/docs/NotificationInfo.md +++ b/paas/docs/NotificationInfo.md @@ -15,10 +15,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/NotificationRequest.md b/paas/docs/NotificationRequest.md index 09b92ccc..fced0aea 100644 --- a/paas/docs/NotificationRequest.md +++ b/paas/docs/NotificationRequest.md @@ -24,7 +24,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### NotificationTemplate | Name | Type | Description | Notes | @@ -72,9 +72,10 @@ | reportTemplateId | ReportTemplateId | | [optional] | | userId | UserId | | [optional] | | timezone | String | | [optional] | +| makePublic | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### DeliveryMethodNotificationTemplate | Name | Type | Description | Notes | diff --git a/paas/docs/NotificationRequestConfig.md b/paas/docs/NotificationRequestConfig.md index c5568535..76a13fba 100644 --- a/paas/docs/NotificationRequestConfig.md +++ b/paas/docs/NotificationRequestConfig.md @@ -14,10 +14,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/NotificationRequestId.md b/paas/docs/NotificationRequestId.md index dac40522..9178197a 100644 --- a/paas/docs/NotificationRequestId.md +++ b/paas/docs/NotificationRequestId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/NotificationRequestInfo.md b/paas/docs/NotificationRequestInfo.md index 47218ed7..1a5600c6 100644 --- a/paas/docs/NotificationRequestInfo.md +++ b/paas/docs/NotificationRequestInfo.md @@ -26,7 +26,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### NotificationTemplate | Name | Type | Description | Notes | @@ -77,9 +77,10 @@ | reportTemplateId | ReportTemplateId | | [optional] | | userId | UserId | | [optional] | | timezone | String | | [optional] | +| makePublic | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### DeliveryMethodNotificationTemplate | Name | Type | Description | Notes | diff --git a/paas/docs/NotificationRule.md b/paas/docs/NotificationRule.md index edafcf34..a08a6b14 100644 --- a/paas/docs/NotificationRule.md +++ b/paas/docs/NotificationRule.md @@ -22,7 +22,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### NotificationRuleTriggerType (enum) `ENTITY_ACTION` | `ALARM` | `ALARM_COMMENT` | `ALARM_ASSIGNMENT` | `DEVICE_ACTIVITY` | `RULE_ENGINE_COMPONENT_LIFECYCLE_EVENT` | `INTEGRATION_LIFECYCLE_EVENT` | `EDGE_CONNECTION` | `EDGE_COMMUNICATION_FAILURE` | `NEW_PLATFORM_VERSION` | … (15 values total) @@ -217,7 +217,7 @@ | description | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### AlarmSeverity (enum) `CRITICAL` | `MAJOR` | `MINOR` | `WARNING` | `INDETERMINATE` @@ -249,7 +249,7 @@ `ENABLED` | `WARNING` | `DISABLED` #### LimitedApi (enum) -`ENTITY_EXPORT` | `ENTITY_IMPORT` | `NOTIFICATION_REQUESTS` | `NOTIFICATION_REQUESTS_PER_RULE` | `REST_REQUESTS_PER_TENANT` | `REST_REQUESTS_PER_CUSTOMER` | `WS_UPDATES_PER_SESSION` | `CASSANDRA_WRITE_QUERIES_CORE` | `CASSANDRA_READ_QUERIES_CORE` | `CASSANDRA_WRITE_QUERIES_RULE_ENGINE` | … (36 values total) +`ENTITY_EXPORT` | `ENTITY_IMPORT` | `NOTIFICATION_REQUESTS` | `NOTIFICATION_REQUESTS_PER_RULE` | `REST_REQUESTS_PER_TENANT` | `REST_REQUESTS_PER_CUSTOMER` | `WS_UPDATES_PER_SESSION` | `CASSANDRA_WRITE_QUERIES_CORE` | `CASSANDRA_READ_QUERIES_CORE` | `CASSANDRA_WRITE_QUERIES_RULE_ENGINE` | … (40 values total) #### EdgeConnectivityEvent (enum) `CONNECTED` | `DISCONNECTED` diff --git a/paas/docs/NotificationRuleExportData.md b/paas/docs/NotificationRuleExportData.md index 0e520da8..be9541a5 100644 --- a/paas/docs/NotificationRuleExportData.md +++ b/paas/docs/NotificationRuleExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/NotificationRuleId.md b/paas/docs/NotificationRuleId.md index 92d1d03b..6a9b0a1f 100644 --- a/paas/docs/NotificationRuleId.md +++ b/paas/docs/NotificationRuleId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/NotificationRuleInfo.md b/paas/docs/NotificationRuleInfo.md index 9e7527e4..a2a6c49d 100644 --- a/paas/docs/NotificationRuleInfo.md +++ b/paas/docs/NotificationRuleInfo.md @@ -24,7 +24,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### NotificationRuleTriggerType (enum) `ENTITY_ACTION` | `ALARM` | `ALARM_COMMENT` | `ALARM_ASSIGNMENT` | `DEVICE_ACTIVITY` | `RULE_ENGINE_COMPONENT_LIFECYCLE_EVENT` | `INTEGRATION_LIFECYCLE_EVENT` | `EDGE_CONNECTION` | `EDGE_COMMUNICATION_FAILURE` | `NEW_PLATFORM_VERSION` | … (15 values total) @@ -222,7 +222,7 @@ `WEB` | `EMAIL` | `SMS` | `SLACK` | `MICROSOFT_TEAMS` | `MOBILE_APP` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### AlarmSeverity (enum) `CRITICAL` | `MAJOR` | `MINOR` | `WARNING` | `INDETERMINATE` @@ -254,7 +254,7 @@ `ENABLED` | `WARNING` | `DISABLED` #### LimitedApi (enum) -`ENTITY_EXPORT` | `ENTITY_IMPORT` | `NOTIFICATION_REQUESTS` | `NOTIFICATION_REQUESTS_PER_RULE` | `REST_REQUESTS_PER_TENANT` | `REST_REQUESTS_PER_CUSTOMER` | `WS_UPDATES_PER_SESSION` | `CASSANDRA_WRITE_QUERIES_CORE` | `CASSANDRA_READ_QUERIES_CORE` | `CASSANDRA_WRITE_QUERIES_RULE_ENGINE` | … (36 values total) +`ENTITY_EXPORT` | `ENTITY_IMPORT` | `NOTIFICATION_REQUESTS` | `NOTIFICATION_REQUESTS_PER_RULE` | `REST_REQUESTS_PER_TENANT` | `REST_REQUESTS_PER_CUSTOMER` | `WS_UPDATES_PER_SESSION` | `CASSANDRA_WRITE_QUERIES_CORE` | `CASSANDRA_READ_QUERIES_CORE` | `CASSANDRA_WRITE_QUERIES_RULE_ENGINE` | … (40 values total) #### EdgeConnectivityEvent (enum) `CONNECTED` | `DISCONNECTED` diff --git a/paas/docs/NotificationRuleTriggerConfig.md b/paas/docs/NotificationRuleTriggerConfig.md index 3237e321..07c0cfc9 100644 --- a/paas/docs/NotificationRuleTriggerConfig.md +++ b/paas/docs/NotificationRuleTriggerConfig.md @@ -149,7 +149,7 @@ Configuration for notification rule trigger `CONNECTED` | `DISCONNECTED` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### IntegrationType (enum) `OCEANCONNECT` | `SIGFOX` | `THINGPARK` | `TPE` | `CHIRPSTACK` | `PARTICLE` | `TMOBILE_IOT_CDP` | `HTTP` | `MQTT` | `PUB_SUB` | … (29 values total) @@ -158,7 +158,7 @@ Configuration for notification rule trigger `CREATED` | `STARTED` | `ACTIVATED` | `SUSPENDED` | `UPDATED` | `STOPPED` | `DELETED` | `FAILED` | `DEACTIVATED` | `RELATION_UPDATED` | … (11 values total) #### LimitedApi (enum) -`ENTITY_EXPORT` | `ENTITY_IMPORT` | `NOTIFICATION_REQUESTS` | `NOTIFICATION_REQUESTS_PER_RULE` | `REST_REQUESTS_PER_TENANT` | `REST_REQUESTS_PER_CUSTOMER` | `WS_UPDATES_PER_SESSION` | `CASSANDRA_WRITE_QUERIES_CORE` | `CASSANDRA_READ_QUERIES_CORE` | `CASSANDRA_WRITE_QUERIES_RULE_ENGINE` | … (36 values total) +`ENTITY_EXPORT` | `ENTITY_IMPORT` | `NOTIFICATION_REQUESTS` | `NOTIFICATION_REQUESTS_PER_RULE` | `REST_REQUESTS_PER_TENANT` | `REST_REQUESTS_PER_CUSTOMER` | `WS_UPDATES_PER_SESSION` | `CASSANDRA_WRITE_QUERIES_CORE` | `CASSANDRA_READ_QUERIES_CORE` | `CASSANDRA_WRITE_QUERIES_RULE_ENGINE` | … (40 values total) --- diff --git a/paas/docs/NotificationTarget.md b/paas/docs/NotificationTarget.md index 1a299868..431f6688 100644 --- a/paas/docs/NotificationTarget.md +++ b/paas/docs/NotificationTarget.md @@ -17,7 +17,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### NotificationTargetConfig | Name | Type | Description | Notes | @@ -49,7 +49,7 @@ | conversation | SlackConversation | | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### UsersFilter | Name | Type | Description | Notes | diff --git a/paas/docs/NotificationTargetExportData.md b/paas/docs/NotificationTargetExportData.md index 5240d862..a116e33c 100644 --- a/paas/docs/NotificationTargetExportData.md +++ b/paas/docs/NotificationTargetExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/NotificationTargetId.md b/paas/docs/NotificationTargetId.md index 96a04789..3177ae46 100644 --- a/paas/docs/NotificationTargetId.md +++ b/paas/docs/NotificationTargetId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/NotificationTemplate.md b/paas/docs/NotificationTemplate.md index 3de59ce5..ba847da5 100644 --- a/paas/docs/NotificationTemplate.md +++ b/paas/docs/NotificationTemplate.md @@ -18,7 +18,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### NotificationType (enum) `GENERAL` | `ALARM` | `DEVICE_ACTIVITY` | `ENTITY_ACTION` | `ALARM_COMMENT` | `RULE_ENGINE_COMPONENT_LIFECYCLE_EVENT` | `ALARM_ASSIGNMENT` | `NEW_PLATFORM_VERSION` | `ENTITIES_LIMIT` | `ENTITIES_LIMIT_INCREASE_REQUEST` | … (24 values total) @@ -31,6 +31,7 @@ | reportTemplateId | ReportTemplateId | | [optional] | | userId | UserId | | [optional] | | timezone | String | | [optional] | +| makePublic | Boolean | | [optional] | #### DeliveryMethodNotificationTemplate | Name | Type | Description | Notes | @@ -70,7 +71,7 @@ | additionalConfig | com.fasterxml.jackson.databind.JsonNode | Additional JSON configuration for web buttons/actions | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### Button | Name | Type | Description | Notes | diff --git a/paas/docs/NotificationTemplateConfig.md b/paas/docs/NotificationTemplateConfig.md index d72af509..3a8ebc78 100644 --- a/paas/docs/NotificationTemplateConfig.md +++ b/paas/docs/NotificationTemplateConfig.md @@ -12,12 +12,13 @@ | **reportTemplateId** | **ReportTemplateId** | | [optional] | | **userId** | **UserId** | | [optional] | | **timezone** | **String** | | [optional] | +| **makePublic** | **Boolean** | | [optional] | ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DeliveryMethodNotificationTemplate | Name | Type | Description | Notes | @@ -68,7 +69,7 @@ | setEntityIdInState | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### LinkType (enum) `LINK` | `DASHBOARD` diff --git a/paas/docs/NotificationTemplateExportData.md b/paas/docs/NotificationTemplateExportData.md index 5421a504..9c6aa3d2 100644 --- a/paas/docs/NotificationTemplateExportData.md +++ b/paas/docs/NotificationTemplateExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/NotificationTemplateId.md b/paas/docs/NotificationTemplateId.md index 16f990f5..5a168525 100644 --- a/paas/docs/NotificationTemplateId.md +++ b/paas/docs/NotificationTemplateId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/OAuth2Client.md b/paas/docs/OAuth2Client.md index 97e0cc0d..879df00a 100644 --- a/paas/docs/OAuth2Client.md +++ b/paas/docs/OAuth2Client.md @@ -33,7 +33,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### OAuth2MapperConfig | Name | Type | Description | Notes | @@ -73,7 +73,7 @@ | sendToken | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### TenantNameStrategyType (enum) `DOMAIN` | `EMAIL` | `CUSTOM` diff --git a/paas/docs/OAuth2ClientId.md b/paas/docs/OAuth2ClientId.md index 78f38f00..6ca2fd83 100644 --- a/paas/docs/OAuth2ClientId.md +++ b/paas/docs/OAuth2ClientId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/OAuth2ClientInfo.md b/paas/docs/OAuth2ClientInfo.md index 95a6ba8a..f311ce40 100644 --- a/paas/docs/OAuth2ClientInfo.md +++ b/paas/docs/OAuth2ClientInfo.md @@ -18,13 +18,13 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### PlatformType (enum) `WEB` | `ANDROID` | `IOS` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/OtaPackage.md b/paas/docs/OtaPackage.md index 8aeb05e8..6cd34c87 100644 --- a/paas/docs/OtaPackage.md +++ b/paas/docs/OtaPackage.md @@ -30,7 +30,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### OtaPackageType (enum) `FIRMWARE` | `SOFTWARE` @@ -39,7 +39,7 @@ `MD5` | `SHA256` | `SHA384` | `SHA512` | `CRC32` | `MURMUR3_32` | `MURMUR3_128` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/OtaPackageExportData.md b/paas/docs/OtaPackageExportData.md index 4cdf8f3d..f1179515 100644 --- a/paas/docs/OtaPackageExportData.md +++ b/paas/docs/OtaPackageExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/OtaPackageId.md b/paas/docs/OtaPackageId.md index cef1d828..b84b94fa 100644 --- a/paas/docs/OtaPackageId.md +++ b/paas/docs/OtaPackageId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/OtaPackageInfo.md b/paas/docs/OtaPackageInfo.md index 718df026..e34ea280 100644 --- a/paas/docs/OtaPackageInfo.md +++ b/paas/docs/OtaPackageInfo.md @@ -29,7 +29,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### OtaPackageType (enum) `FIRMWARE` | `SOFTWARE` @@ -38,7 +38,7 @@ `MD5` | `SHA256` | `SHA384` | `SHA512` | `CRC32` | `MURMUR3_32` | `MURMUR3_128` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataAgent.md b/paas/docs/PageDataAgent.md new file mode 100644 index 00000000..b2153c44 --- /dev/null +++ b/paas/docs/PageDataAgent.md @@ -0,0 +1,48 @@ + +# PageDataAgent + +`org.thingsboard.client.model.PageDataAgent` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **data** | **List\** | Array of the entities | [optional] | +| **totalPages** | **Integer** | Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria | [optional] [readonly] | +| **totalElements** | **Long** | Total number of elements in all available pages | [optional] [readonly] | +| **hasNext** | **Boolean** | 'false' value indicates the end of the result set | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### Agent +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentId | JSON object with the Agent Id. Specify this field to update the Agent. Referencing non-existing Agent Id will cause error. Omit this field to create new Agent. | [optional] | +| createdTime | Long | Timestamp of the agent creation, in milliseconds | [optional] [readonly] | +| additionalInfo | com.fasterxml.jackson.databind.JsonNode | | [optional] | +| tenantId | TenantId | JSON object with Tenant Id. Use 'assignAgentToTenant' to change the Tenant Id. | [optional] [readonly] | +| customerId | CustomerId | JSON object with Customer Id. | [optional] [readonly] | +| name | String | Unique Agent Name in scope of Tenant | | +| description | String | Agent description | [optional] | +| routingKey | String | Agent routing key used for authentication | | +| secret | String | Agent secret used for authentication | | +| agentProfileId | AgentProfileId | JSON object with Agent Profile Id. Nullable. | [optional] | +| version | Long | | [optional] | +| ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/PageDataAgentAppEvent.md b/paas/docs/PageDataAgentAppEvent.md new file mode 100644 index 00000000..764f24b6 --- /dev/null +++ b/paas/docs/PageDataAgentAppEvent.md @@ -0,0 +1,115 @@ + +# PageDataAgentAppEvent + +`org.thingsboard.client.model.PageDataAgentAppEvent` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **data** | **List\** | Array of the entities | [optional] | +| **totalPages** | **Integer** | Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria | [optional] [readonly] | +| **totalElements** | **Long** | Total number of elements in all available pages | [optional] [readonly] | +| **hasNext** | **Boolean** | 'false' value indicates the end of the result set | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppEvent +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentAppEventId | JSON object with the Agent App Event Id. | [optional] | +| createdTime | Long | Timestamp of the event creation, in milliseconds | [optional] [readonly] | +| tenantId | TenantId | | [optional] | +| applicationId | AgentApplicationId | | [optional] | +| agentId | AgentId | | [optional] | +| applicationName | String | | [optional] | +| actionType | AgentAppEventActionType | | [optional] | +| startStatus | ProcessingStartStatus | | [optional] | +| processingStatus | AgentProcessingStatus | | [optional] | +| currentStepId | UUID | | [optional] | +| currentActivity | String | | [optional] | +| errorMessage | String | | [optional] | +| updatedTime | Long | | [optional] | +| stepStates | Map | | [optional] | +| bulkActionId | UUID | | [optional] | +| resolvedArguments | Map | | [optional] | +| winnerContainerId | String | | [optional] | +| finalizeDeadlineTs | Long | | [optional] | +| contextMetadata | Map | | [optional] | + +#### AgentAppEventActionType (enum) +`INSTALL` | `UPDATE` | `DELETE` | `RESTART` | `ROLLBACK` | `UPGRADE` | `AGENT_UPGRADE` + +#### ProcessingStartStatus (enum) +`DELIVERY_FAIL` | `PENDING` | `DELIVERED` + +#### AgentProcessingStatus (enum) +`PENDING` | `QUEUED` | `PROCESSING` | `FINISHED` | `ERROR` | `START_FAILED` + +#### AgentAppEventStepStatesValue +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | +| backupVolumes | StepFieldListString | | [optional] | +| serviceImageRegexPatterns | StepFieldListString | | [optional] | +| removeVolumes | StepFieldBoolean | | [optional] | +| pullImages | StepFieldBoolean | | [optional] | +| failedEventId | StepFieldAgentAppEventId | | [optional] | +| image | StepFieldString | | [optional] | +| entrypoint | StepFieldListString | | [optional] | +| cmd | StepFieldListString | | [optional] | +| env | StepFieldListString | | [optional] | +| binds | StepFieldListString | | [optional] | +| networks | StepFieldListString | | [optional] | +| retries | StepFieldInteger | | [optional] | +| networkFromServiceImageRegexPattern | StepFieldString | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldAgentAppEventId +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | AgentAppEventId | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | String | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldInteger +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Integer | | [optional] | +| userChoice | Boolean | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/PageDataAgentAppEventInfo.md b/paas/docs/PageDataAgentAppEventInfo.md new file mode 100644 index 00000000..415ebc4f --- /dev/null +++ b/paas/docs/PageDataAgentAppEventInfo.md @@ -0,0 +1,116 @@ + +# PageDataAgentAppEventInfo + +`org.thingsboard.client.model.PageDataAgentAppEventInfo` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **data** | **List\** | Array of the entities | [optional] | +| **totalPages** | **Integer** | Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria | [optional] [readonly] | +| **totalElements** | **Long** | Total number of elements in all available pages | [optional] [readonly] | +| **hasNext** | **Boolean** | 'false' value indicates the end of the result set | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppEventInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentAppEventId | JSON object with the Agent App Event Id. | [optional] | +| createdTime | Long | Timestamp of the event creation, in milliseconds | [optional] [readonly] | +| tenantId | TenantId | | [optional] | +| applicationId | AgentApplicationId | | [optional] | +| agentId | AgentId | | [optional] | +| applicationName | String | | [optional] | +| actionType | AgentAppEventActionType | | [optional] | +| startStatus | ProcessingStartStatus | | [optional] | +| processingStatus | AgentProcessingStatus | | [optional] | +| currentStepId | UUID | | [optional] | +| currentActivity | String | | [optional] | +| errorMessage | String | | [optional] | +| updatedTime | Long | | [optional] | +| stepStates | Map | | [optional] | +| bulkActionId | UUID | | [optional] | +| resolvedArguments | Map | | [optional] | +| winnerContainerId | String | | [optional] | +| finalizeDeadlineTs | Long | | [optional] | +| contextMetadata | Map | | [optional] | +| agentName | String | Name of the Agent that owns the Application. | [optional] [readonly] | + +#### AgentAppEventActionType (enum) +`INSTALL` | `UPDATE` | `DELETE` | `RESTART` | `ROLLBACK` | `UPGRADE` | `AGENT_UPGRADE` + +#### ProcessingStartStatus (enum) +`DELIVERY_FAIL` | `PENDING` | `DELIVERED` + +#### AgentProcessingStatus (enum) +`PENDING` | `QUEUED` | `PROCESSING` | `FINISHED` | `ERROR` | `START_FAILED` + +#### AgentAppEventStepStatesValue +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | +| backupVolumes | StepFieldListString | | [optional] | +| serviceImageRegexPatterns | StepFieldListString | | [optional] | +| removeVolumes | StepFieldBoolean | | [optional] | +| pullImages | StepFieldBoolean | | [optional] | +| failedEventId | StepFieldAgentAppEventId | | [optional] | +| image | StepFieldString | | [optional] | +| entrypoint | StepFieldListString | | [optional] | +| cmd | StepFieldListString | | [optional] | +| env | StepFieldListString | | [optional] | +| binds | StepFieldListString | | [optional] | +| networks | StepFieldListString | | [optional] | +| retries | StepFieldInteger | | [optional] | +| networkFromServiceImageRegexPattern | StepFieldString | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldAgentAppEventId +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | AgentAppEventId | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | String | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldInteger +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Integer | | [optional] | +| userChoice | Boolean | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/PageDataAgentAppProfile.md b/paas/docs/PageDataAgentAppProfile.md new file mode 100644 index 00000000..cd46a5c0 --- /dev/null +++ b/paas/docs/PageDataAgentAppProfile.md @@ -0,0 +1,88 @@ + +# PageDataAgentAppProfile + +`org.thingsboard.client.model.PageDataAgentAppProfile` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **data** | **List\** | Array of the entities | [optional] | +| **totalPages** | **Integer** | Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria | [optional] [readonly] | +| **totalElements** | **Long** | Total number of elements in all available pages | [optional] [readonly] | +| **hasNext** | **Boolean** | 'false' value indicates the end of the result set | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppProfile +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentAppProfileId | JSON object with the Agent Application Profile Id. | [optional] | +| createdTime | Long | Timestamp of the profile creation, in milliseconds | [optional] [readonly] | +| tenantId | TenantId | JSON object with Tenant Id. | [optional] [readonly] | +| name | String | Unique profile name within tenant | | +| description | String | Profile description | [optional] | +| appType | AgentApplicationType | Application type: EDGE, GATEWAY, or GENERIC | | +| templateVersion | String | Template version this profile is based on | | +| config | DockerComposeConfig | | [optional] | +| version | Long | | [optional] | + +#### AgentApplicationType (enum) +`GENERIC` | `EDGE` | `GATEWAY` + +#### DockerComposeConfig *(extends AgentAppConfig)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| compose | com.fasterxml.jackson.databind.JsonNode | | [optional] | +| composeType | String | | [optional] | + +#### AgentAppConfig +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| arguments | List | | [optional] | +| edgeRoutingKey | String | | [optional] | +| type | AgentAppConfigType | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### AgentAppArgument +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| name | String | Argument name, referenced in the compose as ${tb.}. | [optional] | +| sourceType | AgentAppArgumentSource | Source entity the value is resolved from. | [optional] | +| sourceEntityId | EntityId | Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. | [optional] | +| valueType | AgentAppArgumentValueType | Whether the value is read from an attribute or the latest telemetry. | [optional] | +| scope | AttributeScope | Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. | [optional] | +| key | String | Attribute or latest telemetry key to read. | [optional] | +| defaultValue | String | Optional fallback value used when the source has no value for the key. | [optional] | +| format | AgentAppArgumentFormat | How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. | [optional] | + +#### AgentAppConfigType (enum) +`DOCKER_COMPOSE` + +#### AgentAppArgumentSource (enum) +`AGENT` | `OWNER` | `RELATED_ENTITY` | `TENANT` | `DEVICE` | `ASSET` | `CUSTOMER` | `EDGE` + +#### AgentAppArgumentValueType (enum) +`ATTRIBUTE` | `LATEST_TELEMETRY` + +#### AttributeScope (enum) +`CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` + +#### AgentAppArgumentFormat (enum) +`STRING` | `JSON` + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/PageDataAgentAppUnit.md b/paas/docs/PageDataAgentAppUnit.md new file mode 100644 index 00000000..9578d5af --- /dev/null +++ b/paas/docs/PageDataAgentAppUnit.md @@ -0,0 +1,45 @@ + +# PageDataAgentAppUnit + +`org.thingsboard.client.model.PageDataAgentAppUnit` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **data** | **List\** | Array of the entities | [optional] | +| **totalPages** | **Integer** | Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria | [optional] [readonly] | +| **totalElements** | **Long** | Total number of elements in all available pages | [optional] [readonly] | +| **hasNext** | **Boolean** | 'false' value indicates the end of the result set | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppUnit +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentAppUnitId | JSON object with the Agent App Unit Id. | [optional] | +| createdTime | Long | Timestamp of the agent app unit creation, in milliseconds | [optional] [readonly] | +| tenantId | TenantId | Tenant this unit belongs to | | +| agentApplicationId | AgentApplicationId | Agent application this unit belongs to | | +| identifier | String | Unit identifier | | +| type | AgentAppUnitType | Unit type | | + +#### AgentAppUnitType (enum) +`CONTAINER` | `VOLUME` | `NETWORK` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/PageDataAgentApplicationInfo.md b/paas/docs/PageDataAgentApplicationInfo.md new file mode 100644 index 00000000..b804d896 --- /dev/null +++ b/paas/docs/PageDataAgentApplicationInfo.md @@ -0,0 +1,104 @@ + +# PageDataAgentApplicationInfo + +`org.thingsboard.client.model.PageDataAgentApplicationInfo` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **data** | **List\** | Array of the entities | [optional] | +| **totalPages** | **Integer** | Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria | [optional] [readonly] | +| **totalElements** | **Long** | Total number of elements in all available pages | [optional] [readonly] | +| **hasNext** | **Boolean** | 'false' value indicates the end of the result set | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentApplicationInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentApplicationId | JSON object with the Agent Application Id. | [optional] | +| createdTime | Long | Timestamp of the agent application creation, in milliseconds | [optional] [readonly] | +| tenantId | TenantId | JSON object with Tenant Id. | [optional] [readonly] | +| agentId | AgentId | Agent this application belongs to | | +| name | String | Application name (not unique across tenant) | [optional] | +| templateVersion | String | Template version this application is based on | | +| desiredTemplateVersion | String | | [optional] | +| appType | AgentApplicationType | Application type | | +| config | DockerComposeConfig | | [optional] | +| version | Long | | [optional] | +| projectName | String | | [optional] | +| pendingDeletion | Boolean | | [optional] | +| origin | AgentApplicationOrigin | Origin of the application (INSTALLED or DISCOVERED) | [optional] | +| applicationProfileId | AgentAppProfileId | Application Profile Id. When set, config is read-only and inherited from the profile. | [optional] | +| profileConfigVersion | Long | | [optional] | +| currentVersion | String | Current version of the template this application is based on. | [optional] [readonly] | +| nextVersion | String | Next version available for upgrade. | [optional] [readonly] | +| profileConfigOutdated | Boolean | True if the app's config is outdated relative to its profile. | [optional] [readonly] | +| profileName | String | Name of the application profile this app is based on. | [optional] [readonly] | +| profileTemplateVersion | String | Template version of the application profile this app is based on. | [optional] [readonly] | +| agentName | String | Name of the owning agent. | [optional] [readonly] | +| relatedEntityId | EntityId | Related entity id (Edge or Gateway device) currently assigned to this application. | [optional] [readonly] | + +#### AgentApplicationType (enum) +`GENERIC` | `EDGE` | `GATEWAY` + +#### DockerComposeConfig *(extends AgentAppConfig)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| compose | com.fasterxml.jackson.databind.JsonNode | | [optional] | +| composeType | String | | [optional] | + +#### AgentApplicationOrigin (enum) +`INSTALLED` | `DISCOVERED` | `AUTO_PROVISIONED` + +#### AgentAppConfig +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| arguments | List | | [optional] | +| edgeRoutingKey | String | | [optional] | +| type | AgentAppConfigType | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### AgentAppArgument +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| name | String | Argument name, referenced in the compose as ${tb.}. | [optional] | +| sourceType | AgentAppArgumentSource | Source entity the value is resolved from. | [optional] | +| sourceEntityId | EntityId | Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. | [optional] | +| valueType | AgentAppArgumentValueType | Whether the value is read from an attribute or the latest telemetry. | [optional] | +| scope | AttributeScope | Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. | [optional] | +| key | String | Attribute or latest telemetry key to read. | [optional] | +| defaultValue | String | Optional fallback value used when the source has no value for the key. | [optional] | +| format | AgentAppArgumentFormat | How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. | [optional] | + +#### AgentAppConfigType (enum) +`DOCKER_COMPOSE` + +#### AgentAppArgumentSource (enum) +`AGENT` | `OWNER` | `RELATED_ENTITY` | `TENANT` | `DEVICE` | `ASSET` | `CUSTOMER` | `EDGE` + +#### AgentAppArgumentValueType (enum) +`ATTRIBUTE` | `LATEST_TELEMETRY` + +#### AttributeScope (enum) +`CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` + +#### AgentAppArgumentFormat (enum) +`STRING` | `JSON` + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/PageDataAgentBulkAction.md b/paas/docs/PageDataAgentBulkAction.md new file mode 100644 index 00000000..32bacc10 --- /dev/null +++ b/paas/docs/PageDataAgentBulkAction.md @@ -0,0 +1,54 @@ + +# PageDataAgentBulkAction + +`org.thingsboard.client.model.PageDataAgentBulkAction` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **data** | **List\** | Array of the entities | [optional] | +| **totalPages** | **Integer** | Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria | [optional] [readonly] | +| **totalElements** | **Long** | Total number of elements in all available pages | [optional] [readonly] | +| **hasNext** | **Boolean** | 'false' value indicates the end of the result set | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentBulkAction +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentBulkActionId | JSON object with the Agent Bulk Action Id. | [optional] | +| createdTime | Long | Timestamp of the bulk action creation, in milliseconds | [optional] [readonly] | +| tenantId | TenantId | | [optional] | +| agentProfileId | UUID | | [optional] | +| applicationProfileId | UUID | | [optional] | +| actionType | AgentAppEventActionType | | [optional] | +| status | AgentBulkActionStatus | | [optional] | +| errorMsg | String | | [optional] | +| processingStartedTime | Long | | [optional] | +| total | Integer | | [optional] | +| submitted | Integer | | [optional] | +| skipCounts | Map | | [optional] | + +#### AgentAppEventActionType (enum) +`INSTALL` | `UPDATE` | `DELETE` | `RESTART` | `ROLLBACK` | `UPGRADE` | `AGENT_UPGRADE` + +#### AgentBulkActionStatus (enum) +`QUEUED` | `IN_PROGRESS` | `STARTED` | `START_FAILED` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/PageDataAgentInfo.md b/paas/docs/PageDataAgentInfo.md new file mode 100644 index 00000000..7845f38a --- /dev/null +++ b/paas/docs/PageDataAgentInfo.md @@ -0,0 +1,62 @@ + +# PageDataAgentInfo + +`org.thingsboard.client.model.PageDataAgentInfo` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **data** | **List\** | Array of the entities | [optional] | +| **totalPages** | **Integer** | Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria | [optional] [readonly] | +| **totalElements** | **Long** | Total number of elements in all available pages | [optional] [readonly] | +| **hasNext** | **Boolean** | 'false' value indicates the end of the result set | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentId | JSON object with the Agent Id. Specify this field to update the Agent. Referencing non-existing Agent Id will cause error. Omit this field to create new Agent. | [optional] | +| createdTime | Long | Timestamp of the agent creation, in milliseconds | [optional] [readonly] | +| additionalInfo | com.fasterxml.jackson.databind.JsonNode | | [optional] | +| tenantId | TenantId | JSON object with Tenant Id. Use 'assignAgentToTenant' to change the Tenant Id. | [optional] [readonly] | +| customerId | CustomerId | JSON object with Customer Id. | [optional] [readonly] | +| name | String | Unique Agent Name in scope of Tenant | | +| description | String | Agent description | [optional] | +| routingKey | String | Agent routing key used for authentication | | +| secret | String | Agent secret used for authentication | | +| agentProfileId | AgentProfileId | JSON object with Agent Profile Id. Nullable. | [optional] | +| version | Long | | [optional] | +| customerTitle | String | Title of the Customer that owns the agent. | [optional] [readonly] | +| customerIsPublic | Boolean | Indicates special 'Public' Customer that is auto-generated to use the agents on public dashboards. | [optional] [readonly] | +| agentProfileName | String | Name of the Agent Profile the agent belongs to. | [optional] [readonly] | +| ownerName | String | Owner name — tenant title if the agent is owned by a tenant, or customer title otherwise. | [optional] [readonly] | +| groups | List | Entity groups that contain this agent (excluding the implicit 'All' group). | [optional] | +| active | Boolean | Whether the agent currently has an active connection (derived from server-scope 'active' attribute). | [optional] [readonly] | +| agentVersion | String | Agent software version reported on the last connect (derived from server-scope 'agentVersion' attribute). | [optional] [readonly] | +| upgradeTargetImageRef | String | Image reference this agent should be upgraded to, or null when no upgrade applies. Resolved from the published version graph. | [optional] [readonly] | +| ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | + +#### EntityInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | EntityId | JSON object with the entity Id. | [optional] | +| name | String | Entity Name | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/PageDataAgentProfile.md b/paas/docs/PageDataAgentProfile.md new file mode 100644 index 00000000..db9948f2 --- /dev/null +++ b/paas/docs/PageDataAgentProfile.md @@ -0,0 +1,49 @@ + +# PageDataAgentProfile + +`org.thingsboard.client.model.PageDataAgentProfile` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **data** | **List\** | Array of the entities | [optional] | +| **totalPages** | **Integer** | Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria | [optional] [readonly] | +| **totalElements** | **Long** | Total number of elements in all available pages | [optional] [readonly] | +| **hasNext** | **Boolean** | 'false' value indicates the end of the result set | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentProfile +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentProfileId | JSON object with the Agent Profile Id. | [optional] | +| createdTime | Long | Timestamp of the profile creation, in milliseconds | [optional] [readonly] | +| tenantId | TenantId | JSON object with Tenant Id. | [optional] [readonly] | +| name | String | Unique profile name within tenant | | +| description | String | Profile description | [optional] | +| provisionKey | String | Provision key for future auto-provisioning | [optional] | +| provisionSecret | String | Provision secret for future auto-provisioning | [optional] | +| provisionType | AgentProvisionType | Provisioning strategy. DISABLED by default. | [optional] | +| version | Long | | [optional] | +| _default | Boolean | Used to mark the default profile that will be assigned to agents when no profile is specified. | [optional] | + +#### AgentProvisionType (enum) +`DISABLED` | `NO_AUTO_INSTALL` | `AUTO_INSTALL_PER_APP_TYPE` | `AUTO_INSTALL_PER_APP_PROFILE` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/PageDataAgentProfileInfo.md b/paas/docs/PageDataAgentProfileInfo.md new file mode 100644 index 00000000..729b1e79 --- /dev/null +++ b/paas/docs/PageDataAgentProfileInfo.md @@ -0,0 +1,49 @@ + +# PageDataAgentProfileInfo + +`org.thingsboard.client.model.PageDataAgentProfileInfo` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **data** | **List\** | Array of the entities | [optional] | +| **totalPages** | **Integer** | Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria | [optional] [readonly] | +| **totalElements** | **Long** | Total number of elements in all available pages | [optional] [readonly] | +| **hasNext** | **Boolean** | 'false' value indicates the end of the result set | [optional] [readonly] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentProfileInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | AgentProfileId | JSON object with the Agent Profile Id. | [optional] | +| createdTime | Long | Timestamp of the profile creation, in milliseconds | [optional] [readonly] | +| tenantId | TenantId | JSON object with Tenant Id. | [optional] [readonly] | +| name | String | Unique profile name within tenant | | +| description | String | Profile description | [optional] | +| provisionKey | String | Provision key for future auto-provisioning | [optional] | +| provisionSecret | String | Provision secret for future auto-provisioning | [optional] | +| provisionType | AgentProvisionType | Provisioning strategy. DISABLED by default. | [optional] | +| version | Long | | [optional] | +| _default | Boolean | Used to mark the default profile that will be assigned to agents when no profile is specified. | [optional] | + +#### AgentProvisionType (enum) +`DISABLED` | `NO_AUTO_INSTALL` | `AUTO_INSTALL_PER_APP_TYPE` | `AUTO_INSTALL_PER_APP_PROFILE` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/PageDataAiModel.md b/paas/docs/PageDataAiModel.md index 7ee98f48..c69574f4 100644 --- a/paas/docs/PageDataAiModel.md +++ b/paas/docs/PageDataAiModel.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AiModel | Name | Type | Description | Notes | @@ -159,7 +159,7 @@ | modelType | AiModelType | | [optional] [readonly] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### OpenAiProviderConfig | Name | Type | Description | Notes | diff --git a/paas/docs/PageDataAlarmCommentInfo.md b/paas/docs/PageDataAlarmCommentInfo.md index f10735c7..0425038b 100644 --- a/paas/docs/PageDataAlarmCommentInfo.md +++ b/paas/docs/PageDataAlarmCommentInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AlarmCommentInfo | Name | Type | Description | Notes | @@ -41,7 +41,7 @@ `SYSTEM` | `OTHER` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataAlarmData.md b/paas/docs/PageDataAlarmData.md index 5bbafea1..e5a51058 100644 --- a/paas/docs/PageDataAlarmData.md +++ b/paas/docs/PageDataAlarmData.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AlarmData | Name | Type | Description | Notes | @@ -73,7 +73,7 @@ `ACTIVE_UNACK` | `ACTIVE_ACK` | `CLEARED_UNACK` | `CLEARED_ACK` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataAlarmInfo.md b/paas/docs/PageDataAlarmInfo.md index 518c3abb..5be86f95 100644 --- a/paas/docs/PageDataAlarmInfo.md +++ b/paas/docs/PageDataAlarmInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AlarmInfo | Name | Type | Description | Notes | @@ -64,7 +64,7 @@ `ACTIVE_UNACK` | `ACTIVE_ACK` | `CLEARED_UNACK` | `CLEARED_ACK` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataAlarmRuleDefinition.md b/paas/docs/PageDataAlarmRuleDefinition.md index 6ca33225..607c32f9 100644 --- a/paas/docs/PageDataAlarmRuleDefinition.md +++ b/paas/docs/PageDataAlarmRuleDefinition.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AlarmRuleDefinition | Name | Type | Description | Notes | @@ -41,7 +41,7 @@ | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### CalculatedFieldConfiguration | Name | Type | Description | Notes | diff --git a/paas/docs/PageDataAlarmRuleDefinitionInfo.md b/paas/docs/PageDataAlarmRuleDefinitionInfo.md index 801941d6..86ab5502 100644 --- a/paas/docs/PageDataAlarmRuleDefinitionInfo.md +++ b/paas/docs/PageDataAlarmRuleDefinitionInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AlarmRuleDefinitionInfo | Name | Type | Description | Notes | @@ -42,7 +42,7 @@ | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### CalculatedFieldConfiguration | Name | Type | Description | Notes | diff --git a/paas/docs/PageDataApiKeyInfo.md b/paas/docs/PageDataApiKeyInfo.md index e48b5d1f..8499cdc0 100644 --- a/paas/docs/PageDataApiKeyInfo.md +++ b/paas/docs/PageDataApiKeyInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ApiKeyInfo | Name | Type | Description | Notes | @@ -31,7 +31,7 @@ | expired | Boolean | Indicates if the API key is expired based on current time. Returns false if expirationTime is 0 (no expiry). | [optional] [readonly] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataAsset.md b/paas/docs/PageDataAsset.md index 46659df2..be958778 100644 --- a/paas/docs/PageDataAsset.md +++ b/paas/docs/PageDataAsset.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Asset | Name | Type | Description | Notes | @@ -34,7 +34,7 @@ | ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataAssetInfo.md b/paas/docs/PageDataAssetInfo.md index 0e29e9d7..a0cdbe1f 100644 --- a/paas/docs/PageDataAssetInfo.md +++ b/paas/docs/PageDataAssetInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AssetInfo | Name | Type | Description | Notes | @@ -42,7 +42,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataAssetProfile.md b/paas/docs/PageDataAssetProfile.md index f77ff597..5c1f3822 100644 --- a/paas/docs/PageDataAssetProfile.md +++ b/paas/docs/PageDataAssetProfile.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AssetProfile | Name | Type | Description | Notes | @@ -35,7 +35,7 @@ | _default | Boolean | Used to mark the default profile. Default profile is used when the asset profile is not specified during asset creation. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataAssetProfileInfo.md b/paas/docs/PageDataAssetProfileInfo.md index c25e3715..c4a15814 100644 --- a/paas/docs/PageDataAssetProfileInfo.md +++ b/paas/docs/PageDataAssetProfileInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AssetProfileInfo | Name | Type | Description | Notes | @@ -28,7 +28,7 @@ | tenantId | TenantId | Tenant id. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataAuditLog.md b/paas/docs/PageDataAuditLog.md index 10445a36..957c6efe 100644 --- a/paas/docs/PageDataAuditLog.md +++ b/paas/docs/PageDataAuditLog.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### AuditLog | Name | Type | Description | Notes | @@ -46,7 +46,7 @@ `SUCCESS` | `FAILURE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataBlobEntityWithCustomerInfo.md b/paas/docs/PageDataBlobEntityWithCustomerInfo.md index 7bb904c8..0d5af0fe 100644 --- a/paas/docs/PageDataBlobEntityWithCustomerInfo.md +++ b/paas/docs/PageDataBlobEntityWithCustomerInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### BlobEntityWithCustomerInfo | Name | Type | Description | Notes | @@ -34,7 +34,7 @@ | ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataCalculatedField.md b/paas/docs/PageDataCalculatedField.md index 6d9b0947..287dd5a8 100644 --- a/paas/docs/PageDataCalculatedField.md +++ b/paas/docs/PageDataCalculatedField.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CalculatedField | Name | Type | Description | Notes | @@ -112,7 +112,7 @@ | useLatestTs | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### Output | Name | Type | Description | Notes | diff --git a/paas/docs/PageDataCalculatedFieldInfo.md b/paas/docs/PageDataCalculatedFieldInfo.md index e98e8d6d..ba39fe76 100644 --- a/paas/docs/PageDataCalculatedFieldInfo.md +++ b/paas/docs/PageDataCalculatedFieldInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CalculatedFieldInfo | Name | Type | Description | Notes | @@ -113,7 +113,7 @@ | useLatestTs | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### Output | Name | Type | Description | Notes | diff --git a/paas/docs/PageDataConverter.md b/paas/docs/PageDataConverter.md index b73b6ae0..f823b357 100644 --- a/paas/docs/PageDataConverter.md +++ b/paas/docs/PageDataConverter.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Converter | Name | Type | Description | Notes | @@ -49,7 +49,7 @@ | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataCustomMenuInfo.md b/paas/docs/PageDataCustomMenuInfo.md index 3639ecb2..cfb9313a 100644 --- a/paas/docs/PageDataCustomMenuInfo.md +++ b/paas/docs/PageDataCustomMenuInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CustomMenuInfo | Name | Type | Description | Notes | @@ -42,7 +42,7 @@ `NO_ASSIGN` | `ALL` | `CUSTOMERS` | `USERS` | `USER_GROUPS` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataCustomer.md b/paas/docs/PageDataCustomer.md index eb1ce1ed..db6e79c4 100644 --- a/paas/docs/PageDataCustomer.md +++ b/paas/docs/PageDataCustomer.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Customer | Name | Type | Description | Notes | @@ -47,7 +47,7 @@ | id | UUID | string | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataCustomerInfo.md b/paas/docs/PageDataCustomerInfo.md index 55722f12..445bb0d5 100644 --- a/paas/docs/PageDataCustomerInfo.md +++ b/paas/docs/PageDataCustomerInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CustomerInfo | Name | Type | Description | Notes | @@ -55,7 +55,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataDashboardInfo.md b/paas/docs/PageDataDashboardInfo.md index 99ac291f..646e3c68 100644 --- a/paas/docs/PageDataDashboardInfo.md +++ b/paas/docs/PageDataDashboardInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DashboardInfo | Name | Type | Description | Notes | @@ -67,7 +67,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ResourceType (enum) `LWM2_M_MODEL` | `JKS` | `PKCS_12` | `JS_MODULE` | `IMAGE` | `DASHBOARD` | `GENERAL` diff --git a/paas/docs/PageDataDevice.md b/paas/docs/PageDataDevice.md index b7ba3b8f..5a66932d 100644 --- a/paas/docs/PageDataDevice.md +++ b/paas/docs/PageDataDevice.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Device | Name | Type | Description | Notes | @@ -94,7 +94,7 @@ | engineId | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### DeviceProfileType (enum) `DEFAULT` diff --git a/paas/docs/PageDataDeviceInfo.md b/paas/docs/PageDataDeviceInfo.md index 7eb225cd..679da6fe 100644 --- a/paas/docs/PageDataDeviceInfo.md +++ b/paas/docs/PageDataDeviceInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DeviceInfo | Name | Type | Description | Notes | @@ -103,7 +103,7 @@ | engineId | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### DeviceProfileType (enum) `DEFAULT` diff --git a/paas/docs/PageDataDeviceProfile.md b/paas/docs/PageDataDeviceProfile.md index 787befa4..4bbe386e 100644 --- a/paas/docs/PageDataDeviceProfile.md +++ b/paas/docs/PageDataDeviceProfile.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DeviceProfile | Name | Type | Description | Notes | @@ -127,7 +127,7 @@ | allowCreateNewDevicesByX509Certificate | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### TransportPayloadTypeConfiguration | Name | Type | Description | Notes | @@ -163,6 +163,70 @@ |------|------|-------------|-------| | securityMode | String | | | +#### NoSecLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`NO_SEC`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### PSKLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`PSK`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### RPKLwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`RPK`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + +#### X509LwM2MBootstrapServerCredential *(extends LwM2MBootstrapServerCredential, securityMode=`X509`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| shortServerId | Integer | Server short Id. Used as link to associate server Object Instance. This identifier uniquely identifies each LwM2M Server configured for the LwM2M Client. This Resource MUST be set when the Bootstrap-Server Resource has a value of 'false'. The values ID:0 and ID:65535 values MUST NOT be used for identifying the LwM2M Server. | [optional] [readonly] | +| bootstrapServerIs | Boolean | Is Bootstrap Server or Lwm2m Server. The LwM2M Client MAY be configured to use one or more LwM2M Server Account(s). The LwM2M Client MUST have at most one LwM2M Bootstrap-Server Account. (*) The LwM2M client MUST have at least one LwM2M server account after completing the boot sequence specified. | [optional] [readonly] | +| host | String | Host for 'No Security' mode | [optional] [readonly] | +| port | Integer | Port for Lwm2m Server: 'No Security' mode: Lwm2m Server or Bootstrap Server | [optional] [readonly] | +| clientHoldOffTime | Integer | Client Hold Off Time. The number of seconds to wait before initiating a Client Initiated Bootstrap once the LwM2M Client has determined it should initiate this bootstrap mode. (This information is relevant for use with a Bootstrap-Server only.) | [optional] [readonly] | +| serverPublicKey | String | Server Public Key for 'Security' mode (DTLS): RPK or X509. Format: base64 encoded | [optional] [readonly] | +| serverCertificate | String | Server Public Key for 'Security' mode (DTLS): X509. Format: base64 encoded | [optional] [readonly] | +| bootstrapServerAccountTimeout | Integer | Bootstrap Server Account Timeout (If the value is set to 0, or if this resource is not instantiated, the Bootstrap-Server Account lifetime is infinite.) | [optional] [readonly] | +| lifetime | Integer | Specify the lifetime of the registration in seconds. | [optional] [readonly] | +| defaultMinPeriod | Integer | The default value the LwM2M Client should use for the Minimum Period of an Observation in the absence of this parameter being included in an Observation. If this Resource doesn’t exist, the default value is 0. | [optional] [readonly] | +| notifIfDisabled | Boolean | If true, the LwM2M Client stores “Notify” operations to the LwM2M Server while the LwM2M Server account is disabled or the LwM2M Client is offline. After the LwM2M Server account is enabled or the LwM2M Client is online, the LwM2M Client reports the stored “Notify” operations to the Server. If false, the LwM2M Client discards all the “Notify” operations or temporarily disables the Observe function while the LwM2M Server is disabled or the LwM2M Client is offline. The default value is true. | [optional] [readonly] | +| binding | String | This Resource defines the transport binding configured for the LwM2M Client. If the LwM2M Client supports the binding specified in this Resource, the LwM2M Client MUST use that transport for the Current Binding Mode. | [optional] [readonly] | + #### OtherConfiguration | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -248,7 +312,7 @@ | epmax | Long | | [optional] | #### TelemetryObserveStrategy (enum) -`SINGLE_0_ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` | `COMPOSITE_ALL_1_ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` | `COMPOSITE_BY_OBJECT_2_GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` +`SINGLE` | `COMPOSITE_ALL` | `COMPOSITE_BY_OBJECT` #### PowerMode (enum) `PSM` | `DRX` | `E_DRX` diff --git a/paas/docs/PageDataDeviceProfileInfo.md b/paas/docs/PageDataDeviceProfileInfo.md index 9933edea..3a4b8998 100644 --- a/paas/docs/PageDataDeviceProfileInfo.md +++ b/paas/docs/PageDataDeviceProfileInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DeviceProfileInfo | Name | Type | Description | Notes | @@ -36,7 +36,7 @@ `DEFAULT` | `MQTT` | `COAP` | `LWM2_M` | `SNMP` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataDomainInfo.md b/paas/docs/PageDataDomainInfo.md index e2097fc3..2f18c67e 100644 --- a/paas/docs/PageDataDomainInfo.md +++ b/paas/docs/PageDataDomainInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DomainInfo | Name | Type | Description | Notes | @@ -45,7 +45,7 @@ `WEB` | `ANDROID` | `IOS` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataEdge.md b/paas/docs/PageDataEdge.md index e03d0631..170f1194 100644 --- a/paas/docs/PageDataEdge.md +++ b/paas/docs/PageDataEdge.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Edge | Name | Type | Description | Notes | @@ -42,7 +42,7 @@ `LICENSE` | `ADD_ON` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataEdgeEvent.md b/paas/docs/PageDataEdgeEvent.md index 5282b35b..51250c26 100644 --- a/paas/docs/PageDataEdgeEvent.md +++ b/paas/docs/PageDataEdgeEvent.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EdgeEvent | Name | Type | Description | Notes | @@ -45,7 +45,7 @@ `DASHBOARD` | `ASSET` | `DEVICE` | `DEVICE_PROFILE` | `ASSET_PROFILE` | `ENTITY_VIEW` | `ALARM` | `ALARM_COMMENT` | `RULE_CHAIN` | `RULE_CHAIN_METADATA` | … (45 values total) #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataEdgeInfo.md b/paas/docs/PageDataEdgeInfo.md index eac6917e..7aab7534 100644 --- a/paas/docs/PageDataEdgeInfo.md +++ b/paas/docs/PageDataEdgeInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EdgeInfo | Name | Type | Description | Notes | @@ -50,7 +50,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataEntityData.md b/paas/docs/PageDataEntityData.md index b63777fc..15d068e7 100644 --- a/paas/docs/PageDataEntityData.md +++ b/paas/docs/PageDataEntityData.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityData | Name | Type | Description | Notes | @@ -42,7 +42,7 @@ | previous | TsValue | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataEntityGroupInfo.md b/paas/docs/PageDataEntityGroupInfo.md index a6a58396..9d34575f 100644 --- a/paas/docs/PageDataEntityGroupInfo.md +++ b/paas/docs/PageDataEntityGroupInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityGroupInfo | Name | Type | Description | Notes | @@ -35,7 +35,7 @@ | tenantId | TenantId | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataEntityInfo.md b/paas/docs/PageDataEntityInfo.md index b2b8c96e..400666bd 100644 --- a/paas/docs/PageDataEntityInfo.md +++ b/paas/docs/PageDataEntityInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityInfo | Name | Type | Description | Notes | @@ -25,7 +25,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataEntitySubtype.md b/paas/docs/PageDataEntitySubtype.md index d82f533c..549ff2fa 100644 --- a/paas/docs/PageDataEntitySubtype.md +++ b/paas/docs/PageDataEntitySubtype.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntitySubtype | Name | Type | Description | Notes | @@ -26,7 +26,7 @@ | type | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataEntityView.md b/paas/docs/PageDataEntityView.md index d4755cf5..c92031bf 100644 --- a/paas/docs/PageDataEntityView.md +++ b/paas/docs/PageDataEntityView.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityView | Name | Type | Description | Notes | @@ -42,7 +42,7 @@ | attributes | AttributesEntityView | JSON object with attributes to expose | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### AttributesEntityView | Name | Type | Description | Notes | diff --git a/paas/docs/PageDataEntityViewInfo.md b/paas/docs/PageDataEntityViewInfo.md index 0f24d800..a672b49d 100644 --- a/paas/docs/PageDataEntityViewInfo.md +++ b/paas/docs/PageDataEntityViewInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityViewInfo | Name | Type | Description | Notes | @@ -50,7 +50,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### AttributesEntityView | Name | Type | Description | Notes | diff --git a/paas/docs/PageDataEventInfo.md b/paas/docs/PageDataEventInfo.md index 246f4624..05cdefee 100644 --- a/paas/docs/PageDataEventInfo.md +++ b/paas/docs/PageDataEventInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EventInfo | Name | Type | Description | Notes | @@ -35,7 +35,7 @@ | id | UUID | string | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataIntegration.md b/paas/docs/PageDataIntegration.md index 16d8d75d..1b1c2904 100644 --- a/paas/docs/PageDataIntegration.md +++ b/paas/docs/PageDataIntegration.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Integration | Name | Type | Description | Notes | @@ -51,7 +51,7 @@ | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataIntegrationInfo.md b/paas/docs/PageDataIntegrationInfo.md index 82c65e7b..9c9c1ea8 100644 --- a/paas/docs/PageDataIntegrationInfo.md +++ b/paas/docs/PageDataIntegrationInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### IntegrationInfo | Name | Type | Description | Notes | @@ -47,7 +47,7 @@ | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataJob.md b/paas/docs/PageDataJob.md index 1004a548..16f2a765 100644 --- a/paas/docs/PageDataJob.md +++ b/paas/docs/PageDataJob.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Job | Name | Type | Description | Notes | @@ -74,6 +74,7 @@ | reportTemplateId | ReportTemplateId | | [optional] | | userId | UserId | | [optional] | | timezone | String | | [optional] | +| makePublic | Boolean | | [optional] | | targets | List | | [optional] | | notificationTemplateId | NotificationTemplateId | | [optional] | | notificationRequests | List | | [optional] | @@ -109,7 +110,7 @@ | report | Report | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### TaskResult | Name | Type | Description | Notes | @@ -121,6 +122,21 @@ | error | String | | [optional] | | jobType | String | | | +#### CfReprocessingTaskResult *(extends TaskResult, jobType=`CF_REPROCESSING`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | CfReprocessingTaskFailure | | [optional] | + +#### DummyTaskResult *(extends TaskResult, jobType=`DUMMY`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | DummyTaskFailure | | [optional] | + +#### ReportTaskResult *(extends TaskResult, jobType=`REPORT`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| report | Report | | [optional] | + #### NotificationRequest | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -171,7 +187,22 @@ | format | TbReportFormat | | | | name | String | | | | userId | UserId | | | +| publicKey | String | | [optional] | | ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | + +#### CfReprocessingTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| entityInfo | EntityInfo | | [optional] | + +#### DummyTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| number | Integer | | [optional] | +| failAlways | Boolean | | [optional] | #### NotificationTemplate | Name | Type | Description | Notes | @@ -229,6 +260,7 @@ | reportTemplateId | ReportTemplateId | | [optional] | | userId | UserId | | [optional] | | timezone | String | | [optional] | +| makePublic | Boolean | | [optional] | #### DeliveryMethodNotificationTemplate | Name | Type | Description | Notes | diff --git a/paas/docs/PageDataMobileApp.md b/paas/docs/PageDataMobileApp.md index ff66ed12..eaed8975 100644 --- a/paas/docs/PageDataMobileApp.md +++ b/paas/docs/PageDataMobileApp.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### MobileApp | Name | Type | Description | Notes | @@ -55,7 +55,7 @@ | storeLink | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataMobileAppBundleInfo.md b/paas/docs/PageDataMobileAppBundleInfo.md index a42d278d..3bb66058 100644 --- a/paas/docs/PageDataMobileAppBundleInfo.md +++ b/paas/docs/PageDataMobileAppBundleInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### MobileAppBundleInfo | Name | Type | Description | Notes | @@ -128,7 +128,7 @@ `WEB` | `ANDROID` | `IOS` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### MobilePageType (enum) `DEFAULT` | `DASHBOARD` | `WEB_VIEW` | `CUSTOM` diff --git a/paas/docs/PageDataNotification.md b/paas/docs/PageDataNotification.md index 451a4d6a..39999383 100644 --- a/paas/docs/PageDataNotification.md +++ b/paas/docs/PageDataNotification.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Notification | Name | Type | Description | Notes | @@ -50,7 +50,7 @@ `SENT` | `READ` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataNotificationRequestInfo.md b/paas/docs/PageDataNotificationRequestInfo.md index a7eae942..b5586d4c 100644 --- a/paas/docs/PageDataNotificationRequestInfo.md +++ b/paas/docs/PageDataNotificationRequestInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### NotificationRequestInfo | Name | Type | Description | Notes | @@ -85,9 +85,10 @@ | reportTemplateId | ReportTemplateId | | [optional] | | userId | UserId | | [optional] | | timezone | String | | [optional] | +| makePublic | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### DeliveryMethodNotificationTemplate | Name | Type | Description | Notes | diff --git a/paas/docs/PageDataNotificationRuleInfo.md b/paas/docs/PageDataNotificationRuleInfo.md index 0b624ea4..5f092e32 100644 --- a/paas/docs/PageDataNotificationRuleInfo.md +++ b/paas/docs/PageDataNotificationRuleInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### NotificationRuleInfo | Name | Type | Description | Notes | @@ -230,7 +230,7 @@ `WEB` | `EMAIL` | `SMS` | `SLACK` | `MICROSOFT_TEAMS` | `MOBILE_APP` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### AlarmSeverity (enum) `CRITICAL` | `MAJOR` | `MINOR` | `WARNING` | `INDETERMINATE` @@ -262,7 +262,7 @@ `ENABLED` | `WARNING` | `DISABLED` #### LimitedApi (enum) -`ENTITY_EXPORT` | `ENTITY_IMPORT` | `NOTIFICATION_REQUESTS` | `NOTIFICATION_REQUESTS_PER_RULE` | `REST_REQUESTS_PER_TENANT` | `REST_REQUESTS_PER_CUSTOMER` | `WS_UPDATES_PER_SESSION` | `CASSANDRA_WRITE_QUERIES_CORE` | `CASSANDRA_READ_QUERIES_CORE` | `CASSANDRA_WRITE_QUERIES_RULE_ENGINE` | … (36 values total) +`ENTITY_EXPORT` | `ENTITY_IMPORT` | `NOTIFICATION_REQUESTS` | `NOTIFICATION_REQUESTS_PER_RULE` | `REST_REQUESTS_PER_TENANT` | `REST_REQUESTS_PER_CUSTOMER` | `WS_UPDATES_PER_SESSION` | `CASSANDRA_WRITE_QUERIES_CORE` | `CASSANDRA_READ_QUERIES_CORE` | `CASSANDRA_WRITE_QUERIES_RULE_ENGINE` | … (40 values total) #### EdgeConnectivityEvent (enum) `CONNECTED` | `DISCONNECTED` diff --git a/paas/docs/PageDataNotificationTarget.md b/paas/docs/PageDataNotificationTarget.md index 9d31b73e..ba582e72 100644 --- a/paas/docs/PageDataNotificationTarget.md +++ b/paas/docs/PageDataNotificationTarget.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### NotificationTarget | Name | Type | Description | Notes | @@ -57,7 +57,7 @@ | conversation | SlackConversation | | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### UsersFilter | Name | Type | Description | Notes | diff --git a/paas/docs/PageDataNotificationTemplate.md b/paas/docs/PageDataNotificationTemplate.md index 44b1d0b6..f4b31e9a 100644 --- a/paas/docs/PageDataNotificationTemplate.md +++ b/paas/docs/PageDataNotificationTemplate.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### NotificationTemplate | Name | Type | Description | Notes | @@ -39,6 +39,7 @@ | reportTemplateId | ReportTemplateId | | [optional] | | userId | UserId | | [optional] | | timezone | String | | [optional] | +| makePublic | Boolean | | [optional] | #### DeliveryMethodNotificationTemplate | Name | Type | Description | Notes | @@ -78,7 +79,7 @@ | additionalConfig | com.fasterxml.jackson.databind.JsonNode | Additional JSON configuration for web buttons/actions | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### Button | Name | Type | Description | Notes | diff --git a/paas/docs/PageDataOAuth2ClientInfo.md b/paas/docs/PageDataOAuth2ClientInfo.md index a5cd0956..d0495c9a 100644 --- a/paas/docs/PageDataOAuth2ClientInfo.md +++ b/paas/docs/PageDataOAuth2ClientInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### OAuth2ClientInfo | Name | Type | Description | Notes | @@ -32,7 +32,7 @@ `WEB` | `ANDROID` | `IOS` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataOtaPackageInfo.md b/paas/docs/PageDataOtaPackageInfo.md index d7aaf925..0d6db328 100644 --- a/paas/docs/PageDataOtaPackageInfo.md +++ b/paas/docs/PageDataOtaPackageInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### OtaPackageInfo | Name | Type | Description | Notes | @@ -46,7 +46,7 @@ `MD5` | `SHA256` | `SHA384` | `SHA512` | `CRC32` | `MURMUR3_32` | `MURMUR3_128` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataQueue.md b/paas/docs/PageDataQueue.md index af7cb81a..0225d93a 100644 --- a/paas/docs/PageDataQueue.md +++ b/paas/docs/PageDataQueue.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Queue | Name | Type | Description | Notes | @@ -56,7 +56,7 @@ `SKIP_ALL_FAILURES` | `SKIP_ALL_FAILURES_AND_TIMED_OUT` | `RETRY_ALL` | `RETRY_FAILED` | `RETRY_TIMED_OUT` | `RETRY_FAILED_AND_TIMED_OUT` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataQueueStats.md b/paas/docs/PageDataQueueStats.md index ec3eec8f..11ac6715 100644 --- a/paas/docs/PageDataQueueStats.md +++ b/paas/docs/PageDataQueueStats.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### QueueStats | Name | Type | Description | Notes | @@ -28,7 +28,7 @@ | serviceId | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataReport.md b/paas/docs/PageDataReport.md index f5a64de6..a8ae6cea 100644 --- a/paas/docs/PageDataReport.md +++ b/paas/docs/PageDataReport.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Report | Name | Type | Description | Notes | @@ -29,13 +29,15 @@ | format | TbReportFormat | | | | name | String | | | | userId | UserId | | | +| publicKey | String | | [optional] | | ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | #### TbReportFormat (enum) `PDF` | `CSV` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataReportInfo.md b/paas/docs/PageDataReportInfo.md index bbc65e8c..34ced005 100644 --- a/paas/docs/PageDataReportInfo.md +++ b/paas/docs/PageDataReportInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportInfo | Name | Type | Description | Notes | @@ -29,10 +29,12 @@ | format | TbReportFormat | | | | name | String | | | | userId | UserId | | | +| publicKey | String | | [optional] | | templateInfo | EntityInfo | | [optional] | | customerTitle | String | | [optional] | | userName | String | | [optional] | | ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | #### TbReportFormat (enum) `PDF` | `CSV` @@ -44,7 +46,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataReportTemplateInfo.md b/paas/docs/PageDataReportTemplateInfo.md index 311695d9..505b9642 100644 --- a/paas/docs/PageDataReportTemplateInfo.md +++ b/paas/docs/PageDataReportTemplateInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportTemplateInfo | Name | Type | Description | Notes | @@ -40,7 +40,7 @@ `REPORT` | `SUB_REPORT` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataRole.md b/paas/docs/PageDataRole.md index 02a9788c..028369cd 100644 --- a/paas/docs/PageDataRole.md +++ b/paas/docs/PageDataRole.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Role | Name | Type | Description | Notes | @@ -37,7 +37,7 @@ `GENERIC` | `GROUP` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataRuleChain.md b/paas/docs/PageDataRuleChain.md index a3dd6c80..b703cdff 100644 --- a/paas/docs/PageDataRuleChain.md +++ b/paas/docs/PageDataRuleChain.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### RuleChain | Name | Type | Description | Notes | @@ -37,7 +37,7 @@ `CORE` | `EDGE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataScheduledReportInfo.md b/paas/docs/PageDataScheduledReportInfo.md index e9aa462f..f4ceacfe 100644 --- a/paas/docs/PageDataScheduledReportInfo.md +++ b/paas/docs/PageDataScheduledReportInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ScheduledReportInfo | Name | Type | Description | Notes | @@ -44,7 +44,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataSchedulerEventInfo.md b/paas/docs/PageDataSchedulerEventInfo.md index 19adf79a..7a25a2e9 100644 --- a/paas/docs/PageDataSchedulerEventInfo.md +++ b/paas/docs/PageDataSchedulerEventInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### SchedulerEventInfo | Name | Type | Description | Notes | @@ -35,7 +35,7 @@ | ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataSchedulerEventWithCustomerInfo.md b/paas/docs/PageDataSchedulerEventWithCustomerInfo.md index f770c854..57863a7d 100644 --- a/paas/docs/PageDataSchedulerEventWithCustomerInfo.md +++ b/paas/docs/PageDataSchedulerEventWithCustomerInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### SchedulerEventWithCustomerInfo | Name | Type | Description | Notes | @@ -38,7 +38,7 @@ | ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataSecretInfo.md b/paas/docs/PageDataSecretInfo.md index 63695624..4d1ef037 100644 --- a/paas/docs/PageDataSecretInfo.md +++ b/paas/docs/PageDataSecretInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### SecretInfo | Name | Type | Description | Notes | @@ -32,7 +32,7 @@ `TEXT` | `TEXT_FILE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataShortEntityView.md b/paas/docs/PageDataShortEntityView.md index f82f8dbe..25ebe530 100644 --- a/paas/docs/PageDataShortEntityView.md +++ b/paas/docs/PageDataShortEntityView.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ShortEntityView | Name | Type | Description | Notes | @@ -25,7 +25,7 @@ | name | String | Name of the entity | [readonly] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataTbResourceInfo.md b/paas/docs/PageDataTbResourceInfo.md index 8355ea9c..154918df 100644 --- a/paas/docs/PageDataTbResourceInfo.md +++ b/paas/docs/PageDataTbResourceInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TbResourceInfo | Name | Type | Description | Notes | @@ -45,7 +45,7 @@ `IMAGE` | `SCADA_SYMBOL` | `EXTENSION` | `MODULE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataTenant.md b/paas/docs/PageDataTenant.md index bb36940f..5858cd8a 100644 --- a/paas/docs/PageDataTenant.md +++ b/paas/docs/PageDataTenant.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Tenant | Name | Type | Description | Notes | @@ -69,7 +69,7 @@ | _default | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataTenantInfo.md b/paas/docs/PageDataTenantInfo.md index cd028774..9f4df387 100644 --- a/paas/docs/PageDataTenantInfo.md +++ b/paas/docs/PageDataTenantInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TenantInfo | Name | Type | Description | Notes | @@ -70,7 +70,7 @@ | _default | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataTenantProfile.md b/paas/docs/PageDataTenantProfile.md index 6e493ac2..426a9a85 100644 --- a/paas/docs/PageDataTenantProfile.md +++ b/paas/docs/PageDataTenantProfile.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TenantProfile | Name | Type | Description | Notes | @@ -50,6 +50,8 @@ | maxDashboards | Long | | [optional] | | maxRuleChains | Long | | [optional] | | maxEdges | Long | | [optional] | +| maxAgents | Long | | [optional] | +| maxAgentApplications | Long | | [optional] | | maxResourcesInBytes | Long | | [optional] | | maxOtaPackagesInBytes | Long | | [optional] | | maxResourceSize | Long | | [optional] | @@ -113,6 +115,10 @@ | edgeEventRateLimitsPerEdge | String | | [optional] | | edgeUplinkMessagesRateLimits | String | | [optional] | | edgeUplinkMessagesRateLimitsPerEdge | String | | [optional] | +| agentEventRateLimits | String | | [optional] | +| agentEventRateLimitsPerAgent | String | | [optional] | +| agentLogChunkRateLimits | String | | [optional] | +| agentLogChunkRateLimitsPerAgent | String | | [optional] | | defaultStorageTtlDays | Integer | | [optional] | | alarmsTtlDays | Integer | | [optional] | | rpcTtlDays | Integer | | [optional] | @@ -150,7 +156,7 @@ | additionalInfo | com.fasterxml.jackson.databind.JsonNode | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### SubmitStrategy | Name | Type | Description | Notes | diff --git a/paas/docs/PageDataUser.md b/paas/docs/PageDataUser.md index f4a32997..3cdc9902 100644 --- a/paas/docs/PageDataUser.md +++ b/paas/docs/PageDataUser.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### User | Name | Type | Description | Notes | @@ -45,7 +45,7 @@ | id | UUID | string | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataUserEmailInfo.md b/paas/docs/PageDataUserEmailInfo.md index cf9fbea2..7fbd0a99 100644 --- a/paas/docs/PageDataUserEmailInfo.md +++ b/paas/docs/PageDataUserEmailInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### UserEmailInfo | Name | Type | Description | Notes | @@ -27,7 +27,7 @@ | lastName | String | User last name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataUserInfo.md b/paas/docs/PageDataUserInfo.md index d838d6b3..93cdb6d1 100644 --- a/paas/docs/PageDataUserInfo.md +++ b/paas/docs/PageDataUserInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### UserInfo | Name | Type | Description | Notes | @@ -53,7 +53,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataWidgetTypeInfo.md b/paas/docs/PageDataWidgetTypeInfo.md index 2fc78d23..b177f9d6 100644 --- a/paas/docs/PageDataWidgetTypeInfo.md +++ b/paas/docs/PageDataWidgetTypeInfo.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### WidgetTypeInfo | Name | Type | Description | Notes | @@ -42,7 +42,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PageDataWidgetsBundle.md b/paas/docs/PageDataWidgetsBundle.md index 798ff0aa..d09e4d76 100644 --- a/paas/docs/PageDataWidgetsBundle.md +++ b/paas/docs/PageDataWidgetsBundle.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### WidgetsBundle | Name | Type | Description | Notes | @@ -34,7 +34,7 @@ | name | String | Same as title of the Widget Bundle. Read-only field. Update the 'title' to change the 'name' of the Widget Bundle. | [optional] [readonly] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PdfReportTemplateConfig.md b/paas/docs/PdfReportTemplateConfig.md index 1feebb53..7701e219 100644 --- a/paas/docs/PdfReportTemplateConfig.md +++ b/paas/docs/PdfReportTemplateConfig.md @@ -20,7 +20,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportTemplateConfig | Name | Type | Description | Notes | @@ -633,7 +633,7 @@ | id | UUID | ID of the entity, time-based UUID v1 | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` diff --git a/paas/docs/ProcessingStartStatus.md b/paas/docs/ProcessingStartStatus.md new file mode 100644 index 00000000..1846b051 --- /dev/null +++ b/paas/docs/ProcessingStartStatus.md @@ -0,0 +1,25 @@ + +# ProcessingStartStatus + +`org.thingsboard.client.model.ProcessingStartStatus` + +## Enum Values + + +* `DELIVERY_FAIL` (value: `"DELIVERY_FAIL"`) + +* `PENDING` (value: `"PENDING"`) + +* `DELIVERED` (value: `"DELIVERED"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/ProductId.md b/paas/docs/ProductId.md index 8102ea40..412c4897 100644 --- a/paas/docs/ProductId.md +++ b/paas/docs/ProductId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/PropagationCalculatedFieldConfiguration.md b/paas/docs/PropagationCalculatedFieldConfiguration.md index 7afce295..490677fe 100644 --- a/paas/docs/PropagationCalculatedFieldConfiguration.md +++ b/paas/docs/PropagationCalculatedFieldConfiguration.md @@ -18,7 +18,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CalculatedFieldConfiguration | Name | Type | Description | Notes | @@ -88,7 +88,7 @@ `CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ArgumentType (enum) `TS_LATEST` | `ATTRIBUTE` | `TS_ROLLING` diff --git a/paas/docs/QrCodeSettings.md b/paas/docs/QrCodeSettings.md index 838b7b71..10b61e52 100644 --- a/paas/docs/QrCodeSettings.md +++ b/paas/docs/QrCodeSettings.md @@ -25,7 +25,7 @@ A JSON value representing the mobile apps configuration ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### QrCodeSettingsId | Name | Type | Description | Notes | @@ -45,7 +45,7 @@ A JSON value representing the mobile apps configuration `RIGHT` | `LEFT` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/Queue.md b/paas/docs/Queue.md index 35faa952..2c23a5bc 100644 --- a/paas/docs/Queue.md +++ b/paas/docs/Queue.md @@ -26,7 +26,7 @@ A JSON value representing the queue. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### SubmitStrategy | Name | Type | Description | Notes | @@ -50,7 +50,7 @@ A JSON value representing the queue. `SKIP_ALL_FAILURES` | `SKIP_ALL_FAILURES_AND_TIMED_OUT` | `RETRY_ALL` | `RETRY_FAILED` | `RETRY_TIMED_OUT` | `RETRY_FAILED_AND_TIMED_OUT` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/QueueId.md b/paas/docs/QueueId.md index 03f5e3de..bf77b728 100644 --- a/paas/docs/QueueId.md +++ b/paas/docs/QueueId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/QueueStats.md b/paas/docs/QueueStats.md index f1c85410..a6e74105 100644 --- a/paas/docs/QueueStats.md +++ b/paas/docs/QueueStats.md @@ -17,10 +17,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/QueueStatsId.md b/paas/docs/QueueStatsId.md index ef169913..e83f2783 100644 --- a/paas/docs/QueueStatsId.md +++ b/paas/docs/QueueStatsId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RateLimitsNotificationRuleTriggerConfig.md b/paas/docs/RateLimitsNotificationRuleTriggerConfig.md index 26c8e19a..08b97bea 100644 --- a/paas/docs/RateLimitsNotificationRuleTriggerConfig.md +++ b/paas/docs/RateLimitsNotificationRuleTriggerConfig.md @@ -21,7 +21,7 @@ | triggerType | NotificationRuleTriggerType | | | #### LimitedApi (enum) -`ENTITY_EXPORT` | `ENTITY_IMPORT` | `NOTIFICATION_REQUESTS` | `NOTIFICATION_REQUESTS_PER_RULE` | `REST_REQUESTS_PER_TENANT` | `REST_REQUESTS_PER_CUSTOMER` | `WS_UPDATES_PER_SESSION` | `CASSANDRA_WRITE_QUERIES_CORE` | `CASSANDRA_READ_QUERIES_CORE` | `CASSANDRA_WRITE_QUERIES_RULE_ENGINE` | … (36 values total) +`ENTITY_EXPORT` | `ENTITY_IMPORT` | `NOTIFICATION_REQUESTS` | `NOTIFICATION_REQUESTS_PER_RULE` | `REST_REQUESTS_PER_TENANT` | `REST_REQUESTS_PER_CUSTOMER` | `WS_UPDATES_PER_SESSION` | `CASSANDRA_WRITE_QUERIES_CORE` | `CASSANDRA_READ_QUERIES_CORE` | `CASSANDRA_WRITE_QUERIES_RULE_ENGINE` | … (40 values total) #### NotificationRuleTriggerType (enum) `ENTITY_ACTION` | `ALARM` | `ALARM_COMMENT` | `ALARM_ASSIGNMENT` | `DEVICE_ACTIVITY` | `RULE_ENGINE_COMPONENT_LIFECYCLE_EVENT` | `INTEGRATION_LIFECYCLE_EVENT` | `EDGE_CONNECTION` | `EDGE_COMMUNICATION_FAILURE` | `NEW_PLATFORM_VERSION` | … (15 values total) diff --git a/paas/docs/RelatedEntitiesAggregationCalculatedFieldConfiguration.md b/paas/docs/RelatedEntitiesAggregationCalculatedFieldConfiguration.md index 90236913..ca74b155 100644 --- a/paas/docs/RelatedEntitiesAggregationCalculatedFieldConfiguration.md +++ b/paas/docs/RelatedEntitiesAggregationCalculatedFieldConfiguration.md @@ -21,7 +21,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CalculatedFieldConfiguration | Name | Type | Description | Notes | @@ -117,7 +117,7 @@ `CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ArgumentType (enum) `TS_LATEST` | `ATTRIBUTE` | `TS_ROLLING` diff --git a/paas/docs/RelationEntityTypeFilter.md b/paas/docs/RelationEntityTypeFilter.md index f1c0786b..e10fefe8 100644 --- a/paas/docs/RelationEntityTypeFilter.md +++ b/paas/docs/RelationEntityTypeFilter.md @@ -16,7 +16,7 @@ ## Referenced Types #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RelationTypeGroup.md b/paas/docs/RelationTypeGroup.md index 7faf3248..ca42591c 100644 --- a/paas/docs/RelationTypeGroup.md +++ b/paas/docs/RelationTypeGroup.md @@ -20,6 +20,8 @@ * `EDGE_AUTO_ASSIGN_RULE_CHAIN` (value: `"EDGE_AUTO_ASSIGN_RULE_CHAIN"`) +* `AGENT` (value: `"AGENT"`) + --- diff --git a/paas/docs/RelationsQueryFilter.md b/paas/docs/RelationsQueryFilter.md index d16a2669..ef9ae6b3 100644 --- a/paas/docs/RelationsQueryFilter.md +++ b/paas/docs/RelationsQueryFilter.md @@ -38,7 +38,7 @@ | id | UUID | ID of the entity, time-based UUID v1 | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` diff --git a/paas/docs/RelationsSearchParameters.md b/paas/docs/RelationsSearchParameters.md index d23711c2..54eb368f 100644 --- a/paas/docs/RelationsSearchParameters.md +++ b/paas/docs/RelationsSearchParameters.md @@ -19,13 +19,13 @@ ## Referenced Types #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` --- diff --git a/paas/docs/Report.md b/paas/docs/Report.md index 79ba259c..e21d8867 100644 --- a/paas/docs/Report.md +++ b/paas/docs/Report.md @@ -15,19 +15,21 @@ | **format** | **TbReportFormat** | | | | **name** | **String** | | | | **userId** | **UserId** | | | +| **publicKey** | **String** | | [optional] | | **ownerId** | **EntityId** | JSON object with Customer or Tenant Id | [optional] [readonly] | +| **_public** | **Boolean** | | [optional] | ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TbReportFormat (enum) `PDF` | `CSV` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ReportComponent.md b/paas/docs/ReportComponent.md index 6c944ba9..05c47375 100644 --- a/paas/docs/ReportComponent.md +++ b/paas/docs/ReportComponent.md @@ -203,7 +203,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportComponentSubType (enum) `DOUGHNUT_CHART` | `HORIZONTAL_DOUGHNUT_CHART` | `POINT_CHART` | `BAR_CHART` | `PIE_CHART` | `LINE_CHART` | `LATEST_BAR_CHART` | `RANGE_CHART` | `BAR_CHART_WITH_LABELS` | `STATE_CHART` | … (11 values total) @@ -612,7 +612,7 @@ `YESTERDAY` | `DAY_BEFORE_YESTERDAY` | `THIS_DAY_LAST_WEEK` | `PREVIOUS_WEEK` | `PREVIOUS_WEEK_ISO` | `PREVIOUS_MONTH` | `PREVIOUS_QUARTER` | `PREVIOUS_HALF_YEAR` | `PREVIOUS_YEAR` | `CURRENT_HOUR` | … (24 values total) #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ValueSourceType (enum) `CONSTANT` | `LATEST_KEY` | `ENTITY` diff --git a/paas/docs/ReportControllerApi.md b/paas/docs/ReportControllerApi.md index 14c75ad7..a927c11b 100644 --- a/paas/docs/ReportControllerApi.md +++ b/paas/docs/ReportControllerApi.md @@ -6,12 +6,14 @@ Report createReport(@Nullable CreateReportRequest createReportRequest) // createReport void deleteReport(@Nonnull String reportId) // Delete Report (deleteReport) File downloadReport(@Nonnull UUID reportId) // downloadReport +File downloadReportByPublicKey(@Nonnull String publicKey) // Download report by public key (downloadReportByPublicKey) Report getReportById(@Nonnull String reportId) // Get Report (getReportById) PageDataReportInfo getReportInfos(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable UUID reportTemplateId, @Nullable UUID userId, @Nullable Boolean includeCustomers, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) // getReportInfos List getReportInfosByIds(@Nonnull List strReportIds) // getReportInfosByIds PageDataReport getReports(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, @Nullable Boolean includeCustomers) // getReports Job requestReport(@Nonnull ReportRequest reportRequest) // requestReport File testReportAndDownload(@Nonnull ReportRequest reportRequest) // Download test report (testReportAndDownload) +Report updateReportPublicStatus(@Nonnull UUID reportId, @Nonnull Boolean isPublic) // Update Report public status (updateReportPublicStatus) ``` @@ -83,6 +85,30 @@ downloadReport **File** +## downloadReportByPublicKey + +``` +File downloadReportByPublicKey(@Nonnull String publicKey) +``` + +**GET** `/api/v2/report/public/{publicKey}/download` + +Download report by public key (downloadReportByPublicKey) + +Downloads the report identified by its public key. This endpoint is intentionally public: it requires no authentication and is accessible to anyone in possession of the report's random public key. It only returns data for reports that have been explicitly made public (see updateReportPublicStatus). + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **publicKey** | **String** | The random public key of the report | | + +### Return type + +**File** + + ## getReportById ``` @@ -230,3 +256,28 @@ Generate and download test report. Available for users with 'TENANT_ADMIN' or ' **File** + +## updateReportPublicStatus + +``` +Report updateReportPublicStatus(@Nonnull UUID reportId, @Nonnull Boolean isPublic) +``` + +**PUT** `/api/v2/report/{reportId}/public/{isPublic}` + +Update Report public status (updateReportPublicStatus) + +Updates the public status of the report. When public, the report can be downloaded without authentication via the public link. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. + + +### Parameters + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **reportId** | **UUID** | A string value representing the report id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **isPublic** | **Boolean** | Whether the report should be publicly downloadable without authentication | | + +### Return type + +**Report** + diff --git a/paas/docs/ReportId.md b/paas/docs/ReportId.md index d776b57a..7df3b84e 100644 --- a/paas/docs/ReportId.md +++ b/paas/docs/ReportId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ReportInfo.md b/paas/docs/ReportInfo.md index b9a3e9e8..cd09963e 100644 --- a/paas/docs/ReportInfo.md +++ b/paas/docs/ReportInfo.md @@ -15,16 +15,18 @@ | **format** | **TbReportFormat** | | | | **name** | **String** | | | | **userId** | **UserId** | | | +| **publicKey** | **String** | | [optional] | | **templateInfo** | **EntityInfo** | | [optional] | | **customerTitle** | **String** | | [optional] | | **userName** | **String** | | [optional] | | **ownerId** | **EntityId** | JSON object with Customer or Tenant Id | [optional] [readonly] | +| **_public** | **Boolean** | | [optional] | ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TbReportFormat (enum) `PDF` | `CSV` @@ -36,7 +38,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ReportJobConfiguration.md b/paas/docs/ReportJobConfiguration.md index ec40c147..e87d3013 100644 --- a/paas/docs/ReportJobConfiguration.md +++ b/paas/docs/ReportJobConfiguration.md @@ -12,6 +12,7 @@ | **reportTemplateId** | **ReportTemplateId** | | [optional] | | **userId** | **UserId** | | [optional] | | **timezone** | **String** | | [optional] | +| **makePublic** | **Boolean** | | [optional] | | **targets** | **List\** | | [optional] | | **notificationTemplateId** | **NotificationTemplateId** | | [optional] | | **notificationRequests** | **List\** | | [optional] | @@ -25,7 +26,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### JobConfiguration | Name | Type | Description | Notes | @@ -83,6 +84,21 @@ | error | String | | [optional] | | jobType | String | | | +#### CfReprocessingTaskResult *(extends TaskResult, jobType=`CF_REPROCESSING`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | CfReprocessingTaskFailure | | [optional] | + +#### DummyTaskResult *(extends TaskResult, jobType=`DUMMY`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | DummyTaskFailure | | [optional] | + +#### ReportTaskResult *(extends TaskResult, jobType=`REPORT`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| report | Report | | [optional] | + #### NotificationTemplate | Name | Type | Description | Notes | |------|------|-------------|-------| @@ -119,7 +135,7 @@ | totalSent | Integer | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### DebugSettings | Name | Type | Description | Notes | @@ -139,6 +155,35 @@ | reportTemplateId | ReportTemplateId | | [optional] | | userId | UserId | | [optional] | | timezone | String | | [optional] | +| makePublic | Boolean | | [optional] | + +#### CfReprocessingTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| entityInfo | EntityInfo | | [optional] | + +#### Report +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | ReportId | | [optional] | +| createdTime | Long | Entity creation timestamp in milliseconds since Unix epoch | [optional] [readonly] | +| tenantId | TenantId | | | +| customerId | CustomerId | | [optional] | +| templateId | ReportTemplateId | | | +| format | TbReportFormat | | | +| name | String | | | +| userId | UserId | | | +| publicKey | String | | [optional] | +| ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | + +#### DummyTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| number | Integer | | [optional] | +| failAlways | Boolean | | [optional] | #### DeliveryMethodNotificationTemplate | Name | Type | Description | Notes | @@ -177,6 +222,9 @@ | subject | String | Subject line for the web notification | | | additionalConfig | com.fasterxml.jackson.databind.JsonNode | Additional JSON configuration for web buttons/actions | [optional] | +#### TbReportFormat (enum) +`PDF` | `CSV` + #### Button | Name | Type | Description | Notes | |------|------|-------------|-------| diff --git a/paas/docs/ReportJobResult.md b/paas/docs/ReportJobResult.md index 62e8fe16..75d3c171 100644 --- a/paas/docs/ReportJobResult.md +++ b/paas/docs/ReportJobResult.md @@ -15,7 +15,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### JobResult | Name | Type | Description | Notes | @@ -42,7 +42,9 @@ | format | TbReportFormat | | | | name | String | | | | userId | UserId | | | +| publicKey | String | | [optional] | | ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | #### TaskResult | Name | Type | Description | Notes | @@ -54,11 +56,45 @@ | error | String | | [optional] | | jobType | String | | | +#### CfReprocessingTaskResult *(extends TaskResult, jobType=`CF_REPROCESSING`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | CfReprocessingTaskFailure | | [optional] | + +#### DummyTaskResult *(extends TaskResult, jobType=`DUMMY`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | DummyTaskFailure | | [optional] | + +#### ReportTaskResult *(extends TaskResult, jobType=`REPORT`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| report | Report | | [optional] | + #### TbReportFormat (enum) `PDF` | `CSV` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +#### CfReprocessingTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| entityInfo | EntityInfo | | [optional] | + +#### DummyTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| number | Integer | | [optional] | +| failAlways | Boolean | | [optional] | + +#### EntityInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | EntityId | JSON object with the entity Id. | [optional] | +| name | String | Entity Name | [optional] | --- diff --git a/paas/docs/ReportRequest.md b/paas/docs/ReportRequest.md index 028aa90d..b37a7b7d 100644 --- a/paas/docs/ReportRequest.md +++ b/paas/docs/ReportRequest.md @@ -11,6 +11,7 @@ | **reportTemplateConfig** | **ReportTemplateConfig** | Json object representing the report template config. | [optional] | | **timezone** | **String** | Timezone used for report generation. | [optional] | | **userId** | **String** | A string value representing the user id. | [optional] | +| **makePublic** | **Boolean** | A boolean value indicating whether the generated report should be made public. | [optional] | | **originator** | **EntityId** | Json object representing the originator id. | [optional] | | **targets** | **List\** | | [optional] | | **notificationTemplateId** | **NotificationTemplateId** | | [optional] | @@ -19,7 +20,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportTemplateConfig | Name | Type | Description | Notes | @@ -255,7 +256,7 @@ | timestampColumnSettings | ColumnSettings | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntityFilter | Name | Type | Description | Notes | diff --git a/paas/docs/ReportTaskResult.md b/paas/docs/ReportTaskResult.md index f8342026..0c54f179 100644 --- a/paas/docs/ReportTaskResult.md +++ b/paas/docs/ReportTaskResult.md @@ -15,7 +15,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TaskResult | Name | Type | Description | Notes | @@ -38,13 +38,15 @@ | format | TbReportFormat | | | | name | String | | | | userId | UserId | | | +| publicKey | String | | [optional] | | ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | #### TbReportFormat (enum) `PDF` | `CSV` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ReportTemplate.md b/paas/docs/ReportTemplate.md index 58249167..6ce38f54 100644 --- a/paas/docs/ReportTemplate.md +++ b/paas/docs/ReportTemplate.md @@ -25,7 +25,7 @@ A JSON value representing the Report Template. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TbReportFormat (enum) `PDF` | `CSV` @@ -264,7 +264,7 @@ A JSON value representing the Report Template. | timestampColumnSettings | ColumnSettings | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntityFilter | Name | Type | Description | Notes | diff --git a/paas/docs/ReportTemplateConfig.md b/paas/docs/ReportTemplateConfig.md index c7a53680..3342c61f 100644 --- a/paas/docs/ReportTemplateConfig.md +++ b/paas/docs/ReportTemplateConfig.md @@ -33,7 +33,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TbReportFormat (enum) `PDF` | `CSV` @@ -636,7 +636,7 @@ | id | UUID | ID of the entity, time-based UUID v1 | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### EntitySearchDirection (enum) `FROM` | `TO` diff --git a/paas/docs/ReportTemplateExportData.md b/paas/docs/ReportTemplateExportData.md index e78c93ac..07db2f02 100644 --- a/paas/docs/ReportTemplateExportData.md +++ b/paas/docs/ReportTemplateExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/ReportTemplateId.md b/paas/docs/ReportTemplateId.md index 58623a88..f0d28492 100644 --- a/paas/docs/ReportTemplateId.md +++ b/paas/docs/ReportTemplateId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ReportTemplateInfo.md b/paas/docs/ReportTemplateInfo.md index 25265974..bf4e9028 100644 --- a/paas/docs/ReportTemplateInfo.md +++ b/paas/docs/ReportTemplateInfo.md @@ -23,7 +23,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TbReportFormat (enum) `PDF` | `CSV` @@ -32,7 +32,7 @@ `REPORT` | `SUB_REPORT` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/Resource.md b/paas/docs/Resource.md index 68984789..a0e93c52 100644 --- a/paas/docs/Resource.md +++ b/paas/docs/Resource.md @@ -74,6 +74,8 @@ * `DASHBOARD_GROUP` (value: `"DASHBOARD_GROUP"`) +* `AGENT_GROUP` (value: `"AGENT_GROUP"`) + * `ROLE` (value: `"ROLE"`) * `GROUP_PERMISSION` (value: `"GROUP_PERMISSION"`) @@ -112,6 +114,12 @@ * `AI_MODEL` (value: `"AI_MODEL"`) +* `AGENT` (value: `"AGENT"`) + +* `AGENT_APP_PROFILE` (value: `"AGENT_APP_PROFILE"`) + +* `AGENT_PROFILE` (value: `"AGENT_PROFILE"`) + * `AI` (value: `"AI"`) * `API_KEY` (value: `"API_KEY"`) diff --git a/paas/docs/RichTextComponent.md b/paas/docs/RichTextComponent.md index b2e631a1..e60d16f8 100644 --- a/paas/docs/RichTextComponent.md +++ b/paas/docs/RichTextComponent.md @@ -22,7 +22,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportComponent | Name | Type | Description | Notes | @@ -213,7 +213,7 @@ | color | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### IntervalType (enum) `MILLISECONDS` | `WEEK` | `WEEK_ISO` | `MONTH` | `QUARTER` diff --git a/paas/docs/Role.md b/paas/docs/Role.md index 78faaf48..2e80adda 100644 --- a/paas/docs/Role.md +++ b/paas/docs/Role.md @@ -25,13 +25,13 @@ A JSON value representing the role. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### RoleType (enum) `GENERIC` | `GROUP` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RoleExportData.md b/paas/docs/RoleExportData.md index e309606b..a34a233b 100644 --- a/paas/docs/RoleExportData.md +++ b/paas/docs/RoleExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/RoleId.md b/paas/docs/RoleId.md index 248c5495..7da8e684 100644 --- a/paas/docs/RoleId.md +++ b/paas/docs/RoleId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RollBackStep.md b/paas/docs/RollBackStep.md new file mode 100644 index 00000000..e03ca411 --- /dev/null +++ b/paas/docs/RollBackStep.md @@ -0,0 +1,61 @@ + +# RollBackStep + +`org.thingsboard.client.model.RollBackStep` + +**Extends:** **AgentAppStep** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **state** | **RollBackStepState** | | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppStep +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | UUID | | [optional] | +| nextId | UUID | | [optional] | +| title | String | | [optional] | +| templateOnly | Boolean | | [optional] | +| condition | String | | [optional] | +| stateful | Boolean | | [optional] | +| type | AgentAppStepType | | [optional] | + +#### RollBackStepState *(extends AgentAppStepState)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failedEventId | StepFieldAgentAppEventId | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### AgentAppStepState +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | + +#### StepFieldAgentAppEventId +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | AgentAppEventId | | [optional] | +| userChoice | Boolean | | [optional] | + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/RollBackStepState.md b/paas/docs/RollBackStepState.md new file mode 100644 index 00000000..48520ce1 --- /dev/null +++ b/paas/docs/RollBackStepState.md @@ -0,0 +1,45 @@ + +# RollBackStepState + +`org.thingsboard.client.model.RollBackStepState` + +**Extends:** **AgentAppStepState** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **failedEventId** | **StepFieldAgentAppEventId** | | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### AgentAppStepState +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | + +#### StepFieldAgentAppEventId +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | AgentAppEventId | | [optional] | +| userChoice | Boolean | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/Rpc.md b/paas/docs/Rpc.md index f6811f36..3567eb54 100644 --- a/paas/docs/Rpc.md +++ b/paas/docs/Rpc.md @@ -21,13 +21,13 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### RpcStatus (enum) `QUEUED` | `SENT` | `DELIVERED` | `SUCCESSFUL` | `TIMEOUT` | `EXPIRED` | `FAILED` | `DELETED` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RpcId.md b/paas/docs/RpcId.md index df8bfa33..6db134ab 100644 --- a/paas/docs/RpcId.md +++ b/paas/docs/RpcId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RuleChain.md b/paas/docs/RuleChain.md index fcaa46fc..3f8c8840 100644 --- a/paas/docs/RuleChain.md +++ b/paas/docs/RuleChain.md @@ -25,13 +25,13 @@ A JSON value representing the rule chain. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### RuleChainType (enum) `CORE` | `EDGE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RuleChainConnectionInfo.md b/paas/docs/RuleChainConnectionInfo.md index f2631ff6..bb0b7516 100644 --- a/paas/docs/RuleChainConnectionInfo.md +++ b/paas/docs/RuleChainConnectionInfo.md @@ -16,10 +16,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RuleChainData.md b/paas/docs/RuleChainData.md index 5869b4a1..0032e2f8 100644 --- a/paas/docs/RuleChainData.md +++ b/paas/docs/RuleChainData.md @@ -16,7 +16,7 @@ A JSON value representing the rule chains. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### RuleChain | Name | Type | Description | Notes | @@ -102,7 +102,7 @@ A JSON value representing the rule chains. | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RuleChainExportData.md b/paas/docs/RuleChainExportData.md index 4dab69cd..7981a72a 100644 --- a/paas/docs/RuleChainExportData.md +++ b/paas/docs/RuleChainExportData.md @@ -15,7 +15,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -83,7 +83,7 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RuleNode | Name | Type | Description | Notes | @@ -133,7 +133,7 @@ | markdownCss | String | Custom CSS styles applied to the note content | [optional] | #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/RuleChainId.md b/paas/docs/RuleChainId.md index 93088d7c..bb9f9d98 100644 --- a/paas/docs/RuleChainId.md +++ b/paas/docs/RuleChainId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RuleChainImportResult.md b/paas/docs/RuleChainImportResult.md index 861db542..56715874 100644 --- a/paas/docs/RuleChainImportResult.md +++ b/paas/docs/RuleChainImportResult.md @@ -16,10 +16,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RuleChainMetaData.md b/paas/docs/RuleChainMetaData.md index 8fd19132..8cbf2a6f 100644 --- a/paas/docs/RuleChainMetaData.md +++ b/paas/docs/RuleChainMetaData.md @@ -21,7 +21,7 @@ A JSON value representing the rule chain metadata. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### RuleNode | Name | Type | Description | Notes | @@ -78,7 +78,7 @@ A JSON value representing the rule chain metadata. | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RuleChainOutputLabelsUsage.md b/paas/docs/RuleChainOutputLabelsUsage.md index 811dfc62..03414fe6 100644 --- a/paas/docs/RuleChainOutputLabelsUsage.md +++ b/paas/docs/RuleChainOutputLabelsUsage.md @@ -17,10 +17,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RuleNode.md b/paas/docs/RuleNode.md index 9a79fc57..9fb39ca5 100644 --- a/paas/docs/RuleNode.md +++ b/paas/docs/RuleNode.md @@ -25,7 +25,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### DebugSettings | Name | Type | Description | Notes | @@ -35,7 +35,7 @@ | allEnabledUntil | Long | Timestamp of the end time for the processing debug events. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RuleNodeId.md b/paas/docs/RuleNodeId.md index c184ae0a..185f4949 100644 --- a/paas/docs/RuleNodeId.md +++ b/paas/docs/RuleNodeId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/RunJobStep.md b/paas/docs/RunJobStep.md new file mode 100644 index 00000000..24aeddf0 --- /dev/null +++ b/paas/docs/RunJobStep.md @@ -0,0 +1,82 @@ + +# RunJobStep + +`org.thingsboard.client.model.RunJobStep` + +**Extends:** **AgentAppStep** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **state** | **RunJobStepState** | | [optional] | + + + +## Referenced Types + +#### AgentAppStep +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | UUID | | [optional] | +| nextId | UUID | | [optional] | +| title | String | | [optional] | +| templateOnly | Boolean | | [optional] | +| condition | String | | [optional] | +| stateful | Boolean | | [optional] | +| type | AgentAppStepType | | [optional] | + +#### RunJobStepState *(extends AgentAppStepState)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| image | StepFieldString | | [optional] | +| entrypoint | StepFieldListString | | [optional] | +| cmd | StepFieldListString | | [optional] | +| env | StepFieldListString | | [optional] | +| binds | StepFieldListString | | [optional] | +| networks | StepFieldListString | | [optional] | +| pullImages | StepFieldBoolean | | [optional] | +| retries | StepFieldInteger | | [optional] | +| networkFromServiceImageRegexPattern | StepFieldString | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +#### AgentAppStepState +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | + +#### StepFieldString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | String | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldInteger +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Integer | | [optional] | +| userChoice | Boolean | | [optional] | + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/RunJobStepState.md b/paas/docs/RunJobStepState.md new file mode 100644 index 00000000..5ea535ba --- /dev/null +++ b/paas/docs/RunJobStepState.md @@ -0,0 +1,66 @@ + +# RunJobStepState + +`org.thingsboard.client.model.RunJobStepState` + +**Extends:** **AgentAppStepState** + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **image** | **StepFieldString** | | [optional] | +| **entrypoint** | **StepFieldListString** | | [optional] | +| **cmd** | **StepFieldListString** | | [optional] | +| **env** | **StepFieldListString** | | [optional] | +| **binds** | **StepFieldListString** | | [optional] | +| **networks** | **StepFieldListString** | | [optional] | +| **pullImages** | **StepFieldBoolean** | | [optional] | +| **retries** | **StepFieldInteger** | | [optional] | +| **networkFromServiceImageRegexPattern** | **StepFieldString** | | [optional] | + + + +## Referenced Types + +#### AgentAppStepState +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| type | AgentAppStepType | | [optional] | + +#### StepFieldString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | String | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldListString +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| userChoice | Boolean | | [optional] | +| value | List | | [optional] | + +#### StepFieldBoolean +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Boolean | | [optional] | +| userChoice | Boolean | | [optional] | + +#### StepFieldInteger +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| value | Integer | | [optional] | +| userChoice | Boolean | | [optional] | + +#### AgentAppStepType (enum) +`COMPOSE_TEMPLATE` | `COMPOSE` | `COMPOSE_START` | `COMPOSE_DOWN` | `ROLLBACK` | `BACKUP_VOLUME` | `BACKUP_VOLUME_REMOVE` | `COMPOSE_RESTART` | `RUN_JOB` | `AGENT_PREPARE` | … (11 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/SaveDeviceWithCredentialsRequest.md b/paas/docs/SaveDeviceWithCredentialsRequest.md index fa5d6ab5..c21ab788 100644 --- a/paas/docs/SaveDeviceWithCredentialsRequest.md +++ b/paas/docs/SaveDeviceWithCredentialsRequest.md @@ -16,7 +16,7 @@ The JSON object with device and credentials. See method description above for ex ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Device | Name | Type | Description | Notes | @@ -113,7 +113,7 @@ The JSON object with device and credentials. See method description above for ex | engineId | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### DeviceProfileType (enum) `DEFAULT` diff --git a/paas/docs/SaveOtaPackageInfoRequest.md b/paas/docs/SaveOtaPackageInfoRequest.md index f49fa2b3..91f50198 100644 --- a/paas/docs/SaveOtaPackageInfoRequest.md +++ b/paas/docs/SaveOtaPackageInfoRequest.md @@ -32,7 +32,7 @@ A JSON value representing the OTA Package. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### OtaPackageType (enum) `FIRMWARE` | `SOFTWARE` @@ -41,7 +41,7 @@ A JSON value representing the OTA Package. `MD5` | `SHA256` | `SHA384` | `SHA512` | `CRC32` | `MURMUR3_32` | `MURMUR3_128` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ScheduledReportInfo.md b/paas/docs/ScheduledReportInfo.md index 9ac27526..3cd71c8a 100644 --- a/paas/docs/ScheduledReportInfo.md +++ b/paas/docs/ScheduledReportInfo.md @@ -27,7 +27,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityInfo | Name | Type | Description | Notes | @@ -36,7 +36,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SchedulerEvent.md b/paas/docs/SchedulerEvent.md index 0f59d605..ab67574a 100644 --- a/paas/docs/SchedulerEvent.md +++ b/paas/docs/SchedulerEvent.md @@ -27,10 +27,10 @@ A JSON value representing the Scheduler Event. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SchedulerEventExportData.md b/paas/docs/SchedulerEventExportData.md index cb277726..7f469fb4 100644 --- a/paas/docs/SchedulerEventExportData.md +++ b/paas/docs/SchedulerEventExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/SchedulerEventFilter.md b/paas/docs/SchedulerEventFilter.md index ff0f7865..7001a456 100644 --- a/paas/docs/SchedulerEventFilter.md +++ b/paas/docs/SchedulerEventFilter.md @@ -34,7 +34,7 @@ `CURRENT_CUSTOMER` | `CURRENT_TENANT` | `CURRENT_USER` | `CURRENT_USER_OWNER` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SchedulerEventId.md b/paas/docs/SchedulerEventId.md index 20d17884..815bbc1e 100644 --- a/paas/docs/SchedulerEventId.md +++ b/paas/docs/SchedulerEventId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SchedulerEventInfo.md b/paas/docs/SchedulerEventInfo.md index ad00bb9e..80c43aeb 100644 --- a/paas/docs/SchedulerEventInfo.md +++ b/paas/docs/SchedulerEventInfo.md @@ -24,10 +24,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SchedulerEventWithCustomerInfo.md b/paas/docs/SchedulerEventWithCustomerInfo.md index 624269a2..c83f65b0 100644 --- a/paas/docs/SchedulerEventWithCustomerInfo.md +++ b/paas/docs/SchedulerEventWithCustomerInfo.md @@ -27,10 +27,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ScriptCalculatedFieldConfiguration.md b/paas/docs/ScriptCalculatedFieldConfiguration.md index dd292324..afb39063 100644 --- a/paas/docs/ScriptCalculatedFieldConfiguration.md +++ b/paas/docs/ScriptCalculatedFieldConfiguration.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CalculatedFieldConfiguration | Name | Type | Description | Notes | @@ -77,7 +77,7 @@ `CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ArgumentType (enum) `TS_LATEST` | `ATTRIBUTE` | `TS_ROLLING` diff --git a/paas/docs/Secret.md b/paas/docs/Secret.md index 7869ec09..9c02ae61 100644 --- a/paas/docs/Secret.md +++ b/paas/docs/Secret.md @@ -22,13 +22,13 @@ A JSON value representing the Secret. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### SecretType (enum) `TEXT` | `TEXT_FILE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SecretId.md b/paas/docs/SecretId.md index 9462bf5b..8a0915ab 100644 --- a/paas/docs/SecretId.md +++ b/paas/docs/SecretId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SecretInfo.md b/paas/docs/SecretInfo.md index a2825186..2d8d43d4 100644 --- a/paas/docs/SecretInfo.md +++ b/paas/docs/SecretInfo.md @@ -18,13 +18,13 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### SecretType (enum) `TEXT` | `TEXT_FILE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SelfRegistrationParams.md b/paas/docs/SelfRegistrationParams.md index 07e7e42d..dd67c759 100644 --- a/paas/docs/SelfRegistrationParams.md +++ b/paas/docs/SelfRegistrationParams.md @@ -42,7 +42,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### SelfRegistrationType (enum) `WEB` | `MOBILE` @@ -121,7 +121,7 @@ | host | String | Mobile application verification settings. Used for callback to mobile application once user is registered. | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### SignUpFieldId (enum) `EMAIL` | `PASSWORD` | `REPEAT_PASSWORD` | `FIRST_NAME` | `LAST_NAME` | `PHONE` | `COUNTRY` | `CITY` | `STATE` | `ZIP` | … (12 values total) diff --git a/paas/docs/ShareGroupRequest.md b/paas/docs/ShareGroupRequest.md index d91922c9..073d260b 100644 --- a/paas/docs/ShareGroupRequest.md +++ b/paas/docs/ShareGroupRequest.md @@ -19,10 +19,10 @@ The Share Group Request JSON ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ShortCustomerInfo.md b/paas/docs/ShortCustomerInfo.md index da569a30..c17b3263 100644 --- a/paas/docs/ShortCustomerInfo.md +++ b/paas/docs/ShortCustomerInfo.md @@ -15,10 +15,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ShortEntityView.md b/paas/docs/ShortEntityView.md index db5cada0..dc256371 100644 --- a/paas/docs/ShortEntityView.md +++ b/paas/docs/ShortEntityView.md @@ -14,10 +14,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SimpleCalculatedFieldConfiguration.md b/paas/docs/SimpleCalculatedFieldConfiguration.md index 342a625d..313e70fe 100644 --- a/paas/docs/SimpleCalculatedFieldConfiguration.md +++ b/paas/docs/SimpleCalculatedFieldConfiguration.md @@ -17,7 +17,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CalculatedFieldConfiguration | Name | Type | Description | Notes | @@ -78,7 +78,7 @@ `CLIENT_SCOPE` | `SERVER_SCOPE` | `SHARED_SCOPE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### ArgumentType (enum) `TS_LATEST` | `ATTRIBUTE` | `TS_ROLLING` diff --git a/paas/docs/SingleEntityFilter.md b/paas/docs/SingleEntityFilter.md index 92f3c79d..b403357c 100644 --- a/paas/docs/SingleEntityFilter.md +++ b/paas/docs/SingleEntityFilter.md @@ -31,7 +31,7 @@ `CURRENT_CUSTOMER` | `CURRENT_TENANT` | `CURRENT_USER` | `CURRENT_USER_OWNER` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SingleEntityVersionCreateRequest.md b/paas/docs/SingleEntityVersionCreateRequest.md index 8f05a6f0..5b4f8380 100644 --- a/paas/docs/SingleEntityVersionCreateRequest.md +++ b/paas/docs/SingleEntityVersionCreateRequest.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### VersionCreateRequest | Name | Type | Description | Notes | @@ -39,7 +39,7 @@ `SINGLE_ENTITY` | `COMPLEX` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SingleEntityVersionLoadRequest.md b/paas/docs/SingleEntityVersionLoadRequest.md index 1cec04f8..588c597c 100644 --- a/paas/docs/SingleEntityVersionLoadRequest.md +++ b/paas/docs/SingleEntityVersionLoadRequest.md @@ -17,7 +17,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### VersionLoadRequest | Name | Type | Description | Notes | @@ -40,7 +40,7 @@ `SINGLE_ENTITY` | `ENTITY_TYPE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SkipReason.md b/paas/docs/SkipReason.md new file mode 100644 index 00000000..2bada9d5 --- /dev/null +++ b/paas/docs/SkipReason.md @@ -0,0 +1,27 @@ + +# SkipReason + +`org.thingsboard.client.model.SkipReason` + +## Enum Values + + +* `VERSION_MISMATCH` (value: `"VERSION_MISMATCH"`) + +* `ACTIVE_EVENT` (value: `"ACTIVE_EVENT"`) + +* `RATE_LIMIT_EXCEEDED` (value: `"RATE_LIMIT_EXCEEDED"`) + +* `ERROR` (value: `"ERROR"`) + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/SkippedApp.md b/paas/docs/SkippedApp.md new file mode 100644 index 00000000..808edc1e --- /dev/null +++ b/paas/docs/SkippedApp.md @@ -0,0 +1,37 @@ + +# SkippedApp + +`org.thingsboard.client.model.SkippedApp` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **agentId** | **AgentId** | Agent Id owning the application | [optional] | +| **agentName** | **String** | Agent name | [optional] | +| **applicationId** | **AgentApplicationId** | Application Id | [optional] | +| **applicationName** | **String** | Application name | [optional] | +| **reason** | **SkipReason** | Reason for skipping | [optional] | +| **msg** | **String** | Optional message in case of a failure | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### SkipReason (enum) +`VERSION_MISMATCH` | `ACTIVE_EVENT` | `RATE_LIMIT_EXCEEDED` | `ERROR` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/SolutionData.md b/paas/docs/SolutionData.md index 554a5c7e..7961a3c2 100644 --- a/paas/docs/SolutionData.md +++ b/paas/docs/SolutionData.md @@ -15,7 +15,7 @@ Portable solution package containing exported entities grouped by type. Represen ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -153,10 +153,10 @@ Portable solution package containing exported entities grouped by type. Represen | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/SolutionExportRequest.md b/paas/docs/SolutionExportRequest.md index ee491d35..3fd67aed 100644 --- a/paas/docs/SolutionExportRequest.md +++ b/paas/docs/SolutionExportRequest.md @@ -17,7 +17,7 @@ Solution export request specifying which entities to include and export settings ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportSettings | Name | Type | Description | Notes | @@ -31,7 +31,7 @@ Solution export request specifying which entities to include and export settings | embedGroupMembers | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SolutionExportResponse.md b/paas/docs/SolutionExportResponse.md index ac63432f..3214ae63 100644 --- a/paas/docs/SolutionExportResponse.md +++ b/paas/docs/SolutionExportResponse.md @@ -16,7 +16,7 @@ Solution export response containing the exported solution data and any dependenc ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### SolutionData | Name | Type | Description | Notes | @@ -159,10 +159,10 @@ Solution export response containing the exported solution data and any dependenc | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/StateEntityFilter.md b/paas/docs/StateEntityFilter.md index 0990c957..5de6cead 100644 --- a/paas/docs/StateEntityFilter.md +++ b/paas/docs/StateEntityFilter.md @@ -31,7 +31,7 @@ `CURRENT_CUSTOMER` | `CURRENT_TENANT` | `CURRENT_USER` | `CURRENT_USER_OWNER` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/StateEntityOwnerFilter.md b/paas/docs/StateEntityOwnerFilter.md index 0ad3de1e..a77c58cc 100644 --- a/paas/docs/StateEntityOwnerFilter.md +++ b/paas/docs/StateEntityOwnerFilter.md @@ -32,7 +32,7 @@ `CURRENT_CUSTOMER` | `CURRENT_TENANT` | `CURRENT_USER` | `CURRENT_USER_OWNER` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/StepFieldAgentAppEventId.md b/paas/docs/StepFieldAgentAppEventId.md new file mode 100644 index 00000000..d7a5b53c --- /dev/null +++ b/paas/docs/StepFieldAgentAppEventId.md @@ -0,0 +1,30 @@ + +# StepFieldAgentAppEventId + +`org.thingsboard.client.model.StepFieldAgentAppEventId` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **value** | **AgentAppEventId** | | [optional] | +| **userChoice** | **Boolean** | | [optional] | + + + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/StepFieldBoolean.md b/paas/docs/StepFieldBoolean.md new file mode 100644 index 00000000..d5d688af --- /dev/null +++ b/paas/docs/StepFieldBoolean.md @@ -0,0 +1,23 @@ + +# StepFieldBoolean + +`org.thingsboard.client.model.StepFieldBoolean` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **value** | **Boolean** | | [optional] | +| **userChoice** | **Boolean** | | [optional] | + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/StepFieldInteger.md b/paas/docs/StepFieldInteger.md new file mode 100644 index 00000000..e5c3e149 --- /dev/null +++ b/paas/docs/StepFieldInteger.md @@ -0,0 +1,23 @@ + +# StepFieldInteger + +`org.thingsboard.client.model.StepFieldInteger` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **value** | **Integer** | | [optional] | +| **userChoice** | **Boolean** | | [optional] | + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/StepFieldListString.md b/paas/docs/StepFieldListString.md new file mode 100644 index 00000000..5f6333b5 --- /dev/null +++ b/paas/docs/StepFieldListString.md @@ -0,0 +1,23 @@ + +# StepFieldListString + +`org.thingsboard.client.model.StepFieldListString` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **userChoice** | **Boolean** | | [optional] | +| **value** | **List\** | | [optional] | + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/StepFieldString.md b/paas/docs/StepFieldString.md new file mode 100644 index 00000000..7d442733 --- /dev/null +++ b/paas/docs/StepFieldString.md @@ -0,0 +1,23 @@ + +# StepFieldString + +`org.thingsboard.client.model.StepFieldString` + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +| **value** | **String** | | [optional] | +| **userChoice** | **Boolean** | | [optional] | + + + +--- + +### Conventions + +- **Package:** `org.thingsboard.client.model` +- **Getter pattern:** `get()` — e.g., `getId()`, `getName()` +- **Setter pattern:** `set(value)` — e.g., `setId(value)`, `setName(value)` +- **Null fields:** Getters return `null` for unset optional fields; they do not throw exceptions + diff --git a/paas/docs/SubReportComponent.md b/paas/docs/SubReportComponent.md index 0ac6625e..25c18a2f 100644 --- a/paas/docs/SubReportComponent.md +++ b/paas/docs/SubReportComponent.md @@ -17,7 +17,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportComponent | Name | Type | Description | Notes | @@ -113,7 +113,7 @@ `CRITICAL` | `MAJOR` | `MINOR` | `WARNING` | `INDETERMINATE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### History | Name | Type | Description | Notes | diff --git a/paas/docs/SubscriptionAddonId.md b/paas/docs/SubscriptionAddonId.md index f4bb02da..56e151cd 100644 --- a/paas/docs/SubscriptionAddonId.md +++ b/paas/docs/SubscriptionAddonId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SubscriptionDetails.md b/paas/docs/SubscriptionDetails.md index 936e14fd..f6be3270 100644 --- a/paas/docs/SubscriptionDetails.md +++ b/paas/docs/SubscriptionDetails.md @@ -39,7 +39,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### SubscriptionItems | Name | Type | Description | Notes | @@ -77,7 +77,7 @@ `FOREVER` | `ONCE` | `REPEATING` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SubscriptionEntry.md b/paas/docs/SubscriptionEntry.md index b4eaea31..1a6b1413 100644 --- a/paas/docs/SubscriptionEntry.md +++ b/paas/docs/SubscriptionEntry.md @@ -30,6 +30,10 @@ Subscription entry * `NUMBER_11` (value: `new BigDecimal("11")`) +* `NUMBER_12` (value: `new BigDecimal("12")`) + +* `NUMBER_13` (value: `new BigDecimal("13")`) + * `NUMBER_30` (value: `new BigDecimal("30")`) * `NUMBER_31` (value: `new BigDecimal("31")`) diff --git a/paas/docs/SubscriptionId.md b/paas/docs/SubscriptionId.md index a1ff7297..ffd5025c 100644 --- a/paas/docs/SubscriptionId.md +++ b/paas/docs/SubscriptionId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/SubscriptionPlanId.md b/paas/docs/SubscriptionPlanId.md index 5f4251d4..345e7a5c 100644 --- a/paas/docs/SubscriptionPlanId.md +++ b/paas/docs/SubscriptionPlanId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/TaskResult.md b/paas/docs/TaskResult.md index 9f87bdbf..ed0bbdd5 100644 --- a/paas/docs/TaskResult.md +++ b/paas/docs/TaskResult.md @@ -16,6 +16,67 @@ +## Subtypes + +#### CfReprocessingTaskResult *(jobType=`CF_REPROCESSING`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | CfReprocessingTaskFailure | | [optional] | + +#### DummyTaskResult *(jobType=`DUMMY`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| failure | DummyTaskFailure | | [optional] | + +#### ReportTaskResult *(jobType=`REPORT`)* +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| report | Report | | [optional] | + +## Referenced Types + +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. + +#### CfReprocessingTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| entityInfo | EntityInfo | | [optional] | + +#### DummyTaskFailure +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| error | String | | [optional] | +| number | Integer | | [optional] | +| failAlways | Boolean | | [optional] | + +#### Report +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | ReportId | | [optional] | +| createdTime | Long | Entity creation timestamp in milliseconds since Unix epoch | [optional] [readonly] | +| tenantId | TenantId | | | +| customerId | CustomerId | | [optional] | +| templateId | ReportTemplateId | | | +| format | TbReportFormat | | | +| name | String | | | +| userId | UserId | | | +| publicKey | String | | [optional] | +| ownerId | EntityId | JSON object with Customer or Tenant Id | [optional] [readonly] | +| _public | Boolean | | [optional] | + +#### EntityInfo +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| id | EntityId | JSON object with the entity Id. | [optional] | +| name | String | Entity Name | [optional] | + +#### TbReportFormat (enum) +`PDF` | `CSV` + +#### EntityType (enum) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) + --- ### Conventions diff --git a/paas/docs/TbImageDeleteResult.md b/paas/docs/TbImageDeleteResult.md index 7f368e5c..8ec0368b 100644 --- a/paas/docs/TbImageDeleteResult.md +++ b/paas/docs/TbImageDeleteResult.md @@ -15,7 +15,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### WhiteLabeling | Name | Type | Description | Notes | @@ -36,7 +36,7 @@ `LOGIN` | `GENERAL` | `MAIL_TEMPLATES` | `SELF_REGISTRATION` | `TERMS_OF_USE` | `PRIVACY_POLICY` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/TbResource.md b/paas/docs/TbResource.md index 46762a60..6af353b1 100644 --- a/paas/docs/TbResource.md +++ b/paas/docs/TbResource.md @@ -32,7 +32,7 @@ A JSON value representing the Resource. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ResourceType (enum) `LWM2_M_MODEL` | `JKS` | `PKCS_12` | `JS_MODULE` | `IMAGE` | `DASHBOARD` | `GENERAL` @@ -41,7 +41,7 @@ A JSON value representing the Resource. `IMAGE` | `SCADA_SYMBOL` | `EXTENSION` | `MODULE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/TbResourceDeleteResult.md b/paas/docs/TbResourceDeleteResult.md index 44d3a070..385339a7 100644 --- a/paas/docs/TbResourceDeleteResult.md +++ b/paas/docs/TbResourceDeleteResult.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityInfo | Name | Type | Description | Notes | @@ -23,7 +23,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/TbResourceExportData.md b/paas/docs/TbResourceExportData.md index 382bdd8e..c2a053ad 100644 --- a/paas/docs/TbResourceExportData.md +++ b/paas/docs/TbResourceExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/TbResourceId.md b/paas/docs/TbResourceId.md index 689736bf..99035ded 100644 --- a/paas/docs/TbResourceId.md +++ b/paas/docs/TbResourceId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/TbResourceInfo.md b/paas/docs/TbResourceInfo.md index 44629e12..3a5f6886 100644 --- a/paas/docs/TbResourceInfo.md +++ b/paas/docs/TbResourceInfo.md @@ -30,7 +30,7 @@ A JSON value representing the Resource Info. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ResourceType (enum) `LWM2_M_MODEL` | `JKS` | `PKCS_12` | `JS_MODULE` | `IMAGE` | `DASHBOARD` | `GENERAL` @@ -39,7 +39,7 @@ A JSON value representing the Resource Info. `IMAGE` | `SCADA_SYMBOL` | `EXTENSION` | `MODULE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/TbSecretDeleteResult.md b/paas/docs/TbSecretDeleteResult.md index 5f6815a7..fbcccb87 100644 --- a/paas/docs/TbSecretDeleteResult.md +++ b/paas/docs/TbSecretDeleteResult.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityInfo | Name | Type | Description | Notes | @@ -23,7 +23,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/TelemetryMappingConfiguration.md b/paas/docs/TelemetryMappingConfiguration.md index 1eed16d4..195d2525 100644 --- a/paas/docs/TelemetryMappingConfiguration.md +++ b/paas/docs/TelemetryMappingConfiguration.md @@ -36,7 +36,7 @@ | epmax | Long | | [optional] | #### TelemetryObserveStrategy (enum) -`SINGLE_0_ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` | `COMPOSITE_ALL_1_ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` | `COMPOSITE_BY_OBJECT_2_GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` +`SINGLE` | `COMPOSITE_ALL` | `COMPOSITE_BY_OBJECT` #### LwM2mVersion | Name | Type | Description | Notes | diff --git a/paas/docs/TelemetryObserveStrategy.md b/paas/docs/TelemetryObserveStrategy.md index aaef96a8..7bc1a6f7 100644 --- a/paas/docs/TelemetryObserveStrategy.md +++ b/paas/docs/TelemetryObserveStrategy.md @@ -3,14 +3,16 @@ `org.thingsboard.client.model.TelemetryObserveStrategy` +Observation strategy for telemetry. SINGLE (0): one resource equals one single observe request. COMPOSITE_ALL (1): all resources in one composite observe request. COMPOSITE_BY_OBJECT (2): grouped composite observe requests by object. + ## Enum Values -* `SINGLE_0_ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` (value: `"SINGLE (0): One resource equals one single observe request"`) +* `SINGLE` (value: `"SINGLE"`) -* `COMPOSITE_ALL_1_ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` (value: `"COMPOSITE_ALL (1): All resources in one composite observe request"`) +* `COMPOSITE_ALL` (value: `"COMPOSITE_ALL"`) -* `COMPOSITE_BY_OBJECT_2_GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` (value: `"COMPOSITE_BY_OBJECT (2): Grouped composite observe requests by object"`) +* `COMPOSITE_BY_OBJECT` (value: `"COMPOSITE_BY_OBJECT"`) diff --git a/paas/docs/Tenant.md b/paas/docs/Tenant.md index 86d6f703..86d522e6 100644 --- a/paas/docs/Tenant.md +++ b/paas/docs/Tenant.md @@ -35,7 +35,7 @@ A JSON value representing the tenant. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TenantAddonData | Name | Type | Description | Notes | @@ -63,7 +63,7 @@ A JSON value representing the tenant. | _default | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/TenantId.md b/paas/docs/TenantId.md index fd03a256..9b921dbc 100644 --- a/paas/docs/TenantId.md +++ b/paas/docs/TenantId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/TenantInfo.md b/paas/docs/TenantInfo.md index 755301aa..7b225945 100644 --- a/paas/docs/TenantInfo.md +++ b/paas/docs/TenantInfo.md @@ -34,7 +34,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TenantAddonData | Name | Type | Description | Notes | @@ -62,7 +62,7 @@ | _default | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/TenantProfile.md b/paas/docs/TenantProfile.md index d145d7bd..197c1e4c 100644 --- a/paas/docs/TenantProfile.md +++ b/paas/docs/TenantProfile.md @@ -21,7 +21,7 @@ A JSON value representing the tenant profile. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### TenantProfileData | Name | Type | Description | Notes | @@ -44,6 +44,8 @@ A JSON value representing the tenant profile. | maxDashboards | Long | | [optional] | | maxRuleChains | Long | | [optional] | | maxEdges | Long | | [optional] | +| maxAgents | Long | | [optional] | +| maxAgentApplications | Long | | [optional] | | maxResourcesInBytes | Long | | [optional] | | maxOtaPackagesInBytes | Long | | [optional] | | maxResourceSize | Long | | [optional] | @@ -107,6 +109,10 @@ A JSON value representing the tenant profile. | edgeEventRateLimitsPerEdge | String | | [optional] | | edgeUplinkMessagesRateLimits | String | | [optional] | | edgeUplinkMessagesRateLimitsPerEdge | String | | [optional] | +| agentEventRateLimits | String | | [optional] | +| agentEventRateLimitsPerAgent | String | | [optional] | +| agentLogChunkRateLimits | String | | [optional] | +| agentLogChunkRateLimitsPerAgent | String | | [optional] | | defaultStorageTtlDays | Integer | | [optional] | | alarmsTtlDays | Integer | | [optional] | | rpcTtlDays | Integer | | [optional] | @@ -144,7 +150,7 @@ A JSON value representing the tenant profile. | additionalInfo | com.fasterxml.jackson.databind.JsonNode | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### SubmitStrategy | Name | Type | Description | Notes | diff --git a/paas/docs/TenantProfileConfiguration.md b/paas/docs/TenantProfileConfiguration.md index 9485efe0..6bfa5540 100644 --- a/paas/docs/TenantProfileConfiguration.md +++ b/paas/docs/TenantProfileConfiguration.md @@ -23,6 +23,8 @@ | maxDashboards | Long | | [optional] | | maxRuleChains | Long | | [optional] | | maxEdges | Long | | [optional] | +| maxAgents | Long | | [optional] | +| maxAgentApplications | Long | | [optional] | | maxResourcesInBytes | Long | | [optional] | | maxOtaPackagesInBytes | Long | | [optional] | | maxResourceSize | Long | | [optional] | @@ -86,6 +88,10 @@ | edgeEventRateLimitsPerEdge | String | | [optional] | | edgeUplinkMessagesRateLimits | String | | [optional] | | edgeUplinkMessagesRateLimitsPerEdge | String | | [optional] | +| agentEventRateLimits | String | | [optional] | +| agentEventRateLimitsPerAgent | String | | [optional] | +| agentLogChunkRateLimits | String | | [optional] | +| agentLogChunkRateLimitsPerAgent | String | | [optional] | | defaultStorageTtlDays | Integer | | [optional] | | alarmsTtlDays | Integer | | [optional] | | rpcTtlDays | Integer | | [optional] | diff --git a/paas/docs/TenantProfileData.md b/paas/docs/TenantProfileData.md index 7b5ac57e..1e6fb35c 100644 --- a/paas/docs/TenantProfileData.md +++ b/paas/docs/TenantProfileData.md @@ -29,6 +29,8 @@ | maxDashboards | Long | | [optional] | | maxRuleChains | Long | | [optional] | | maxEdges | Long | | [optional] | +| maxAgents | Long | | [optional] | +| maxAgentApplications | Long | | [optional] | | maxResourcesInBytes | Long | | [optional] | | maxOtaPackagesInBytes | Long | | [optional] | | maxResourceSize | Long | | [optional] | @@ -92,6 +94,10 @@ | edgeEventRateLimitsPerEdge | String | | [optional] | | edgeUplinkMessagesRateLimits | String | | [optional] | | edgeUplinkMessagesRateLimitsPerEdge | String | | [optional] | +| agentEventRateLimits | String | | [optional] | +| agentEventRateLimitsPerAgent | String | | [optional] | +| agentLogChunkRateLimits | String | | [optional] | +| agentLogChunkRateLimitsPerAgent | String | | [optional] | | defaultStorageTtlDays | Integer | | [optional] | | alarmsTtlDays | Integer | | [optional] | | rpcTtlDays | Integer | | [optional] | diff --git a/paas/docs/TenantProfileId.md b/paas/docs/TenantProfileId.md index b957c0b1..5ea38793 100644 --- a/paas/docs/TenantProfileId.md +++ b/paas/docs/TenantProfileId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ThingsboardCredentialsExpiredResponse.md b/paas/docs/ThingsboardCredentialsExpiredResponse.md index 5f0b5443..79684627 100644 --- a/paas/docs/ThingsboardCredentialsExpiredResponse.md +++ b/paas/docs/ThingsboardCredentialsExpiredResponse.md @@ -24,7 +24,7 @@ `NUMBER_2` | `NUMBER_10` | `NUMBER_11` | `NUMBER_15` | `NUMBER_20` | `NUMBER_30` | `NUMBER_31` | `NUMBER_32` | `NUMBER_33` | `NUMBER_34` | … (16 values total) #### SubscriptionEntry (enum) -`NUMBER_1` | `NUMBER_2` | `NUMBER_3` | `NUMBER_4` | `NUMBER_5` | `NUMBER_6` | `NUMBER_7` | `NUMBER_8` | `NUMBER_9` | `NUMBER_10` | … (13 values total) +`NUMBER_1` | `NUMBER_2` | `NUMBER_3` | `NUMBER_4` | `NUMBER_5` | `NUMBER_6` | `NUMBER_7` | `NUMBER_8` | `NUMBER_9` | `NUMBER_10` | … (15 values total) #### SubscriptionExceptionErrorCode (enum) `NUMBER_1` | `NUMBER_2` | `NUMBER_3` | `NUMBER_4` | `NUMBER_5` | `NUMBER_6` diff --git a/paas/docs/ThingsboardErrorResponse.md b/paas/docs/ThingsboardErrorResponse.md index 96a90fa7..61d48090 100644 --- a/paas/docs/ThingsboardErrorResponse.md +++ b/paas/docs/ThingsboardErrorResponse.md @@ -23,7 +23,7 @@ `NUMBER_2` | `NUMBER_10` | `NUMBER_11` | `NUMBER_15` | `NUMBER_20` | `NUMBER_30` | `NUMBER_31` | `NUMBER_32` | `NUMBER_33` | `NUMBER_34` | … (16 values total) #### SubscriptionEntry (enum) -`NUMBER_1` | `NUMBER_2` | `NUMBER_3` | `NUMBER_4` | `NUMBER_5` | `NUMBER_6` | `NUMBER_7` | `NUMBER_8` | `NUMBER_9` | `NUMBER_10` | … (13 values total) +`NUMBER_1` | `NUMBER_2` | `NUMBER_3` | `NUMBER_4` | `NUMBER_5` | `NUMBER_6` | `NUMBER_7` | `NUMBER_8` | `NUMBER_9` | `NUMBER_10` | … (15 values total) #### SubscriptionExceptionErrorCode (enum) `NUMBER_1` | `NUMBER_2` | `NUMBER_3` | `NUMBER_4` | `NUMBER_5` | `NUMBER_6` diff --git a/paas/docs/TimeseriesChartComponent.md b/paas/docs/TimeseriesChartComponent.md index 2c68b8df..30f6c3ad 100644 --- a/paas/docs/TimeseriesChartComponent.md +++ b/paas/docs/TimeseriesChartComponent.md @@ -27,7 +27,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportComponent | Name | Type | Description | Notes | @@ -435,7 +435,7 @@ | color | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### VerticalAlignment (enum) `BOTTOM` | `TOP` | `MIDDLE` diff --git a/paas/docs/TimeseriesTableComponent.md b/paas/docs/TimeseriesTableComponent.md index f1397394..1e82e7b8 100644 --- a/paas/docs/TimeseriesTableComponent.md +++ b/paas/docs/TimeseriesTableComponent.md @@ -29,7 +29,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ReportComponent | Name | Type | Description | Notes | @@ -262,7 +262,7 @@ | color | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### LineSeriesStepType (enum) `START` | `MIDDLE` | `END` diff --git a/paas/docs/User.md b/paas/docs/User.md index 0a51e20d..c792274c 100644 --- a/paas/docs/User.md +++ b/paas/docs/User.md @@ -28,7 +28,7 @@ A JSON value representing the User. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Authority (enum) `SYS_ADMIN` | `TENANT_ADMIN` | `CUSTOMER_USER` | `BILLING_ADMIN` | `BILLING_SERVICE` | `REFRESH_TOKEN` | `PRE_VERIFICATION_TOKEN` | `MFA_CONFIGURATION_TOKEN` @@ -39,7 +39,7 @@ A JSON value representing the User. | id | UUID | string | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/UserEmailInfo.md b/paas/docs/UserEmailInfo.md index 30247d3e..cc4e46ae 100644 --- a/paas/docs/UserEmailInfo.md +++ b/paas/docs/UserEmailInfo.md @@ -16,10 +16,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/UserExportData.md b/paas/docs/UserExportData.md index 788a8ae3..cca8c913 100644 --- a/paas/docs/UserExportData.md +++ b/paas/docs/UserExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/UserId.md b/paas/docs/UserId.md index 19c67b34..7981fbc0 100644 --- a/paas/docs/UserId.md +++ b/paas/docs/UserId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/UserInfo.md b/paas/docs/UserInfo.md index 52b54fdf..999fc52a 100644 --- a/paas/docs/UserInfo.md +++ b/paas/docs/UserInfo.md @@ -28,7 +28,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### Authority (enum) `SYS_ADMIN` | `TENANT_ADMIN` | `CUSTOMER_USER` | `BILLING_ADMIN` | `BILLING_SERVICE` | `REFRESH_TOKEN` | `PRE_VERIFICATION_TOKEN` | `MFA_CONFIGURATION_TOKEN` @@ -45,7 +45,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/UserMobileInfo.md b/paas/docs/UserMobileInfo.md index c235df36..b861252b 100644 --- a/paas/docs/UserMobileInfo.md +++ b/paas/docs/UserMobileInfo.md @@ -17,7 +17,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### User | Name | Type | Description | Notes | @@ -67,7 +67,7 @@ | id | UUID | string | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/VersionCreateRequest.md b/paas/docs/VersionCreateRequest.md index 69baee8b..6b55d31b 100644 --- a/paas/docs/VersionCreateRequest.md +++ b/paas/docs/VersionCreateRequest.md @@ -31,7 +31,7 @@ Request for creating a version ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### VersionCreateRequestType (enum) `SINGLE_ENTITY` | `COMPLEX` @@ -63,7 +63,7 @@ Request for creating a version | saveGroupEntities | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/VersionLoadRequest.md b/paas/docs/VersionLoadRequest.md index 71db56dc..0d82a599 100644 --- a/paas/docs/VersionLoadRequest.md +++ b/paas/docs/VersionLoadRequest.md @@ -31,7 +31,7 @@ Request for loading a version ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### VersionLoadRequestType (enum) `SINGLE_ENTITY` | `ENTITY_TYPE` @@ -61,7 +61,7 @@ Request for loading a version | autoGenerateIntegrationKey | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/VersionLoadResult.md b/paas/docs/VersionLoadResult.md index 39ec20d9..437b6d39 100644 --- a/paas/docs/VersionLoadResult.md +++ b/paas/docs/VersionLoadResult.md @@ -15,7 +15,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityTypeLoadResult | Name | Type | Description | Notes | @@ -37,7 +37,7 @@ | message | String | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/VersionedEntityInfo.md b/paas/docs/VersionedEntityInfo.md index f46dce84..18ce5f6e 100644 --- a/paas/docs/VersionedEntityInfo.md +++ b/paas/docs/VersionedEntityInfo.md @@ -14,10 +14,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/WebSelfRegistrationParams.md b/paas/docs/WebSelfRegistrationParams.md index 7c0f1ce1..46300b1c 100644 --- a/paas/docs/WebSelfRegistrationParams.md +++ b/paas/docs/WebSelfRegistrationParams.md @@ -17,7 +17,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### SelfRegistrationParams | Name | Type | Description | Notes | @@ -108,7 +108,7 @@ | id | UUID | string | | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### SignUpFieldId (enum) `EMAIL` | `PASSWORD` | `REPEAT_PASSWORD` | `FIRST_NAME` | `LAST_NAME` | `PHONE` | `COUNTRY` | `CITY` | `STATE` | `ZIP` | … (12 values total) diff --git a/paas/docs/WhiteLabeling.md b/paas/docs/WhiteLabeling.md index eab546c2..67417c41 100644 --- a/paas/docs/WhiteLabeling.md +++ b/paas/docs/WhiteLabeling.md @@ -18,13 +18,13 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### WhiteLabelingType (enum) `LOGIN` | `GENERAL` | `MAIL_TEMPLATES` | `SELF_REGISTRATION` | `TERMS_OF_USE` | `PRIVACY_POLICY` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/WhiteLabelingParams.md b/paas/docs/WhiteLabelingParams.md index 96bd2438..1b9a5338 100644 --- a/paas/docs/WhiteLabelingParams.md +++ b/paas/docs/WhiteLabelingParams.md @@ -15,6 +15,7 @@ A JSON value representing the white labeling configuration | **appTitle** | **String** | White-labeled name of the platform | [optional] | | **favicon** | **Favicon** | JSON object that contains website icon url and type | [optional] | | **paletteSettings** | **PaletteSettings** | Complex JSON that describes structure of the Angular Material Palette. See [theming](https://material.angular.io/guide/theming) for more details | [optional] | +| **primaryColorPanels** | **Boolean** | Whether primary-color panels (top toolbar, side navigation, dialog and entity-details headers) use the primary palette color as background. When false, they render on a white background | [optional] | | **helpLinkBaseUrl** | **String** | Base URL for help link | [optional] | | **uiHelpBaseUrl** | **String** | Base URL for the repository with the UI help components (markdown) | [optional] | | **enableHelpLinks** | **Boolean** | Enable or Disable help links | [optional] | diff --git a/paas/docs/WidgetBundleInfo.md b/paas/docs/WidgetBundleInfo.md index 2657aae2..98636b85 100644 --- a/paas/docs/WidgetBundleInfo.md +++ b/paas/docs/WidgetBundleInfo.md @@ -14,10 +14,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/WidgetType.md b/paas/docs/WidgetType.md index b4f73db8..00825f86 100644 --- a/paas/docs/WidgetType.md +++ b/paas/docs/WidgetType.md @@ -21,10 +21,10 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/WidgetTypeDetails.md b/paas/docs/WidgetTypeDetails.md index 6a872b94..5f0d8516 100644 --- a/paas/docs/WidgetTypeDetails.md +++ b/paas/docs/WidgetTypeDetails.md @@ -27,7 +27,7 @@ A JSON value representing the Widget Type Details. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### ResourceExportData | Name | Type | Description | Notes | @@ -51,7 +51,7 @@ A JSON value representing the Widget Type Details. `IMAGE` | `SCADA_SYMBOL` | `EXTENSION` | `MODULE` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/WidgetTypeExportData.md b/paas/docs/WidgetTypeExportData.md index 12cd5fe0..3f4aefd0 100644 --- a/paas/docs/WidgetTypeExportData.md +++ b/paas/docs/WidgetTypeExportData.md @@ -14,7 +14,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -71,10 +71,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/WidgetTypeId.md b/paas/docs/WidgetTypeId.md index 698d9281..705b4873 100644 --- a/paas/docs/WidgetTypeId.md +++ b/paas/docs/WidgetTypeId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/WidgetTypeInfo.md b/paas/docs/WidgetTypeInfo.md index 369cf446..dc34db79 100644 --- a/paas/docs/WidgetTypeInfo.md +++ b/paas/docs/WidgetTypeInfo.md @@ -25,7 +25,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### WidgetBundleInfo | Name | Type | Description | Notes | @@ -34,7 +34,7 @@ | name | String | Entity Name | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/WidgetsBundle.md b/paas/docs/WidgetsBundle.md index ce96a4ed..30a25414 100644 --- a/paas/docs/WidgetsBundle.md +++ b/paas/docs/WidgetsBundle.md @@ -25,10 +25,10 @@ A JSON value representing the Widget Bundle. ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/WidgetsBundleExportData.md b/paas/docs/WidgetsBundleExportData.md index 6b6316ad..ba2af431 100644 --- a/paas/docs/WidgetsBundleExportData.md +++ b/paas/docs/WidgetsBundleExportData.md @@ -16,7 +16,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### EntityExportData | Name | Type | Description | Notes | @@ -73,10 +73,10 @@ | debugMode | Boolean | | [optional] | #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationTypeGroup (enum) -`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` +`COMMON` | `DASHBOARD` | `FROM_ENTITY_GROUP` | `RULE_CHAIN` | `RULE_NODE` | `EDGE` | `EDGE_AUTO_ASSIGN_RULE_CHAIN` | `AGENT` #### CalculatedFieldType (enum) `SIMPLE` | `SCRIPT` | `GEOFENCING` | `ALARM` | `PROPAGATION` | `RELATED_ENTITIES_AGGREGATION` | `ENTITY_AGGREGATION` diff --git a/paas/docs/WidgetsBundleId.md b/paas/docs/WidgetsBundleId.md index 81c6605f..0e38b067 100644 --- a/paas/docs/WidgetsBundleId.md +++ b/paas/docs/WidgetsBundleId.md @@ -17,7 +17,7 @@ > **EntityId**: `{entityType: EntityType, id: UUID}` — base type for all entity identifiers. #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) --- diff --git a/paas/docs/ZoneGroupConfiguration.md b/paas/docs/ZoneGroupConfiguration.md index 387a1267..294eefbb 100644 --- a/paas/docs/ZoneGroupConfiguration.md +++ b/paas/docs/ZoneGroupConfiguration.md @@ -19,7 +19,7 @@ ## Referenced Types -> **EntityId types** (`AdminSettingsId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. +> **EntityId types** (`AdminSettingsId`, `AgentAppEventId`, `AgentAppProfileId`, `AgentAppUnitId`, `AgentApplicationId`, `AgentBulkActionId`, `AgentId`, `AgentProfileId`, `AiModelId`, `AlarmId`, `ApiKeyId`, `ApiUsageStateId`, `AssetId`, `AssetProfileId`, `BillingCustomerId`, `BlobEntityId`, `CalculatedFieldId`, `ConverterId`, `CouponId`, `CustomerId`, `DashboardId`, `DeviceId`, `DeviceProfileId`, `DomainId`, `EdgeId`, `EntityGroupId`, `EntityViewId`, `GroupPermissionId`, `IntegrationId`, `JobId`, `MobileAppBundleId`, `MobileAppId`, `NotificationId`, `NotificationRequestId`, `NotificationRuleId`, `NotificationTargetId`, `NotificationTemplateId`, `OAuth2ClientId`, `OtaPackageId`, `ProductId`, `QueueId`, `QueueStatsId`, `ReportId`, `ReportTemplateId`, `RoleId`, `RpcId`, `RuleChainId`, `RuleNodeId`, `SchedulerEventId`, `SecretId`, `SubscriptionAddonId`, `SubscriptionId`, `SubscriptionPlanId`, `TbResourceId`, `TenantId`, `TenantProfileId`, `UserId`, `WidgetTypeId`, `WidgetsBundleId`, etc.): `{entityType: EntityType, id: UUID}` — all EntityId subtypes share this structure. #### CfArgumentDynamicSourceConfiguration | Name | Type | Description | Notes | @@ -41,7 +41,7 @@ `FROM` | `TO` #### EntityType (enum) -`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (52 values total) +`TENANT` | `CUSTOMER` | `USER` | `DASHBOARD` | `ASSET` | `DEVICE` | `ALARM` | `ENTITY_GROUP` | `CONVERTER` | `INTEGRATION` | … (59 values total) #### RelationPathLevel | Name | Type | Description | Notes | diff --git a/paas/spec/openapi.json b/paas/spec/openapi.json index a008732d..5d4a0199 100644 --- a/paas/spec/openapi.json +++ b/paas/spec/openapi.json @@ -12,11 +12,11 @@ "name": "Apache License Version 2.0", "url": "https://github.com/thingsboard/thingsboard/blob/master/LICENSE" }, - "version": "4.3.1.4.0PAAS" + "version": "4.4.0PAAS" }, "servers": [ { - "url": "http://localhost:35943", + "url": "http://localhost:35993", "description": "Generated server url" } ], @@ -25,6 +25,30 @@ "name": "admin-controller", "description": "Admin Controller" }, + { + "name": "agent-app-profile-controller", + "description": "Agent App Profile Controller" + }, + { + "name": "agent-app-template-controller", + "description": "Agent App Template Controller" + }, + { + "name": "agent-application-controller", + "description": "Agent Application Controller" + }, + { + "name": "agent-bulk-action-controller", + "description": "Agent Bulk Action Controller" + }, + { + "name": "agent-controller", + "description": "Agent Controller" + }, + { + "name": "agent-profile-controller", + "description": "Agent Profile Controller" + }, { "name": "ai-chat-controller", "description": "Ai Chat Controller" @@ -4189,30 +4213,31 @@ ] } }, - "/api/ai/chats": { + "/api/agent/app/profile": { "post": { "tags": [ - "ai-chat-controller" + "agent-app-profile-controller" ], - "summary": "createChat", - "operationId": "createChat", + "summary": "Create or Update Agent Application Profile (saveAgentAppProfile)", + "description": "Creates or updates an agent application profile.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveAgentAppProfile", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/AgentAppProfile" } } }, "required": true }, "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/AgentAppProfile" } } } @@ -4348,188 +4373,35 @@ ] } }, - "/api/ai/chats/{chatId}": { - "delete": { + "/api/agent/app/profile/info/{profileId}": { + "get": { "tags": [ - "ai-chat-controller" + "agent-app-profile-controller" ], - "summary": "deleteChat", - "operationId": "deleteChat", + "summary": "Get Agent Application Profile Info (getAgentAppProfileInfoById)", + "description": "Fetch the Agent Application Profile Info by Id. Readable by any tenant admin without AGENT_APP_PROFILE permission, so agent/application screens can resolve the linked profile. Returns the full profile, config and arguments included - an application profile carries deployment configuration rather than credentials, so it is not gated like other profiles.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentAppProfileInfoById", "parameters": [ { - "name": "chatId", + "name": "profileId", "in": "path", + "description": "Profile Id", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "429": { - "description": "Too Many Requests", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + "$ref": "#/components/schemas/AgentAppProfileInfo" } } } - } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] - }, - "patch": { - "tags": [ - "ai-chat-controller" - ], - "summary": "updateChat", - "operationId": "updateChat", - "parameters": [ - { - "name": "chatId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" }, "400": { "description": "Bad Request", @@ -4662,21 +4534,40 @@ ] } }, - "/api/ai/chats/{chatId}/messages": { - "get": { + "/api/agent/app/profile/materialize/{appType}/{templateVersion}": { + "post": { "tags": [ - "ai-chat-controller" + "agent-app-profile-controller" ], - "summary": "getChatMessages", - "operationId": "getChatMessages", + "summary": "Create Agent Application Profile from template (materializeAgentAppProfile)", + "description": "Creates an agent application profile from the default configuration of the template with the given app type and version. Used to materialize a predefined (virtual) profile shown in the UI into a real profile on first use. If a profile with the given app type and template version already exists, the existing profile is returned (the oldest one by created time) instead of creating a new one.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "materializeAgentAppProfile", "parameters": [ { - "name": "chatId", + "name": "appType", "in": "path", + "description": "Application type, e.g. 'EDGE', 'GATEWAY', 'GENERIC'", "required": true, "schema": { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/AgentApplicationType" + } + }, + { + "name": "templateVersion", + "in": "path", + "description": "The template version to materialize (e.g. '4.3.1.2EDGEPE')", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "composeType", + "in": "query", + "description": "The compose type to select from the template (e.g. 'in_memory', 'kafka'). Defaults to the template's first compose type.", + "required": false, + "schema": { + "type": "string" } } ], @@ -4686,7 +4577,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/AgentAppProfile" } } } @@ -4702,7 +4593,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -4820,60 +4711,34 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/agent/app/profile/{profileId}": { + "get": { "tags": [ - "ai-chat-controller" + "agent-app-profile-controller" ], - "summary": "sendChatMessage", - "operationId": "sendChatMessage", + "summary": "Get Agent Application Profile (getAgentAppProfileById)", + "description": "Fetch the Agent Application Profile by Id.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentAppProfileById", "parameters": [ { - "name": "chatId", + "name": "profileId", "in": "path", + "description": "Profile Id", "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "X-Authorization", - "in": "header", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "Accept-Language", - "in": "header", - "required": false, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { - "text/event-stream": { + "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ServerSentEventString" - } + "$ref": "#/components/schemas/AgentAppProfile" } } } @@ -4889,7 +4754,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -5007,35 +4872,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/ai/chats/{chatType}": { - "get": { + }, + "delete": { "tags": [ - "ai-chat-controller" + "agent-app-profile-controller" ], - "summary": "listChats", - "operationId": "listChats", + "summary": "Delete Agent Application Profile (deleteAgentAppProfile)", + "description": "Deletes the agent application profile. Cannot delete if referenced by applications.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "deleteAgentAppProfile", "parameters": [ { - "name": "chatType", + "name": "profileId", "in": "path", + "description": "Profile Id", "required": true, "schema": { - "$ref": "#/components/schemas/ChatType" + "type": "string" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -5168,49 +5026,38 @@ ] } }, - "/api/ai/devices/{deviceId}/dashboard": { - "post": { + "/api/agent/app/profiles": { + "get": { "tags": [ - "ai-device-dashboard-controller" + "agent-app-profile-controller" ], - "summary": "generateDashboard", - "operationId": "generateDashboard", + "summary": "Get Agent Application Profiles By Ids (getAgentAppProfilesByIds)", + "description": "Requested agent application profiles must be owned by tenant which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAgentAppProfilesByIds", "parameters": [ { - "name": "deviceId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "X-Authorization", - "in": "header", + "name": "agentAppProfileIds", + "in": "query", + "description": "A list of agent application profile ids, separated by comma ','", "required": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentAppProfile" + } } } } @@ -5226,7 +5073,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -5346,80 +5193,71 @@ ] } }, - "/api/ai/model": { - "get": { + "/api/agent/app/profiles/merge/{templateVersion}/preview": { + "post": { "tags": [ - "ai-model-controller" + "agent-app-profile-controller" ], - "summary": "Get AI models (getAiModels)", - "description": "Returns a page of AI models. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getAiModels", + "summary": "Merge template into application profile for preview (mergeAgentAppProfileForPreview)", + "description": "Merges the specified template into an agent application profile for preview purposes. The compose type determines which compose configuration variant from the template is used. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "mergeAgentAppProfileForPreview", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "templateVersion", + "in": "path", + "description": "The template version to merge (e.g. '4.3.1.2EDGEPE')", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string" } }, { - "name": "textSearch", + "name": "composeType", "in": "query", - "description": "The case insensitive 'substring' filter based on the AI model name, provider and model ID.", + "description": "The compose type to select from the template (e.g. 'monolith', 'microservices')", "required": false, "schema": { "type": "string" } }, { - "name": "sortProperty", + "name": "actionType", "in": "query", - "description": "Property of entity to sort by", + "description": "The event action this merge previews (e.g. UPGRADE). Drives action-specific merge rules.", "required": false, "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "provider", - "modelId" - ] + "$ref": "#/components/schemas/AgentAppEventActionType" } }, { - "name": "sortOrder", + "name": "setHostValues", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "Whether to auto-fill host values (e.g. CLOUD_RPC_HOST) from the platform base URL. Should be true only for the install preview; keep false when previewing the saved compose of an existing profile to preserve user-configured host values.", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "boolean", + "default": false } } ], + "requestBody": { + "description": "Agent application profile to merge template with", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentAppProfile" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAiModel" + "$ref": "#/components/schemas/AgentAppProfile" } } } @@ -5435,7 +5273,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -5553,31 +5391,37 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/agent/app/profiles/{appType}": { + "get": { "tags": [ - "ai-model-controller" + "agent-app-profile-controller" ], - "summary": "Create or update AI model (saveAiModel)", - "description": "Creates or updates an AI model record.\n\n• **Create:** Omit the `id` to create a new record. The platform assigns a UUID to the new record and returns it in the `id` field of the response.\n\n• **Update:** Include an existing `id` to modify that record. If no matching record exists, the API responds with **404 Not Found**.\n\nTenant ID for the AI model will be taken from the authenticated user making the request, regardless of any value provided in the request body.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "saveAiModel", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AiModel" - } + "summary": "Get Agent Application Profiles by app type (getAgentAppProfilesByAppType)", + "description": "Returns a list of agent application profiles filtered by application type.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentAppProfilesByAppType", + "parameters": [ + { + "name": "appType", + "in": "path", + "description": "Application type, e.g. 'EDGE', 'GATEWAY', 'GENERIC'", + "required": true, + "schema": { + "$ref": "#/components/schemas/AgentApplicationType" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiModel" + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentAppProfileInfo" + } } } } @@ -5593,7 +5437,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -5713,31 +5557,78 @@ ] } }, - "/api/ai/model/chat": { - "post": { + "/api/tenant/agent/app/profiles": { + "get": { "tags": [ - "ai-model-controller" + "agent-app-profile-controller" ], - "summary": "Send request to AI chat model (sendChatRequest)", - "description": "Submits a single prompt - made up of an optional system message and a required user message - to the specified AI chat model and returns either the generated answer or an error envelope.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "sendChatRequest", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TbChatRequest" - } + "summary": "Get Tenant Agent Application Profiles (getTenantAgentAppProfiles)", + "description": "Returns a page of agent application profiles owned by tenant.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getTenantAgentAppProfiles", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "required": true - }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Optional search text", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbChatResponse" + "$ref": "#/components/schemas/PageDataAgentAppProfile" } } } @@ -5753,7 +5644,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -5873,25 +5764,32 @@ ] } }, - "/api/ai/model/{modelUuid}": { + "/api/agent/app/template/{appType}/{configType}/latest": { "get": { "tags": [ - "ai-model-controller" + "agent-app-template-controller" ], - "summary": "Get AI model by ID (getAiModelById)", - "description": "Fetches an AI model record by its `id`.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getAiModelById", + "summary": "Get Agent App Template (getLatestAgentAppTemplateByType)", + "description": "Fetch the latest Agent App Template object for the given app type and config type.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getLatestAgentAppTemplateByAppTypeAndConfigType", "parameters": [ { - "name": "modelUuid", + "name": "appType", "in": "path", - "description": "ID of the AI model record", + "description": "A string value representing the agent application type, e.g. 'EDGE', 'GATEWAY'", "required": true, "schema": { - "type": "string", - "format": "uuid" - }, - "example": "de7900d4-30e2-11f0-9cd2-0242ac120002" + "$ref": "#/components/schemas/AgentApplicationType" + } + }, + { + "name": "configType", + "in": "path", + "description": "A string value representing the agent configuration type, e.g. 'DOCKER_COMPOSE'", + "required": true, + "schema": { + "$ref": "#/components/schemas/AgentAppConfigType" + } } ], "responses": { @@ -5900,7 +5798,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiModel" + "$ref": "#/components/schemas/AgentAppTemplate" } } } @@ -6034,25 +5932,43 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/agent/app/template/{appType}/{configType}/version/{currentVersion}": { + "get": { "tags": [ - "ai-model-controller" + "agent-app-template-controller" ], - "summary": "Delete AI model by ID (deleteAiModelById)", - "description": "Deletes the AI model record by its `id`. If a record with the specified `id` exists, the record is deleted and the endpoint returns `true`. If no such record exists, the endpoint returns `false`.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "deleteAiModelById", + "summary": "Get Agent App Template by current version (getAgentAppTemplateByCurrentVersion)", + "description": "Fetch the Agent App Template object based on the provided app type, config type, and current version. Matches the version exactly, including a floating tag used as a version such as the gateway 'latest' tag.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentAppTemplateByCurrentVersion", "parameters": [ { - "name": "modelUuid", + "name": "appType", "in": "path", - "description": "ID of the AI model record", + "description": "A string value representing the agent application type, e.g. 'EDGE', 'GATEWAY'", "required": true, "schema": { - "type": "string", - "format": "uuid" - }, - "example": "de7900d4-30e2-11f0-9cd2-0242ac120002" + "$ref": "#/components/schemas/AgentApplicationType" + } + }, + { + "name": "configType", + "in": "path", + "description": "A string value representing the agent configuration type, e.g. 'DOCKER_COMPOSE'", + "required": true, + "schema": { + "$ref": "#/components/schemas/AgentAppConfigType" + } + }, + { + "name": "currentVersion", + "in": "path", + "description": "A string value representing the current version of the template, e.g. '1.0.0'", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -6061,7 +5977,7 @@ "content": { "application/json": { "schema": { - "type": "boolean" + "$ref": "#/components/schemas/AgentAppTemplate" } } } @@ -6197,20 +6113,24 @@ ] } }, - "/api/ai/solution/infos": { + "/api/agent/app/templates": { "get": { "tags": [ - "ai-solution-controller" + "agent-app-template-controller" ], - "summary": "getSolutions", - "operationId": "getSolutions", + "summary": "Get all Agent App Templates (getAgentAppTemplates)", + "description": "Returns a list of all agent app templates available for the current tenant.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentAppTemplates", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentAppTemplate" + } } } } @@ -6346,20 +6266,44 @@ ] } }, - "/api/ai/solution/start": { - "post": { + "/api/agent/app/templates/{appType}/{configType}": { + "get": { "tags": [ - "ai-solution-controller" + "agent-app-template-controller" + ], + "summary": "Get Agent App Templates by type (getAgentAppTemplatesByAppType)", + "description": "Returns a list of agent app templates filtered by application type and config type.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentAppTemplatesByAppType", + "parameters": [ + { + "name": "appType", + "in": "path", + "description": "A string value representing the agent application type, e.g. 'EDGE', 'GATEWAY'", + "required": true, + "schema": { + "$ref": "#/components/schemas/AgentApplicationType" + } + }, + { + "name": "configType", + "in": "path", + "description": "A string value representing the agent configuration type, e.g. 'DOCKER_COMPOSE'", + "required": true, + "schema": { + "$ref": "#/components/schemas/AgentAppConfigType" + } + } ], - "summary": "startNew", - "operationId": "startNew", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentAppTemplate" + } } } } @@ -6375,7 +6319,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -6495,31 +6439,193 @@ ] } }, - "/api/ai/solution/{solutionId}": { - "get": { + "/api/agent/app": { + "put": { "tags": [ - "ai-solution-controller" + "agent-application-controller" ], - "summary": "getSolution", - "operationId": "getSolution", - "parameters": [ - { - "name": "solutionId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Update Agent Application (saveAgentApplication)", + "description": "Updates the Agent Application.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "updateAgentApplication", + "requestBody": { + "description": "A JSON value representing the agent application.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentApplication" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentApplication" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/agent/app/event": { + "post": { + "tags": [ + "agent-application-controller" ], + "summary": "Install Agent Application (installAgentApp)", + "description": "Creates a new agent application and an INSTALL event in a single operation. Returns both the created application and the INSTALL event so the caller can open a progress view without a second round-trip. The request body must include the application object.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "installAgentApp", + "requestBody": { + "description": "A JSON value representing the install event request with the application.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentAppEventRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/AgentAppInstallResponse" } } } @@ -6535,7 +6641,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -6653,27 +6759,37 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/agent/app/event/{agentAppEventId}": { + "get": { "tags": [ - "ai-solution-controller" + "agent-application-controller" ], - "summary": "deleteSolution", - "operationId": "deleteSolution", + "summary": "Get Agent Application Event (getAgentAppEventById)", + "description": "Fetches a single agent application event by id. Works for orphan events whose application has been deleted (application_id is nullable).\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentAppEventById", "parameters": [ { - "name": "solutionId", + "name": "agentAppEventId", "in": "path", + "description": "A string value representing the agent app event id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentAppEvent" + } + } + } }, "400": { "description": "Bad Request", @@ -6806,21 +6922,22 @@ ] } }, - "/api/ai/solution/{solutionId}/create": { - "post": { + "/api/agent/app/managedRelatedEntities/{entityType}": { + "get": { "tags": [ - "ai-solution-controller" + "agent-application-controller" ], - "summary": "createSolution", - "operationId": "createSolution", + "summary": "Get Managed Related Entity Ids (getManagedRelatedEntityIds)", + "description": "Returns the ids of entities of the given type that are already linked to an agent application.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getManagedRelatedEntityIds", "parameters": [ { - "name": "solutionId", + "name": "entityType", "in": "path", + "description": "Related entity type (EDGE or DEVICE)", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -6830,7 +6947,188 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AdminSettingsId" + }, + { + "$ref": "#/components/schemas/AgentAppEventId" + }, + { + "$ref": "#/components/schemas/AgentAppProfileId" + }, + { + "$ref": "#/components/schemas/AgentAppUnitId" + }, + { + "$ref": "#/components/schemas/AgentApplicationId" + }, + { + "$ref": "#/components/schemas/AgentBulkActionId" + }, + { + "$ref": "#/components/schemas/AgentId" + }, + { + "$ref": "#/components/schemas/AgentProfileId" + }, + { + "$ref": "#/components/schemas/AiModelId" + }, + { + "$ref": "#/components/schemas/AlarmId" + }, + { + "$ref": "#/components/schemas/ApiKeyId" + }, + { + "$ref": "#/components/schemas/ApiUsageStateId" + }, + { + "$ref": "#/components/schemas/AssetId" + }, + { + "$ref": "#/components/schemas/AssetProfileId" + }, + { + "$ref": "#/components/schemas/BillingCustomerId" + }, + { + "$ref": "#/components/schemas/BlobEntityId" + }, + { + "$ref": "#/components/schemas/CalculatedFieldId" + }, + { + "$ref": "#/components/schemas/ConverterId" + }, + { + "$ref": "#/components/schemas/CouponId" + }, + { + "$ref": "#/components/schemas/CustomerId" + }, + { + "$ref": "#/components/schemas/DashboardId" + }, + { + "$ref": "#/components/schemas/DeviceId" + }, + { + "$ref": "#/components/schemas/DeviceProfileId" + }, + { + "$ref": "#/components/schemas/DomainId" + }, + { + "$ref": "#/components/schemas/EdgeId" + }, + { + "$ref": "#/components/schemas/EntityGroupId" + }, + { + "$ref": "#/components/schemas/EntityViewId" + }, + { + "$ref": "#/components/schemas/GroupPermissionId" + }, + { + "$ref": "#/components/schemas/IntegrationId" + }, + { + "$ref": "#/components/schemas/JobId" + }, + { + "$ref": "#/components/schemas/MobileAppBundleId" + }, + { + "$ref": "#/components/schemas/MobileAppId" + }, + { + "$ref": "#/components/schemas/NotificationId" + }, + { + "$ref": "#/components/schemas/NotificationRequestId" + }, + { + "$ref": "#/components/schemas/NotificationRuleId" + }, + { + "$ref": "#/components/schemas/NotificationTargetId" + }, + { + "$ref": "#/components/schemas/NotificationTemplateId" + }, + { + "$ref": "#/components/schemas/OAuth2ClientId" + }, + { + "$ref": "#/components/schemas/OtaPackageId" + }, + { + "$ref": "#/components/schemas/ProductId" + }, + { + "$ref": "#/components/schemas/QueueId" + }, + { + "$ref": "#/components/schemas/QueueStatsId" + }, + { + "$ref": "#/components/schemas/ReportId" + }, + { + "$ref": "#/components/schemas/ReportTemplateId" + }, + { + "$ref": "#/components/schemas/RoleId" + }, + { + "$ref": "#/components/schemas/RpcId" + }, + { + "$ref": "#/components/schemas/RuleChainId" + }, + { + "$ref": "#/components/schemas/RuleNodeId" + }, + { + "$ref": "#/components/schemas/SchedulerEventId" + }, + { + "$ref": "#/components/schemas/SecretId" + }, + { + "$ref": "#/components/schemas/SubscriptionAddonId" + }, + { + "$ref": "#/components/schemas/SubscriptionId" + }, + { + "$ref": "#/components/schemas/SubscriptionPlanId" + }, + { + "$ref": "#/components/schemas/TbResourceId" + }, + { + "$ref": "#/components/schemas/TenantId" + }, + { + "$ref": "#/components/schemas/TenantProfileId" + }, + { + "$ref": "#/components/schemas/UserId" + }, + { + "$ref": "#/components/schemas/WidgetTypeId" + }, + { + "$ref": "#/components/schemas/WidgetsBundleId" + } + ] + } } } } @@ -6846,7 +7144,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -6966,39 +7264,97 @@ ] } }, - "/api/ai/solution/{solutionId}/install": { + "/api/agent/app/merge/{templateVersion}/preview": { "post": { "tags": [ - "ai-solution-controller" + "agent-application-controller" ], - "summary": "installSolution", - "operationId": "installSolution", + "summary": "Merge template into application for preview (mergeAgentApplicationForPreview)", + "description": "Merges the specified template into an agent application for preview purposes. If no application is provided in the body, a new one is created from the template. The compose type determines which compose configuration variant from the template is used. Optionally provide relatedEntityType and relatedEntityId to auto-fill entity credentials (Edge routing key/secret or Gateway access token) into the compose.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "mergeAgentApplicationForPreview", "parameters": [ { - "name": "solutionId", + "name": "templateVersion", "in": "path", + "description": "The template version to merge (e.g. '4.3.1.2EDGEPE')", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "name": "X-Authorization", - "in": "header", - "required": true, + "name": "appType", + "in": "query", + "description": "Application type (EDGE, GATEWAY, GENERIC). Required when no application body is supplied.", + "required": false, + "schema": { + "$ref": "#/components/schemas/AgentApplicationType" + } + }, + { + "name": "composeType", + "in": "query", + "description": "The compose type to select from the template (e.g. 'monolith', 'microservices')", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "actionType", + "in": "query", + "description": "The event action this merge previews (e.g. UPGRADE). Drives action-specific merge rules.", + "required": false, + "schema": { + "$ref": "#/components/schemas/AgentAppEventActionType" + } + }, + { + "name": "setHostValues", + "in": "query", + "description": "Whether to auto-fill host values (e.g. CLOUD_RPC_HOST) from the platform base URL. Should be true only for the install preview; keep false when previewing the saved compose of an existing application to preserve user-configured host values.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "relatedEntityType", + "in": "query", + "description": "Related entity type (EDGE or DEVICE)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "relatedEntityId", + "in": "query", + "description": "Related entity id", + "required": false, "schema": { "type": "string" } } ], + "requestBody": { + "description": "Optional agent application to merge with. If null, a new application is created from the template.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentApplication" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/AgentApplication" } } } @@ -7134,27 +7490,62 @@ ] } }, - "/api/ai/solution/{solutionId}/uninstall": { - "delete": { + "/api/agent/app/relatedEntityCandidates": { + "get": { "tags": [ - "ai-solution-controller" + "agent-application-controller" ], - "summary": "uninstallSolution", - "operationId": "uninstallSolution", + "summary": "Get Related Entity Candidates (getRelatedEntityCandidates)", + "description": "Returns a page of Edges or Gateway Devices (devices with 'gateway' set in additional info) that can be linked to an agent application. Entities already linked to another application are excluded unless passed as 'currentEntityId'. Results are sorted by name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getRelatedEntityCandidates", "parameters": [ { - "name": "solutionId", - "in": "path", + "name": "entityType", + "in": "query", + "description": "Related entity type (EDGE or DEVICE)", "required": true, "schema": { "type": "string", - "format": "uuid" + "enum": [ + "EDGE", + "DEVICE" + ] } }, { - "name": "X-Authorization", - "in": "header", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Optional String value representing entity name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "currentEntityId", + "in": "query", + "description": "Optional id of the entity currently linked to the edited application; it is kept in the result even though it is managed", + "required": false, "schema": { "type": "string" } @@ -7166,7 +7557,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/PageDataEntityInfo" } } } @@ -7302,49 +7693,32 @@ ] } }, - "/api/ai/solution/{solutionId}/{dataKey}": { - "put": { + "/api/agent/app/{agentApplicationId}": { + "get": { "tags": [ - "ai-solution-controller" + "agent-application-controller" ], - "summary": "updateData", - "operationId": "updateData", + "summary": "Get Agent Application (getAgentApplicationById)", + "description": "Fetch the Agent Application object based on the provided Agent Application Id.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentApplicationById", "parameters": [ { - "name": "solutionId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "dataKey", + "name": "agentApplicationId", "in": "path", + "description": "A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/AgentApplicationInfo" } } } @@ -7480,49 +7854,40 @@ ] } }, - "/api/ai/solution/{solutionId}/{step}/chat": { + "/api/agent/app/{agentApplicationId}/attach/{profileId}": { "post": { "tags": [ - "ai-solution-controller" + "agent-application-controller" ], - "summary": "chat", - "operationId": "chat", + "summary": "Attach Application to Profile (attachToProfile)", + "description": "Re-attaches the application to a profile. The application adopts the profile's template version without running any upgrade or downgrade steps. After attachment the profile becomes the source of the config; the app's own credentials are carried over.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "attachToProfile", "parameters": [ { - "name": "solutionId", + "name": "agentApplicationId", "in": "path", + "description": "A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "name": "step", + "name": "profileId", "in": "path", "required": true, "schema": { - "$ref": "#/components/schemas/SolutionStep" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/AgentApplication" } } } @@ -7658,35 +8023,35 @@ ] } }, - "/api/ai/solution/{solutionId}/{step}/clear": { - "delete": { + "/api/agent/app/{agentApplicationId}/detach": { + "post": { "tags": [ - "ai-solution-controller" + "agent-application-controller" ], - "summary": "clearStep", - "operationId": "clearStep", + "summary": "Detach Application from Profile (detachFromProfile)", + "description": "Detaches the application from its profile. The application keeps the effective config it already carries (profile config with its own credentials merged in) and becomes standalone and editable.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "detachFromProfile", "parameters": [ { - "name": "solutionId", + "name": "agentApplicationId", "in": "path", + "description": "A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "step", - "in": "path", - "required": true, - "schema": { - "$ref": "#/components/schemas/SolutionStep" + "type": "string" } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentApplication" + } + } + } }, "400": { "description": "Bad Request", @@ -7699,7 +8064,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -7819,18 +8184,31 @@ ] } }, - "/api/ai/tools/resolve-approval": { + "/api/agent/app/{agentApplicationId}/event": { "post": { "tags": [ - "ai-tool-controller" + "agent-application-controller" + ], + "summary": "Execute Agent Application Event (createAgentAppEvent)", + "description": "Creates an event for the specified agent application. The action type determines the operation (UPDATE, DELETE, RESTART, UPGRADE, ROLLBACK). Step inputs can be provided for actions that require them. Returns the created event so the caller can open a progress view.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "createAgentAppEvent", + "parameters": [ + { + "name": "agentApplicationId", + "in": "path", + "description": "A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "resolveToolApproval", - "operationId": "resolveToolApproval", "requestBody": { + "description": "A JSON value representing the event request.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/AgentAppEventRequest" } } }, @@ -7842,7 +8220,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/AgentAppEvent" } } } @@ -7978,81 +8356,37 @@ ] } }, - "/api/alarm/{alarmId}/comment": { - "get": { + "/api/agent/app/{agentApplicationId}/event/{agentAppEventId}/cancel": { + "post": { "tags": [ - "alarm-comment-controller" + "agent-application-controller" ], - "summary": "Get Alarm comments (getAlarmComments)", - "description": "Returns a page of alarm comments for specified alarm. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getAlarmComments", + "summary": "Cancel Agent Application Event (cancelAgentAppEvent)", + "description": "Force-cancels an in-flight or pending agent application event, marking it as ERROR. Cannot cancel events that are already in a terminal state (FINISHED or ERROR).\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "cancelAgentAppEvent", "parameters": [ { - "name": "alarmId", + "name": "agentApplicationId", "in": "path", - "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "agentAppEventId", + "in": "path", + "description": "A string value representing the agent app event id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "id" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "string" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataAlarmCommentInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -8065,7 +8399,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -8183,43 +8517,107 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/agent/app/{agentApplicationId}/events": { + "get": { "tags": [ - "alarm-comment-controller" + "agent-application-controller" ], - "summary": "Create or update Alarm Comment ", - "description": "Creates or Updates the Alarm Comment. When creating comment, platform generates Alarm Comment Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm Comment id will be present in the response. Specify existing Alarm Comment id to update the alarm. Referencing non-existing Alarm Comment Id will cause 'Not Found' error. \n\n To create new Alarm comment entity it is enough to specify 'comment' json element with 'text' node, for example: {\"comment\": { \"text\": \"my comment\"}}. \n\n If comment type is not specified the default value 'OTHER' will be saved. If 'alarmId' or 'userId' specified in body it will be ignored.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "saveAlarmComment", + "summary": "Get Agent Application Events (getAgentAppEvents)", + "description": "Returns a page of events for the specified agent application. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentAppEvents", "parameters": [ { - "name": "alarmId", + "name": "agentApplicationId", "in": "path", - "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - } - ], - "requestBody": { - "description": "A JSON value representing the comment.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlarmComment" - } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "required": true - }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Optional case-insensitive substring matched against the event action type and processing status", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "actionType", + "in": "query", + "description": "Optional action type filter", + "required": false, + "schema": { + "$ref": "#/components/schemas/AgentAppEventActionType" + } + }, + { + "name": "processingStatus", + "in": "query", + "description": "Optional processing status filter", + "required": false, + "schema": { + "$ref": "#/components/schemas/AgentProcessingStatus" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "updatedTime" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AlarmComment" + "$ref": "#/components/schemas/PageDataAgentAppEvent" } } } @@ -8235,7 +8633,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -8355,28 +8753,19 @@ ] } }, - "/api/alarm/{alarmId}/comment/{commentId}": { + "/api/agent/app/{agentApplicationId}/relatedEntity": { "delete": { "tags": [ - "alarm-comment-controller" + "agent-application-controller" ], - "summary": "Delete Alarm comment (deleteAlarmComment)", - "description": "Deletes the Alarm comment. Referencing non-existing Alarm comment Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "deleteAlarmComment", + "summary": "Unassign Related Entity from Agent Application (unassignRelatedEntityFromAgentApp)", + "description": "Removes the link between an agent application and its related Edge or Gateway Device.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "unassignRelatedEntityFromAgentApp", "parameters": [ { - "name": "alarmId", + "name": "agentApplicationId", "in": "path", - "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "commentId", - "in": "path", - "description": "A string value representing the alarm comment id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -8385,7 +8774,14 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentApplication" + } + } + } }, "400": { "description": "Bad Request", @@ -8518,32 +8914,50 @@ ] } }, - "/api/alarm": { + "/api/agent/app/{agentApplicationId}/relatedEntity/{entityType}/{entityId}": { "post": { "tags": [ - "alarm-controller" + "agent-application-controller" ], - "summary": "Create or Update Alarm (saveAlarm)", - "description": "Creates or Updates the Alarm. When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. Referencing non-existing Alarm Id will cause 'Not Found' error. \n\nPlatform also deduplicate the alarms based on the entity id of originator and alarm 'type'. For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Alarm entity. \n\nThe alarm originator is an immutable routing key: when updating an existing alarm, the 'originator' in the request body must match the stored alarm's originator. A request that references an existing alarm id but carries a different originator is treated as a lookup miss and causes a 'Not Found' error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "saveAlarm", - "requestBody": { - "description": "A JSON value representing the alarm.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Alarm" - } + "summary": "Assign Related Entity to Agent Application (assignRelatedEntityToAgentApp)", + "description": "Links an Edge or Gateway Device to the specified agent application and re-merges entity credentials into the compose.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "assignRelatedEntityToAgentApp", + "parameters": [ + { + "name": "agentApplicationId", + "in": "path", + "description": "A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "entityType", + "in": "path", + "description": "Related entity type (EDGE or DEVICE)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "Related entity id", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Alarm" + "$ref": "#/components/schemas/AgentApplication" } } } @@ -8679,71 +9093,87 @@ ] } }, - "/api/alarm/highestSeverity/{entityType}/{entityId}": { + "/api/agent/app/{agentApplicationId}/units": { "get": { "tags": [ - "alarm-controller" + "agent-application-controller" ], - "summary": "Get Highest Alarm Severity (getHighestAlarmSeverity)", - "description": "Search the alarms by originator ('entityType' and entityId') and optional 'status' or 'searchStatus' filters and returns the highest AlarmSeverity(CRITICAL, MAJOR, MINOR, WARNING or INDETERMINATE). Specifying both parameters 'searchStatus' and 'status' at the same time will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getHighestAlarmSeverity", + "summary": "Get Agent Application Units (getAgentAppUnits)", + "description": "Returns a page of units (containers, volumes, networks) for the specified agent application. Live per-unit data such as `image` and `state` lives in server-scope attributes on each unit and should be fetched separately via the standard telemetry/attributes API.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentAppUnits", "parameters": [ { - "name": "entityType", + "name": "agentApplicationId", "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", + "description": "A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Case-insensitive substring match against the unit identifier", + "required": false, "schema": { "type": "string" } }, { - "name": "searchStatus", + "name": "type", "in": "query", - "description": "A string value representing one of the AlarmSearchStatus enumeration value", + "description": "Optional unit type filter (CONTAINER, VOLUME, NETWORK)", "required": false, "schema": { - "type": "string", - "enum": [ - "ANY", - "ACTIVE", - "CLEARED", - "ACK", - "UNACK" - ] + "$ref": "#/components/schemas/AgentAppUnitType" } }, { - "name": "status", + "name": "sortProperty", "in": "query", - "description": "A string value representing one of the AlarmStatus enumeration value", + "description": "Property of entity to sort by", "required": false, "schema": { "type": "string", "enum": [ - "ACTIVE_UNACK", - "ACTIVE_ACK", - "CLEARED_UNACK", - "CLEARED_ACK" + "createdTime", + "identifier", + "type" ] } }, { - "name": "assigneeId", + "name": "sortOrder", "in": "query", - "description": "A string value representing the assignee user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "string" + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -8753,7 +9183,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AlarmSeverity" + "$ref": "#/components/schemas/PageDataAgentAppUnit" } } } @@ -8889,19 +9319,28 @@ ] } }, - "/api/alarm/info/{alarmId}": { + "/api/agent/apps/{entityType}/{entityId}": { "get": { "tags": [ - "alarm-controller" + "agent-application-controller" ], - "summary": "Get Alarm Info (getAlarmInfoById)", - "description": "Fetch the Alarm Info object based on the provided Alarm Id. Alarm Info is an extension of the default Alarm object that also contains name of the alarm originator.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAlarmInfoById", + "summary": "Get Agent Application by Related Entity (getAgentApplicationByRelatedEntity)", + "description": "Returns the agent application linked to the specified entity. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentApplicationByRelatedEntity", "parameters": [ { - "name": "alarmId", + "name": "entityType", "in": "path", - "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Entity type", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "Entity id", "required": true, "schema": { "type": "string" @@ -8914,7 +9353,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AlarmInfo" + "$ref": "#/components/schemas/AgentApplication" } } } @@ -9050,15 +9489,24 @@ ] } }, - "/api/alarm/types": { + "/api/agent/{agentId}/apps": { "get": { "tags": [ - "alarm-controller" + "agent-application-controller" ], - "summary": "Get Alarm Types (getAlarmTypes)", - "description": "Returns a set of unique alarm types based on alarms that are either owned by the tenant or assigned to the customer which user is performing the request.", - "operationId": "getAlarmTypes", + "summary": "Get Agent Applications by Agent Id (getAgentApplicationsByAgentId)", + "description": "Returns a page of agent applications that belong to the specified agent. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentApplicationsByAgentId", "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "pageSize", "in": "query", @@ -9082,12 +9530,25 @@ { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on of next alarm fields: type, severity or status", + "description": "Optional String value representing application name", "required": false, "schema": { "type": "string" } }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name" + ] + } + }, { "name": "sortOrder", "in": "query", @@ -9108,7 +9569,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntitySubtype" + "$ref": "#/components/schemas/PageDataAgentApplicationInfo" } } } @@ -9244,19 +9705,19 @@ ] } }, - "/api/alarm/{alarmId}": { + "/api/agent/bulk/{bulkActionId}": { "get": { "tags": [ - "alarm-controller" + "agent-bulk-action-controller" ], - "summary": "Get Alarm (getAlarmById)", - "description": "Fetch the Alarm object based on the provided Alarm Id. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAlarmById", + "summary": "Get Agent Bulk Action (getAgentBulkAction)", + "description": "Fetch the Agent Bulk Action object based on the provided Bulk Action Id.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentBulkAction", "parameters": [ { - "name": "alarmId", + "name": "bulkActionId", "in": "path", - "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Bulk Action Id", "required": true, "schema": { "type": "string" @@ -9269,7 +9730,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Alarm" + "$ref": "#/components/schemas/AgentBulkAction" } } } @@ -9403,19 +9864,21 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/agent/bulk/{bulkActionId}/eventStats": { + "get": { "tags": [ - "alarm-controller" + "agent-bulk-action-controller" ], - "summary": "Delete Alarm (deleteAlarm)", - "description": "Deletes the Alarm. Referencing non-existing Alarm Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", - "operationId": "deleteAlarm", + "summary": "Get Agent Bulk Action Event Stats (getAgentBulkActionEventStats)", + "description": "Returns the number of agent application events produced by the given bulk action per processing status, together with their total.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentBulkActionEventStats", "parameters": [ { - "name": "alarmId", + "name": "bulkActionId", "in": "path", - "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Bulk Action Id", "required": true, "schema": { "type": "string" @@ -9428,7 +9891,7 @@ "content": { "application/json": { "schema": { - "type": "boolean" + "$ref": "#/components/schemas/AgentBulkActionEventStats" } } } @@ -9564,181 +10027,85 @@ ] } }, - "/api/alarm/{alarmId}/ack": { - "post": { + "/api/agent/bulk/{bulkActionId}/events": { + "get": { "tags": [ - "alarm-controller" + "agent-bulk-action-controller" ], - "summary": "Acknowledge Alarm (ackAlarm)", - "description": "Acknowledge the Alarm. Once acknowledged, the 'ack_ts' field will be set to current timestamp and special rule chain event 'ALARM_ACK' will be generated. Referencing non-existing Alarm Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "ackAlarm", + "summary": "Get Agent Bulk Action Events (getAgentBulkActionEvents)", + "description": "Returns a page of agent application events produced by the given bulk action, optionally filtered by action type and status. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentBulkActionEvents", "parameters": [ { - "name": "alarmId", + "name": "bulkActionId", "in": "path", - "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Bulk Action Id", "required": true, "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlarmInfo" - } - } - } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid request body", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } + { + "name": "textSearch", + "in": "query", + "description": "Case-insensitive 'substring' filter based on the event fields", + "required": false, + "schema": { + "type": "string" } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } + { + "name": "actionType", + "in": "query", + "description": "A string value representing the action type to filter by, e.g. 'UPDATE'", + "required": false, + "schema": { + "$ref": "#/components/schemas/AgentAppEventActionType" } }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - } - }, - "security": [ { - "HttpLoginForm": [] + "name": "processingStatus", + "in": "query", + "description": "A string value representing the event status to filter by, e.g. 'FINISHED'", + "required": false, + "schema": { + "$ref": "#/components/schemas/AgentProcessingStatus" + } }, { - "ApiKeyForm": [] - } - ] - } - }, - "/api/alarm/{alarmId}/assign": { - "delete": { - "tags": [ - "alarm-controller" - ], - "summary": "Unassign Alarm (unassignAlarm)", - "description": "Unassign the Alarm. Once unassigned, the 'assign_ts' field will be set to current timestamp and special rule chain event 'ALARM_UNASSIGNED' will be generated. Referencing non-existing Alarm Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "unassignAlarm", - "parameters": [ + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string" + } + }, { - "name": "alarmId", - "in": "path", - "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, "schema": { "type": "string" } @@ -9750,7 +10117,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Alarm" + "$ref": "#/components/schemas/PageDataAgentAppEventInfo" } } } @@ -9886,41 +10253,54 @@ ] } }, - "/api/alarm/{alarmId}/assign/{assigneeId}": { + "/api/agent": { "post": { "tags": [ - "alarm-controller" + "agent-controller" ], - "summary": "Assign/Reassign Alarm (assignAlarm)", - "description": "Assign the Alarm. Once assigned, the 'assign_ts' field will be set to current timestamp and special rule chain event 'ALARM_ASSIGNED' (or ALARM_REASSIGNED in case of assigning already assigned alarm) will be generated. Referencing non-existing Alarm Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "assignAlarm", + "summary": "Create Or Update Agent (saveAgent)", + "description": "Creates or Updates the Agent. When creating agent, platform generates Agent Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Agent id will be present in the response. Specify existing Agent id to update the agent. Referencing non-existing Agent Id will cause 'Not Found' error. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Agent entity. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveAgent", "parameters": [ { - "name": "alarmId", - "in": "path", - "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, + "name": "entityGroupId", + "in": "query", + "required": false, "schema": { "type": "string" } }, { - "name": "assigneeId", - "in": "path", - "description": "A string value representing the user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, + "name": "entityGroupIds", + "in": "query", + "description": "A list of entity group ids, separated by comma ','", + "required": false, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], + "requestBody": { + "description": "A JSON value representing the agent.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Agent" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Alarm" + "$ref": "#/components/schemas/Agent" } } } @@ -10056,19 +10436,19 @@ ] } }, - "/api/alarm/{alarmId}/clear": { - "post": { + "/api/agent/info/{agentId}": { + "get": { "tags": [ - "alarm-controller" + "agent-controller" ], - "summary": "Clear Alarm (clearAlarm)", - "description": "Clear the Alarm. Once cleared, the 'clear_ts' field will be set to current timestamp and special rule chain event 'ALARM_CLEAR' will be generated. Referencing non-existing Alarm Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "clearAlarm", + "summary": "Get Agent Info (getAgentInfoById)", + "description": "Fetch the Agent Info object based on the provided Agent Id. Agent Info extends the Agent object and adds customer title and 'is public' flag.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentInfoById", "parameters": [ { - "name": "alarmId", + "name": "agentId", "in": "path", - "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -10081,7 +10461,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AlarmInfo" + "$ref": "#/components/schemas/AgentInfo" } } } @@ -10097,7 +10477,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -10217,171 +10597,194 @@ ] } }, - "/api/alarm/{entityType}/{entityId}": { + "/api/agent/instructions/install/{agentId}/{method}": { "get": { "tags": [ - "alarm-controller" + "agent-controller" ], - "summary": "Get Alarms (getAlarmsByEntity)", - "description": "Returns a page of alarms for the selected entity. Specifying both parameters 'searchStatus' and 'status' at the same time will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAlarmsByEntity", + "summary": "Get Agent Install Instructions (getAgentInstallInstructions)", + "description": "Returns the docker install command for the specified agent with the server address and gRPC port resolved server-side.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentInstallInstructions", "parameters": [ { - "name": "entityType", + "name": "agentId", "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", + "description": "A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "entityId", + "name": "method", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Installation method ('docker')", "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "searchStatus", - "in": "query", - "description": "A string value representing one of the AlarmSearchStatus enumeration value", - "required": false, "schema": { "type": "string", "enum": [ - "ANY", - "ACTIVE", - "CLEARED", - "ACK", - "UNACK" + "docker" ] } - }, - { - "name": "status", - "in": "query", - "description": "A string value representing one of the AlarmStatus enumeration value", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ACTIVE_UNACK", - "ACTIVE_ACK", - "CLEARED_UNACK", - "CLEARED_ACK" - ] - } - }, - { - "name": "assigneeId", - "in": "query", - "description": "A string value representing the assignee user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentInstructions" + } + } } }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on of next alarm fields: type, severity or status", - "required": false, - "schema": { - "type": "string" + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "startTs", - "endTs", - "type", - "ackTs", - "clearTs", - "severity", - "status" - ] + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "startTime", - "in": "query", - "description": "The start timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } - }, + } + }, + "security": [ { - "name": "endTime", - "in": "query", - "description": "The end timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } + "HttpLoginForm": [] }, { - "name": "fetchOriginator", - "in": "query", - "description": "A boolean value to specify if the alarm originator name will be filled in the AlarmInfo object field: 'originatorName' or will returns as null.", - "required": false, - "schema": { - "type": "boolean" - } + "ApiKeyForm": [] } + ] + } + }, + "/api/agent/upgrade/latest": { + "get": { + "tags": [ + "agent-controller" ], + "summary": "Get the newest published agent image (getLatestAgentImageRef)", + "description": "Returns the newest agent image reference known from the version graph, or the floating tag while no version has been published. Lets a list of agents decide locally which rows are upgradable without asking per row.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getLatestAgentImageRef", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAlarmInfo" + "type": "string" } } } @@ -10517,144 +10920,23 @@ ] } }, - "/api/alarms": { + "/api/agent/{agentId}": { "get": { "tags": [ - "alarm-controller" + "agent-controller" ], - "summary": "Get All Alarms (getAllAlarms)", - "description": "Returns a page of alarms that belongs to the current user owner. If the user has the authority of 'Tenant Administrator', the server returns alarms that belongs to the tenant of current user. If the user has the authority of 'Customer User', the server returns alarms that belongs to the customer of current user. Specifying both parameters 'searchStatus' and 'status' at the same time will cause an error. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAllAlarms", + "summary": "Get Agent (getAgentById)", + "description": "Fetch the Agent object based on the provided Agent Id. The server checks that the agent is owned by the same tenant.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentById", "parameters": [ { - "name": "searchStatus", - "in": "query", - "description": "A string value representing one of the AlarmSearchStatus enumeration value", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ANY", - "ACTIVE", - "CLEARED", - "ACK", - "UNACK" - ] - } - }, - { - "name": "status", - "in": "query", - "description": "A string value representing one of the AlarmStatus enumeration value", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ACTIVE_UNACK", - "ACTIVE_ACK", - "CLEARED_UNACK", - "CLEARED_ACK" - ] - } - }, - { - "name": "assigneeId", - "in": "query", - "description": "A string value representing the assignee user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "agentId", + "in": "path", + "description": "A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on of next alarm fields: type, severity or status", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "startTs", - "endTs", - "type", - "ackTs", - "clearTs", - "severity", - "status" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - { - "name": "startTime", - "in": "query", - "description": "The start timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTime", - "in": "query", - "description": "The end timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "fetchOriginator", - "in": "query", - "description": "A boolean value to specify if the alarm originator name will be filled in the AlarmInfo object field: 'originatorName' or will returns as null.", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { @@ -10663,7 +10945,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAlarmInfo" + "$ref": "#/components/schemas/Agent" } } } @@ -10797,90 +11079,174 @@ "ApiKeyForm": [] } ] - } - }, - "/api/v2/alarm/{entityType}/{entityId}": { - "get": { + }, + "delete": { "tags": [ - "alarm-controller" + "agent-controller" ], - "summary": "Get Alarms (getAlarmsV2)", - "description": "Returns a page of alarms for the selected entity. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getAlarmsV2", + "summary": "Delete agent (deleteAgent)", + "description": "Deletes the agent and all the relations (from and to the agent). Referencing non-existing agent Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "deleteAgent", "parameters": [ { - "name": "entityType", + "name": "agentId", "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", + "description": "A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "description": "OK" }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "statusList", - "in": "query", - "description": "A list of string values separated by comma ',' representing one of the AlarmSearchStatus enumeration value", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "ANY", - "ACTIVE", - "CLEARED", - "ACK", - "UNACK" - ] + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } } } }, - { - "name": "severityList", - "in": "query", - "description": "A list of string values separated by comma ',' representing one of the AlarmSeverity enumeration value", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "CRITICAL", - "MAJOR", - "MINOR", - "WARNING", - "INDETERMINATE" - ] + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } } } }, - { - "name": "typeList", - "in": "query", - "description": "A list of string values separated by comma ',' representing alarm types", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } } } + } + }, + "security": [ + { + "HttpLoginForm": [] }, { - "name": "assigneeId", - "in": "query", - "description": "A string value representing the assignee user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, + "ApiKeyForm": [] + } + ] + } + }, + "/api/agent/{agentId}/eventInfos": { + "get": { + "tags": [ + "agent-controller" + ], + "summary": "Get Agent App Event Infos by Agent Id (getAgentAppEventInfosByAgentId)", + "description": "Returns a page of agent application events for all applications belonging to the specified agent, enriched with the application name for each event. Supports optional filtering by action type and status, and text search over the application name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentAppEventInfosByAgentId", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { "type": "string" } @@ -10908,7 +11274,7 @@ { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on of next alarm fields: type, severity or status", + "description": "Optional text value to match against the application name", "required": false, "schema": { "type": "string" @@ -10923,13 +11289,10 @@ "type": "string", "enum": [ "createdTime", - "startTs", - "endTs", - "type", - "ackTs", - "clearTs", - "severity", - "status" + "updatedTime", + "actionType", + "startStatus", + "processingStatus" ] } }, @@ -10947,23 +11310,21 @@ } }, { - "name": "startTime", + "name": "actionType", "in": "query", - "description": "The start timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", + "description": "Optional filter by event action type", "required": false, "schema": { - "type": "integer", - "format": "int64" + "$ref": "#/components/schemas/AgentAppEventActionType" } }, { - "name": "endTime", + "name": "processingStatus", "in": "query", - "description": "The end timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", + "description": "Optional filter by event status", "required": false, "schema": { - "type": "integer", - "format": "int64" + "$ref": "#/components/schemas/AgentProcessingStatus" } } ], @@ -10973,7 +11334,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAlarmInfo" + "$ref": "#/components/schemas/PageDataAgentAppEventInfo" } } } @@ -11109,70 +11470,20 @@ ] } }, - "/api/v2/alarms": { + "/api/agent/{agentId}/events": { "get": { "tags": [ - "alarm-controller" + "agent-controller" ], - "summary": "Get All Alarms (getAllAlarmsV2)", - "description": "Returns a page of alarms that belongs to the current user owner. If the user has the authority of 'Tenant Administrator', the server returns alarms that belongs to the tenant of current user. If the user has the authority of 'Customer User', the server returns alarms that belongs to the customer of current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getAllAlarmsV2", + "summary": "Get Agent App Events by Agent Id (getAgentAppEventsByAgentId)", + "description": "Returns a page of agent application events for all applications belonging to the specified agent. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentAppEventsByAgentId", "parameters": [ { - "name": "statusList", - "in": "query", - "description": "A list of string values separated by comma ',' representing one of the AlarmSearchStatus enumeration value", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "ANY", - "ACTIVE", - "CLEARED", - "ACK", - "UNACK" - ] - } - } - }, - { - "name": "severityList", - "in": "query", - "description": "A list of string values separated by comma ',' representing one of the AlarmSeverity enumeration value", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "CRITICAL", - "MAJOR", - "MINOR", - "WARNING", - "INDETERMINATE" - ] - } - } - }, - { - "name": "typeList", - "in": "query", - "description": "A list of string values separated by comma ',' representing alarm types", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "assigneeId", - "in": "query", - "description": "A string value representing the assignee user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, + "name": "agentId", + "in": "path", + "description": "A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { "type": "string" } @@ -11200,7 +11511,7 @@ { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on of next alarm fields: type, severity or status", + "description": "Optional String value reserved for future event filtering", "required": false, "schema": { "type": "string" @@ -11215,13 +11526,7 @@ "type": "string", "enum": [ "createdTime", - "startTs", - "endTs", - "type", - "ackTs", - "clearTs", - "severity", - "status" + "updatedTime" ] } }, @@ -11237,26 +11542,6 @@ "DESC" ] } - }, - { - "name": "startTime", - "in": "query", - "description": "The start timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTime", - "in": "query", - "description": "The end timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } } ], "responses": { @@ -11265,7 +11550,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAlarmInfo" + "$ref": "#/components/schemas/PageDataAgentAppEvent" } } } @@ -11401,20 +11686,30 @@ ] } }, - "/api/alarm/rule": { + "/api/agent/{agentId}/upgrade": { "post": { "tags": [ - "alarm-rule-controller" + "agent-controller" + ], + "summary": "Upgrade Agent (upgradeAgent)", + "description": "Creates an agent-scoped upgrade event that makes the agent replace its own container with the given image. At most one agent upgrade can be active per agent, and it blocks all application events for that agent until it completes.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "upgradeAgent", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Create Or Update Alarm Rule (saveAlarmRule)", - "description": "Creates or Updates the Alarm Rule. When creating alarm rule, platform generates Alarm Rule Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm Rule Id will be present in the response. Specify existing Alarm Rule Id to update the alarm rule. Referencing non-existing Alarm Rule Id will cause 'Not Found' error. Remove 'id', 'tenantId' from the request body example (below) to create new Alarm Rule entity. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "saveAlarmRule", "requestBody": { - "description": "A JSON value representing the alarm rule.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AlarmRuleDefinition" + "$ref": "#/components/schemas/AgentUpgradeRequest" } } }, @@ -11426,7 +11721,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AlarmRuleDefinition" + "$ref": "#/components/schemas/AgentAppEvent" } } } @@ -11562,32 +11857,32 @@ ] } }, - "/api/alarm/rule/testScript": { - "post": { + "/api/agent/{agentId}/upgrade/available": { + "get": { "tags": [ - "alarm-rule-controller" + "agent-controller" ], - "summary": "Test alarm rule TBEL expression (testAlarmRuleScript)", - "description": "Execute the alarm rule TBEL condition expression and return the result. Alarm rule expressions must return a boolean value. The format of request: \n\n```json\n{\n \"expression\": \"return temperature > 50;\",\n \"arguments\": {\n \"temperature\": { \"type\": \"SINGLE_VALUE\", \"ts\": 1739776478057, \"value\": 55 }\n }\n}\n```\n\n Expected result JSON contains \"output\" and \"error\".\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "testAlarmRuleScript", - "requestBody": { - "description": "Test alarm rule TBEL condition expression. The expression must return a boolean value.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } + "summary": "Is agent upgrade available (isAgentUpgradeAvailable)", + "description": "Returns 'true' when the agent reports an image older than the newest published one, 'false' otherwise — including when the agent runs a floating tag such as 'latest', whose current content cannot be told from the tag.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "isAgentUpgradeAvailable", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "type": "boolean" } } } @@ -11603,7 +11898,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -11723,18 +12018,19 @@ ] } }, - "/api/alarm/rule/{alarmRuleId}": { + "/api/agent/{agentId}/upgrade/target": { "get": { "tags": [ - "alarm-rule-controller" + "agent-controller" ], - "summary": "Get Alarm Rule (getAlarmRuleById)", - "description": "Fetch the Alarm Rule object based on the provided Alarm Rule Id.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getAlarmRuleById", + "summary": "Get the agent upgrade target (getAgentUpgradeTarget)", + "description": "Returns the image reference the agent should be upgraded to, or an empty string when it already runs the newest published image or cannot be placed in the version graph.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentUpgradeTarget", "parameters": [ { - "name": "alarmRuleId", + "name": "agentId", "in": "path", + "description": "A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -11747,7 +12043,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AlarmRuleDefinition" + "type": "string" } } } @@ -11881,174 +12177,27 @@ "ApiKeyForm": [] } ] - }, - "delete": { - "tags": [ - "alarm-rule-controller" - ], - "summary": "Delete Alarm Rule (deleteAlarmRule)", - "description": "Deletes the alarm rule. Referencing non-existing Alarm Rule Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "deleteAlarmRule", - "parameters": [ - { - "name": "alarmRuleId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] } }, - "/api/alarm/rule/{alarmRuleId}/debug": { + "/api/agentInfos": { "get": { "tags": [ - "alarm-rule-controller" + "agent-controller" ], - "summary": "Get latest alarm rule debug event (getLatestAlarmRuleDebugEvent)", - "description": "Gets latest alarm rule debug event for specified alarm rule id. Referencing non-existing alarm rule id will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getLatestAlarmRuleDebugEvent", + "summary": "Get Agent Infos By Ids (getAgentInfosByIds)", + "description": "Requested agents must be owned by tenant or assigned to customer which user is performing the request. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAgentInfosByIds", "parameters": [ { - "name": "alarmRuleId", - "in": "path", + "name": "agentIds", + "in": "query", + "description": "A list of agent ids, separated by comma ','", "required": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], @@ -12058,7 +12207,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentInfo" + } } } } @@ -12194,15 +12346,24 @@ ] } }, - "/api/alarm/rules": { + "/api/customer/{customerId}/agentInfos": { "get": { "tags": [ - "alarm-rule-controller" + "agent-controller" ], - "summary": "Get alarm rules (getAlarmRules)", - "description": "Fetch tenant alarm rules based on the filter.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getAlarmRules", + "summary": "Get Customer Agent Infos (getCustomerAgentInfos)", + "description": "Returns a page of agent info objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getCustomerAgentInfos", "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "pageSize", "in": "query", @@ -12223,33 +12384,10 @@ "format": "int32" } }, - { - "name": "entityType", - "in": "query", - "description": "Entity type filter. If not specified, alarm rules for all supported entity types will be returned.", - "required": false, - "schema": { - "$ref": "#/components/schemas/EntityType" - } - }, - { - "name": "entities", - "in": "query", - "description": "Entities filter. If not specified, alarm rules for entity type filter will be returned.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the calculated field name.", + "description": "Optional String value representing agent name", "required": false, "schema": { "type": "string" @@ -12288,7 +12426,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAlarmRuleDefinitionInfo" + "$ref": "#/components/schemas/PageDataAgentInfo" } } } @@ -12424,15 +12562,24 @@ ] } }, - "/api/alarm/rules/names": { + "/api/customer/{customerId}/agents": { "get": { "tags": [ - "alarm-rule-controller" + "agent-controller" ], - "summary": "Get alarm rule names (getAlarmRuleNames)", - "description": "Fetch the list of alarm rule names.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getAlarmRuleNames", + "summary": "Get Customer Agents (getCustomerAgents)", + "description": "Returns a page of agent objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getCustomerAgents", "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "pageSize", "in": "query", @@ -12456,12 +12603,25 @@ { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the calculated field name.", + "description": "Optional String value representing agent name", "required": false, "schema": { "type": "string" } }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name" + ] + } + }, { "name": "sortOrder", "in": "query", @@ -12482,7 +12642,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataString" + "$ref": "#/components/schemas/PageDataAgent" } } } @@ -12618,33 +12778,15 @@ ] } }, - "/api/alarm/rules/{entityType}/{entityId}": { + "/api/tenant/agentInfos": { "get": { "tags": [ - "alarm-rule-controller" + "agent-controller" ], - "summary": "Get Alarm Rules by Entity Id (getAlarmRulesByEntityId)", - "description": "Fetch the Alarm Rules based on the provided Entity Id.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getAlarmRulesByEntityId", + "summary": "Get Tenant Agent Infos (getTenantAgentInfos)", + "description": "Returns a page of agent info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getTenantAgentInfos", "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "pageSize", "in": "query", @@ -12668,7 +12810,7 @@ { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the calculated field name.", + "description": "Optional String value representing agent name", "required": false, "schema": { "type": "string" @@ -12707,7 +12849,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAlarmRuleDefinition" + "$ref": "#/components/schemas/PageDataAgentInfo" } } } @@ -12843,19 +12985,240 @@ ] } }, - "/api/apiKey": { + "/api/tenant/agents": { + "get": { + "tags": [ + "agent-controller" + ], + "summary": "Get Tenant Agents (getTenantAgents)", + "description": "Returns a page of agents owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getTenantAgents", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Optional String value representing agent name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataAgent" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/agent/profile": { "post": { "tags": [ - "api-key-controller" + "agent-profile-controller" + ], + "summary": "Create or Update Agent Profile (saveAgentProfile)", + "description": "Creates or updates the Agent Profile. When an id is not present in the request, a new Agent Profile is created, otherwise the existing one is updated. Optionally synchronizes the agent application profile assignments in the same request: when the 'appProfileIds' parameter is absent, existing assignments are left untouched; when it is present, the assignment set is replaced with the given ids — including an explicitly empty value (e.g. 'appProfileIds='), which removes all assignments.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveAgentProfile", + "parameters": [ + { + "name": "appProfileIds", + "in": "query", + "description": "Agent application profile ids to assign to this agent profile. Absent: assignments are not modified. Present: assignments are replaced with the given ids; an explicitly empty value removes all assignments.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } ], - "summary": "Save API key for user (saveApiKey)", - "description": "Creates an API key for the given user and returns the token ONCE as 'ApiKey {value}'.\n\nAvailable for any authorized user. ", - "operationId": "saveApiKey", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiKeyInfo" + "$ref": "#/components/schemas/AgentProfile" } } }, @@ -12867,7 +13230,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiKey" + "$ref": "#/components/schemas/AgentProfile" } } } @@ -13003,28 +13366,24 @@ ] } }, - "/api/apiKey/{id}": { - "delete": { + "/api/agent/profile/info/default": { + "get": { "tags": [ - "api-key-controller" - ], - "summary": "Delete API key by ID (deleteApiKey)", - "description": "Deletes the API key. Referencing non-existing ApiKey Id will cause an error.\n\nAvailable for any authorized user. ", - "operationId": "deleteApiKey", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "agent-profile-controller" ], + "summary": "Get Default Agent Profile (getDefaultAgentProfileInfo)", + "description": "Fetch the Agent Profile Info object that is marked as default within the current tenant scope.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getDefaultAgentProfileInfo", "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentProfileInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -13157,43 +13516,32 @@ ] } }, - "/api/apiKey/{id}/description": { - "put": { + "/api/agent/profile/info/{agentProfileId}": { + "get": { "tags": [ - "api-key-controller" + "agent-profile-controller" ], - "summary": "Update API key Description", - "description": "Updates the description of the existing API key by apiKeyId. Only the description can be updated. Referencing a non-existing ApiKey Id will cause a 'Not Found' error.\n\nAvailable for any authorized user. ", - "operationId": "updateApiKeyDescription", + "summary": "Get Agent Profile Info (getAgentProfileInfoById)", + "description": "Fetch the Agent Profile Info object based on the provided Agent Profile Id. Agent Profile Info is a lightweight object that omits the auto-provision key and secret; it is readable by any tenant admin so agent screens can resolve the linked profile.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentProfileInfoById", "parameters": [ { - "name": "id", + "name": "agentProfileId", "in": "path", - "description": "A string value representing the api key id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Agent Profile Id", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "New description for the API key" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiKeyInfo" + "$ref": "#/components/schemas/AgentProfileInfo" } } } @@ -13329,32 +13677,34 @@ ] } }, - "/api/apiKey/{id}/enabled/{enabledValue}": { - "put": { + "/api/agent/profile/instructions/provision/{agentProfileId}/{method}": { + "get": { "tags": [ - "api-key-controller" + "agent-profile-controller" ], - "summary": "Enable or disable API key (enableApiKey)", - "description": "Updates api key with enabled = true/false. \n\nAvailable for any authorized user. ", - "operationId": "enableApiKey", + "summary": "Get Agent Provision Instructions (getAgentProvisionInstructions)", + "description": "Returns the auto-provision docker command for the specified agent profile with the server address and gRPC port resolved server-side.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentProvisionInstructions", "parameters": [ { - "name": "id", + "name": "agentProfileId", "in": "path", - "description": "Unique identifier of the API key to enable/disable", + "description": "Agent Profile Id", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "name": "enabledValue", + "name": "method", "in": "path", - "description": "Enabled or disabled api key", + "description": "Installation method ('docker')", "required": true, "schema": { - "type": "boolean" + "type": "string", + "enum": [ + "docker" + ] } } ], @@ -13364,7 +13714,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiKeyInfo" + "$ref": "#/components/schemas/AgentInstructions" } } } @@ -13500,80 +13850,23 @@ ] } }, - "/api/apiKeys/{userId}": { + "/api/agent/profile/{agentProfileId}": { "get": { "tags": [ - "api-key-controller" + "agent-profile-controller" ], - "summary": "Get User Api Keys (getUserApiKeys)", - "description": "Returns a page of api keys owned by user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for any authorized user. ", - "operationId": "getUserApiKeys", + "summary": "Get Agent Profile (getAgentProfileById)", + "description": "Fetch the Agent Profile object based on the provided Agent Profile Id.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentProfileById", "parameters": [ { - "name": "userId", + "name": "agentProfileId", "in": "path", - "description": "A string value representing the user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Agent Profile Id", "required": true, "schema": { "type": "string" } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the description.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "expirationTime", - "description", - "enabled" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -13582,7 +13875,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataApiKeyInfo" + "$ref": "#/components/schemas/AgentProfile" } } } @@ -13716,90 +14009,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/asset": { - "post": { + }, + "delete": { "tags": [ - "asset-controller" + "agent-profile-controller" ], - "summary": "Create Or Update Asset (saveAsset)", - "description": "Creates or Updates the Asset. When creating asset, platform generates Asset Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Asset id will be present in the response. Specify existing Asset id to update the asset. Referencing non-existing Asset Id will cause 'Not Found' error. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Asset entity. \n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "saveAsset", + "summary": "Delete Agent Profile (deleteAgentProfile)", + "description": "Deletes the Agent Profile. Referencing a non-existing Agent Profile Id will cause an error. The default Agent Profile can not be deleted.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "deleteAgentProfile", "parameters": [ { - "name": "entityGroupId", - "in": "query", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'. If specified, the entity will be added to the corresponding entity group.", - "required": false, + "name": "agentProfileId", + "in": "path", + "description": "Agent Profile Id", + "required": true, "schema": { "type": "string" } - }, - { - "name": "entityGroupIds", - "in": "query", - "description": "A list of string values, separated by comma ',' representing the Entity Group Ids. For example, '784f394c-42b6-435a-983c-b7beff2784f9','a84f394c-42b6-435a-083c-b7beff2784f9'. If specified, the entity will be added to the corresponding entity groups.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "nameConflictPolicy", - "in": "query", - "description": "Optional value of name conflict policy. Possible values: FAIL or UNIQUIFY. If omitted, FAIL policy is applied. FAIL policy implies exception will be thrown if an entity with the same name already exists. UNIQUIFY policy appends a suffix to the entity name, if a name conflict occurs.", - "required": false, - "schema": { - "$ref": "#/components/schemas/NameConflictPolicy", - "default": "FAIL" - } - }, - { - "name": "uniquifySeparator", - "in": "query", - "description": "Optional value of name suffix separator used by UNIQUIFY policy. By default, underscore separator is used. For example, strategy is UNIQUIFY, separator is '-'; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-7fsh4f'.", - "required": false, - "schema": { - "type": "string", - "default": "_" - } - }, - { - "name": "uniquifyStrategy", - "in": "query", - "description": "Optional value of uniquify strategy used by UNIQUIFY policy. Possible values: RANDOM or INCREMENTAL. By default, RANDOM strategy is used, which means random alphanumeric string will be added as a suffix to entity name. INCREMENTAL implies the first possible number starting from 1 will be added as a name suffix. For example, strategy is UNIQUIFY, uniquify strategy is INCREMENTAL; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-1.", - "required": false, - "schema": { - "$ref": "#/components/schemas/UniquifyStrategy", - "default": "RANDOM" - } } ], - "requestBody": { - "description": "A JSON value representing the asset.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Asset" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Asset" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -13812,7 +14043,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -13932,34 +14163,37 @@ ] } }, - "/api/asset/bulk_import": { + "/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}": { "post": { "tags": [ - "asset-controller" + "agent-profile-controller" ], - "summary": "Import the bulk of assets (processAssetsBulkImport)", - "description": "There's an ability to import the bulk of assets using the only .csv file.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "processAssetBulkImport", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BulkImportRequest" - } + "summary": "Assign App Profile to Agent Profile (assignAppProfileToAgentProfile)", + "description": "Assigns the given agent application profile to the agent profile, making it available to applications managed by that agent profile.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "assignAppProfileToAgentProfile", + "parameters": [ + { + "name": "agentProfileId", + "in": "path", + "description": "Agent Profile Id", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "applicationProfileId", + "in": "path", + "description": "Agent Application Profile Id", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BulkImportResultAsset" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -14090,21 +14324,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/asset/info/{assetId}": { - "get": { + }, + "delete": { "tags": [ - "asset-controller" + "agent-profile-controller" ], - "summary": "Get Asset Info (getAssetInfoById)", - "description": "Fetch the Asset Info object based on the provided Asset Id. If the user has the authority of 'Tenant Administrator', the server checks that the asset is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the asset is assigned to the same customer.Asset Info is an extension of the default Asset object that contains information about the owner name. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAssetInfoById", + "summary": "Unassign App Profile from Agent Profile (unassignAppProfileFromAgentProfile)", + "description": "Removes the assignment of the given agent application profile from the agent profile.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "unassignAppProfileFromAgentProfile", "parameters": [ { - "name": "assetId", + "name": "agentProfileId", "in": "path", - "description": "A string value representing the asset id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Agent Profile Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "applicationProfileId", + "in": "path", + "description": "Agent Application Profile Id", "required": true, "schema": { "type": "string" @@ -14113,14 +14354,7 @@ ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AssetInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -14253,27 +14487,46 @@ ] } }, - "/api/asset/types": { - "get": { + "/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}/autoDiscovery": { + "post": { "tags": [ - "asset-controller" + "agent-profile-controller" + ], + "summary": "Set App Profile Relates On Auto-Discovery (setAppProfileRelatesOnAutoDiscovery)", + "description": "Enables or disables automatic assignment of the app profile to new auto-discovered applications with a matching template. Only one app profile per agent profile and template pair may relate on auto-discovery.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "setAppProfileRelatesOnAutoDiscovery", + "parameters": [ + { + "name": "agentProfileId", + "in": "path", + "description": "Agent Profile Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "applicationProfileId", + "in": "path", + "description": "Agent Application Profile Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "relate", + "in": "query", + "description": "Whether the app profile should be auto-assigned to new auto-discovered applications with a matching template", + "required": true, + "schema": { + "type": "boolean" + } + } ], - "summary": "Get Asset Types (getAssetTypes)", - "description": "Deprecated. See 'getAssetProfileNames' API from Asset Profile Controller instead.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getAssetTypes", "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntitySubtype" - } - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -14286,7 +14539,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -14396,7 +14649,6 @@ } } }, - "deprecated": true, "security": [ { "HttpLoginForm": [] @@ -14407,20 +14659,67 @@ ] } }, - "/api/asset/{assetId}": { + "/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}/bulk": { "get": { "tags": [ - "asset-controller" + "agent-profile-controller" ], - "summary": "Get Asset (getAssetById)", - "description": "Fetch the Asset object based on the provided Asset Id. If the user has the authority of 'Tenant Administrator', the server checks that the asset is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the asset is assigned to the same customer.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAssetById", + "summary": "Get Bulk Actions for Agent Profile and Application Profile (getAgentProfileAppProfileBulkActions)", + "description": "Returns a page of bulk actions previously submitted for the given agent profile and application profile pair. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentProfileAppProfileBulkActions", "parameters": [ { - "name": "assetId", + "name": "agentProfileId", "in": "path", - "description": "A string value representing the asset id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Agent Profile Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "applicationProfileId", + "in": "path", + "description": "Agent Application Profile Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, "schema": { "type": "string" } @@ -14432,7 +14731,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Asset" + "$ref": "#/components/schemas/PageDataAgentBulkAction" } } } @@ -14567,27 +14866,53 @@ } ] }, - "delete": { + "post": { "tags": [ - "asset-controller" + "agent-profile-controller" ], - "summary": "Delete asset (deleteAsset)", - "description": "Deletes the asset and all the relations (from and to the asset). Referencing non-existing asset Id will cause an error.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", - "operationId": "deleteAsset", + "summary": "Bulk Operation (bulkOperation)", + "description": "Enqueues a bulk operation over the applications of the given agent profile and application profile and returns the created bulk action to track its progress.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "bulkOperation", "parameters": [ { - "name": "assetId", + "name": "agentProfileId", "in": "path", - "description": "A string value representing the asset id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Agent Profile Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "applicationProfileId", + "in": "path", + "description": "Agent Application Profile Id", "required": true, "schema": { "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BulkOperationRequest" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentBulkAction" + } + } + } }, "400": { "description": "Bad Request", @@ -14600,7 +14925,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -14720,99 +15045,51 @@ ] } }, - "/api/assetInfos/all": { - "get": { + "/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}/bulk/preview": { + "post": { "tags": [ - "asset-controller" + "agent-profile-controller" ], - "summary": "Get All Asset Infos for current user (getAllAssetInfos)", - "description": "Returns a page of asset info objects owned by the tenant or the customer of a current user. Asset Info is an extension of the default Asset object that contains information about the owner name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAllAssetInfos", + "summary": "Preview Bulk Operation (previewBulkOperation)", + "description": "Previews the effect of a bulk operation over the applications of the given agent profile and application profile without enqueuing it, returning the set of affected applications and the resulting actions.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "previewBulkOperation", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "agentProfileId", + "in": "path", + "description": "Agent Profile Id", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "assetProfileId", - "in": "query", - "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, "schema": { "type": "string" } }, { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the asset name.", - "required": false, + "name": "applicationProfileId", + "in": "path", + "description": "Agent Application Profile Id", + "required": true, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "label", - "customerTitle" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BulkOperationRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAssetInfo" + "$ref": "#/components/schemas/BulkOperationPreview" } } } @@ -14828,7 +15105,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -14948,20 +15225,29 @@ ] } }, - "/api/assets": { - "get": { + "/api/agent/profile/{agentProfileId}/appProfiles/assign": { + "post": { "tags": [ - "asset-controller" + "agent-profile-controller" ], - "summary": "Get Assets By Ids (getAssetsByIds)", - "description": "Requested assets must be owned by tenant or assigned to customer which user is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAssetsByIds", + "summary": "Assign Multiple App Profiles to Agent Profile (assignAppProfilesToAgentProfile)", + "description": "Assigns the given set of agent application profiles to the agent profile in a single request, replacing the previous assignment set. An explicitly empty 'appProfileIds' value (e.g. 'appProfileIds=') removes all assignments.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "assignAppProfilesToAgentProfile", "parameters": [ { - "name": "assetIds", - "in": "query", - "description": "A list of asset ids, separated by comma ','", + "name": "agentProfileId", + "in": "path", + "description": "Agent Profile Id", "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "appProfileIds", + "in": "query", + "description": "Agent application profile ids that replace the current assignment set. An explicitly empty value removes all assignments.", + "required": false, "schema": { "type": "array", "items": { @@ -14972,17 +15258,7 @@ ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Asset" - } - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -14995,7 +15271,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -15113,24 +15389,27 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/agent/profile/{agentProfileId}/appProfilesInfo": { + "get": { "tags": [ - "asset-controller" + "agent-profile-controller" ], - "summary": "Find related assets (findAssetsByQuery)", - "description": "Returns all assets that are related to the specific entity. The entity id, relation type, asset types, depth of the search, and other query parameters defined using complex 'AssetSearchQuery' object. See 'Model' tab of the Parameters for more info. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "findAssetsByQuery", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AssetSearchQuery" - } + "summary": "Get Agent Profile App Profile Infos (getAgentProfileAppProfileInfos)", + "description": "Returns app profiles assigned to the given agent profile, enriched with template version, the count of AgentApplications using each app profile within this agent profile and the additional info of the assignment relation.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentProfileAppProfileInfos", + "parameters": [ + { + "name": "agentProfileId", + "in": "path", + "description": "Agent Profile Id", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", @@ -15139,7 +15418,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Asset" + "$ref": "#/components/schemas/AgentAppProfileRelationInfo" } } } @@ -15156,7 +15435,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -15276,19 +15555,19 @@ ] } }, - "/api/customer/{customerId}/assetInfos": { + "/api/agent/profile/{agentProfileId}/bulk": { "get": { "tags": [ - "asset-controller" + "agent-profile-controller" ], - "summary": "Get Customer Asset Infos (getCustomerAssetInfos)", - "description": "Returns a page of asset info objects owned by the specified customer. Asset Info is an extension of the default Asset object that contains information about the owner name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerAssetInfos", + "summary": "Get Bulk Actions for Agent Profile (getAgentProfileBulkActions)", + "description": "Returns a page of bulk actions previously submitted for the given agent profile. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAgentProfileBulkActions", "parameters": [ { - "name": "customerId", + "name": "agentProfileId", "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Agent Profile Id", "required": true, "schema": { "type": "string" @@ -15314,47 +15593,13 @@ "format": "int32" } }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "assetProfileId", - "in": "query", - "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the asset name.", - "required": false, - "schema": { - "type": "string" - } - }, { "name": "sortProperty", "in": "query", "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "label", - "customerTitle" - ] + "type": "string" } }, { @@ -15363,11 +15608,7 @@ "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "string" } } ], @@ -15377,7 +15618,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAssetInfo" + "$ref": "#/components/schemas/PageDataAgentBulkAction" } } } @@ -15513,24 +15754,176 @@ ] } }, - "/api/customer/{customerId}/assets": { - "get": { + "/api/agent/profile/{agentProfileId}/default": { + "post": { "tags": [ - "asset-controller" + "agent-profile-controller" ], - "summary": "Get Customer Assets (getCustomerAssets)", - "description": "Returns a page of assets objects owned by customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerAssets", + "summary": "Make Agent Profile Default (setDefaultAgentProfile)", + "description": "Marks agent profile as default within a tenant scope.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "setDefaultAgentProfile", "parameters": [ { - "name": "customerId", + "name": "agentProfileId", "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Agent Profile Id", "required": true, "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentProfile" + } + } + } }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenant/agent/profileInfos": { + "get": { + "tags": [ + "agent-profile-controller" + ], + "summary": "Get Tenant Agent Profile Infos (getTenantAgentProfileInfos)", + "description": "Returns a page of Agent Profile Info objects owned by the current tenant. Agent Profile Info is a lightweight object that contains only id and name of the profile. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getTenantAgentProfileInfos", + "parameters": [ { "name": "pageSize", "in": "query", @@ -15551,19 +15944,9 @@ "format": "int32" } }, - { - "name": "type", - "in": "query", - "description": "Asset type", - "required": false, - "schema": { - "type": "string" - } - }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the asset name.", "required": false, "schema": { "type": "string" @@ -15575,14 +15958,7 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "label", - "customerTitle" - ] + "type": "string" } }, { @@ -15591,11 +15967,7 @@ "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "string" } } ], @@ -15605,7 +15977,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAsset" + "$ref": "#/components/schemas/PageDataAgentProfileInfo" } } } @@ -15741,32 +16113,23 @@ ] } }, - "/api/entityGroup/{entityGroupId}/assets": { + "/api/tenant/agent/profiles": { "get": { "tags": [ - "asset-controller" + "agent-profile-controller" ], - "summary": "Get assets by Entity Group Id (getAssetsByEntityGroupId)", - "description": "Returns a page of asset objects that belongs to specified Entity Group Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getAssetsByEntityGroupId", + "summary": "Get Tenant Agent Profiles (getTenantAgentProfiles)", + "description": "Returns a page of Agent Profile objects owned by the current tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getTenantAgentProfiles", "parameters": [ - { - "name": "entityGroupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "pageSize", "in": "query", "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string", - "minimum": 1 + "type": "integer", + "format": "int32" } }, { @@ -15775,14 +16138,13 @@ "description": "Sequence number of page starting from 0", "required": true, "schema": { - "type": "string", - "minimum": 0 + "type": "integer", + "format": "int32" } }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the asset name.", "required": false, "schema": { "type": "string" @@ -15794,14 +16156,7 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "label", - "customerTitle" - ] + "type": "string" } }, { @@ -15810,11 +16165,7 @@ "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "string" } } ], @@ -15824,7 +16175,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAsset" + "$ref": "#/components/schemas/PageDataAgentProfile" } } } @@ -15960,32 +16311,20 @@ ] } }, - "/api/tenant/asset": { + "/api/ai/chats": { "get": { "tags": [ - "asset-controller" - ], - "summary": "Get Tenant Asset (getTenantAssetByName)", - "description": "Requested asset must be owned by tenant that the user belongs to. Asset name is an unique property of asset. So it can be used to identify the asset.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getTenantAssetByName", - "parameters": [ - { - "name": "assetName", - "in": "query", - "description": "A string value representing the Asset name.", - "required": true, - "schema": { - "type": "string" - } - } + "ai-chat-controller" ], + "summary": "listChats", + "operationId": "listChats", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Asset" + "$ref": "#/components/schemas/JsonNode" } } } @@ -16119,92 +16458,30 @@ "ApiKeyForm": [] } ] - } - }, - "/api/tenant/assets": { - "get": { + }, + "post": { "tags": [ - "asset-controller" + "ai-chat-controller" ], - "summary": "Get Tenant Assets (getTenantAssets)", - "description": "Returns a page of assets owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getTenantAssets", - "parameters": [ - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "type", - "in": "query", - "description": "Asset type", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the asset name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "label", - "customerTitle" - ] + "summary": "createChat", + "operationId": "createChat", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } } }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } - ], + "required": true + }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAsset" + "$ref": "#/components/schemas/JsonNode" } } } @@ -16220,7 +16497,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -16340,102 +16617,27 @@ ] } }, - "/api/user/assets": { - "get": { + "/api/ai/chats/{chatId}": { + "delete": { "tags": [ - "asset-controller" + "ai-chat-controller" ], - "summary": "Get Assets (getUserAssets)", - "description": "Returns a page of assets objects available for the current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Asset Info is an extension of the default Asset object that contains information about the owner name. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getUserAssets", + "summary": "deleteChat", + "operationId": "deleteChat", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "chatId", + "in": "path", "required": true, "schema": { "type": "string", - "minimum": 0 - } - }, - { - "name": "type", - "in": "query", - "description": "Asset type", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "assetProfileId", - "in": "query", - "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the asset name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "label", - "customerTitle" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "format": "uuid" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataAsset" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -16566,36 +16768,37 @@ "ApiKeyForm": [] } ] - } - }, - "/api/assetProfile": { - "post": { + }, + "patch": { "tags": [ - "asset-profile-controller" + "ai-chat-controller" + ], + "summary": "updateChat", + "operationId": "updateChat", + "parameters": [ + { + "name": "chatId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Create Or Update Asset Profile (saveAssetProfile)", - "description": "Create or update the Asset Profile. When creating asset profile, platform generates asset profile id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created asset profile id will be present in the response. Specify existing asset profile id to update the asset profile. Referencing non-existing asset profile Id will cause 'Not Found' error. \n\nAsset profile name is unique in the scope of tenant. Only one 'default' asset profile may exist in scope of tenant. Remove 'id', 'tenantId' from the request body example (below) to create new Asset Profile entity. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "saveAssetProfile", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AssetProfile" + "$ref": "#/components/schemas/JsonNode" } } }, "required": true }, "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AssetProfile" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", @@ -16608,7 +16811,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -16728,23 +16931,21 @@ ] } }, - "/api/assetProfile/names": { + "/api/ai/chats/{chatId}/messages": { "get": { "tags": [ - "asset-profile-controller" + "ai-chat-controller" ], - "summary": "Get Asset Profile names (getAssetProfileNames)", - "description": "Returns a set of unique asset profile names owned by the tenant.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getAssetProfileNames", + "summary": "getChatMessages", + "operationId": "getChatMessages", "parameters": [ { - "name": "activeOnly", - "in": "query", - "description": "Flag indicating whether to retrieve exclusively the names of asset profiles that are referenced by tenant's assets.", - "required": false, + "name": "chatId", + "in": "path", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string", + "format": "uuid" } } ], @@ -16754,10 +16955,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityInfo" - } + "$ref": "#/components/schemas/JsonNode" } } } @@ -16891,43 +17089,60 @@ "ApiKeyForm": [] } ] - } - }, - "/api/assetProfile/{assetProfileId}": { - "get": { + }, + "post": { "tags": [ - "asset-profile-controller" + "ai-chat-controller" ], - "summary": "Get Asset Profile (getAssetProfileById)", - "description": "Fetch the Asset Profile object based on the provided Asset Profile Id. The server checks that the asset profile is owned by the same tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getAssetProfileById", + "summary": "sendChatMessage", + "operationId": "sendChatMessage", "parameters": [ { - "name": "assetProfileId", + "name": "chatId", "in": "path", - "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-Authorization", + "in": "header", "required": true, "schema": { "type": "string" } }, { - "name": "inlineImages", - "in": "query", - "description": "Inline images as a data URL (Base64)", + "name": "Accept-Language", + "in": "header", "required": false, "schema": { - "type": "boolean" + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { - "application/json": { + "text/event-stream": { "schema": { - "$ref": "#/components/schemas/AssetProfile" + "type": "array", + "items": { + "$ref": "#/components/schemas/ServerSentEventString" + } } } } @@ -16943,7 +17158,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -17061,28 +17276,54 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/ai/devices/{deviceId}/dashboard": { + "post": { "tags": [ - "asset-profile-controller" + "ai-device-dashboard-controller" ], - "summary": "Delete asset profile (deleteAssetProfile)", - "description": "Deletes the asset profile. Referencing non-existing asset profile Id will cause an error. Can't delete the asset profile if it is referenced by existing assets.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "deleteAssetProfile", + "summary": "generateDashboard", + "operationId": "generateDashboard", "parameters": [ { - "name": "assetProfileId", + "name": "deviceId", "in": "path", - "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-Authorization", + "in": "header", "required": true, "schema": { "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + } }, "400": { "description": "Bad Request", @@ -17095,7 +17336,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -17215,23 +17456,71 @@ ] } }, - "/api/assetProfile/{assetProfileId}/default": { - "post": { + "/api/ai/model": { + "get": { "tags": [ - "asset-profile-controller" + "ai-model-controller" ], - "summary": "Make Asset Profile Default (setDefaultAssetProfile)", - "description": "Marks asset profile as default within a tenant scope.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "setDefaultAssetProfile", + "summary": "Get AI models (getAiModels)", + "description": "Returns a page of AI models. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAiModels", "parameters": [ { - "name": "assetProfileId", - "in": "path", - "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the AI model name, provider and model ID.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "provider", + "modelId" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -17240,7 +17529,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AssetProfile" + "$ref": "#/components/schemas/PageDataAiModel" } } } @@ -17256,7 +17545,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -17374,23 +17663,31 @@ "ApiKeyForm": [] } ] - } - }, - "/api/assetProfileInfo/default": { - "get": { + }, + "post": { "tags": [ - "asset-profile-controller" + "ai-model-controller" ], - "summary": "Get Default Asset Profile (getDefaultAssetProfileInfo)", - "description": "Fetch the Default Asset Profile Info object. Asset Profile Info is a lightweight object that includes main information about Asset Profile. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getDefaultAssetProfileInfo", + "summary": "Create or update AI model (saveAiModel)", + "description": "Creates or updates an AI model record.\n\n• **Create:** Omit the `id` to create a new record. The platform assigns a UUID to the new record and returns it in the `id` field of the response.\n\n• **Update:** Include an existing `id` to modify that record. If no matching record exists, the API responds with **404 Not Found**.\n\nTenant ID for the AI model will be taken from the authenticated user making the request, regardless of any value provided in the request body.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveAiModel", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AiModel" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AssetProfileInfo" + "$ref": "#/components/schemas/AiModel" } } } @@ -17406,7 +17703,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -17526,32 +17823,31 @@ ] } }, - "/api/assetProfileInfo/{assetProfileId}": { - "get": { + "/api/ai/model/chat": { + "post": { "tags": [ - "asset-profile-controller" + "ai-model-controller" ], - "summary": "Get Asset Profile Info (getAssetProfileInfoById)", - "description": "Fetch the Asset Profile Info object based on the provided Asset Profile Id. Asset Profile Info is a lightweight object that includes main information about Asset Profile. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getAssetProfileInfoById", - "parameters": [ - { - "name": "assetProfileId", - "in": "path", - "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "Send request to AI chat model (sendChatRequest)", + "description": "Submits a single prompt - made up of an optional system message and a required user message - to the specified AI chat model and returns either the generated answer or an error envelope.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "sendChatRequest", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TbChatRequest" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AssetProfileInfo" + "$ref": "#/components/schemas/TbChatResponse" } } } @@ -17567,7 +17863,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -17687,71 +17983,186 @@ ] } }, - "/api/assetProfileInfos": { + "/api/ai/model/{modelUuid}": { "get": { "tags": [ - "asset-profile-controller" + "ai-model-controller" ], - "summary": "Get Asset Profile infos (getAssetProfileInfos)", - "description": "Returns a page of asset profile info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Asset Profile Info is a lightweight object that includes main information about Asset Profile. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getAssetProfileInfos", + "summary": "Get AI model by ID (getAiModelById)", + "description": "Fetches an AI model record by its `id`.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAiModelById", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", + "name": "modelUuid", + "in": "path", + "description": "ID of the AI model record", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "format": "uuid" + }, + "example": "de7900d4-30e2-11f0-9cd2-0242ac120002" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AiModel" + } + } } }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the asset profile name.", - "required": false, - "schema": { - "type": "string" + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "description", - "isDefault" - ] + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + }, + "delete": { + "tags": [ + "ai-model-controller" + ], + "summary": "Delete AI model by ID (deleteAiModelById)", + "description": "Deletes the AI model record by its `id`. If a record with the specified `id` exists, the record is deleted and the endpoint returns `true`. If no such record exists, the endpoint returns `false`.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "deleteAiModelById", + "parameters": [ + { + "name": "modelUuid", + "in": "path", + "description": "ID of the AI model record", + "required": true, "schema": { "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } + "format": "uuid" + }, + "example": "de7900d4-30e2-11f0-9cd2-0242ac120002" } ], "responses": { @@ -17760,7 +18171,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAssetProfileInfo" + "type": "boolean" } } } @@ -17896,38 +18307,20 @@ ] } }, - "/api/assetProfileInfos/list": { + "/api/ai/solution/infos": { "get": { "tags": [ - "asset-profile-controller" - ], - "summary": "Get Asset Profiles By Ids (getAssetProfilesByIds)", - "description": "Requested asset profiles must be owned by tenant which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAssetProfilesByIds", - "parameters": [ - { - "name": "assetProfileIds", - "in": "query", - "description": "A list of asset profile ids, separated by comma ','", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } + "ai-solution-controller" ], + "summary": "getSolutions", + "operationId": "getSolutions", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AssetProfileInfo" - } + "$ref": "#/components/schemas/JsonNode" } } } @@ -18063,80 +18456,20 @@ ] } }, - "/api/assetProfiles": { - "get": { + "/api/ai/solution/start": { + "post": { "tags": [ - "asset-profile-controller" - ], - "summary": "Get Asset Profiles (getAssetProfiles)", - "description": "Returns a page of asset profile objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getAssetProfiles", - "parameters": [ - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the asset profile name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "description", - "isDefault" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } + "ai-solution-controller" ], + "summary": "startNew", + "operationId": "startNew", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAssetProfile" + "$ref": "#/components/schemas/JsonNode" } } } @@ -18152,7 +18485,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -18272,101 +18605,21 @@ ] } }, - "/api/audit/logs": { + "/api/ai/solution/{solutionId}": { "get": { "tags": [ - "audit-log-controller" + "ai-solution-controller" ], - "summary": "Get all audit logs (getAuditLogs)", - "description": "Returns a page of audit logs related to all entities in the scope of the current user's Tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the audit logs.", - "operationId": "getAuditLogs", + "summary": "getSolution", + "operationId": "getSolution", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "solutionId", + "in": "path", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on one of the next properties: entityType, entityName, userName, actionType, actionStatus.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of audit log to sort by. See the 'Model' tab of the Response Class for more details. Note: entityType sort property is not defined in the AuditLog class, however, it can be used to sort audit logs by types of entities that were logged.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "entityType", - "entityName", - "userName", - "actionType", - "actionStatus" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, "schema": { "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - { - "name": "startTime", - "in": "query", - "description": "The start timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTime", - "in": "query", - "description": "The end timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "actionTypes", - "in": "query", - "description": "A String value representing comma-separated list of action types. This parameter is optional, but it can be used to filter results to fetch only audit logs of specific action types. For example, 'LOGIN', 'LOGOUT'. See the 'Model' tab of the Response Class for more details.", - "required": false, - "schema": { - "type": "string" + "format": "uuid" } } ], @@ -18376,7 +18629,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAuditLog" + "$ref": "#/components/schemas/JsonNode" } } } @@ -18510,125 +18763,27 @@ "ApiKeyForm": [] } ] - } - }, - "/api/audit/logs/customer/{customerId}": { - "get": { + }, + "delete": { "tags": [ - "audit-log-controller" + "ai-solution-controller" ], - "summary": "Get audit logs by customer id (getAuditLogsByCustomerId)", - "description": "Returns a page of audit logs related to the targeted customer entities (devices, assets, etc.), and users actions (login, logout, etc.) that belong to this customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the audit logs.", - "operationId": "getAuditLogsByCustomerId", + "summary": "deleteSolution", + "operationId": "deleteSolution", "parameters": [ { - "name": "customerId", + "name": "solutionId", "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on one of the next properties: entityType, entityName, userName, actionType, actionStatus.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of audit log to sort by. See the 'Model' tab of the Response Class for more details. Note: entityType sort property is not defined in the AuditLog class, however, it can be used to sort audit logs by types of entities that were logged.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "entityType", - "entityName", - "userName", - "actionType", - "actionStatus" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, "schema": { "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - { - "name": "startTime", - "in": "query", - "description": "The start timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTime", - "in": "query", - "description": "The end timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "actionTypes", - "in": "query", - "description": "A String value representing comma-separated list of action types. This parameter is optional, but it can be used to filter results to fetch only audit logs of specific action types. For example, 'LOGIN', 'LOGOUT'. See the 'Model' tab of the Response Class for more details.", - "required": false, - "schema": { - "type": "string" + "format": "uuid" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataAuditLog" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -18761,119 +18916,21 @@ ] } }, - "/api/audit/logs/entity/{entityType}/{entityId}": { - "get": { + "/api/ai/solution/{solutionId}/create": { + "post": { "tags": [ - "audit-log-controller" + "ai-solution-controller" ], - "summary": "Get audit logs by entity id (getAuditLogsByEntityId)", - "description": "Returns a page of audit logs related to the actions on the targeted entity. Basically, this API call is used to get the full lifecycle of some specific entity. For example to see when a device was created, updated, assigned to some customer, or even deleted from the system. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the audit logs.", - "operationId": "getAuditLogsByEntityId", + "summary": "createSolution", + "operationId": "createSolution", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", + "name": "solutionId", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on one of the next properties: entityType, entityName, userName, actionType, actionStatus.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of audit log to sort by. See the 'Model' tab of the Response Class for more details. Note: entityType sort property is not defined in the AuditLog class, however, it can be used to sort audit logs by types of entities that were logged.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "entityType", - "entityName", - "userName", - "actionType", - "actionStatus" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, "schema": { "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - { - "name": "startTime", - "in": "query", - "description": "The start timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTime", - "in": "query", - "description": "The end timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "actionTypes", - "in": "query", - "description": "A String value representing comma-separated list of action types. This parameter is optional, but it can be used to filter results to fetch only audit logs of specific action types. For example, 'LOGIN', 'LOGOUT'. See the 'Model' tab of the Response Class for more details.", - "required": false, - "schema": { - "type": "string" + "format": "uuid" } } ], @@ -18883,7 +18940,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAuditLog" + "$ref": "#/components/schemas/JsonNode" } } } @@ -18899,7 +18956,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -19019,108 +19076,27 @@ ] } }, - "/api/audit/logs/user/{userId}": { - "get": { + "/api/ai/solution/{solutionId}/install": { + "post": { "tags": [ - "audit-log-controller" + "ai-solution-controller" ], - "summary": "Get audit logs by user id (getAuditLogsByUserId)", - "description": "Returns a page of audit logs related to the actions of targeted user. For example, RPC call to a particular device, or alarm acknowledgment for a specific device, etc. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the audit logs.", - "operationId": "getAuditLogsByUserId", + "summary": "installSolution", + "operationId": "installSolution", "parameters": [ { - "name": "userId", + "name": "solutionId", "in": "path", - "description": "A string value representing the user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on one of the next properties: entityType, entityName, userName, actionType, actionStatus.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of audit log to sort by. See the 'Model' tab of the Response Class for more details. Note: entityType sort property is not defined in the AuditLog class, however, it can be used to sort audit logs by types of entities that were logged.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "entityType", - "entityName", - "userName", - "actionType", - "actionStatus" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, "schema": { "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - { - "name": "startTime", - "in": "query", - "description": "The start timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTime", - "in": "query", - "description": "The end timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" + "format": "uuid" } }, { - "name": "actionTypes", - "in": "query", - "description": "A String value representing comma-separated list of action types. This parameter is optional, but it can be used to filter results to fetch only audit logs of specific action types. For example, 'LOGIN', 'LOGOUT'. See the 'Model' tab of the Response Class for more details.", - "required": false, + "name": "X-Authorization", + "in": "header", + "required": true, "schema": { "type": "string" } @@ -19132,7 +19108,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataAuditLog" + "$ref": "#/components/schemas/JsonNode" } } } @@ -19148,7 +19124,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -19268,31 +19244,39 @@ ] } }, - "/api/auth/changePassword": { - "post": { + "/api/ai/solution/{solutionId}/uninstall": { + "delete": { "tags": [ - "auth-controller" + "ai-solution-controller" ], - "summary": "Change password for current User (changePassword)", - "description": "Change the password for the User which credentials are used to perform this REST API call. Be aware that previously generated [JWT](https://jwt.io/) tokens will be still valid until they expire.", - "operationId": "changePassword", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChangePasswordRequest" - } + "summary": "uninstallSolution", + "operationId": "uninstallSolution", + "parameters": [ + { + "name": "solutionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "X-Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JwtPair" + "$ref": "#/components/schemas/JsonNode" } } } @@ -19308,7 +19292,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -19428,17 +19412,52 @@ ] } }, - "/api/auth/logout": { - "post": { + "/api/ai/solution/{solutionId}/{dataKey}": { + "put": { "tags": [ - "auth-controller" + "ai-solution-controller" ], - "summary": "Logout (logout)", - "description": "Special API call to record the 'logout' of the user to the Audit Logs. Since platform uses [JWT](https://jwt.io/), the actual logout is the procedure of clearing the [JWT](https://jwt.io/) token on the client side. ", - "operationId": "logout", + "summary": "updateData", + "operationId": "updateData", + "parameters": [ + { + "name": "solutionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "dataKey", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + } }, "400": { "description": "Bad Request", @@ -19451,7 +19470,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -19571,21 +19590,49 @@ ] } }, - "/api/auth/user": { - "get": { + "/api/ai/solution/{solutionId}/{step}/chat": { + "post": { "tags": [ - "auth-controller" + "ai-solution-controller" ], - "summary": "Get current User (getUser)", - "description": "Get the information about the User which credentials are used to perform this REST API call.", - "operationId": "getUser", + "summary": "chat", + "operationId": "chat", + "parameters": [ + { + "name": "solutionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "step", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/SolutionStep" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/JsonNode" } } } @@ -19601,7 +19648,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -19721,35 +19768,35 @@ ] } }, - "/api/noauth/activate": { - "get": { + "/api/ai/solution/{solutionId}/{step}/clear": { + "delete": { "tags": [ - "auth-controller" + "ai-solution-controller" ], - "summary": "Check Activate User Token (checkActivateToken)", - "description": "Checks the activation token and forwards user to 'Create Password' page. If token is valid, returns '303 See Other' (redirect) response code with the correct address of 'Create Password' page and same 'activateToken' specified in the URL parameters. If token is not valid, returns '409 Conflict'. If token is expired, redirects to error page.", - "operationId": "checkActivateToken", + "summary": "clearStep", + "operationId": "clearStep", "parameters": [ { - "name": "activateToken", - "in": "query", - "description": "The activate token string.", + "name": "solutionId", + "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "name": "step", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/SolutionStep" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -19871,31 +19918,29 @@ } } } - } - }, - "post": { - "tags": [ - "auth-controller" - ], - "summary": "Activate User", - "description": "Checks the activation token and updates corresponding user password in the database. Now the user may start using his password to login. The response already contains the [JWT](https://jwt.io) activation and refresh tokens, to simplify the user activation flow and avoid asking user to input password again after activation. If token is valid, returns the object that contains [JWT](https://jwt.io/) access and refresh tokens. If token is not valid, returns '400 Bad Request'.", - "operationId": "activateUser", - "parameters": [ + }, + "security": [ { - "name": "sendActivationMail", - "in": "query", - "required": false, - "schema": { - "type": "boolean", - "default": true - } + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] } + ] + } + }, + "/api/ai/tools/resolve-approval": { + "post": { + "tags": [ + "ai-tool-controller" ], + "summary": "resolveToolApproval", + "operationId": "resolveToolApproval", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActivateUserRequest" + "$ref": "#/components/schemas/JsonNode" } } }, @@ -19907,7 +19952,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JwtPair" + "$ref": "#/components/schemas/JsonNode" } } } @@ -20032,26 +20077,80 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/resetPassword": { + "/api/alarm/{alarmId}/comment": { "get": { "tags": [ - "auth-controller" + "alarm-comment-controller" ], - "summary": "Check password reset token (checkResetToken)", - "description": "Checks the password reset token and forwards user to 'Reset Password' page. If token is valid, returns '303 See Other' (redirect) response code with the correct address of 'Reset Password' page and same 'resetToken' specified in the URL parameters. If token is not valid, returns '409 Conflict'. If token is expired, redirects to error page.", - "operationId": "checkResetToken", + "summary": "Get Alarm comments (getAlarmComments)", + "description": "Returns a page of alarm comments for specified alarm. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getAlarmComments", "parameters": [ { - "name": "resetToken", - "in": "query", - "description": "The reset token string.", + "name": "alarmId", + "in": "path", + "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "id" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -20060,7 +20159,7 @@ "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/PageDataAlarmCommentInfo" } } } @@ -20185,20 +20284,40 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] }, "post": { "tags": [ - "auth-controller" + "alarm-comment-controller" + ], + "summary": "Create or update Alarm Comment ", + "description": "Creates or Updates the Alarm Comment. When creating comment, platform generates Alarm Comment Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm Comment id will be present in the response. Specify existing Alarm Comment id to update the alarm. Referencing non-existing Alarm Comment Id will cause 'Not Found' error. \n\n To create new Alarm comment entity it is enough to specify 'comment' json element with 'text' node, for example: {\"comment\": { \"text\": \"my comment\"}}. \n\n If comment type is not specified the default value 'OTHER' will be saved. If 'alarmId' or 'userId' specified in body it will be ignored.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "saveAlarmComment", + "parameters": [ + { + "name": "alarmId", + "in": "path", + "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Reset password (resetPassword)", - "description": "Checks the password reset token and updates the password. If token is not valid, returns '400 Bad Request'.", - "operationId": "resetPassword", "requestBody": { + "description": "A JSON value representing the comment.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ResetPasswordRequest" + "$ref": "#/components/schemas/AlarmComment" } } }, @@ -20206,7 +20325,14 @@ }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlarmComment" + } + } + } }, "400": { "description": "Bad Request", @@ -20328,27 +20454,45 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/resetPasswordByEmail": { - "post": { + "/api/alarm/{alarmId}/comment/{commentId}": { + "delete": { "tags": [ - "auth-controller" + "alarm-comment-controller" ], - "summary": "Request reset password email (requestResetPasswordByEmail)", - "description": "Request to send the reset password email if the user with specified email address is present in the database. Always return '200 OK' status for security purposes.", - "operationId": "requestResetPasswordByEmail", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResetPasswordEmailRequest" - } + "summary": "Delete Alarm comment (deleteAlarmComment)", + "description": "Deletes the Alarm comment. Referencing non-existing Alarm comment Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "deleteAlarmComment", + "parameters": [ + { + "name": "alarmId", + "in": "path", + "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "commentId", + "in": "path", + "description": "A string value representing the alarm comment id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK" @@ -20364,7 +20508,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -20473,24 +20617,43 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/userPasswordPolicy": { - "get": { + "/api/alarm": { + "post": { "tags": [ - "auth-controller" + "alarm-controller" ], - "summary": "Get the current User password policy (getUserPasswordPolicy)", - "description": "API call to get the password policy for the password validation form(s).", - "operationId": "getUserPasswordPolicy", + "summary": "Create or Update Alarm (saveAlarm)", + "description": "Creates or Updates the Alarm. When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. Referencing non-existing Alarm Id will cause 'Not Found' error. \n\nPlatform also deduplicate the alarms based on the entity id of originator and alarm 'type'. For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Alarm entity. \n\nThe alarm originator is an immutable routing key: when updating an existing alarm, the 'originator' in the request body must match the stored alarm's originator. A request that references an existing alarm id but carries a different originator is treated as a lookup miss and causes a 'Not Found' error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "saveAlarm", + "requestBody": { + "description": "A JSON value representing the alarm.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Alarm" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserPasswordPolicy" + "$ref": "#/components/schemas/Alarm" } } } @@ -20506,7 +20669,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -20615,29 +20778,95 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/billingEndpoint/sendAccountActivated": { - "post": { + "/api/alarm/highestSeverity/{entityType}/{entityId}": { + "get": { "tags": [ - "billing-endpoint-controller" + "alarm-controller" ], - "summary": "sendAccountActivatedEmail", - "operationId": "sendAccountActivatedEmail", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } + "summary": "Get Highest Alarm Severity (getHighestAlarmSeverity)", + "description": "Search the alarms by originator ('entityType' and entityId') and optional 'status' or 'searchStatus' filters and returns the highest AlarmSeverity(CRITICAL, MAJOR, MINOR, WARNING or INDETERMINATE). Specifying both parameters 'searchStatus' and 'status' at the same time will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getHighestAlarmSeverity", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "searchStatus", + "in": "query", + "description": "A string value representing one of the AlarmSearchStatus enumeration value", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ANY", + "ACTIVE", + "CLEARED", + "ACK", + "UNACK" + ] + } + }, + { + "name": "status", + "in": "query", + "description": "A string value representing one of the AlarmStatus enumeration value", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ACTIVE_UNACK", + "ACTIVE_ACK", + "CLEARED_UNACK", + "CLEARED_ACK" + ] + } + }, + { + "name": "assigneeId", + "in": "query", + "description": "A string value representing the assignee user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlarmSeverity" + } + } + } }, "400": { "description": "Bad Request", @@ -20650,7 +20879,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -20770,26 +20999,35 @@ ] } }, - "/api/billingEndpoint/sendActivation": { - "post": { + "/api/alarm/info/{alarmId}": { + "get": { "tags": [ - "billing-endpoint-controller" + "alarm-controller" ], - "summary": "sendBillingActivationEmail", - "operationId": "sendBillingActivationEmail", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } + "summary": "Get Alarm Info (getAlarmInfoById)", + "description": "Fetch the Alarm Info object based on the provided Alarm Id. Alarm Info is an extension of the default Alarm object that also contains name of the alarm originator.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAlarmInfoById", + "parameters": [ + { + "name": "alarmId", + "in": "path", + "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlarmInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -20802,7 +21040,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -20922,26 +21160,68 @@ ] } }, - "/api/billingEndpoint/sendPasswordWasReset": { - "post": { + "/api/alarm/types": { + "get": { "tags": [ - "billing-endpoint-controller" + "alarm-controller" ], - "summary": "sendPasswordWasResetEmail", - "operationId": "sendPasswordWasResetEmail", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } + "summary": "Get Alarm Types (getAlarmTypes)", + "description": "Returns a set of unique alarm types based on alarms that are either owned by the tenant or assigned to the customer which user is performing the request.", + "operationId": "getAlarmTypes", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "required": true - }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on of next alarm fields: type, severity or status", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataEntitySubtype" + } + } + } }, "400": { "description": "Bad Request", @@ -20954,7 +21234,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -21074,26 +21354,35 @@ ] } }, - "/api/billingEndpoint/sendResetPassword": { - "post": { + "/api/alarm/{alarmId}": { + "get": { "tags": [ - "billing-endpoint-controller" + "alarm-controller" ], - "summary": "sendResetPasswordEmail", - "operationId": "sendResetPasswordEmail", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } + "summary": "Get Alarm (getAlarmById)", + "description": "Fetch the Alarm object based on the provided Alarm Id. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAlarmById", + "parameters": [ + { + "name": "alarmId", + "in": "path", + "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Alarm" + } + } + } }, "400": { "description": "Bad Request", @@ -21106,7 +21395,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -21224,15 +21513,25 @@ "ApiKeyForm": [] } ] - } - }, - "/api/billingEndpoint/tenant/permission/billing/hiddenPlans": { - "get": { + }, + "delete": { "tags": [ - "billing-endpoint-controller" + "alarm-controller" + ], + "summary": "Delete Alarm (deleteAlarm)", + "description": "Deletes the Alarm. Referencing non-existing Alarm Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", + "operationId": "deleteAlarm", + "parameters": [ + { + "name": "alarmId", + "in": "path", + "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "tenantHasHiddenPlansAccess", - "operationId": "tenantHasHiddenPlansAccess", "responses": { "200": { "description": "OK", @@ -21375,20 +21674,32 @@ ] } }, - "/api/billingEndpoint/tenant/permission/billing/read": { - "get": { + "/api/alarm/{alarmId}/ack": { + "post": { "tags": [ - "billing-endpoint-controller" + "alarm-controller" + ], + "summary": "Acknowledge Alarm (ackAlarm)", + "description": "Acknowledge the Alarm. Once acknowledged, the 'ack_ts' field will be set to current timestamp and special rule chain event 'ALARM_ACK' will be generated. Referencing non-existing Alarm Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "ackAlarm", + "parameters": [ + { + "name": "alarmId", + "in": "path", + "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "tenantHasBillingRead", - "operationId": "tenantHasBillingRead", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "boolean" + "$ref": "#/components/schemas/AlarmInfo" } } } @@ -21404,7 +21715,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -21524,20 +21835,32 @@ ] } }, - "/api/billingEndpoint/tenant/permission/billing/write": { - "get": { + "/api/alarm/{alarmId}/assign": { + "delete": { "tags": [ - "billing-endpoint-controller" + "alarm-controller" + ], + "summary": "Unassign Alarm (unassignAlarm)", + "description": "Unassign the Alarm. Once unassigned, the 'assign_ts' field will be set to current timestamp and special rule chain event 'ALARM_UNASSIGNED' will be generated. Referencing non-existing Alarm Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "unassignAlarm", + "parameters": [ + { + "name": "alarmId", + "in": "path", + "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "tenantHasBillingWrite", - "operationId": "tenantHasBillingWrite", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "boolean" + "$ref": "#/components/schemas/Alarm" } } } @@ -21673,179 +21996,45 @@ ] } }, - "/api/billingEndpoint/tenantCanUpdatePlan": { + "/api/alarm/{alarmId}/assign/{assigneeId}": { "post": { "tags": [ - "billing-endpoint-controller" + "alarm-controller" ], - "summary": "checkTenantCanUpdatePlan", - "operationId": "checkTenantCanUpdatePlan", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } + "summary": "Assign/Reassign Alarm (assignAlarm)", + "description": "Assign the Alarm. Once assigned, the 'assign_ts' field will be set to current timestamp and special rule chain event 'ALARM_ASSIGNED' (or ALARM_REASSIGNED in case of assigning already assigned alarm) will be generated. Referencing non-existing Alarm Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "assignAlarm", + "parameters": [ + { + "name": "alarmId", + "in": "path", + "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "assigneeId", + "in": "path", + "description": "A string value representing the user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid request body", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "404": { - "description": "Not Found", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + "$ref": "#/components/schemas/Alarm" } } } }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] - } - }, - "/api/billingEndpoint/tenantPlanChanged": { - "post": { - "tags": [ - "billing-endpoint-controller" - ], - "summary": "notifyTenantPlanChanged", - "operationId": "notifyTenantPlanChanged", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK" - }, "400": { "description": "Bad Request", "content": { @@ -21977,26 +22166,35 @@ ] } }, - "/api/billingEndpoint/tenantStateChanged": { + "/api/alarm/{alarmId}/clear": { "post": { "tags": [ - "billing-endpoint-controller" + "alarm-controller" ], - "summary": "notifyTenantStateChanged", - "operationId": "notifyTenantStateChanged", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } + "summary": "Clear Alarm (clearAlarm)", + "description": "Clear the Alarm. Once cleared, the 'clear_ts' field will be set to current timestamp and special rule chain event 'ALARM_CLEAR' will be generated. Referencing non-existing Alarm Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "clearAlarm", + "parameters": [ + { + "name": "alarmId", + "in": "path", + "description": "A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlarmInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -22129,26 +22327,174 @@ ] } }, - "/api/billingEndpoint/tenantSubscriptionCreated": { - "post": { + "/api/alarm/{entityType}/{entityId}": { + "get": { "tags": [ - "billing-endpoint-controller" + "alarm-controller" ], - "summary": "notifyTenantSubscriptionCreated", - "operationId": "notifyTenantSubscriptionCreated", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } + "summary": "Get Alarms (getAlarmsByEntity)", + "description": "Returns a page of alarms for the selected entity. Specifying both parameters 'searchStatus' and 'status' at the same time will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAlarmsByEntity", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "searchStatus", + "in": "query", + "description": "A string value representing one of the AlarmSearchStatus enumeration value", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ANY", + "ACTIVE", + "CLEARED", + "ACK", + "UNACK" + ] + } + }, + { + "name": "status", + "in": "query", + "description": "A string value representing one of the AlarmStatus enumeration value", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ACTIVE_UNACK", + "ACTIVE_ACK", + "CLEARED_UNACK", + "CLEARED_ACK" + ] + } + }, + { + "name": "assigneeId", + "in": "query", + "description": "A string value representing the assignee user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on of next alarm fields: type, severity or status", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "startTs", + "endTs", + "type", + "ackTs", + "clearTs", + "severity", + "status" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "startTime", + "in": "query", + "description": "The start timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "The end timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fetchOriginator", + "in": "query", + "description": "A boolean value to specify if the alarm originator name will be filled in the AlarmInfo object field: 'originatorName' or will returns as null.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataAlarmInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -22161,7 +22507,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -22281,15 +22627,55 @@ ] } }, - "/api/blobEntities": { + "/api/alarms": { "get": { "tags": [ - "blob-entity-controller" + "alarm-controller" ], - "summary": "Get Blob Entities (getBlobEntities)", - "description": "Returns a page of BlobEntityWithCustomerInfo object that are available for the current user. The platform uses Blob(binary large object) entities in the reporting feature, in order to store Dashboard states snapshots of different content types in base64 format. BlobEntityWithCustomerInfo represents an object that contains base info about the blob entity(name, type, contentType, etc.) and info about the customer(customerTitle, customerIsPublic) of the user that scheduled generation of the dashboard report. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getBlobEntities", + "summary": "Get All Alarms (getAllAlarms)", + "description": "Returns a page of alarms that belongs to the current user owner. If the user has the authority of 'Tenant Administrator', the server returns alarms that belongs to the tenant of current user. If the user has the authority of 'Customer User', the server returns alarms that belongs to the customer of current user. Specifying both parameters 'searchStatus' and 'status' at the same time will cause an error. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAllAlarms", "parameters": [ + { + "name": "searchStatus", + "in": "query", + "description": "A string value representing one of the AlarmSearchStatus enumeration value", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ANY", + "ACTIVE", + "CLEARED", + "ACK", + "UNACK" + ] + } + }, + { + "name": "status", + "in": "query", + "description": "A string value representing one of the AlarmStatus enumeration value", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ACTIVE_UNACK", + "ACTIVE_ACK", + "CLEARED_UNACK", + "CLEARED_ACK" + ] + } + }, + { + "name": "assigneeId", + "in": "query", + "description": "A string value representing the assignee user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, + "schema": { + "type": "string" + } + }, { "name": "pageSize", "in": "query", @@ -22310,19 +22696,10 @@ "format": "int32" } }, - { - "name": "type", - "in": "query", - "description": "A string value representing the blob entity type. For example, 'report'", - "required": false, - "schema": { - "type": "string" - } - }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'startsWith' filter based on the blob entity name.", + "description": "The case insensitive 'substring' filter based on of next alarm fields: type, severity or status", "required": false, "schema": { "type": "string" @@ -22337,10 +22714,13 @@ "type": "string", "enum": [ "createdTime", - "name", + "startTs", + "endTs", "type", - "contentType", - "customerTitle" + "ackTs", + "clearTs", + "severity", + "status" ] } }, @@ -22360,7 +22740,7 @@ { "name": "startTime", "in": "query", - "description": "The start timestamp in milliseconds of the search time range over the BlobEntityWithCustomerInfo class field: 'createdTime'.", + "description": "The start timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", "required": false, "schema": { "type": "integer", @@ -22370,12 +22750,21 @@ { "name": "endTime", "in": "query", - "description": "The end timestamp in milliseconds of the search time range over the BlobEntityWithCustomerInfo class field: 'createdTime'.", + "description": "The end timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", "required": false, "schema": { "type": "integer", "format": "int64" } + }, + { + "name": "fetchOriginator", + "in": "query", + "description": "A boolean value to specify if the alarm originator name will be filled in the AlarmInfo object field: 'originatorName' or will returns as null.", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { @@ -22384,7 +22773,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataBlobEntityWithCustomerInfo" + "$ref": "#/components/schemas/PageDataAlarmInfo" } } } @@ -22520,26 +22909,172 @@ ] } }, - "/api/blobEntities/list": { + "/api/v2/alarm/{entityType}/{entityId}": { "get": { "tags": [ - "blob-entity-controller" + "alarm-controller" ], - "summary": "Get Blob Entities By Ids (getBlobEntitiesByIds)", - "description": "Requested blob entities must be owned by tenant or assigned to customer which user is performing the request. The platform uses Blob(binary large object) entities in the reporting feature, in order to store Dashboard states snapshots of different content types in base64 format. BlobEntityInfo represents an object that contains base info about the blob entity(name, type, contentType, etc.). See the 'Model' tab of the Response Class for more details.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getBlobEntitiesByIds", + "summary": "Get Alarms (getAlarmsV2)", + "description": "Returns a page of alarms for the selected entity. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getAlarmsV2", "parameters": [ { - "name": "blobEntityIds", - "in": "query", - "description": "A list of blob entity ids, separated by comma ','", + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "statusList", + "in": "query", + "description": "A list of string values separated by comma ',' representing one of the AlarmSearchStatus enumeration value", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ANY", + "ACTIVE", + "CLEARED", + "ACK", + "UNACK" + ] + } + } + }, + { + "name": "severityList", + "in": "query", + "description": "A list of string values separated by comma ',' representing one of the AlarmSeverity enumeration value", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "CRITICAL", + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ] + } + } + }, + { + "name": "typeList", + "in": "query", + "description": "A list of string values separated by comma ',' representing alarm types", + "required": false, "schema": { "type": "array", "items": { "type": "string" } } + }, + { + "name": "assigneeId", + "in": "query", + "description": "A string value representing the assignee user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on of next alarm fields: type, severity or status", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "startTs", + "endTs", + "type", + "ackTs", + "clearTs", + "severity", + "status" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "startTime", + "in": "query", + "description": "The start timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "The end timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } } ], "responses": { @@ -22548,10 +23083,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BlobEntityInfo" - } + "$ref": "#/components/schemas/PageDataAlarmInfo" } } } @@ -22687,23 +23219,154 @@ ] } }, - "/api/blobEntity/info/{blobEntityId}": { + "/api/v2/alarms": { "get": { "tags": [ - "blob-entity-controller" + "alarm-controller" ], - "summary": "Get Blob Entity With Customer Info (getBlobEntityInfoById)", - "description": "Fetch the BlobEntityWithCustomerInfo object based on the provided Blob entity Id. The platform uses Blob(binary large object) entities in the reporting feature, in order to store Dashboard states snapshots of different content types in base64 format. BlobEntityWithCustomerInfo represents an object that contains base info about the blob entity(name, type, contentType, etc.) and info about the customer(customerTitle, customerIsPublic) of the user that scheduled generation of the dashboard report. Referencing non-existing Blob entity Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getBlobEntityInfoById", + "summary": "Get All Alarms (getAllAlarmsV2)", + "description": "Returns a page of alarms that belongs to the current user owner. If the user has the authority of 'Tenant Administrator', the server returns alarms that belongs to the tenant of current user. If the user has the authority of 'Customer User', the server returns alarms that belongs to the customer of current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getAllAlarmsV2", "parameters": [ { - "name": "blobEntityId", - "in": "path", - "description": "A string value representing the blob entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "statusList", + "in": "query", + "description": "A list of string values separated by comma ',' representing one of the AlarmSearchStatus enumeration value", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ANY", + "ACTIVE", + "CLEARED", + "ACK", + "UNACK" + ] + } + } + }, + { + "name": "severityList", + "in": "query", + "description": "A list of string values separated by comma ',' representing one of the AlarmSeverity enumeration value", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "CRITICAL", + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ] + } + } + }, + { + "name": "typeList", + "in": "query", + "description": "A list of string values separated by comma ',' representing alarm types", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "assigneeId", + "in": "query", + "description": "A string value representing the assignee user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on of next alarm fields: type, severity or status", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "startTs", + "endTs", + "type", + "ackTs", + "clearTs", + "severity", + "status" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "startTime", + "in": "query", + "description": "The start timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "The end timestamp in milliseconds of the search time range over the Alarm class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } } ], "responses": { @@ -22712,7 +23375,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BlobEntityWithCustomerInfo" + "$ref": "#/components/schemas/PageDataAlarmInfo" } } } @@ -22848,28 +23511,35 @@ ] } }, - "/api/blobEntity/{blobEntityId}": { - "delete": { + "/api/alarm/rule": { + "post": { "tags": [ - "blob-entity-controller" + "alarm-rule-controller" ], - "summary": "Delete Blob Entity (deleteBlobEntity)", - "description": "Delete Blob entity based on the provided Blob entity Id. Referencing non-existing Blob entity Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", - "operationId": "deleteBlobEntity", - "parameters": [ - { - "name": "blobEntityId", - "in": "path", - "description": "A string value representing the blob entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "Create Or Update Alarm Rule (saveAlarmRule)", + "description": "Creates or Updates the Alarm Rule. When creating alarm rule, platform generates Alarm Rule Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm Rule Id will be present in the response. Specify existing Alarm Rule Id to update the alarm rule. Referencing non-existing Alarm Rule Id will cause 'Not Found' error. Remove 'id', 'tenantId' from the request body example (below) to create new Alarm Rule entity. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveAlarmRule", + "requestBody": { + "description": "A JSON value representing the alarm rule.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlarmRuleDefinition" + } } - } - ], + }, + "required": true + }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlarmRuleDefinition" + } + } + } }, "400": { "description": "Bad Request", @@ -22882,7 +23552,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -23002,33 +23672,32 @@ ] } }, - "/api/blobEntity/{blobEntityId}/download": { - "get": { + "/api/alarm/rule/testScript": { + "post": { "tags": [ - "blob-entity-controller" + "alarm-rule-controller" ], - "summary": "Download Blob Entity By Id (downloadBlobEntity)", - "description": "Download report file based on the provided Blob entity Id. Referencing non-existing Blob entity Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "downloadBlobEntity", - "parameters": [ - { - "name": "blobEntityId", - "in": "path", - "description": "A string value representing the blob entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "Test alarm rule TBEL expression (testAlarmRuleScript)", + "description": "Execute the alarm rule TBEL condition expression and return the result. Alarm rule expressions must return a boolean value. The format of request: \n\n```json\n{\n \"expression\": \"return temperature > 50;\",\n \"arguments\": {\n \"temperature\": { \"type\": \"SINGLE_VALUE\", \"ts\": 1739776478057, \"value\": 55 }\n }\n}\n```\n\n Expected result JSON contains \"output\" and \"error\".\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "testAlarmRuleScript", + "requestBody": { + "description": "Test alarm rule TBEL condition expression. The expression must return a boolean value.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/JsonNode" } } } @@ -23044,7 +23713,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -23164,32 +23833,31 @@ ] } }, - "/api/calculatedField": { - "post": { + "/api/alarm/rule/{alarmRuleId}": { + "get": { "tags": [ - "calculated-field-controller" + "alarm-rule-controller" ], - "summary": "Create Or Update Calculated Field (saveCalculatedField)", - "description": "Creates or Updates the Calculated Field. When creating calculated field, platform generates Calculated Field Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Calculated Field Id will be present in the response. Specify existing Calculated Field Id to update the calculated field. Referencing non-existing Calculated Field Id will cause 'Not Found' error. Remove 'id', 'tenantId' from the request body example (below) to create new Calculated Field entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "saveCalculatedField", - "requestBody": { - "description": "A JSON value representing the calculated field.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CalculatedField" - } + "summary": "Get Alarm Rule (getAlarmRuleById)", + "description": "Fetch the Alarm Rule object based on the provided Alarm Rule Id.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAlarmRuleById", + "parameters": [ + { + "name": "alarmRuleId", + "in": "path", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CalculatedField" + "$ref": "#/components/schemas/AlarmRuleDefinition" } } } @@ -23205,7 +23873,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -23323,37 +23991,27 @@ "ApiKeyForm": [] } ] - } - }, - "/api/calculatedField/testScript": { - "post": { + }, + "delete": { "tags": [ - "calculated-field-controller" + "alarm-rule-controller" ], - "summary": "Test Script expression", - "description": "Execute the Script expression and return the result. The format of request: \n\n```json\n{\n \"expression\": \"var temp = 0; foreach(element: temperature.values) {temp += element.value;} var avgTemperature = temp / temperature.values.size(); var adjustedTemperature = avgTemperature + 0.1 * humidity.value; return {\\\"adjustedTemperature\\\": adjustedTemperature};\",\n \"arguments\": {\n \"temperature\": {\n \"type\": \"TS_ROLLING\",\n \"timeWindow\": {\n \"startTs\": 1739775630002,\n \"endTs\": 65432211,\n \"limit\": 5\n },\n \"values\": [\n { \"ts\": 1739775639851, \"value\": 23 },\n { \"ts\": 1739775664561, \"value\": 43 },\n { \"ts\": 1739775713079, \"value\": 15 },\n { \"ts\": 1739775999522, \"value\": 34 },\n { \"ts\": 1739776228452, \"value\": 22 }\n ]\n },\n \"humidity\": { \"type\": \"SINGLE_VALUE\", \"ts\": 1739776478057, \"value\": 23 }\n }\n}\n```\n\n Expected result JSON contains \"output\" and \"error\".\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "testCalculatedFieldScript", - "requestBody": { - "description": "Test calculated field TBEL expression.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } + "summary": "Delete Alarm Rule (deleteAlarmRule)", + "description": "Deletes the alarm rule. Referencing non-existing Alarm Rule Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "deleteAlarmRule", + "parameters": [ + { + "name": "alarmRuleId", + "in": "path", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -23366,7 +24024,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -23486,17 +24144,17 @@ ] } }, - "/api/calculatedField/{calculatedFieldId}": { + "/api/alarm/rule/{alarmRuleId}/debug": { "get": { "tags": [ - "calculated-field-controller" + "alarm-rule-controller" ], - "summary": "Get Calculated Field (getCalculatedFieldById)", - "description": "Fetch the Calculated Field object based on the provided Calculated Field Id.", - "operationId": "getCalculatedFieldById", + "summary": "Get latest alarm rule debug event (getLatestAlarmRuleDebugEvent)", + "description": "Gets latest alarm rule debug event for specified alarm rule id. Referencing non-existing alarm rule id will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getLatestAlarmRuleDebugEvent", "parameters": [ { - "name": "calculatedFieldId", + "name": "alarmRuleId", "in": "path", "required": true, "schema": { @@ -23510,7 +24168,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CalculatedField" + "$ref": "#/components/schemas/JsonNode" } } } @@ -23644,27 +24302,106 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/alarm/rules": { + "get": { "tags": [ - "calculated-field-controller" + "alarm-rule-controller" ], - "summary": "Delete Calculated Field (deleteCalculatedField)", - "description": "Deletes the calculated field. Referencing non-existing Calculated Field Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "deleteCalculatedField", + "summary": "Get alarm rules (getAlarmRules)", + "description": "Fetch tenant alarm rules based on the filter.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAlarmRules", "parameters": [ { - "name": "calculatedFieldId", - "in": "path", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "entityType", + "in": "query", + "description": "Entity type filter. If not specified, alarm rules for all supported entity types will be returned.", + "required": false, + "schema": { + "$ref": "#/components/schemas/EntityType" + } + }, + { + "name": "entities", + "in": "query", + "description": "Entities filter. If not specified, alarm rules for entity type filter will be returned.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the calculated field name.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataAlarmRuleDefinitionInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -23797,22 +24534,56 @@ ] } }, - "/api/calculatedField/{calculatedFieldId}/debug": { + "/api/alarm/rules/names": { "get": { "tags": [ - "calculated-field-controller" + "alarm-rule-controller" ], - "summary": "Get latest calculated field debug event (getLatestCalculatedFieldDebugEvent)", - "description": "Gets latest calculated field debug event for specified calculated field id. Referencing non-existing calculated field id will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getLatestCalculatedFieldDebugEvent", + "summary": "Get alarm rule names (getAlarmRuleNames)", + "description": "Fetch the list of alarm rule names.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAlarmRuleNames", "parameters": [ { - "name": "calculatedFieldId", - "in": "path", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the calculated field name.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -23821,7 +24592,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/PageDataString" } } } @@ -23957,39 +24728,86 @@ ] } }, - "/api/calculatedField/{calculatedFieldId}/reprocess": { + "/api/alarm/rules/{entityType}/{entityId}": { "get": { "tags": [ - "calculated-field-controller" + "alarm-rule-controller" ], - "summary": "Reprocess Calculated Field (reprocessCalculatedField)", - "description": "Reprocesses the calculated field.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "reprocessCalculatedField", + "summary": "Get Alarm Rules by Entity Id (getAlarmRulesByEntityId)", + "description": "Fetch the Alarm Rules based on the provided Entity Id.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAlarmRulesByEntityId", "parameters": [ { - "name": "calculatedFieldId", + "name": "entityType", "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { "type": "string" } }, { - "name": "startTs", + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { "type": "integer", - "format": "int64" + "format": "int32" } }, { - "name": "endTs", + "name": "page", "in": "query", + "description": "Sequence number of page starting from 0", "required": true, "schema": { "type": "integer", - "format": "int64" + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the calculated field name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -23999,7 +24817,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Job" + "$ref": "#/components/schemas/PageDataAlarmRuleDefinition" } } } @@ -24135,31 +24953,31 @@ ] } }, - "/api/calculatedField/{calculatedFieldId}/reprocess/job": { - "get": { + "/api/apiKey": { + "post": { "tags": [ - "calculated-field-controller" + "api-key-controller" ], - "summary": "getLastCalculatedFieldReprocessingJob", - "operationId": "getLastCalculatedFieldReprocessingJob", - "parameters": [ - { - "name": "calculatedFieldId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Save API key for user (saveApiKey)", + "description": "Creates an API key for the given user and returns the token ONCE as 'ApiKey {value}'.\n\nAvailable for any authorized user. ", + "operationId": "saveApiKey", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyInfo" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Job" + "$ref": "#/components/schemas/ApiKey" } } } @@ -24175,7 +24993,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -24295,34 +25113,28 @@ ] } }, - "/api/calculatedField/{calculatedFieldId}/reprocess/validate": { - "get": { + "/api/apiKey/{id}": { + "delete": { "tags": [ - "calculated-field-controller" + "api-key-controller" ], - "summary": "Validate reprocessing capability of a calculated field (validateCalculatedFieldReprocessing)", - "description": "Checks whether the specified calculated field can be reprocessed. Returns a validation result indicating if reprocessing is allowed and, if not, provides a reason. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "validateCalculatedFieldReprocessing", + "summary": "Delete API key by ID (deleteApiKey)", + "description": "Deletes the API key. Referencing non-existing ApiKey Id will cause an error.\n\nAvailable for any authorized user. ", + "operationId": "deleteApiKey", "parameters": [ { - "name": "calculatedFieldId", + "name": "id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CfReprocessingValidationResult" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -24455,45 +25267,46 @@ ] } }, - "/api/calculatedField/{calculatedFieldId}/reprocessAndWait": { - "get": { + "/api/apiKey/{id}/description": { + "put": { "tags": [ - "calculated-field-controller" + "api-key-controller" ], - "summary": "Reprocess Calculated Field and wait for completion (reprocessCalculatedFieldAndWait)", - "description": "Reprocesses the calculated field and waits until the job completes or fails.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "reprocessCalculatedFieldAndWait", + "summary": "Update API key Description", + "description": "Updates the description of the existing API key by apiKeyId. Only the description can be updated. Referencing a non-existing ApiKey Id will cause a 'Not Found' error.\n\nAvailable for any authorized user. ", + "operationId": "updateApiKeyDescription", "parameters": [ { - "name": "calculatedFieldId", + "name": "id", "in": "path", + "description": "A string value representing the api key id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" - } - }, - { - "name": "startTs", - "in": "query", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTs", - "in": "query", - "required": true, - "schema": { - "type": "integer", - "format": "int64" + "type": "string", + "format": "uuid" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "New description for the API key" + } + } + } + }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -24626,95 +25439,32 @@ ] } }, - "/api/calculatedField/{entityType}/{entityId}": { - "get": { + "/api/apiKey/{id}/enabled/{enabledValue}": { + "put": { "tags": [ - "calculated-field-controller" + "api-key-controller" ], - "summary": "Get Calculated Fields by Entity Id (getCalculatedFieldsByEntityId)", - "description": "Fetch the Calculated Fields based on the provided Entity Id.", - "operationId": "getCalculatedFieldsByEntityId", + "summary": "Enable or disable API key (enableApiKey)", + "description": "Updates api key with enabled = true/false. \n\nAvailable for any authorized user. ", + "operationId": "enableApiKey", "parameters": [ { - "name": "entityType", + "name": "id", "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", + "description": "Unique identifier of the API key to enable/disable", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "entityId", + "name": "enabledValue", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "description": "Enabled or disabled api key", "required": true, "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "type", - "in": "query", - "description": "Calculated field type. If not specified, all types will be returned.", - "required": false, - "schema": { - "$ref": "#/components/schemas/CalculatedFieldType" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the calculated field name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "boolean" } } ], @@ -24724,7 +25474,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataCalculatedField" + "$ref": "#/components/schemas/ApiKeyInfo" } } } @@ -24860,15 +25610,24 @@ ] } }, - "/api/calculatedFields": { + "/api/apiKeys/{userId}": { "get": { "tags": [ - "calculated-field-controller" + "api-key-controller" ], - "summary": "Get calculated fields (getCalculatedFields)", - "description": "Fetch tenant calculated fields based on the filter.", - "operationId": "getCalculatedFields", + "summary": "Get User Api Keys (getUserApiKeys)", + "description": "Returns a page of api keys owned by user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for any authorized user. ", + "operationId": "getUserApiKeys", "parameters": [ + { + "name": "userId", + "in": "path", + "description": "A string value representing the user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "pageSize", "in": "query", @@ -24889,46 +25648,10 @@ "format": "int32" } }, - { - "name": "types", - "in": "query", - "description": "Calculated field types filter.", - "required": false, - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CalculatedFieldType" - }, - "uniqueItems": true - } - }, - { - "name": "entityType", - "in": "query", - "description": "Entity type filter. If not specified, calculated fields for all supported entity types will be returned.", - "required": false, - "schema": { - "$ref": "#/components/schemas/EntityType" - } - }, - { - "name": "entities", - "in": "query", - "description": "Entities filter. If not specified, calculated fields for entity type filter will be returned.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the calculated field name.", + "description": "The case insensitive 'substring' filter based on the description.", "required": false, "schema": { "type": "string" @@ -24943,7 +25666,9 @@ "type": "string", "enum": [ "createdTime", - "name" + "expirationTime", + "description", + "enabled" ] } }, @@ -24959,17 +25684,6 @@ "DESC" ] } - }, - { - "name": "name", - "in": "query", - "description": "Repeatable name query parameter", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } } ], "responses": { @@ -24978,7 +25692,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataCalculatedFieldInfo" + "$ref": "#/components/schemas/PageDataApiKeyInfo" } } } @@ -25114,74 +25828,85 @@ ] } }, - "/api/calculatedFields/names": { - "get": { + "/api/asset": { + "post": { "tags": [ - "calculated-field-controller" + "asset-controller" ], - "summary": "Get calculated field names (getCalculatedFieldNames)", - "description": "Fetch the list of calculated field names for specified type.", - "operationId": "getCalculatedFieldNames", + "summary": "Create Or Update Asset (saveAsset)", + "description": "Creates or Updates the Asset. When creating asset, platform generates Asset Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Asset id will be present in the response. Specify existing Asset id to update the asset. Referencing non-existing Asset Id will cause 'Not Found' error. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Asset entity. \n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "saveAsset", "parameters": [ { - "name": "type", + "name": "entityGroupId", "in": "query", - "description": "Calculated field type filter.", - "required": true, + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'. If specified, the entity will be added to the corresponding entity group.", + "required": false, "schema": { - "$ref": "#/components/schemas/CalculatedFieldType" + "type": "string" } }, { - "name": "pageSize", + "name": "entityGroupIds", "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, + "description": "A list of string values, separated by comma ',' representing the Entity Group Ids. For example, '784f394c-42b6-435a-983c-b7beff2784f9','a84f394c-42b6-435a-083c-b7beff2784f9'. If specified, the entity will be added to the corresponding entity groups.", + "required": false, "schema": { - "type": "integer", - "format": "int32" + "type": "array", + "items": { + "type": "string" + } } }, { - "name": "page", + "name": "nameConflictPolicy", "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, + "description": "Optional value of name conflict policy. Possible values: FAIL or UNIQUIFY. If omitted, FAIL policy is applied. FAIL policy implies exception will be thrown if an entity with the same name already exists. UNIQUIFY policy appends a suffix to the entity name, if a name conflict occurs.", + "required": false, "schema": { - "type": "integer", - "format": "int32" + "$ref": "#/components/schemas/NameConflictPolicy", + "default": "FAIL" } }, { - "name": "textSearch", + "name": "uniquifySeparator", "in": "query", - "description": "The case insensitive 'substring' filter based on the calculated field name.", + "description": "Optional value of name suffix separator used by UNIQUIFY policy. By default, underscore separator is used. For example, strategy is UNIQUIFY, separator is '-'; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-7fsh4f'.", "required": false, "schema": { - "type": "string" + "type": "string", + "default": "_" } }, { - "name": "sortOrder", + "name": "uniquifyStrategy", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "Optional value of uniquify strategy used by UNIQUIFY policy. Possible values: RANDOM or INCREMENTAL. By default, RANDOM strategy is used, which means random alphanumeric string will be added as a suffix to entity name. INCREMENTAL implies the first possible number starting from 1 will be added as a name suffix. For example, strategy is UNIQUIFY, uniquify strategy is INCREMENTAL; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-1.", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "$ref": "#/components/schemas/UniquifyStrategy", + "default": "RANDOM" } } ], + "requestBody": { + "description": "A JSON value representing the asset.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Asset" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataString" + "$ref": "#/components/schemas/Asset" } } } @@ -25197,7 +25922,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -25317,20 +26042,31 @@ ] } }, - "/api/cloudEndpoint/permission/domain/read": { - "get": { + "/api/asset/bulk_import": { + "post": { "tags": [ - "cloud-endpoint-controller" + "asset-controller" ], - "summary": "hasDomainReadPermission", - "operationId": "hasDomainReadPermission", + "summary": "Import the bulk of assets (processAssetsBulkImport)", + "description": "There's an ability to import the bulk of assets using the only .csv file.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "processAssetBulkImport", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BulkImportRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "boolean" + "$ref": "#/components/schemas/BulkImportResultAsset" } } } @@ -25346,7 +26082,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -25466,20 +26202,32 @@ ] } }, - "/api/cloudEndpoint/permission/domain/write": { + "/api/asset/info/{assetId}": { "get": { "tags": [ - "cloud-endpoint-controller" + "asset-controller" + ], + "summary": "Get Asset Info (getAssetInfoById)", + "description": "Fetch the Asset Info object based on the provided Asset Id. If the user has the authority of 'Tenant Administrator', the server checks that the asset is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the asset is assigned to the same customer.Asset Info is an extension of the default Asset object that contains information about the owner name. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAssetInfoById", + "parameters": [ + { + "name": "assetId", + "in": "path", + "description": "A string value representing the asset id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "hasDomainWritePermission", - "operationId": "hasDomainWritePermission", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "boolean" + "$ref": "#/components/schemas/AssetInfo" } } } @@ -25615,20 +26363,24 @@ ] } }, - "/api/cloudEndpoint/tenant/permission/whiteLabel/read": { + "/api/asset/types": { "get": { "tags": [ - "cloud-endpoint-controller" + "asset-controller" ], - "summary": "tenantHasWhiteLabelRead", - "operationId": "tenantHasWhiteLabelRead", + "summary": "Get Asset Types (getAssetTypes)", + "description": "Deprecated. See 'getAssetProfileNames' API from Asset Profile Controller instead.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getAssetTypes", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "boolean" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntitySubtype" + } } } } @@ -25754,6 +26506,7 @@ } } }, + "deprecated": true, "security": [ { "HttpLoginForm": [] @@ -25764,20 +26517,32 @@ ] } }, - "/api/cloudEndpoint/tenant/permission/whiteLabel/write": { + "/api/asset/{assetId}": { "get": { "tags": [ - "cloud-endpoint-controller" + "asset-controller" + ], + "summary": "Get Asset (getAssetById)", + "description": "Fetch the Asset object based on the provided Asset Id. If the user has the authority of 'Tenant Administrator', the server checks that the asset is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the asset is assigned to the same customer.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAssetById", + "parameters": [ + { + "name": "assetId", + "in": "path", + "description": "A string value representing the asset id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "tenantHasWhiteLabelWrite", - "operationId": "tenantHasWhiteLabelWrite", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "boolean" + "$ref": "#/components/schemas/Asset" } } } @@ -25911,15 +26676,25 @@ "ApiKeyForm": [] } ] - } - }, - "/api/cloudEndpoint/tenant/permission/whiteLabelingAllowed": { - "get": { + }, + "delete": { "tags": [ - "cloud-endpoint-controller" + "asset-controller" + ], + "summary": "Delete asset (deleteAsset)", + "description": "Deletes the asset and all the relations (from and to the asset). Referencing non-existing asset Id will cause an error.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", + "operationId": "deleteAsset", + "parameters": [ + { + "name": "assetId", + "in": "path", + "description": "A string value representing the asset id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "checkTenantWhiteLabelingAllowed", - "operationId": "checkTenantWhiteLabelingAllowed", "responses": { "200": { "description": "OK" @@ -26055,23 +26830,90 @@ ] } }, - "/api/component/{componentDescriptorClazz}": { + "/api/assetInfos/all": { "get": { "tags": [ - "component-descriptor-controller" + "asset-controller" ], - "summary": "Get Component Descriptor (getComponentDescriptorByClazz)", - "description": "Gets the Component Descriptor object using class name from the path parameters. Each Component Descriptor represents configuration of specific rule node (e.g. 'Save Timeseries' or 'Send Email'.). The Component Descriptors are used by the rule chain Web UI to build the configuration forms for the rule nodes. The Component Descriptors are discovered at runtime by scanning the class path and searching for @RuleNode annotation. Once discovered, the up to date list of descriptors is persisted to the database.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getComponentDescriptorByClazz", + "summary": "Get All Asset Infos for current user (getAllAssetInfos)", + "description": "Returns a page of asset info objects owned by the tenant or the customer of a current user. Asset Info is an extension of the default Asset object that contains information about the owner name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAllAssetInfos", "parameters": [ { - "name": "componentDescriptorClazz", - "in": "path", - "description": "Component Descriptor class name", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "assetProfileId", + "in": "query", + "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, "schema": { "type": "string" } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the asset name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -26080,7 +26922,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ComponentDescriptor" + "$ref": "#/components/schemas/PageDataAssetInfo" } } } @@ -26216,19 +27058,19 @@ ] } }, - "/api/components": { + "/api/assets": { "get": { "tags": [ - "component-descriptor-controller" + "asset-controller" ], - "summary": "Get Component Descriptors (getComponentDescriptorsByTypes)", - "description": "Gets the Component Descriptors using coma separated list of rule node types and optional rule chain type request parameters. Each Component Descriptor represents configuration of specific rule node (e.g. 'Save Timeseries' or 'Send Email'.). The Component Descriptors are used by the rule chain Web UI to build the configuration forms for the rule nodes. The Component Descriptors are discovered at runtime by scanning the class path and searching for @RuleNode annotation. Once discovered, the up to date list of descriptors is persisted to the database.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getComponentDescriptorsByTypes", + "summary": "Get Assets By Ids (getAssetsByIds)", + "description": "Requested assets must be owned by tenant or assigned to customer which user is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAssetsByIds", "parameters": [ { - "name": "componentTypes", + "name": "assetIds", "in": "query", - "description": "List of types of the Rule Nodes, (ENRICHMENT, FILTER, TRANSFORMATION, ACTION or EXTERNAL)", + "description": "A list of asset ids, separated by comma ','", "required": true, "schema": { "type": "array", @@ -26236,19 +27078,6 @@ "type": "string" } } - }, - { - "name": "ruleChainType", - "in": "query", - "description": "Type of the Rule Chain", - "required": false, - "schema": { - "type": "string", - "enum": [ - "CORE", - "EDGE" - ] - } } ], "responses": { @@ -26259,7 +27088,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ComponentDescriptor" + "$ref": "#/components/schemas/Asset" } } } @@ -26394,47 +27223,24 @@ "ApiKeyForm": [] } ] - } - }, - "/api/components/{componentType}": { - "get": { + }, + "post": { "tags": [ - "component-descriptor-controller" + "asset-controller" ], - "summary": "Get Component Descriptors (getComponentDescriptorsByType)", - "description": "Gets the Component Descriptors using rule node type and optional rule chain type request parameters. Each Component Descriptor represents configuration of specific rule node (e.g. 'Save Timeseries' or 'Send Email'.). The Component Descriptors are used by the rule chain Web UI to build the configuration forms for the rule nodes. The Component Descriptors are discovered at runtime by scanning the class path and searching for @RuleNode annotation. Once discovered, the up to date list of descriptors is persisted to the database.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getComponentDescriptorsByType", - "parameters": [ - { - "name": "componentType", - "in": "path", - "description": "Type of the Rule Node", - "required": true, - "schema": { - "type": "string", - "enum": [ - "ENRICHMENT", - "FILTER", - "TRANSFORMATION", - "ACTION", - "EXTERNAL" - ] + "summary": "Find related assets (findAssetsByQuery)", + "description": "Returns all assets that are related to the specific entity. The entity id, relation type, asset types, depth of the search, and other query parameters defined using complex 'AssetSearchQuery' object. See 'Model' tab of the Parameters for more info. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "findAssetsByQuery", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AssetSearchQuery" + } } }, - { - "name": "ruleChainType", - "in": "query", - "description": "Type of the Rule Chain", - "required": false, - "schema": { - "type": "string", - "enum": [ - "CORE", - "EDGE" - ] - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", @@ -26443,7 +27249,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ComponentDescriptor" + "$ref": "#/components/schemas/Asset" } } } @@ -26460,7 +27266,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -26580,32 +27386,108 @@ ] } }, - "/api/converter": { - "post": { + "/api/customer/{customerId}/assetInfos": { + "get": { "tags": [ - "converter-controller" + "asset-controller" ], - "summary": "Create Or Update Converter (saveConverter)", - "description": "Create or update the Converter. When creating converter, platform generates Converter Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created converter id will be present in the response. Specify existing Converter id to update the converter. Referencing non-existing converter Id will cause 'Not Found' error. Converter name is unique in the scope of tenant. \n\n# Converter Configuration\n\nConverter configuration (**'configuration'** field) is the JSON object that should contain one of two possible fields: **'decoder'** or **'encoder'**. The former is used when the converter has UPLINK type, the latter is used - when DOWNLINK type. It can contain both 'decoder' and 'encoder' fields, when the correct one is specified for the appropriate converter type, another one can be set to 'null'. See the examples of each one below. \n\n## Uplink Converter Configuration\n\n***Default converter may be different, depending on integration type***.\n\n```json\n{\n \"decoder\":\"// Decode an uplink message from a buffer\\n// payload - array of bytes\\n// metadata - key/value object\\n\\n/** Decoder **/\\n\\n// decode payload to string\\nvar payloadStr = decodeToString(payload);\\n\\n// decode payload to JSON\\n// var data = decodeToJson(payload);\\n\\nvar deviceName = 'Device A';\\nvar deviceType = 'thermostat';\\nvar customerName = 'customer';\\nvar groupName = 'thermostat devices';\\nvar manufacturer = 'Example corporation';\\n// use assetName and assetType instead of deviceName and deviceType\\n// to automatically create assets instead of devices.\\n// var assetName = 'Asset A';\\n// var assetType = 'building';\\n\\n// Result object with device/asset attributes/telemetry data\\nvar result = {\\n// Use deviceName and deviceType or assetName and assetType, but not both.\\n deviceName: deviceName,\\n deviceType: deviceType,\\n// assetName: assetName,\\n// assetType: assetType,\\n customerName: customerName,\\n groupName: groupName,\\n contentAwareAttributeKeys: ['manufacturer'],\\n attributes: {\\n model: 'Model A',\\n serialNumber: 'SN111',\\n integrationName: metadata['integrationName'],\\n manufacturer: manufacturer\\n },\\n telemetry: {\\n temperature: 42,\\n humidity: 80,\\n rawData: payloadStr\\n }\\n};\\n\\n/** Helper functions **/\\n\\nfunction decodeToString(payload) {\\n return String.fromCharCode.apply(String, payload);\\n}\\n\\nfunction decodeToJson(payload) {\\n // covert payload to string.\\n var str = decodeToString(payload);\\n\\n // parse string to JSON\\n var data = JSON.parse(str);\\n return data;\\n}\\n\\nreturn result;\",\n \"encoder\":null\n}\n```\n\nDecoder field in the more readable form:\n\n```text\n// Decode an uplink message from a buffer\n// payload - array of bytes\n// metadata - key/value object\n\n/** Decoder **/\n\n// decode payload to string\nvar payloadStr = decodeToString(payload);\n\n// decode payload to JSON\n// var data = decodeToJson(payload);\n\nvar deviceName = 'Device A';\nvar deviceType = 'thermostat';\nvar customerName = 'customer';\nvar groupName = 'thermostat devices';\nvar manufacturer = 'Example corporation';\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// Result object with device/asset attributes/telemetry data\nvar result = {\n// Use deviceName and deviceType or assetName and assetType, but not both.\n deviceName: deviceName,\n deviceType: deviceType,\n// assetName: assetName,\n// assetType: assetType,\n customerName: customerName,\n groupName: groupName,\n attributes: {\n model: 'Model A',\n serialNumber: 'SN111',\n integrationName: metadata['integrationName']\n manufacturer: manufacturer,\n },\n telemetry: {\n temperature: 42,\n humidity: 80,\n rawData: payloadStr\n }\n};\n\n/** Helper functions **/\n\nfunction decodeToString(payload) {\n return String.fromCharCode.apply(String, payload);\n}\n\nfunction decodeToJson(payload) {\n // covert payload to string.\n var str = decodeToString(payload);\n\n // parse string to JSON\n var data = JSON.parse(str);\n return data;\n}\n\nreturn result;\n```\n\n## Downlink Converter Configuration\n\n```json\n{\n \"decoder\":null,\n \"encoder\":\"// Encode downlink data from incoming Rule Engine message\\n\\n// msg - JSON message payload downlink message json\\n// msgType - type of message, for ex. 'ATTRIBUTES_UPDATED', 'POST_TELEMETRY_REQUEST', etc.\\n// metadata - list of key-value pairs with additional data about the message\\n// integrationMetadata - list of key-value pairs with additional data defined in Integration executing this converter\\n\\n/** Encoder **/\\n\\nvar data = {};\\n\\n// Process data from incoming message and metadata\\n\\ndata.tempFreq = msg.temperatureUploadFrequency;\\ndata.humFreq = msg.humidityUploadFrequency;\\n\\ndata.devSerialNumber = metadata['ss_serialNumber'];\\n\\n// Result object with encoded downlink payload\\nvar result = {\\n\\n // downlink data content type: JSON, TEXT or BINARY (base64 format)\\n contentType: \\\"JSON\\\",\\n\\n // downlink data\\n data: JSON.stringify(data),\\n\\n // Optional metadata object presented in key/value format\\n metadata: {\\n topic: metadata['deviceType']+'/'+metadata['deviceName']+'/upload'\\n }\\n\\n};\\n\\nreturn result;\"\n}\n```\n\nEncoder field in the more readable form:\n\n```text\n// Encode downlink data from incoming Rule Engine message\n\n// msg - JSON message payload downlink message json\n// msgType - type of message, for ex. 'ATTRIBUTES_UPDATED', 'POST_TELEMETRY_REQUEST', etc.\n// metadata - list of key-value pairs with additional data about the message\n// integrationMetadata - list of key-value pairs with additional data defined in Integration executing this converter\n\n/** Encoder **/\n\nvar data = {};\n\n// Process data from incoming message and metadata\n\ndata.tempFreq = msg.temperatureUploadFrequency;\ndata.humFreq = msg.humidityUploadFrequency;\n\ndata.devSerialNumber = metadata['ss_serialNumber'];\n\n// Result object with encoded downlink payload\nvar result = {\n\n // downlink data content type: JSON, TEXT or BINARY (base64 format)\n contentType: \"JSON\",\n\n // downlink data\n data: JSON.stringify(data),\n\n // Optional metadata object presented in key/value format\n metadata: {\n topic: metadata['deviceType']+'/'+metadata['deviceName']+'/upload'\n }\n\n};\n\nreturn result;\n```\n\nRemove 'id', 'tenantId' from the request body example (below) to create new converter entity. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "saveConverter", - "requestBody": { - "description": "A JSON value representing the converter.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Converter" - } + "summary": "Get Customer Asset Infos (getCustomerAssetInfos)", + "description": "Returns a page of asset info objects owned by the specified customer. Asset Info is an extension of the default Asset object that contains information about the owner name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerAssetInfos", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "assetProfileId", + "in": "query", + "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the asset name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Converter" + "$ref": "#/components/schemas/PageDataAssetInfo" } } } @@ -26621,7 +27503,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -26741,43 +27623,99 @@ ] } }, - "/api/converter/testDownLink": { - "post": { + "/api/customer/{customerId}/assets": { + "get": { "tags": [ - "converter-controller" + "asset-controller" ], - "summary": "Test converter function (testDownLinkConverter)", - "description": "Returns a JSON object representing the result of the processed incoming message. \n\n## Request Body Example\n\n```json\n{\n \"metadata\":{\n \"data\":\"40\"\n },\n \"msg\":\"{\\n \\\"temp\\\": 42,\\n \\\"humidity\\\": 77\\n}\",\n \"msgType\":\"POST_TELEMETRY_REQUEST\",\n \"integrationMetadata\":{\n \"integrationName\":\"Integration\"\n },\n \"encoder\":\"// Encode downlink data from incoming Rule Engine message\\n\\n// msg - JSON message payload downlink message json\\n// msgType - type of message, for ex. 'ATTRIBUTES_UPDATED', 'POST_TELEMETRY_REQUEST', etc.\\n// metadata - list of key-value pairs with additional data about the message\\n// integrationMetadata - list of key-value pairs with additional data defined in Integration executing this converter\\n\\n/** Encoder **/\\n\\nvar data = {};\\n\\n// Process data from incoming message and metadata\\n\\ndata.tempValue = msg.temp;\\ndata.humValue = msg.humidity;\\n\\ndata.devSerialNumber = metadata['ss_serialNumber'];\\n\\n// Result object with encoded downlink payload\\nvar result = {\\n\\n // downlink data content type: JSON, TEXT or BINARY (base64 format)\\n contentType: \\\"JSON\\\",\\n\\n // downlink data\\n data: JSON.stringify(data),\\n\\n // Optional metadata object presented in key/value format\\n metadata: {\\n topic: metadata['deviceType']+'/'+metadata['deviceName']+'/upload'\\n }\\n\\n};\\n\\nreturn result;\"\n}\n```\n\n * 'metadata' - message metadata pushed from the rule engine; \n * 'msg' - message data pushed from the rule engine; \n * 'msgType' - type of the message pushed from the rule engine; \n * 'integrationMetadata' - integration metadata object; \n * 'encoder' - string representation of the encoder configuration.\n\n## Response Body Example\n\n```json\n{\n \"contentType\":\"JSON\",\n \"data\":\"{\\\"tempValue\\\":42,\\\"humValue\\\":77}\",\n \"metadata\":{\n \"topic\":\"sensor/Temp Sensor/upload\"\n }\n}\n```\n\n * 'contentType' - downlink data content type; \n * 'data' - downlink data; \n * 'metadata' - optional metadata object. \n", - "operationId": "testDownLinkConverter", + "summary": "Get Customer Assets (getCustomerAssets)", + "description": "Returns a page of assets objects owned by customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerAssets", "parameters": [ { - "name": "scriptLang", + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", "in": "query", - "description": "Script language: JS or TBEL", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "type", + "in": "query", + "description": "Asset type", "required": false, "schema": { - "$ref": "#/components/schemas/ScriptLanguage" + "type": "string" } - } - ], - "requestBody": { - "description": "A JSON value representing the input to the converter function.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the asset name.", + "required": false, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/PageDataAsset" } } } @@ -26793,7 +27731,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -26913,43 +27851,90 @@ ] } }, - "/api/converter/testUpLink": { - "post": { + "/api/entityGroup/{entityGroupId}/assets": { + "get": { "tags": [ - "converter-controller" + "asset-controller" ], - "summary": "Test converter function (testUpLinkConverter)", - "description": "Returns a JSON object representing the result of the processed incoming message. \n\n## Request Body Example\n\n```json\n{\n \"metadata\":{\n },\n \"payload\":\"ewogICAgImRhdGEiOiAiZGF0YSIKfQ==\",\n \"decoder\":\"// Decode an uplink message from a buffer\\n// payload - array of bytes\\n// metadata - key/value object\\n\\n/** Decoder **/\\n\\n// decode payload to string\\nvar payloadStr = decodeToString(payload);\\n\\n// decode payload to JSON\\n// var data = decodeToJson(payload);\\n\\nvar deviceName = 'Device A';\\nvar deviceType = 'thermostat';\\nvar customerName = 'customer';\\nvar groupName = 'thermostat devices';\\nvar manufacturer = 'Example corporation';\\n// use assetName and assetType instead of deviceName and deviceType\\n// to automatically create assets instead of devices.\\n// var assetName = 'Asset A';\\n// var assetType = 'building';\\n\\n// Result object with device/asset attributes/telemetry data\\nvar result = {\\n// Use deviceName and deviceType or assetName and assetType, but not both.\\n deviceName: deviceName,\\n deviceType: deviceType,\\n// assetName: assetName,\\n// assetType: assetType,\\n customerName: customerName,\\n groupName: groupName,\\n attributes: {\\n model: 'Model A',\\n serialNumber: 'SN111',\\n integrationName: metadata['integrationName']\\n manufacturer: manufacturer\\n },\\n telemetry: {\\n temperature: 42,\\n humidity: 80,\\n rawData: payloadStr\\n }\\n};\\n\\n/** Helper functions **/\\n\\nfunction decodeToString(payload) {\\n return String.fromCharCode.apply(String, payload);\\n}\\n\\nfunction decodeToJson(payload) {\\n // covert payload to string.\\n var str = decodeToString(payload);\\n\\n // parse string to JSON\\n var data = JSON.parse(str);\\n return data;\\n}\\n\\nreturn result;\"\n}\n```\n\n * 'metadata' - integration metadata; \n * 'payload' - base64 string representation of the data; \n * 'decoder' - string representation of the decoder configuration; \n * 'converter' - JSON object representing converter.\n\n## Response Body Example\n\n```json\n{\n \"output\":\"{\\\"deviceName\\\":\\\"Device A\\\",\\\"deviceType\\\":\\\"thermostat\\\",\\\"customerName\\\":\\\"customer\\\",\\\"groupName\\\":\\\"thermostat devices\\\",\\\"attributes\\\":{\\\"model\\\":\\\"Model A\\\",\\\"serialNumber\\\":\\\"SN111\\\"},\\\"telemetry\\\":{\\\"temperature\\\":42,\\\"humidity\\\":80,\\\"rawData\\\":\\\"{\\\\n \\\\\\\"data\\\\\\\": \\\\\\\"data\\\\\\\"\\\\n}\\\"}}\",\n \"error\":\"\"\n}\n```\n\n * 'output' - string representation of the output message; \n * 'error' - string representation of the error message. \n", - "operationId": "testUpLinkConverter", + "summary": "Get assets by Entity Group Id (getAssetsByEntityGroupId)", + "description": "Returns a page of asset objects that belongs to specified Entity Group Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getAssetsByEntityGroupId", "parameters": [ { - "name": "scriptLang", + "name": "entityGroupId", + "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", "in": "query", - "description": "Script language: JS or TBEL", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the asset name.", "required": false, "schema": { - "$ref": "#/components/schemas/ScriptLanguage" + "type": "string" } - } - ], - "requestBody": { - "description": "A JSON value representing the input to the converter function.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] } }, - "required": true - }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/PageDataAsset" } } } @@ -26965,7 +27950,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -27085,43 +28070,32 @@ ] } }, - "/api/converter/unwrap/{integrationType}": { - "post": { + "/api/tenant/asset": { + "get": { "tags": [ - "converter-controller" + "asset-controller" ], - "summary": "Transform input raw payload to the dedicated converter data (unwrapRawPayload)", - "description": "Returns a JSON object representing the result of the unwrapped incoming raw message. \n\n## Request Body Example\n\n```json\n{\n \"metadata\":{\n },\n \"payload\":\"ewogICAgImRhdGEiOiAiZGF0YSIKfQ==\",\n}\n``` * 'metadata' - integration metadata; \n * 'payload' - JSON object representing the input raw message.\n\n## Response Body Example\n\n * 'metadata' - integration metadata enriched with the data from the input message; \n * 'payload' - base64 string representation of the payload from the unwrapped input message; \n * 'contentType' - string representation payload contentType.", - "operationId": "unwrapRawPayload", + "summary": "Get Tenant Asset (getTenantAssetByName)", + "description": "Requested asset must be owned by tenant that the user belongs to. Asset name is an unique property of asset. So it can be used to identify the asset.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getTenantAssetByName", "parameters": [ { - "name": "integrationType", - "in": "path", - "description": "A string value representing the integration type. One of the following:\nAPACHE_PULSAR, AWS_IOT, AWS_KINESIS, AWS_SQS, AZURE_EVENT_HUB, AZURE_IOT_HUB, AZURE_SERVICE_BUS, CHIRPSTACK, COAP, CUSTOM, HTTP, IBM_WATSON_IOT, KAFKA, LORIOT, MQTT, OCEANCONNECT, OPC_UA, PUB_SUB, RABBITMQ, SIGFOX, TCP, THINGPARK, TMOBILE_IOT_CDP, TPE, TTI, TTN, TUYA, UDP", + "name": "assetName", + "in": "query", + "description": "A string value representing the Asset name.", "required": true, "schema": { - "$ref": "#/components/schemas/IntegrationType" + "type": "string" } } ], - "requestBody": { - "description": "A JSON value representing the input message.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/Asset" } } } @@ -27137,7 +28111,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -27257,23 +28231,81 @@ ] } }, - "/api/converter/{converterId}": { + "/api/tenant/assets": { "get": { "tags": [ - "converter-controller" + "asset-controller" ], - "summary": "Get Converter (getConverterById)", - "description": "Fetch the Converter object based on the provided Converter Id. The server checks that the converter is owned by the same tenant. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getConverterById", + "summary": "Get Tenant Assets (getTenantAssets)", + "description": "Returns a page of assets owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getTenantAssets", "parameters": [ { - "name": "converterId", - "in": "path", - "description": "A string value representing the converter id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "type", + "in": "query", + "description": "Asset type", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the asset name.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -27282,7 +28314,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Converter" + "$ref": "#/components/schemas/PageDataAsset" } } } @@ -27416,28 +28448,104 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/user/assets": { + "get": { "tags": [ - "converter-controller" + "asset-controller" ], - "summary": "Delete converter (deleteConverter)", - "description": "Deletes the converter and all the relations (from and to the converter). Referencing non-existing converter Id will cause an error. If the converter is associated with the integration, it will not be allowed for deletion.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", - "operationId": "deleteConverter", + "summary": "Get Assets (getUserAssets)", + "description": "Returns a page of assets objects available for the current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Asset Info is an extension of the default Asset object that contains information about the owner name. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getUserAssets", "parameters": [ { - "name": "converterId", - "in": "path", - "description": "A string value representing the converter id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "type", + "in": "query", + "description": "Asset type", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "assetProfileId", + "in": "query", + "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the asset name.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataAsset" + } + } + } }, "400": { "description": "Bad Request", @@ -27570,69 +28678,31 @@ ] } }, - "/api/converter/{converterId}/debugIn": { - "get": { + "/api/assetProfile": { + "post": { "tags": [ - "converter-controller" + "asset-profile-controller" ], - "summary": "Get latest debug input event (getLatestConverterDebugInput)", - "description": "Returns a JSON object of the latest debug event representing the input message the converter processed. \n\n## Uplink Converter Debug Input Event Example\n\n```json\n{\n \"inContentType\":\"JSON\",\n \"inContent\":\"{\\\"temp\\\":40}\",\n \"inMetadata\":\"{\\\"Header:sec-ch-ua\\\":\\\"\\\\\\\"Chromium\\\\\\\";v=\\\\\\\"94\\\\\\\", \\\\\\\"Google Chrome\\\\\\\";v=\\\\\\\"94\\\\\\\", \\\\\\\";Not A Brand\\\\\\\";v=\\\\\\\"99\\\\\\\"\\\",\\\"Header:user-agent\\\":\\\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36\\\",\\\"integrationName\\\":\\\"Integration\\\",\\\"Header:cookie\\\":\\\"GUID=zYSs8hymSwZKv8kHALKY; redirect_to=%2F; JSESSIONID=B0A7C8E481409CE7924E738DB04F62F9\\\",\\\"Header:sec-ch-ua-platform\\\":\\\"\\\\\\\"Linux\\\\\\\"\\\",\\\"Header:accept\\\":\\\"*/*\\\",\\\"Header:origin\\\":\\\"http://localhost:8080\\\",\\\"Header:sec-fetch-site\\\":\\\"same-origin\\\",\\\"Header:connection\\\":\\\"keep-alive\\\",\\\"Header:accept-encoding\\\":\\\"gzip, deflate, br\\\",\\\"Header:content-type\\\":\\\"application/json\\\",\\\"Header:content-length\\\":\\\"16\\\",\\\"Header:sec-fetch-mode\\\":\\\"cors\\\",\\\"Header:sec-ch-ua-mobile\\\":\\\"?0\\\",\\\"Header:sec-fetch-dest\\\":\\\"empty\\\",\\\"Header:host\\\":\\\"localhost:8080\\\",\\\"Header:referer\\\":\\\"http://localhost:8080/swagger-ui.html\\\",\\\"Header:accept-language\\\":\\\"en-US,en;q=0.9,ru-RU;q=0.8,ru;q=0.7,uk;q=0.6,und;q=0.5\\\"}\"\n}\n```\n\n * 'inContentType' - content type of the message received by the integration; \n * 'inContent' - message data received; \n * 'inMetadata' - integration metadata (e.g. headers).\n\n## Downlink Converter Debug Input Event Example\n\n```json\n{\n \"inContentType\":\"JSON\",\n \"inContent\":\"{\\\"temp\\\":42,\\\"humidity\\\":77}\",\n \"inMsgType\":\"POST_TELEMETRY_REQUEST\",\n \"inMetadata\":\"{\\\"data\\\":\\\"40\\\"}\",\n \"inIntegrationMetadata\":\"{\\\"integrationName\\\":\\\"Integration\\\"}\"\n}\n```\n\n * 'inContentType' - content type of the message received by the integration; \n * 'inContent' - content of the message pushed from the rule engine; \n * 'inMsgType' - type of the message pushed from the rule engine; \n * 'inMetadata' - content of the message metadata pushed from the rule engine; \n * 'inIntegrationMetadata' - integration metadata. \n\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getLatestConverterDebugInput", - "parameters": [ - { - "name": "converterId", - "in": "path", - "description": "A string value representing the converter id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "converterType", - "in": "query", - "description": "A string value representing the converter type. One of the following:\nUPLINK, DOWNLINK", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "integrationType", - "in": "query", - "description": "A string value representing the integration type. One of the following:\nAPACHE_PULSAR, AWS_IOT, AWS_KINESIS, AWS_SQS, AZURE_EVENT_HUB, AZURE_IOT_HUB, AZURE_SERVICE_BUS, CHIRPSTACK, COAP, CUSTOM, HTTP, IBM_WATSON_IOT, KAFKA, LORIOT, MQTT, OCEANCONNECT, OPC_UA, PUB_SUB, RABBITMQ, SIGFOX, TCP, THINGPARK, TMOBILE_IOT_CDP, TPE, TTI, TTN, TUYA, UDP", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "integrationName", - "in": "query", - "description": "A string value representing the integration name. For example, 'My New Integration'", - "required": false, - "schema": { - "type": "string" + "summary": "Create Or Update Asset Profile (saveAssetProfile)", + "description": "Create or update the Asset Profile. When creating asset profile, platform generates asset profile id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created asset profile id will be present in the response. Specify existing asset profile id to update the asset profile. Referencing non-existing asset profile Id will cause 'Not Found' error. \n\nAsset profile name is unique in the scope of tenant. Only one 'default' asset profile may exist in scope of tenant. Remove 'id', 'tenantId' from the request body example (below) to create new Asset Profile entity. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveAssetProfile", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AssetProfile" + } } }, - { - "name": "converterVersion", - "in": "query", - "description": "Converter version.", - "required": false, - "schema": { - "type": "integer", - "format": "int32" - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/AssetProfile" } } } @@ -27648,7 +28718,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -27768,90 +28838,24 @@ ] } }, - "/api/converters": { + "/api/assetProfile/names": { "get": { "tags": [ - "converter-controller" + "asset-profile-controller" ], - "summary": "Get Converters (getConverters)", - "description": "Returns a page of converters owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getConverters", + "summary": "Get Asset Profile names (getAssetProfileNames)", + "description": "Returns a set of unique asset profile names owned by the tenant.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getAssetProfileNames", "parameters": [ { - "name": "isEdgeTemplate", + "name": "activeOnly", "in": "query", - "description": "Fetch edge template converters", + "description": "Flag indicating whether to retrieve exclusively the names of asset profiles that are referenced by tenant's assets.", "required": false, "schema": { "type": "boolean", "default": false } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the converter name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "debugMode" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - { - "name": "integrationType", - "in": "query", - "description": "A string value representing the integration type. One of the following:\nAPACHE_PULSAR, AWS_IOT, AWS_KINESIS, AWS_SQS, AZURE_EVENT_HUB, AZURE_IOT_HUB, AZURE_SERVICE_BUS, CHIRPSTACK, COAP, CUSTOM, HTTP, IBM_WATSON_IOT, KAFKA, LORIOT, MQTT, OCEANCONNECT, OPC_UA, PUB_SUB, RABBITMQ, SIGFOX, TCP, THINGPARK, TMOBILE_IOT_CDP, TPE, TTI, TTN, TUYA, UDP", - "required": false, - "schema": { - "$ref": "#/components/schemas/IntegrationType" - } } ], "responses": { @@ -27860,7 +28864,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataConverter" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityInfo" + } } } } @@ -27996,25 +29003,31 @@ ] } }, - "/api/converters/list": { + "/api/assetProfile/{assetProfileId}": { "get": { "tags": [ - "converter-controller" + "asset-profile-controller" ], - "summary": "Get Converters By Ids (getConvertersByIds)", - "description": "Requested converters must be owned by tenant which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getConvertersByIds", + "summary": "Get Asset Profile (getAssetProfileById)", + "description": "Fetch the Asset Profile object based on the provided Asset Profile Id. The server checks that the asset profile is owned by the same tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAssetProfileById", "parameters": [ { - "name": "converterIds", - "in": "query", - "description": "A list of converter ids, separated by comma ','", + "name": "assetProfileId", + "in": "path", + "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" + } + }, + { + "name": "inlineImages", + "in": "query", + "description": "Inline images as a data URL (Base64)", + "required": false, + "schema": { + "type": "boolean" } } ], @@ -28024,10 +29037,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Converter" - } + "$ref": "#/components/schemas/AssetProfile" } } } @@ -28161,76 +29171,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/converter/library/{integrationType}/vendors": { - "get": { + }, + "delete": { "tags": [ - "converter-library-controller" + "asset-profile-controller" ], - "summary": "Get vendors (getVendors)", - "description": "Returns a list of vendors for the integration type", - "operationId": "getVendors", + "summary": "Delete asset profile (deleteAssetProfile)", + "description": "Deletes the asset profile. Referencing non-existing asset profile Id will cause an error. Can't delete the asset profile if it is referenced by existing assets.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "deleteAssetProfile", "parameters": [ { - "name": "integrationType", + "name": "assetProfileId", "in": "path", + "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "$ref": "#/components/schemas/IntegrationType" - } - }, - { - "name": "converterType", - "in": "query", - "required": false, "schema": { "type": "string" } - }, - { - "name": "page", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 0 - } - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 2147483647 - } - }, - { - "name": "loadImages", - "in": "query", - "required": false, - "schema": { - "type": "boolean", - "default": true - } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Vendor" - } - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -28363,67 +29325,23 @@ ] } }, - "/api/converter/library/{integrationType}/{vendorName}/models": { - "get": { + "/api/assetProfile/{assetProfileId}/default": { + "post": { "tags": [ - "converter-library-controller" + "asset-profile-controller" ], - "summary": "Get vendor models (getVendorModels)", - "description": "Returns a list of models for the vendor, integration type and converter type", - "operationId": "getVendorModels", + "summary": "Make Asset Profile Default (setDefaultAssetProfile)", + "description": "Marks asset profile as default within a tenant scope.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "setDefaultAssetProfile", "parameters": [ { - "name": "integrationType", - "in": "path", - "required": true, - "schema": { - "$ref": "#/components/schemas/IntegrationType" - } - }, - { - "name": "vendorName", + "name": "assetProfileId", "in": "path", + "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - }, - { - "name": "converterType", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "page", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 0 - } - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 2147483647 - } - }, - { - "name": "loadImages", - "in": "query", - "required": false, - "schema": { - "type": "boolean", - "default": true - } } ], "responses": { @@ -28432,10 +29350,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Model" - } + "$ref": "#/components/schemas/AssetProfile" } } } @@ -28451,7 +29366,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -28571,47 +29486,21 @@ ] } }, - "/api/converter/library/{integrationType}/{vendorName}/{model}/downlink": { + "/api/assetProfileInfo/default": { "get": { "tags": [ - "converter-library-controller" - ], - "summary": "Get downlink converter (getDownlinkConverter)", - "description": "Returns downlink converter body for the vendor, integration type and model", - "operationId": "getDownlinkConverter", - "parameters": [ - { - "name": "integrationType", - "in": "path", - "required": true, - "schema": { - "$ref": "#/components/schemas/IntegrationType" - } - }, - { - "name": "vendorName", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "model", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "asset-profile-controller" ], + "summary": "Get Default Asset Profile (getDefaultAssetProfileInfo)", + "description": "Fetch the Default Asset Profile Info object. Asset Profile Info is a lightweight object that includes main information about Asset Profile. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getDefaultAssetProfileInfo", "responses": { "200": { "description": "OK", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/AssetProfileInfo" } } } @@ -28747,34 +29636,19 @@ ] } }, - "/api/converter/library/{integrationType}/{vendorName}/{model}/downlink/metadata": { + "/api/assetProfileInfo/{assetProfileId}": { "get": { "tags": [ - "converter-library-controller" + "asset-profile-controller" ], - "summary": "Get downlink converter metadata (getDownlinkConverterMetadata)", - "description": "Returns downlink converter metadata for the vendor, integration type and model", - "operationId": "getDownlinkConverterMetadata", + "summary": "Get Asset Profile Info (getAssetProfileInfoById)", + "description": "Fetch the Asset Profile Info object based on the provided Asset Profile Id. Asset Profile Info is a lightweight object that includes main information about Asset Profile. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getAssetProfileInfoById", "parameters": [ { - "name": "integrationType", - "in": "path", - "required": true, - "schema": { - "$ref": "#/components/schemas/IntegrationType" - } - }, - { - "name": "vendorName", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "model", + "name": "assetProfileId", "in": "path", + "description": "A string value representing the asset profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -28785,9 +29659,9 @@ "200": { "description": "OK", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/AssetProfileInfo" } } } @@ -28923,47 +29797,80 @@ ] } }, - "/api/converter/library/{integrationType}/{vendorName}/{model}/downlink/payload": { + "/api/assetProfileInfos": { "get": { "tags": [ - "converter-library-controller" + "asset-profile-controller" ], - "summary": "Get downlink payload (getDownlinkPayload)", - "description": "Returns payload example for the downlink converter for the vendor, integration type and model", - "operationId": "getDownlinkPayload", + "summary": "Get Asset Profile infos (getAssetProfileInfos)", + "description": "Returns a page of asset profile info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Asset Profile Info is a lightweight object that includes main information about Asset Profile. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getAssetProfileInfos", "parameters": [ { - "name": "integrationType", - "in": "path", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "$ref": "#/components/schemas/IntegrationType" + "type": "integer", + "format": "int32" } }, { - "name": "vendorName", - "in": "path", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int32" } }, { - "name": "model", - "in": "path", - "required": true, + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the asset profile name.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "description", + "isDefault" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { "200": { "description": "OK", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/PageDataAssetProfileInfo" } } } @@ -29099,37 +30006,25 @@ ] } }, - "/api/converter/library/{integrationType}/{vendorName}/{model}/uplink": { + "/api/assetProfileInfos/list": { "get": { "tags": [ - "converter-library-controller" + "asset-profile-controller" ], - "summary": "Get uplink converter (getUplinkConverter)", - "description": "Returns uplink converter body for the vendor, integration type and model", - "operationId": "getUplinkConverter", + "summary": "Get Asset Profiles By Ids (getAssetProfilesByIds)", + "description": "Requested asset profiles must be owned by tenant which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAssetProfilesByIds", "parameters": [ { - "name": "integrationType", - "in": "path", - "required": true, - "schema": { - "$ref": "#/components/schemas/IntegrationType" - } - }, - { - "name": "vendorName", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "model", - "in": "path", + "name": "assetProfileIds", + "in": "query", + "description": "A list of asset profile ids, separated by comma ','", "required": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], @@ -29137,9 +30032,12 @@ "200": { "description": "OK", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/AssetProfileInfo" + } } } } @@ -29275,47 +30173,80 @@ ] } }, - "/api/converter/library/{integrationType}/{vendorName}/{model}/uplink/metadata": { + "/api/assetProfiles": { "get": { "tags": [ - "converter-library-controller" + "asset-profile-controller" ], - "summary": "Get uplink converter metadata (getUplinkConverterMetadata)", - "description": "Returns uplink converter metadata for the vendor, integration type and model", - "operationId": "getUplinkConverterMetadata", + "summary": "Get Asset Profiles (getAssetProfiles)", + "description": "Returns a page of asset profile objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAssetProfiles", "parameters": [ { - "name": "integrationType", - "in": "path", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "$ref": "#/components/schemas/IntegrationType" + "type": "integer", + "format": "int32" } }, { - "name": "vendorName", - "in": "path", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int32" } }, { - "name": "model", - "in": "path", - "required": true, + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the asset profile name.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "description", + "isDefault" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { "200": { "description": "OK", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/PageDataAssetProfile" } } } @@ -29451,35 +30382,99 @@ ] } }, - "/api/converter/library/{integrationType}/{vendorName}/{model}/uplink/payload": { + "/api/audit/logs": { "get": { "tags": [ - "converter-library-controller" + "audit-log-controller" ], - "summary": "Get uplink payload (getUplinkPayload)", - "description": "Returns payload example for the uplink converter for the vendor, integration type and model", - "operationId": "getUplinkPayload", + "summary": "Get all audit logs (getAuditLogs)", + "description": "Returns a page of audit logs related to all entities in the scope of the current user's Tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the audit logs.", + "operationId": "getAuditLogs", "parameters": [ { - "name": "integrationType", - "in": "path", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "$ref": "#/components/schemas/IntegrationType" + "type": "integer", + "format": "int32" } }, { - "name": "vendorName", - "in": "path", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on one of the next properties: entityType, entityName, userName, actionType, actionStatus.", + "required": false, "schema": { "type": "string" } }, { - "name": "model", - "in": "path", - "required": true, + "name": "sortProperty", + "in": "query", + "description": "Property of audit log to sort by. See the 'Model' tab of the Response Class for more details. Note: entityType sort property is not defined in the AuditLog class, however, it can be used to sort audit logs by types of entities that were logged.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "entityType", + "entityName", + "userName", + "actionType", + "actionStatus" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "startTime", + "in": "query", + "description": "The start timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "The end timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "actionTypes", + "in": "query", + "description": "A String value representing comma-separated list of action types. This parameter is optional, but it can be used to filter results to fetch only audit logs of specific action types. For example, 'LOGIN', 'LOGOUT'. See the 'Model' tab of the Response Class for more details.", + "required": false, "schema": { "type": "string" } @@ -29489,9 +30484,9 @@ "200": { "description": "OK", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/PageDataAuditLog" } } } @@ -29627,18 +30622,107 @@ ] } }, - "/api/customMenu": { + "/api/audit/logs/customer/{customerId}": { "get": { "tags": [ - "custom-menu-controller" + "audit-log-controller" ], - "summary": "Get end-user Custom Menu configuration (getCustomMenu)", - "description": "Fetch the Custom Menu configuration object for the authorized user. The custom menu is configured in the white labeling parameters and has one of three user scopes:SYSTEM, TENANT, CUSTOMER and four assignee type: NO_ASSIGN, ALL, CUSTOMERS, USERS.There are three default (assignee type: ALL) menus configured on the system level for each scope and if no other menu is configured for user, system configuration of the corresponding scope will be applied.If a custom menu with assignee type ALL is configured on the tenant level, it overrides the menu configuration of the corresponding scope on the system level. If a custom menu with assignee type USER_GROUPS is configured on the tenant level, it overrides default tenant menu.If a custom menu with assignee type CUSTOMERS is configured on tenant level for specific customer, it will be applied to all customer users.If a custom menu with assignee type ALL is configured on the customer level, it overrides the menu assigned on tenant level.If a custom menu with assignee type USER_GROUPS is configured on the customer level, it overrides default customer menu.If a custom menu is assigned to specific user, it overrides all other configuration.", - "operationId": "getCustomMenu", + "summary": "Get audit logs by customer id (getAuditLogsByCustomerId)", + "description": "Returns a page of audit logs related to the targeted customer entities (devices, assets, etc.), and users actions (login, logout, etc.) that belong to this customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the audit logs.", + "operationId": "getAuditLogsByCustomerId", "parameters": [ { - "name": "If-None-Match", - "in": "header", + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on one of the next properties: entityType, entityName, userName, actionType, actionStatus.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of audit log to sort by. See the 'Model' tab of the Response Class for more details. Note: entityType sort property is not defined in the AuditLog class, however, it can be used to sort audit logs by types of entities that were logged.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "entityType", + "entityName", + "userName", + "actionType", + "actionStatus" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "startTime", + "in": "query", + "description": "The start timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "The end timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "actionTypes", + "in": "query", + "description": "A String value representing comma-separated list of action types. This parameter is optional, but it can be used to filter results to fetch only audit logs of specific action types. For example, 'LOGIN', 'LOGOUT'. See the 'Model' tab of the Response Class for more details.", "required": false, "schema": { "type": "string" @@ -29651,7 +30735,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomMenuConfig" + "$ref": "#/components/schemas/PageDataAuditLog" } } } @@ -29785,54 +30869,131 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/audit/logs/entity/{entityType}/{entityId}": { + "get": { "tags": [ - "custom-menu-controller" + "audit-log-controller" ], - "summary": "Create Custom Menu (createCustomMenu)", - "description": "The api is designed to create Custom Menu without configuration. Is not applicable for update.\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the custom menu with specified id.", - "operationId": "createCustomMenu", + "summary": "Get audit logs by entity id (getAuditLogsByEntityId)", + "description": "Returns a page of audit logs related to the actions on the targeted entity. Basically, this API call is used to get the full lifecycle of some specific entity. For example to see when a device was created, updated, assigned to some customer, or even deleted from the system. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the audit logs.", + "operationId": "getAuditLogsByEntityId", "parameters": [ { - "name": "assignToList", + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", "in": "query", - "description": "A list of entity ids, separated by comma ','", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on one of the next properties: entityType, entityName, userName, actionType, actionStatus.", "required": false, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } }, { - "name": "force", + "name": "sortProperty", "in": "query", - "description": "Use force if you want to create default menu that conflicts with the existing one (old one will be update NO_ASSIGN assignee type)", + "description": "Property of audit log to sort by. See the 'Model' tab of the Response Class for more details. Note: entityType sort property is not defined in the AuditLog class, however, it can be used to sort audit logs by types of entities that were logged.", "required": false, "schema": { - "type": "boolean" + "type": "string", + "enum": [ + "createdTime", + "entityType", + "entityName", + "userName", + "actionType", + "actionStatus" + ] } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomMenuInfo" - } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } }, - "required": true - }, + { + "name": "startTime", + "in": "query", + "description": "The start timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "The end timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "actionTypes", + "in": "query", + "description": "A String value representing comma-separated list of action types. This parameter is optional, but it can be used to filter results to fetch only audit logs of specific action types. For example, 'LOGIN', 'LOGOUT'. See the 'Model' tab of the Response Class for more details.", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomMenu" + "$ref": "#/components/schemas/PageDataAuditLog" } } } @@ -29848,7 +31009,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -29968,31 +31129,22 @@ ] } }, - "/api/customMenu/infos": { + "/api/audit/logs/user/{userId}": { "get": { "tags": [ - "custom-menu-controller" + "audit-log-controller" ], - "summary": "Get all custom menus configured at user level (getCustomMenuInfos)", - "description": "Returns a page of custom menu info objects owned by the tenant or the customer of a current user, scope and assigneeType request parameters can be used to filter the result.\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", - "operationId": "getCustomMenuInfos", + "summary": "Get audit logs by user id (getAuditLogsByUserId)", + "description": "Returns a page of audit logs related to the actions of targeted user. For example, RPC call to a particular device, or alarm acknowledgment for a specific device, etc. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the audit logs.", + "operationId": "getAuditLogsByUserId", "parameters": [ { - "name": "scope", - "in": "query", - "description": "Custom menu scope.", - "required": false, - "schema": { - "$ref": "#/components/schemas/CMScope" - } - }, - { - "name": "assigneeType", - "in": "query", - "description": "Custom menu assignee type.", - "required": false, + "name": "userId", + "in": "path", + "description": "A string value representing the user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { - "$ref": "#/components/schemas/CMAssigneeType" + "type": "string" } }, { @@ -30018,7 +31170,7 @@ { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the custom menu name.", + "description": "The case insensitive 'substring' filter based on one of the next properties: entityType, entityName, userName, actionType, actionStatus.", "required": false, "schema": { "type": "string" @@ -30027,13 +31179,17 @@ { "name": "sortProperty", "in": "query", - "description": "Property of entity to sort by", + "description": "Property of audit log to sort by. See the 'Model' tab of the Response Class for more details. Note: entityType sort property is not defined in the AuditLog class, however, it can be used to sort audit logs by types of entities that were logged.", "required": false, "schema": { "type": "string", "enum": [ "createdTime", - "title" + "entityType", + "entityName", + "userName", + "actionType", + "actionStatus" ] } }, @@ -30049,6 +31205,35 @@ "DESC" ] } + }, + { + "name": "startTime", + "in": "query", + "description": "The start timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "The end timestamp in milliseconds of the search time range over the AuditLog class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "actionTypes", + "in": "query", + "description": "A String value representing comma-separated list of action types. This parameter is optional, but it can be used to filter results to fetch only audit logs of specific action types. For example, 'LOGIN', 'LOGOUT'. See the 'Model' tab of the Response Class for more details.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -30057,7 +31242,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataCustomMenuInfo" + "$ref": "#/components/schemas/PageDataAuditLog" } } } @@ -30193,42 +31378,31 @@ ] } }, - "/api/customMenu/{customMenuId}": { - "delete": { + "/api/auth/changePassword": { + "post": { "tags": [ - "custom-menu-controller" + "auth-controller" ], - "summary": "Delete custom menu (deleteCustomMenu)", - "description": "Deletes the custom menu based on the provided Custom Menu Id. Referencing non-existing custom menu Id will cause an error. If the custom menu is assigned to the list of users or customers bad request is returned.To delete a custom menu that has assignee list set 'force' request param to true ", - "operationId": "deleteCustomMenu", - "parameters": [ - { - "name": "customMenuId", - "in": "path", - "description": "A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Change password for current User (changePassword)", + "description": "Change the password for the User which credentials are used to perform this REST API call. Be aware that previously generated [JWT](https://jwt.io/) tokens will be still valid until they expire.", + "operationId": "changePassword", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangePasswordRequest" + } } }, - { - "name": "force", - "in": "query", - "description": "Force set to true will unassign menu before deletion", - "required": false, - "schema": { - "type": "boolean" - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomMenuDeleteResult" + "$ref": "#/components/schemas/JwtPair" } } } @@ -30244,7 +31418,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -30364,39 +31538,17 @@ ] } }, - "/api/customMenu/{customMenuId}/assigneeList": { - "get": { + "/api/auth/logout": { + "post": { "tags": [ - "custom-menu-controller" - ], - "summary": "Get Custom Menu assignee list (getCustomMenuAssigneeList)", - "description": "Fetch the list of Entity Info objects that represents users or customers, or empty list if custom menu is not assigned or has NO_ASSIGN/ALL assignee type.\n\nSecurity check is performed to verify that the user has 'READ' permission for the custom menu with specified id.", - "operationId": "getCustomMenuAssigneeList", - "parameters": [ - { - "name": "customMenuId", - "in": "path", - "description": "A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "auth-controller" ], + "summary": "Logout (logout)", + "description": "Special API call to record the 'logout' of the user to the Audit Logs. Since platform uses [JWT](https://jwt.io/), the actual logout is the procedure of clearing the [JWT](https://jwt.io/) token on the client side. ", + "operationId": "logout", "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityInfo" - } - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -30409,7 +31561,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -30529,33 +31681,21 @@ ] } }, - "/api/customMenu/{customMenuId}/config": { + "/api/auth/user": { "get": { "tags": [ - "custom-menu-controller" - ], - "summary": "Get Custom Menu configuration by id (getCustomMenuConfig)", - "description": "Fetch the Custom Menu configuration based on the provided Custom Menu Id. \n\nSecurity check is performed to verify that the user has 'READ' permission for the custom menu with specified id.", - "operationId": "getCustomMenuConfig", - "parameters": [ - { - "name": "customMenuId", - "in": "path", - "description": "A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "auth-controller" ], + "summary": "Get current User (getUser)", + "description": "Get the information about the User which credentials are used to perform this REST API call.", + "operationId": "getUser", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomMenuConfig" + "$ref": "#/components/schemas/User" } } } @@ -30689,43 +31829,34 @@ "ApiKeyForm": [] } ] - }, - "put": { + } + }, + "/api/noauth/activate": { + "get": { "tags": [ - "custom-menu-controller" + "auth-controller" ], - "summary": "Update Custom Menu configuration based on the provided Custom Menu Id (updateCustomMenuConfig)", - "description": "\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the custom menu with specified id.", - "operationId": "updateCustomMenuConfig", + "summary": "Check Activate User Token (checkActivateToken)", + "description": "Checks the activation token and forwards user to 'Create Password' page. If token is valid, returns '303 See Other' (redirect) response code with the correct address of 'Create Password' page and same 'activateToken' specified in the URL parameters. If token is not valid, returns '409 Conflict'. If token is expired, redirects to error page.", + "operationId": "checkActivateToken", "parameters": [ { - "name": "customMenuId", - "in": "path", - "description": "A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "activateToken", + "in": "query", + "description": "The activate token string.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomMenuConfig" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomMenu" + "type": "object" } } } @@ -30850,44 +31981,43 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] - } - }, - "/api/customMenu/{customMenuId}/info": { - "get": { + } + }, + "post": { "tags": [ - "custom-menu-controller" + "auth-controller" ], - "summary": "Get Custom Menu Info (getCustomMenuInfoById)", - "description": "Fetch the Custom Menu Info object based on the provided Custom Menu Id. \n\nSecurity check is performed to verify that the user has 'READ' permission for the custom menu with specified id.", - "operationId": "getCustomMenuInfoById", + "summary": "Activate User", + "description": "Checks the activation token and updates corresponding user password in the database. Now the user may start using his password to login. The response already contains the [JWT](https://jwt.io) activation and refresh tokens, to simplify the user activation flow and avoid asking user to input password again after activation. If token is valid, returns the object that contains [JWT](https://jwt.io/) access and refresh tokens. If token is not valid, returns '400 Bad Request'.", + "operationId": "activateUser", "parameters": [ { - "name": "customMenuId", - "in": "path", - "description": "A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, + "name": "sendActivationMail", + "in": "query", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": true } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivateUserRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomMenuInfo" + "$ref": "#/components/schemas/JwtPair" } } } @@ -30903,7 +32033,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -31012,51 +32142,38 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/customMenu/{customMenuId}/name": { - "put": { + "/api/noauth/resetPassword": { + "get": { "tags": [ - "custom-menu-controller" + "auth-controller" ], - "summary": "Update Custom Menu name based on the provided Custom Menu Id (updateCustomMenuName)", - "description": "\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the custom menu with specified id.", - "operationId": "updateCustomMenuName", + "summary": "Check password reset token (checkResetToken)", + "description": "Checks the password reset token and forwards user to 'Reset Password' page. If token is valid, returns '303 See Other' (redirect) response code with the correct address of 'Reset Password' page and same 'resetToken' specified in the URL parameters. If token is not valid, returns '409 Conflict'. If token is expired, redirects to error page.", + "operationId": "checkResetToken", "parameters": [ { - "name": "customMenuId", - "in": "path", - "description": "A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "resetToken", + "in": "query", + "description": "The reset token string.", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "New name of the custom menu" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } }, "400": { "description": "Bad Request", @@ -31178,64 +32295,24 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] - } - }, - "/api/customMenu/{id}/assign/{assigneeType}": { - "put": { + } + }, + "post": { "tags": [ - "custom-menu-controller" - ], - "summary": "Update custom menu assignee list (updateCustomMenuAssigneeList)", - "description": "The api designed to update the list of assignees or assignee type based on the provided Custom Menu Id. To change assignee type, put new assignee type in path parameter.\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the custom menu with specified id.", - "operationId": "updateCustomMenuAssigneeList", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "assigneeType", - "in": "path", - "required": true, - "schema": { - "$ref": "#/components/schemas/CMAssigneeType" - } - }, - { - "name": "force", - "in": "query", - "description": "Use force if you want to override default menu", - "required": false, - "schema": { - "type": "boolean" - } - } + "auth-controller" ], + "summary": "Reset password (resetPassword)", + "description": "Checks the password reset token and updates the password. If token is not valid, returns '400 Bad Request'.", + "operationId": "resetPassword", "requestBody": { "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/ResetPasswordRequest" } } - } + }, + "required": true }, "responses": { "200": { @@ -31252,7 +32329,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -31361,46 +32438,30 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/translation/custom/merged/{localeCode}": { - "get": { + "/api/noauth/resetPasswordByEmail": { + "post": { "tags": [ - "custom-translation-controller" + "auth-controller" ], - "summary": "Get end-user Custom Translation configuration (getMergedCustomTranslation)", - "description": "Fetch end-user Custom Translation for specified locale. The custom translation is configured in the white labeling parameters. If custom translation translation is defined on the tenant level, it overrides the custom translation of the system level. Similar, if the custom translation is defined on the customer level, it overrides the translation configuration of the tenant level.", - "operationId": "getMergedCustomTranslation", - "parameters": [ - { - "name": "localeCode", - "in": "path", - "description": "Locale code (e.g. 'en_US').", - "required": true, - "schema": { - "type": "string" + "summary": "Request reset password email (requestResetPasswordByEmail)", + "description": "Request to send the reset password email if the user with specified email address is present in the database. Always return '200 OK' status for security purposes.", + "operationId": "requestResetPasswordByEmail", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResetPasswordEmailRequest" + } } - } - ], + }, + "required": true + }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -31413,7 +32474,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -31522,43 +32583,24 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/translation/custom/{localeCode}": { + "/api/noauth/userPasswordPolicy": { "get": { "tags": [ - "custom-translation-controller" - ], - "summary": "Get Custom Translation configuration (getCustomTranslation)", - "description": "Fetch the Custom Translation for specified locale that corresponds to the authority of the user. The API call is designed to load the custom translation items for edition. So, the result is NOT merged with the parent level configuration. Let's assume there is a custom translation configured on a system level. And there is no custom translation items configured on a tenant level. In such a case, the API call will return empty object for the tenant administrator. \n\n Response example: \n\n```json\n{\"home\":\"MyHome\"}\n```\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", - "operationId": "getCustomTranslation", - "parameters": [ - { - "name": "localeCode", - "in": "path", - "description": "Locale code (e.g. 'en_US').", - "required": true, - "schema": { - "type": "string" - } - } + "auth-controller" ], + "summary": "Get the current User password policy (getUserPasswordPolicy)", + "description": "API call to get the password policy for the password validation form(s).", + "operationId": "getUserPasswordPolicy", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/UserPasswordPolicy" } } } @@ -31683,6 +32725,150 @@ } } } + } + } + }, + "/api/billingEndpoint/sendAccountActivated": { + "post": { + "tags": [ + "billing-endpoint-controller" + ], + "summary": "sendAccountActivatedEmail", + "operationId": "sendAccountActivatedEmail", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } }, "security": [ { @@ -31692,25 +32878,15 @@ "ApiKeyForm": [] } ] - }, + } + }, + "/api/billingEndpoint/sendActivation": { "post": { "tags": [ - "custom-translation-controller" - ], - "summary": "Create Or Update Custom Translation (saveCustomTranslation)", - "description": "Creates or Updates the Custom Translation for specified locale.\n\n Request example: \n\n```json\n{\"home\":\"MyHome\"}\n```\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", - "operationId": "saveCustomTranslation", - "parameters": [ - { - "name": "localeCode", - "in": "path", - "description": "Locale code (e.g. 'en_US').", - "required": true, - "schema": { - "type": "string" - } - } + "billing-endpoint-controller" ], + "summary": "sendBillingActivationEmail", + "operationId": "sendBillingActivationEmail", "requestBody": { "content": { "application/json": { @@ -31854,25 +33030,25 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/billingEndpoint/sendPasswordWasReset": { + "post": { "tags": [ - "custom-translation-controller" + "billing-endpoint-controller" ], - "summary": "Delete Custom Translation for specified locale (deleteCustomTranslation)", - "description": "Delete entire custom translation settings for end-user\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", - "operationId": "deleteCustomTranslation", - "parameters": [ - { - "name": "localeCode", - "in": "path", - "description": "Locale code (e.g. 'en_US').", - "required": true, - "schema": { - "type": "string" + "summary": "sendPasswordWasResetEmail", + "operationId": "sendPasswordWasResetEmail", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK" @@ -31888,7 +33064,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -32006,25 +33182,15 @@ "ApiKeyForm": [] } ] - }, - "patch": { + } + }, + "/api/billingEndpoint/sendResetPassword": { + "post": { "tags": [ - "custom-translation-controller" - ], - "summary": "Update Custom Translation for specified translation keys only (patchCustomTranslation)", - "description": "The API call is designed to update the custom translation for specified key only. \n\n Request example: \n\n```json\n{\"notification.active\":\"active\"}\n```\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", - "operationId": "patchCustomTranslation", - "parameters": [ - { - "name": "localeCode", - "in": "path", - "description": "Locale code (e.g. 'en_US').", - "required": true, - "schema": { - "type": "string" - } - } + "billing-endpoint-controller" ], + "summary": "sendResetPasswordEmail", + "operationId": "sendResetPasswordEmail", "requestBody": { "content": { "application/json": { @@ -32050,7 +33216,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -32170,46 +33336,23 @@ ] } }, - "/api/translation/custom/{localeCode}/upload": { - "post": { + "/api/billingEndpoint/tenant/permission/billing/hiddenPlans": { + "get": { "tags": [ - "custom-translation-controller" - ], - "summary": "Upload Custom Translation (uploadCustomTranslation)", - "description": "Upload the Custom Translation for specified locale.\n\n Request example: \n\n```json\n{\"home\":\"MyHome\"}\n```\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", - "operationId": "uploadCustomTranslation", - "parameters": [ - { - "name": "localeCode", - "in": "path", - "description": "Locale code (e.g. 'en_US').", - "required": true, - "schema": { - "type": "string" - } - } + "billing-endpoint-controller" ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "file": { - "type": "string", - "format": "binary" - } - }, - "required": [ - "file" - ] - } - } - } - }, + "summary": "tenantHasHiddenPlansAccess", + "operationId": "tenantHasHiddenPlansAccess", "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } }, "400": { "description": "Bad Request", @@ -32222,7 +33365,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -32342,37 +33485,23 @@ ] } }, - "/api/translation/custom/{localeCode}/{keyPath}": { - "delete": { + "/api/billingEndpoint/tenant/permission/billing/read": { + "get": { "tags": [ - "custom-translation-controller" - ], - "summary": "Delete specified key of Custom Translation (deleteCustomTranslationKey) ", - "description": "The API call is designed to delete specified key of the custom translation and return as a result parent translation.(e.g. if tenant translation for key is 'value1' and customer translation is 'value2' then by deletinf key onn customer level you will get 'value1' in response) \n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", - "operationId": "deleteCustomTranslationKey", - "parameters": [ - { - "name": "localeCode", - "in": "path", - "description": "Locale code (e.g. 'en_US').", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "keyPath", - "in": "path", - "description": "A string value representing key of the custom translation (e.g. 'notification.active').", - "required": true, - "schema": { - "type": "string" - } - } + "billing-endpoint-controller" ], + "summary": "tenantHasBillingRead", + "operationId": "tenantHasBillingRead", "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } }, "400": { "description": "Bad Request", @@ -32505,85 +33634,20 @@ ] } }, - "/api/customer": { - "post": { + "/api/billingEndpoint/tenant/permission/billing/write": { + "get": { "tags": [ - "customer-controller" - ], - "summary": "Create or update Customer (saveCustomer)", - "description": "Creates or Updates the Customer. When creating customer, platform generates Customer Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Customer Id will be present in the response. Specify existing Customer Id to update the Customer. Referencing non-existing Customer Id will cause 'Not Found' error.Remove 'id', 'tenantId' from the request body example (below) to create new Customer entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "saveCustomer", - "parameters": [ - { - "name": "entityGroupId", - "in": "query", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'. If specified, the entity will be added to the corresponding entity group.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "entityGroupIds", - "in": "query", - "description": "A list of string values, separated by comma ',' representing the Entity Group Ids. For example, '784f394c-42b6-435a-983c-b7beff2784f9','a84f394c-42b6-435a-083c-b7beff2784f9'. If specified, the entity will be added to the corresponding entity groups.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "nameConflictPolicy", - "in": "query", - "description": "Optional value of name conflict policy. Possible values: FAIL or UNIQUIFY. If omitted, FAIL policy is applied. FAIL policy implies exception will be thrown if an entity with the same name already exists. UNIQUIFY policy appends a suffix to the entity name, if a name conflict occurs.", - "required": false, - "schema": { - "$ref": "#/components/schemas/NameConflictPolicy", - "default": "FAIL" - } - }, - { - "name": "uniquifySeparator", - "in": "query", - "description": "Optional value of name suffix separator used by UNIQUIFY policy. By default, underscore separator is used. For example, strategy is UNIQUIFY, separator is '-'; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-7fsh4f'.", - "required": false, - "schema": { - "type": "string", - "default": "_" - } - }, - { - "name": "uniquifyStrategy", - "in": "query", - "description": "Optional value of uniquify strategy used by UNIQUIFY policy. Possible values: RANDOM or INCREMENTAL. By default, RANDOM strategy is used, which means random alphanumeric string will be added as a suffix to entity name. INCREMENTAL implies the first possible number starting from 1 will be added as a name suffix. For example, strategy is UNIQUIFY, uniquify strategy is INCREMENTAL; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-1.", - "required": false, - "schema": { - "$ref": "#/components/schemas/UniquifyStrategy", - "default": "RANDOM" - } - } + "billing-endpoint-controller" ], - "requestBody": { - "description": "A JSON value representing the customer.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Customer" - } - } - }, - "required": true - }, + "summary": "tenantHasBillingWrite", + "operationId": "tenantHasBillingWrite", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Customer" + "type": "boolean" } } } @@ -32599,7 +33663,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -32719,35 +33783,26 @@ ] } }, - "/api/customer/info/{customerId}": { - "get": { + "/api/billingEndpoint/tenantCanUpdatePlan": { + "post": { "tags": [ - "customer-controller" + "billing-endpoint-controller" ], - "summary": "Get Customer info (getCustomerInfoById)", - "description": "Get the Customer info object based on the provided Customer Id. If the user has the authority of 'Tenant Administrator', the server checks that the customer is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the user belongs to the customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerInfoById", - "parameters": [ - { - "name": "customerId", - "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "checkTenantCanUpdatePlan", + "operationId": "checkTenantCanUpdatePlan", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } } - } - ], + }, + "required": true + }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomerInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -32760,7 +33815,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -32880,35 +33935,26 @@ ] } }, - "/api/customer/{customerId}": { - "get": { + "/api/billingEndpoint/tenantPlanChanged": { + "post": { "tags": [ - "customer-controller" + "billing-endpoint-controller" ], - "summary": "Get Customer (getCustomerById)", - "description": "Get the Customer object based on the provided Customer Id. If the user has the authority of 'Tenant Administrator', the server checks that the customer is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the user belongs to the customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerById", - "parameters": [ - { - "name": "customerId", - "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "notifyTenantPlanChanged", + "operationId": "notifyTenantPlanChanged", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } } - } - ], + }, + "required": true + }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Customer" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -32921,7 +33967,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -33039,25 +34085,25 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/billingEndpoint/tenantStateChanged": { + "post": { "tags": [ - "customer-controller" + "billing-endpoint-controller" ], - "summary": "Delete Customer (deleteCustomer)", - "description": "Deletes the Customer and all customer Users. All assigned Dashboards, Assets, Devices, etc. will be unassigned but not deleted. Referencing non-existing Customer Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", - "operationId": "deleteCustomer", - "parameters": [ - { - "name": "customerId", - "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "notifyTenantStateChanged", + "operationId": "notifyTenantStateChanged", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK" @@ -33073,7 +34119,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -33193,102 +34239,26 @@ ] } }, - "/api/customer/{customerId}/customerInfos": { - "get": { + "/api/billingEndpoint/tenantSubscriptionCreated": { + "post": { "tags": [ - "customer-controller" + "billing-endpoint-controller" ], - "summary": "Get Customer sub-customers Infos (getCustomerCustomerInfos)", - "description": "Returns a page of customer info objects owned by the specified customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerCustomerInfos", - "parameters": [ - { - "name": "customerId", - "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the customer title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title", - "email", - "country", - "city" - ] + "summary": "notifyTenantSubscriptionCreated", + "operationId": "notifyTenantSubscriptionCreated", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } } }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } - ], + "required": true + }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataCustomerInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -33301,7 +34271,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -33421,23 +34391,101 @@ ] } }, - "/api/customer/{customerId}/shortInfo": { + "/api/blobEntities": { "get": { "tags": [ - "customer-controller" + "blob-entity-controller" ], - "summary": "Get short Customer info (getShortCustomerInfoById)", - "description": "Get the short customer object that contains only the title and 'isPublic' flag. If the user has the authority of 'Tenant Administrator', the server checks that the customer is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the user belongs to the customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getShortCustomerInfoById", + "summary": "Get Blob Entities (getBlobEntities)", + "description": "Returns a page of BlobEntityWithCustomerInfo object that are available for the current user. The platform uses Blob(binary large object) entities in the reporting feature, in order to store Dashboard states snapshots of different content types in base64 format. BlobEntityWithCustomerInfo represents an object that contains base info about the blob entity(name, type, contentType, etc.) and info about the customer(customerTitle, customerIsPublic) of the user that scheduled generation of the dashboard report. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getBlobEntities", "parameters": [ { - "name": "customerId", - "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "type", + "in": "query", + "description": "A string value representing the blob entity type. For example, 'report'", + "required": false, "schema": { "type": "string" } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the blob entity name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "contentType", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "startTime", + "in": "query", + "description": "The start timestamp in milliseconds of the search time range over the BlobEntityWithCustomerInfo class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "The end timestamp in milliseconds of the search time range over the BlobEntityWithCustomerInfo class field: 'createdTime'.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } } ], "responses": { @@ -33446,7 +34494,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/PageDataBlobEntityWithCustomerInfo" } } } @@ -33582,22 +34630,25 @@ ] } }, - "/api/customer/{customerId}/title": { + "/api/blobEntities/list": { "get": { "tags": [ - "customer-controller" + "blob-entity-controller" ], - "summary": "Get Customer Title (getCustomerTitleById)", - "description": "Get the title of the customer. If the user has the authority of 'Tenant Administrator', the server checks that the customer is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the user belongs to the customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerTitleById", + "summary": "Get Blob Entities By Ids (getBlobEntitiesByIds)", + "description": "Requested blob entities must be owned by tenant or assigned to customer which user is performing the request. The platform uses Blob(binary large object) entities in the reporting feature, in order to store Dashboard states snapshots of different content types in base64 format. BlobEntityInfo represents an object that contains base info about the blob entity(name, type, contentType, etc.). See the 'Model' tab of the Response Class for more details.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getBlobEntitiesByIds", "parameters": [ { - "name": "customerId", - "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "blobEntityIds", + "in": "query", + "description": "A list of blob entity ids, separated by comma ','", "required": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], @@ -33605,9 +34656,12 @@ "200": { "description": "OK", "content": { - "application/text": { + "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/BlobEntityInfo" + } } } } @@ -33743,81 +34797,23 @@ ] } }, - "/api/customerInfos/all": { + "/api/blobEntity/info/{blobEntityId}": { "get": { "tags": [ - "customer-controller" + "blob-entity-controller" ], - "summary": "Get All Customer Infos for current user (getAllCustomerInfos)", - "description": "Returns a page of customer info objects owned by the tenant or the customer of a current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAllCustomerInfos", + "summary": "Get Blob Entity With Customer Info (getBlobEntityInfoById)", + "description": "Fetch the BlobEntityWithCustomerInfo object based on the provided Blob entity Id. The platform uses Blob(binary large object) entities in the reporting feature, in order to store Dashboard states snapshots of different content types in base64 format. BlobEntityWithCustomerInfo represents an object that contains base info about the blob entity(name, type, contentType, etc.) and info about the customer(customerTitle, customerIsPublic) of the user that scheduled generation of the dashboard report. Referencing non-existing Blob entity Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getBlobEntityInfoById", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "blobEntityId", + "in": "path", + "description": "A string value representing the blob entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the customer title.", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title", - "email", - "country", - "city" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -33826,7 +34822,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataCustomerInfo" + "$ref": "#/components/schemas/BlobEntityWithCustomerInfo" } } } @@ -33962,84 +34958,28 @@ ] } }, - "/api/customers": { - "get": { + "/api/blobEntity/{blobEntityId}": { + "delete": { "tags": [ - "customer-controller" + "blob-entity-controller" ], - "summary": "Get Tenant Customers (getCustomers)", - "description": "Returns a page of customers owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomers", + "summary": "Delete Blob Entity (deleteBlobEntity)", + "description": "Delete Blob entity based on the provided Blob entity Id. Referencing non-existing Blob entity Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", + "operationId": "deleteBlobEntity", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "blobEntityId", + "in": "path", + "description": "A string value representing the blob entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the customer title.", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title", - "email", - "country", - "city" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataCustomer" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -34172,25 +35112,22 @@ ] } }, - "/api/customers/list": { + "/api/blobEntity/{blobEntityId}/download": { "get": { "tags": [ - "customer-controller" + "blob-entity-controller" ], - "summary": "Get customers by Customer Ids (getCustomersByIds)", - "description": "Returns a list of Customer objects based on the provided ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getCustomersByIds", + "summary": "Download Blob Entity By Id (downloadBlobEntity)", + "description": "Download report file based on the provided Blob entity Id. Referencing non-existing Blob entity Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "downloadBlobEntity", "parameters": [ { - "name": "customerIds", - "in": "query", - "description": "A list of customer ids, separated by comma ','", + "name": "blobEntityId", + "in": "path", + "description": "A string value representing the blob entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } } ], @@ -34200,10 +35137,8 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Customer" - } + "type": "string", + "format": "binary" } } } @@ -34339,90 +35274,32 @@ ] } }, - "/api/entityGroup/{entityGroupId}/customers": { - "get": { + "/api/calculatedField": { + "post": { "tags": [ - "customer-controller" + "calculated-field-controller" ], - "summary": "Get customers by Entity Group Id (getCustomersByEntityGroupId)", - "description": "Returns a page of Customer objects that belongs to specified Entity Group Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getCustomersByEntityGroupId", - "parameters": [ - { - "name": "entityGroupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the customer title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title", - "email", - "country", - "city" - ] + "summary": "Create Or Update Calculated Field (saveCalculatedField)", + "description": "Creates or Updates the Calculated Field. When creating calculated field, platform generates Calculated Field Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Calculated Field Id will be present in the response. Specify existing Calculated Field Id to update the calculated field. Referencing non-existing Calculated Field Id will cause 'Not Found' error. Remove 'id', 'tenantId' from the request body example (below) to create new Calculated Field entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "saveCalculatedField", + "requestBody": { + "description": "A JSON value representing the calculated field.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CalculatedField" + } } }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataCustomer" + "$ref": "#/components/schemas/CalculatedField" } } } @@ -34438,7 +35315,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -34558,32 +35435,32 @@ ] } }, - "/api/tenant/customers": { - "get": { + "/api/calculatedField/testScript": { + "post": { "tags": [ - "customer-controller" + "calculated-field-controller" ], - "summary": "Get Tenant Customer by Customer title (getTenantCustomer)", - "description": "Get the Customer using Customer Title. \n\nAvailable for users with 'TENANT_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getTenantCustomer", - "parameters": [ - { - "name": "customerTitle", - "in": "query", - "description": "A string value representing the Customer title.", - "required": true, - "schema": { - "type": "string" + "summary": "Test Script expression", + "description": "Execute the Script expression and return the result. The format of request: \n\n```json\n{\n \"expression\": \"var temp = 0; foreach(element: temperature.values) {temp += element.value;} var avgTemperature = temp / temperature.values.size(); var adjustedTemperature = avgTemperature + 0.1 * humidity.value; return {\\\"adjustedTemperature\\\": adjustedTemperature};\",\n \"arguments\": {\n \"temperature\": {\n \"type\": \"TS_ROLLING\",\n \"timeWindow\": {\n \"startTs\": 1739775630002,\n \"endTs\": 65432211,\n \"limit\": 5\n },\n \"values\": [\n { \"ts\": 1739775639851, \"value\": 23 },\n { \"ts\": 1739775664561, \"value\": 43 },\n { \"ts\": 1739775713079, \"value\": 15 },\n { \"ts\": 1739775999522, \"value\": 34 },\n { \"ts\": 1739776228452, \"value\": 22 }\n ]\n },\n \"humidity\": { \"type\": \"SINGLE_VALUE\", \"ts\": 1739776478057, \"value\": 23 }\n }\n}\n```\n\n Expected result JSON contains \"output\" and \"error\".\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "testCalculatedFieldScript", + "requestBody": { + "description": "Test calculated field TBEL expression.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Customer" + "$ref": "#/components/schemas/JsonNode" } } } @@ -34599,7 +35476,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -34719,72 +35596,22 @@ ] } }, - "/api/user/customers": { + "/api/calculatedField/{calculatedFieldId}": { "get": { "tags": [ - "customer-controller" + "calculated-field-controller" ], - "summary": "Get Customers (getUserCustomers)", - "description": "Returns a page of customers available for the user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getUserCustomers", + "summary": "Get Calculated Field (getCalculatedFieldById)", + "description": "Fetch the Calculated Field object based on the provided Calculated Field Id.", + "operationId": "getCalculatedFieldById", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "calculatedFieldId", + "in": "path", "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the customer title.", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title", - "email", - "country", - "city" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -34793,7 +35620,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataCustomer" + "$ref": "#/components/schemas/CalculatedField" } } } @@ -34927,26 +35754,27 @@ "ApiKeyForm": [] } ] - } - }, - "/api/customer/dashboard/home/info": { - "get": { + }, + "delete": { "tags": [ - "dashboard-controller" + "calculated-field-controller" + ], + "summary": "Delete Calculated Field (deleteCalculatedField)", + "description": "Deletes the calculated field. Referencing non-existing Calculated Field Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "deleteCalculatedField", + "parameters": [ + { + "name": "calculatedFieldId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Get Customer Home Dashboard Info (getCustomerHomeDashboardInfo)", - "description": "Returns the home dashboard info object that is configured as 'homeDashboardId' parameter in the 'additionalInfo' of the corresponding customer. \n\nAvailable for users with 'CUSTOMER_USER' authority.\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", - "operationId": "getCustomerHomeDashboardInfo", "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HomeDashboardInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -35077,27 +35905,36 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/calculatedField/{calculatedFieldId}/debug": { + "get": { "tags": [ - "dashboard-controller" + "calculated-field-controller" ], - "summary": "Update Customer Home Dashboard Info (setCustomerHomeDashboardInfo)", - "description": "Update the home dashboard assignment for the current customer. \n\nAvailable for users with 'CUSTOMER_USER' authority.\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", - "operationId": "setCustomerHomeDashboardInfo", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HomeDashboardInfo" - } + "summary": "Get latest calculated field debug event (getLatestCalculatedFieldDebugEvent)", + "description": "Gets latest calculated field debug event for specified calculated field id. Referencing non-existing calculated field id will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getLatestCalculatedFieldDebugEvent", + "parameters": [ + { + "name": "calculatedFieldId", + "in": "path", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + } }, "400": { "description": "Bad Request", @@ -35110,7 +35947,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -35230,86 +36067,39 @@ ] } }, - "/api/customer/{customerId}/dashboards": { + "/api/calculatedField/{calculatedFieldId}/reprocess": { "get": { "tags": [ - "dashboard-controller" + "calculated-field-controller" ], - "summary": "Get Customer Dashboards (getCustomerDashboards)", - "description": "Returns a page of dashboard info objects owned by the specified customer. The Dashboard Info object contains lightweight information about the dashboard (e.g. title, image, assigned customers) but does not contain the heavyweight configuration JSON. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerDashboards", + "summary": "Reprocess Calculated Field (reprocessCalculatedField)", + "description": "Reprocesses the calculated field.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "reprocessCalculatedField", "parameters": [ { - "name": "customerId", + "name": "calculatedFieldId", "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "pageSize", + "name": "startTs", "in": "query", - "description": "Maximum amount of entities in a one page", "required": true, "schema": { "type": "integer", - "format": "int32" + "format": "int64" } }, { - "name": "page", + "name": "endTs", "in": "query", - "description": "Sequence number of page starting from 0", "required": true, "schema": { "type": "integer", - "format": "int32" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the dashboard title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "format": "int64" } } ], @@ -35319,7 +36109,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataDashboardInfo" + "$ref": "#/components/schemas/Job" } } } @@ -35455,62 +36245,31 @@ ] } }, - "/api/dashboard": { - "post": { + "/api/calculatedField/{calculatedFieldId}/reprocess/job": { + "get": { "tags": [ - "dashboard-controller" + "calculated-field-controller" ], - "summary": "Create Or Update Dashboard (saveDashboard)", - "description": "Create or update the Dashboard. When creating dashboard, platform generates Dashboard Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Dashboard id will be present in the response. Specify existing Dashboard id to update the dashboard. Referencing non-existing dashboard Id will cause 'Not Found' error. Only users with 'TENANT_ADMIN') authority may create the dashboards.Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Dashboard entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "saveDashboard", + "summary": "getLastCalculatedFieldReprocessingJob", + "operationId": "getLastCalculatedFieldReprocessingJob", "parameters": [ { - "name": "entityGroupId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "entityGroupIds", - "in": "query", - "description": "A list of entity group ids, separated by comma ','", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "Accept-Encoding", - "in": "header", - "required": false, + "name": "calculatedFieldId", + "in": "path", + "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], - "requestBody": { - "description": "A JSON value representing the dashboard.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Dashboard" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Dashboard" + "$ref": "#/components/schemas/Job" } } } @@ -35526,7 +36285,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -35646,19 +36405,19 @@ ] } }, - "/api/dashboard/home": { + "/api/calculatedField/{calculatedFieldId}/reprocess/validate": { "get": { "tags": [ - "dashboard-controller" + "calculated-field-controller" ], - "summary": "Get Home Dashboard (getHomeDashboard)", - "description": "Returns the home dashboard object that is configured as 'homeDashboardId' parameter in the 'additionalInfo' of the User. If 'homeDashboardId' parameter is not set on the User level and the User has authority 'CUSTOMER_USER', check the same parameter for the corresponding Customer. If 'homeDashboardId' parameter is not set on the User and Customer levels then checks the same parameter for the Tenant that owns the user. The Dashboard object is a heavyweight object that contains information about the dashboard (e.g. title, image, assigned customers) and also configuration JSON (e.g. layouts, widgets, entity aliases).\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getHomeDashboard", + "summary": "Validate reprocessing capability of a calculated field (validateCalculatedFieldReprocessing)", + "description": "Checks whether the specified calculated field can be reprocessed. Returns a validation result indicating if reprocessing is allowed and, if not, provides a reason. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "validateCalculatedFieldReprocessing", "parameters": [ { - "name": "Accept-Encoding", - "in": "header", - "required": false, + "name": "calculatedFieldId", + "in": "path", + "required": true, "schema": { "type": "string" } @@ -35670,7 +36429,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HomeDashboard" + "$ref": "#/components/schemas/CfReprocessingValidationResult" } } } @@ -35806,24 +36565,45 @@ ] } }, - "/api/dashboard/home/info": { + "/api/calculatedField/{calculatedFieldId}/reprocessAndWait": { "get": { "tags": [ - "dashboard-controller" + "calculated-field-controller" + ], + "summary": "Reprocess Calculated Field and wait for completion (reprocessCalculatedFieldAndWait)", + "description": "Reprocesses the calculated field and waits until the job completes or fails.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "reprocessCalculatedFieldAndWait", + "parameters": [ + { + "name": "calculatedFieldId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "startTs", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTs", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } ], - "summary": "Get Home Dashboard Info (getHomeDashboardInfo)", - "description": "Returns the home dashboard info object that is configured as 'homeDashboardId' parameter in the 'additionalInfo' of the User. If 'homeDashboardId' parameter is not set on the User level and the User has authority 'CUSTOMER_USER', check the same parameter for the corresponding Customer. If 'homeDashboardId' parameter is not set on the User and Customer levels then checks the same parameter for the Tenant that owns the user. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getHomeDashboardInfo", "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HomeDashboardInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -35956,23 +36736,96 @@ ] } }, - "/api/dashboard/info/{dashboardId}": { + "/api/calculatedField/{entityType}/{entityId}": { "get": { "tags": [ - "dashboard-controller" + "calculated-field-controller" ], - "summary": "Get Dashboard Info (getDashboardInfoById)", - "description": "Get the information about the dashboard based on 'dashboardId' parameter. The Dashboard Info object contains lightweight information about the dashboard (e.g. title, image, assigned customers) but does not contain the heavyweight configuration JSON.", - "operationId": "getDashboardInfoById", + "summary": "Get Calculated Fields by Entity Id (getCalculatedFieldsByEntityId)", + "description": "Fetch the Calculated Fields based on the provided Entity Id.", + "operationId": "getCalculatedFieldsByEntityId", "parameters": [ { - "name": "dashboardId", + "name": "entityType", "in": "path", - "description": "A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "type", + "in": "query", + "description": "Calculated field type. If not specified, all types will be returned.", + "required": false, + "schema": { + "$ref": "#/components/schemas/CalculatedFieldType" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the calculated field name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -35981,7 +36834,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardInfo" + "$ref": "#/components/schemas/PageDataCalculatedField" } } } @@ -36117,23 +36970,125 @@ ] } }, - "/api/dashboard/maxDatapointsLimit": { + "/api/calculatedFields": { "get": { "tags": [ - "dashboard-controller" + "calculated-field-controller" + ], + "summary": "Get calculated fields (getCalculatedFields)", + "description": "Fetch tenant calculated fields based on the filter.", + "operationId": "getCalculatedFields", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "types", + "in": "query", + "description": "Calculated field types filter.", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CalculatedFieldType" + }, + "uniqueItems": true + } + }, + { + "name": "entityType", + "in": "query", + "description": "Entity type filter. If not specified, calculated fields for all supported entity types will be returned.", + "required": false, + "schema": { + "$ref": "#/components/schemas/EntityType" + } + }, + { + "name": "entities", + "in": "query", + "description": "Entities filter. If not specified, calculated fields for entity type filter will be returned.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the calculated field name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "name", + "in": "query", + "description": "Repeatable name query parameter", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } ], - "summary": "Get max data points limit (getMaxDatapointsLimit)", - "description": "Get the maximum number of data points that dashboard may request from the server per in a single subscription command. This value impacts the time window behavior. It impacts 'Max values' parameter in case user selects 'None' as 'Data aggregation function'. It also impacts the 'Grouping interval' in case of any other 'Data aggregation function' is selected. The actual value of the limit is configurable in the system configuration file.", - "operationId": "getMaxDatapointsLimit", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "integer", - "format": "int64", - "example": 5000 + "$ref": "#/components/schemas/PageDataCalculatedFieldInfo" } } } @@ -36269,23 +37224,74 @@ ] } }, - "/api/dashboard/serverTime": { + "/api/calculatedFields/names": { "get": { "tags": [ - "dashboard-controller" + "calculated-field-controller" + ], + "summary": "Get calculated field names (getCalculatedFieldNames)", + "description": "Fetch the list of calculated field names for specified type.", + "operationId": "getCalculatedFieldNames", + "parameters": [ + { + "name": "type", + "in": "query", + "description": "Calculated field type filter.", + "required": true, + "schema": { + "$ref": "#/components/schemas/CalculatedFieldType" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the calculated field name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } ], - "summary": "Get server time (getServerTime)", - "description": "Get the server time (milliseconds since January 1, 1970 UTC). Used to adjust view of the dashboards according to the difference between browser and server time.", - "operationId": "getServerTime", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "integer", - "format": "int64", - "example": 1636023857137 + "$ref": "#/components/schemas/PageDataString" } } } @@ -36421,49 +37427,20 @@ ] } }, - "/api/dashboard/{dashboardId}": { + "/api/cloudEndpoint/permission/domain/read": { "get": { "tags": [ - "dashboard-controller" - ], - "summary": "Get Dashboard (getDashboardById)", - "description": "Get the dashboard based on 'dashboardId' parameter. The Dashboard object is a heavyweight object that contains information about the dashboard (e.g. title, image, assigned customers) and also configuration JSON (e.g. layouts, widgets, entity aliases).\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getDashboardById", - "parameters": [ - { - "name": "dashboardId", - "in": "path", - "description": "A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "includeResources", - "in": "query", - "description": "Export used resources and replace resource links with resource metadata", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "Accept-Encoding", - "in": "header", - "required": false, - "schema": { - "type": "string" - } - } + "cloud-endpoint-controller" ], + "summary": "hasDomainReadPermission", + "operationId": "hasDomainReadPermission", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Dashboard" + "type": "boolean" } } } @@ -36597,28 +37574,25 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/cloudEndpoint/permission/domain/write": { + "get": { "tags": [ - "dashboard-controller" - ], - "summary": "Delete the Dashboard (deleteDashboard)", - "description": "Delete the Dashboard. Only users with 'TENANT_ADMIN') authority may delete the dashboards.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "deleteDashboard", - "parameters": [ - { - "name": "dashboardId", - "in": "path", - "description": "A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - } + "cloud-endpoint-controller" ], + "summary": "hasDomainWritePermission", + "operationId": "hasDomainWritePermission", "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } }, "400": { "description": "Bad Request", @@ -36751,38 +37725,20 @@ ] } }, - "/api/dashboards": { + "/api/cloudEndpoint/tenant/permission/whiteLabel/read": { "get": { "tags": [ - "dashboard-controller" - ], - "summary": "Get dashboards by Dashboard Ids (getDashboardsByIds)", - "description": "Returns a list of DashboardInfo objects based on the provided ids. Filters the list based on the user permissions. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getDashboardsByIds", - "parameters": [ - { - "name": "dashboardIds", - "in": "query", - "description": "A list of dashboard ids, separated by comma ','", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } + "cloud-endpoint-controller" ], + "summary": "tenantHasWhiteLabelRead", + "operationId": "tenantHasWhiteLabelRead", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DashboardInfo" - } + "type": "boolean" } } } @@ -36918,87 +37874,20 @@ ] } }, - "/api/dashboards/all": { + "/api/cloudEndpoint/tenant/permission/whiteLabel/write": { "get": { "tags": [ - "dashboard-controller" - ], - "summary": "Get All Dashboards for current user (getAllDashboards)", - "description": "Returns a page of dashboard info objects owned by the tenant or the customer of a current user. The Dashboard Info object contains lightweight information about the dashboard (e.g. title, image, assigned customers) but does not contain the heavyweight configuration JSON. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAllDashboards", - "parameters": [ - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the dashboard title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } + "cloud-endpoint-controller" ], + "summary": "tenantHasWhiteLabelWrite", + "operationId": "tenantHasWhiteLabelWrite", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataDashboardInfo" + "type": "boolean" } } } @@ -37134,90 +38023,16 @@ ] } }, - "/api/entityGroup/{entityGroupId}/dashboards": { + "/api/cloudEndpoint/tenant/permission/whiteLabelingAllowed": { "get": { "tags": [ - "dashboard-controller" - ], - "summary": "Get dashboards by Entity Group Id (getDashboardsByEntityGroupId)", - "description": "Returns a page of Dashboard objects that belongs to specified Entity Group Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getDashboardsByEntityGroupId", - "parameters": [ - { - "name": "entityGroupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the dashboard title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } + "cloud-endpoint-controller" ], + "summary": "checkTenantWhiteLabelingAllowed", + "operationId": "checkTenantWhiteLabelingAllowed", "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataDashboardInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -37350,38 +38165,20 @@ ] } }, - "/api/entityGroup/{entityGroupId}/dashboards/export": { + "/api/component/{componentDescriptorClazz}": { "get": { "tags": [ - "dashboard-controller" + "component-descriptor-controller" ], - "summary": "Export Dashboards (exportGroupDashboards)", - "description": "Export the dashboards that belong to specified group id.The Dashboard object is a heavyweight object that contains information about the dashboard (e.g. title, image, assigned customers) and also configuration JSON (e.g. layouts, widgets, entity aliases).\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "exportGroupDashboards", + "summary": "Get Component Descriptor (getComponentDescriptorByClazz)", + "description": "Gets the Component Descriptor object using class name from the path parameters. Each Component Descriptor represents configuration of specific rule node (e.g. 'Save Timeseries' or 'Send Email'.). The Component Descriptors are used by the rule chain Web UI to build the configuration forms for the rule nodes. The Component Descriptors are discovered at runtime by scanning the class path and searching for @RuleNode annotation. Once discovered, the up to date list of descriptors is persisted to the database.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getComponentDescriptorByClazz", "parameters": [ { - "name": "entityGroupId", + "name": "componentDescriptorClazz", "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "limit", - "in": "query", - "description": "Limit of the entities to export", + "description": "Component Descriptor class name", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "Accept-Encoding", - "in": "header", - "required": false, "schema": { "type": "string" } @@ -37393,10 +38190,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Dashboard" - } + "$ref": "#/components/schemas/ComponentDescriptor" } } } @@ -37532,53 +38326,55 @@ ] } }, - "/api/entityGroup/{entityGroupId}/dashboards/import": { - "post": { + "/api/components": { + "get": { "tags": [ - "dashboard-controller" + "component-descriptor-controller" ], - "summary": "Import Dashboards (importGroupDashboards)", - "description": "Import the dashboards to specified group.The Dashboard object is a heavyweight object that contains information about the dashboard (e.g. title, image, assigned customers) and also configuration JSON (e.g. layouts, widgets, entity aliases).\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", - "operationId": "importGroupDashboards", + "summary": "Get Component Descriptors (getComponentDescriptorsByTypes)", + "description": "Gets the Component Descriptors using coma separated list of rule node types and optional rule chain type request parameters. Each Component Descriptor represents configuration of specific rule node (e.g. 'Save Timeseries' or 'Send Email'.). The Component Descriptors are used by the rule chain Web UI to build the configuration forms for the rule nodes. The Component Descriptors are discovered at runtime by scanning the class path and searching for @RuleNode annotation. Once discovered, the up to date list of descriptors is persisted to the database.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getComponentDescriptorsByTypes", "parameters": [ { - "name": "entityGroupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "componentTypes", + "in": "query", + "description": "List of types of the Rule Nodes, (ENRICHMENT, FILTER, TRANSFORMATION, ACTION or EXTERNAL)", "required": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } }, { - "name": "overwrite", + "name": "ruleChainType", "in": "query", - "description": "Overwrite dashboards with the same name", + "description": "Type of the Rule Chain", "required": false, "schema": { - "type": "boolean", - "default": false + "type": "string", + "enum": [ + "CORE", + "EDGE" + ] } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "array", - "description": "JSON array with the dashboard objects", - "items": { - "$ref": "#/components/schemas/Dashboard" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ComponentDescriptor" + } } } } }, - "required": true - }, - "responses": { - "200": { - "description": "OK" - }, "400": { "description": "Bad Request", "content": { @@ -37590,7 +38386,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -37710,21 +38506,55 @@ ] } }, - "/api/tenant/dashboard/home/info": { + "/api/components/{componentType}": { "get": { "tags": [ - "dashboard-controller" + "component-descriptor-controller" + ], + "summary": "Get Component Descriptors (getComponentDescriptorsByType)", + "description": "Gets the Component Descriptors using rule node type and optional rule chain type request parameters. Each Component Descriptor represents configuration of specific rule node (e.g. 'Save Timeseries' or 'Send Email'.). The Component Descriptors are used by the rule chain Web UI to build the configuration forms for the rule nodes. The Component Descriptors are discovered at runtime by scanning the class path and searching for @RuleNode annotation. Once discovered, the up to date list of descriptors is persisted to the database.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getComponentDescriptorsByType", + "parameters": [ + { + "name": "componentType", + "in": "path", + "description": "Type of the Rule Node", + "required": true, + "schema": { + "type": "string", + "enum": [ + "ENRICHMENT", + "FILTER", + "TRANSFORMATION", + "ACTION", + "EXTERNAL" + ] + } + }, + { + "name": "ruleChainType", + "in": "query", + "description": "Type of the Rule Chain", + "required": false, + "schema": { + "type": "string", + "enum": [ + "CORE", + "EDGE" + ] + } + } ], - "summary": "Get Tenant Home Dashboard Info (getTenantHomeDashboardInfo)", - "description": "Returns the home dashboard info object that is configured as 'homeDashboardId' parameter in the 'additionalInfo' of the corresponding tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", - "operationId": "getTenantHomeDashboardInfo", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HomeDashboardInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/ComponentDescriptor" + } } } } @@ -37858,19 +38688,22 @@ "ApiKeyForm": [] } ] - }, + } + }, + "/api/converter": { "post": { "tags": [ - "dashboard-controller" + "converter-controller" ], - "summary": "Update Tenant Home Dashboard Info (getTenantHomeDashboardInfo)", - "description": "Update the home dashboard assignment for the current tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", - "operationId": "setTenantHomeDashboardInfo", + "summary": "Create Or Update Converter (saveConverter)", + "description": "Create or update the Converter. When creating converter, platform generates Converter Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created converter id will be present in the response. Specify existing Converter id to update the converter. Referencing non-existing converter Id will cause 'Not Found' error. Converter name is unique in the scope of tenant. \n\n# Converter Configuration\n\nConverter configuration (**'configuration'** field) is the JSON object that should contain one of two possible fields: **'decoder'** or **'encoder'**. The former is used when the converter has UPLINK type, the latter is used - when DOWNLINK type. It can contain both 'decoder' and 'encoder' fields, when the correct one is specified for the appropriate converter type, another one can be set to 'null'. See the examples of each one below. \n\n## Uplink Converter Configuration\n\n***Default converter may be different, depending on integration type***.\n\n```json\n{\n \"decoder\":\"// Decode an uplink message from a buffer\\n// payload - array of bytes\\n// metadata - key/value object\\n\\n/** Decoder **/\\n\\n// decode payload to string\\nvar payloadStr = decodeToString(payload);\\n\\n// decode payload to JSON\\n// var data = decodeToJson(payload);\\n\\nvar deviceName = 'Device A';\\nvar deviceType = 'thermostat';\\nvar customerName = 'customer';\\nvar groupName = 'thermostat devices';\\nvar manufacturer = 'Example corporation';\\n// use assetName and assetType instead of deviceName and deviceType\\n// to automatically create assets instead of devices.\\n// var assetName = 'Asset A';\\n// var assetType = 'building';\\n\\n// Result object with device/asset attributes/telemetry data\\nvar result = {\\n// Use deviceName and deviceType or assetName and assetType, but not both.\\n deviceName: deviceName,\\n deviceType: deviceType,\\n// assetName: assetName,\\n// assetType: assetType,\\n customerName: customerName,\\n groupName: groupName,\\n contentAwareAttributeKeys: ['manufacturer'],\\n attributes: {\\n model: 'Model A',\\n serialNumber: 'SN111',\\n integrationName: metadata['integrationName'],\\n manufacturer: manufacturer\\n },\\n telemetry: {\\n temperature: 42,\\n humidity: 80,\\n rawData: payloadStr\\n }\\n};\\n\\n/** Helper functions **/\\n\\nfunction decodeToString(payload) {\\n return String.fromCharCode.apply(String, payload);\\n}\\n\\nfunction decodeToJson(payload) {\\n // covert payload to string.\\n var str = decodeToString(payload);\\n\\n // parse string to JSON\\n var data = JSON.parse(str);\\n return data;\\n}\\n\\nreturn result;\",\n \"encoder\":null\n}\n```\n\nDecoder field in the more readable form:\n\n```text\n// Decode an uplink message from a buffer\n// payload - array of bytes\n// metadata - key/value object\n\n/** Decoder **/\n\n// decode payload to string\nvar payloadStr = decodeToString(payload);\n\n// decode payload to JSON\n// var data = decodeToJson(payload);\n\nvar deviceName = 'Device A';\nvar deviceType = 'thermostat';\nvar customerName = 'customer';\nvar groupName = 'thermostat devices';\nvar manufacturer = 'Example corporation';\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// Result object with device/asset attributes/telemetry data\nvar result = {\n// Use deviceName and deviceType or assetName and assetType, but not both.\n deviceName: deviceName,\n deviceType: deviceType,\n// assetName: assetName,\n// assetType: assetType,\n customerName: customerName,\n groupName: groupName,\n attributes: {\n model: 'Model A',\n serialNumber: 'SN111',\n integrationName: metadata['integrationName']\n manufacturer: manufacturer,\n },\n telemetry: {\n temperature: 42,\n humidity: 80,\n rawData: payloadStr\n }\n};\n\n/** Helper functions **/\n\nfunction decodeToString(payload) {\n return String.fromCharCode.apply(String, payload);\n}\n\nfunction decodeToJson(payload) {\n // covert payload to string.\n var str = decodeToString(payload);\n\n // parse string to JSON\n var data = JSON.parse(str);\n return data;\n}\n\nreturn result;\n```\n\n## Downlink Converter Configuration\n\n```json\n{\n \"decoder\":null,\n \"encoder\":\"// Encode downlink data from incoming Rule Engine message\\n\\n// msg - JSON message payload downlink message json\\n// msgType - type of message, for ex. 'ATTRIBUTES_UPDATED', 'POST_TELEMETRY_REQUEST', etc.\\n// metadata - list of key-value pairs with additional data about the message\\n// integrationMetadata - list of key-value pairs with additional data defined in Integration executing this converter\\n\\n/** Encoder **/\\n\\nvar data = {};\\n\\n// Process data from incoming message and metadata\\n\\ndata.tempFreq = msg.temperatureUploadFrequency;\\ndata.humFreq = msg.humidityUploadFrequency;\\n\\ndata.devSerialNumber = metadata['ss_serialNumber'];\\n\\n// Result object with encoded downlink payload\\nvar result = {\\n\\n // downlink data content type: JSON, TEXT or BINARY (base64 format)\\n contentType: \\\"JSON\\\",\\n\\n // downlink data\\n data: JSON.stringify(data),\\n\\n // Optional metadata object presented in key/value format\\n metadata: {\\n topic: metadata['deviceType']+'/'+metadata['deviceName']+'/upload'\\n }\\n\\n};\\n\\nreturn result;\"\n}\n```\n\nEncoder field in the more readable form:\n\n```text\n// Encode downlink data from incoming Rule Engine message\n\n// msg - JSON message payload downlink message json\n// msgType - type of message, for ex. 'ATTRIBUTES_UPDATED', 'POST_TELEMETRY_REQUEST', etc.\n// metadata - list of key-value pairs with additional data about the message\n// integrationMetadata - list of key-value pairs with additional data defined in Integration executing this converter\n\n/** Encoder **/\n\nvar data = {};\n\n// Process data from incoming message and metadata\n\ndata.tempFreq = msg.temperatureUploadFrequency;\ndata.humFreq = msg.humidityUploadFrequency;\n\ndata.devSerialNumber = metadata['ss_serialNumber'];\n\n// Result object with encoded downlink payload\nvar result = {\n\n // downlink data content type: JSON, TEXT or BINARY (base64 format)\n contentType: \"JSON\",\n\n // downlink data\n data: JSON.stringify(data),\n\n // Optional metadata object presented in key/value format\n metadata: {\n topic: metadata['deviceType']+'/'+metadata['deviceName']+'/upload'\n }\n\n};\n\nreturn result;\n```\n\nRemove 'id', 'tenantId' from the request body example (below) to create new converter entity. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveConverter", "requestBody": { + "description": "A JSON value representing the converter.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HomeDashboardInfo" + "$ref": "#/components/schemas/Converter" } } }, @@ -37878,7 +38711,14 @@ }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Converter" + } + } + } }, "400": { "description": "Bad Request", @@ -38011,87 +38851,43 @@ ] } }, - "/api/tenant/dashboards": { - "get": { + "/api/converter/testDownLink": { + "post": { "tags": [ - "dashboard-controller" + "converter-controller" ], - "summary": "Get Tenant Dashboards (getTenantDashboards)", - "description": "Returns a page of dashboard info objects owned by the tenant of a current user. The Dashboard Info object contains lightweight information about the dashboard (e.g. title, image, assigned customers) but does not contain the heavyweight configuration JSON. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getTenantDashboards", + "summary": "Test converter function (testDownLinkConverter)", + "description": "Returns a JSON object representing the result of the processed incoming message. \n\n## Request Body Example\n\n```json\n{\n \"metadata\":{\n \"data\":\"40\"\n },\n \"msg\":\"{\\n \\\"temp\\\": 42,\\n \\\"humidity\\\": 77\\n}\",\n \"msgType\":\"POST_TELEMETRY_REQUEST\",\n \"integrationMetadata\":{\n \"integrationName\":\"Integration\"\n },\n \"encoder\":\"// Encode downlink data from incoming Rule Engine message\\n\\n// msg - JSON message payload downlink message json\\n// msgType - type of message, for ex. 'ATTRIBUTES_UPDATED', 'POST_TELEMETRY_REQUEST', etc.\\n// metadata - list of key-value pairs with additional data about the message\\n// integrationMetadata - list of key-value pairs with additional data defined in Integration executing this converter\\n\\n/** Encoder **/\\n\\nvar data = {};\\n\\n// Process data from incoming message and metadata\\n\\ndata.tempValue = msg.temp;\\ndata.humValue = msg.humidity;\\n\\ndata.devSerialNumber = metadata['ss_serialNumber'];\\n\\n// Result object with encoded downlink payload\\nvar result = {\\n\\n // downlink data content type: JSON, TEXT or BINARY (base64 format)\\n contentType: \\\"JSON\\\",\\n\\n // downlink data\\n data: JSON.stringify(data),\\n\\n // Optional metadata object presented in key/value format\\n metadata: {\\n topic: metadata['deviceType']+'/'+metadata['deviceName']+'/upload'\\n }\\n\\n};\\n\\nreturn result;\"\n}\n```\n\n * 'metadata' - message metadata pushed from the rule engine; \n * 'msg' - message data pushed from the rule engine; \n * 'msgType' - type of the message pushed from the rule engine; \n * 'integrationMetadata' - integration metadata object; \n * 'encoder' - string representation of the encoder configuration.\n\n## Response Body Example\n\n```json\n{\n \"contentType\":\"JSON\",\n \"data\":\"{\\\"tempValue\\\":42,\\\"humValue\\\":77}\",\n \"metadata\":{\n \"topic\":\"sensor/Temp Sensor/upload\"\n }\n}\n```\n\n * 'contentType' - downlink data content type; \n * 'data' - downlink data; \n * 'metadata' - optional metadata object. \n", + "operationId": "testDownLinkConverter", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "mobile", - "in": "query", - "description": "Exclude dashboards that are hidden for mobile", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the dashboard title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title" - ] - } - }, - { - "name": "sortOrder", + "name": "scriptLang", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "Script language: JS or TBEL", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "$ref": "#/components/schemas/ScriptLanguage" } } ], + "requestBody": { + "description": "A JSON value representing the input to the converter function.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataDashboardInfo" + "$ref": "#/components/schemas/JsonNode" } } } @@ -38107,7 +38903,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -38227,87 +39023,43 @@ ] } }, - "/api/tenant/{tenantId}/dashboards": { - "get": { + "/api/converter/testUpLink": { + "post": { "tags": [ - "dashboard-controller" + "converter-controller" ], - "summary": "Get Tenant Dashboards by System Administrator (getTenantDashboardsByTenantId)", - "description": "Returns a page of dashboard info objects owned by tenant. The Dashboard Info object contains lightweight information about the dashboard (e.g. title, image, assigned customers) but does not contain the heavyweight configuration JSON. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "getTenantDashboardsByTenantId", + "summary": "Test converter function (testUpLinkConverter)", + "description": "Returns a JSON object representing the result of the processed incoming message. \n\n## Request Body Example\n\n```json\n{\n \"metadata\":{\n },\n \"payload\":\"ewogICAgImRhdGEiOiAiZGF0YSIKfQ==\",\n \"decoder\":\"// Decode an uplink message from a buffer\\n// payload - array of bytes\\n// metadata - key/value object\\n\\n/** Decoder **/\\n\\n// decode payload to string\\nvar payloadStr = decodeToString(payload);\\n\\n// decode payload to JSON\\n// var data = decodeToJson(payload);\\n\\nvar deviceName = 'Device A';\\nvar deviceType = 'thermostat';\\nvar customerName = 'customer';\\nvar groupName = 'thermostat devices';\\nvar manufacturer = 'Example corporation';\\n// use assetName and assetType instead of deviceName and deviceType\\n// to automatically create assets instead of devices.\\n// var assetName = 'Asset A';\\n// var assetType = 'building';\\n\\n// Result object with device/asset attributes/telemetry data\\nvar result = {\\n// Use deviceName and deviceType or assetName and assetType, but not both.\\n deviceName: deviceName,\\n deviceType: deviceType,\\n// assetName: assetName,\\n// assetType: assetType,\\n customerName: customerName,\\n groupName: groupName,\\n attributes: {\\n model: 'Model A',\\n serialNumber: 'SN111',\\n integrationName: metadata['integrationName']\\n manufacturer: manufacturer\\n },\\n telemetry: {\\n temperature: 42,\\n humidity: 80,\\n rawData: payloadStr\\n }\\n};\\n\\n/** Helper functions **/\\n\\nfunction decodeToString(payload) {\\n return String.fromCharCode.apply(String, payload);\\n}\\n\\nfunction decodeToJson(payload) {\\n // covert payload to string.\\n var str = decodeToString(payload);\\n\\n // parse string to JSON\\n var data = JSON.parse(str);\\n return data;\\n}\\n\\nreturn result;\"\n}\n```\n\n * 'metadata' - integration metadata; \n * 'payload' - base64 string representation of the data; \n * 'decoder' - string representation of the decoder configuration; \n * 'converter' - JSON object representing converter.\n\n## Response Body Example\n\n```json\n{\n \"output\":\"{\\\"deviceName\\\":\\\"Device A\\\",\\\"deviceType\\\":\\\"thermostat\\\",\\\"customerName\\\":\\\"customer\\\",\\\"groupName\\\":\\\"thermostat devices\\\",\\\"attributes\\\":{\\\"model\\\":\\\"Model A\\\",\\\"serialNumber\\\":\\\"SN111\\\"},\\\"telemetry\\\":{\\\"temperature\\\":42,\\\"humidity\\\":80,\\\"rawData\\\":\\\"{\\\\n \\\\\\\"data\\\\\\\": \\\\\\\"data\\\\\\\"\\\\n}\\\"}}\",\n \"error\":\"\"\n}\n```\n\n * 'output' - string representation of the output message; \n * 'error' - string representation of the error message. \n", + "operationId": "testUpLinkConverter", "parameters": [ { - "name": "tenantId", - "in": "path", - "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the dashboard title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title" - ] - } - }, - { - "name": "sortOrder", + "name": "scriptLang", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "Script language: JS or TBEL", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "$ref": "#/components/schemas/ScriptLanguage" } } ], + "requestBody": { + "description": "A JSON value representing the input to the converter function.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataDashboardInfo" + "$ref": "#/components/schemas/JsonNode" } } } @@ -38323,7 +39075,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -38443,105 +39195,43 @@ ] } }, - "/api/user/dashboards": { - "get": { + "/api/converter/unwrap/{integrationType}": { + "post": { "tags": [ - "dashboard-controller" + "converter-controller" ], - "summary": "Get Dashboards (getUserDashboards)", - "description": "Returns a page of Dashboard Info objects available for specified or current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. The Dashboard Info object contains lightweight information about the dashboard (e.g. title, image, assigned customers) but does not contain the heavyweight configuration JSON.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getUserDashboards", + "summary": "Transform input raw payload to the dedicated converter data (unwrapRawPayload)", + "description": "Returns a JSON object representing the result of the unwrapped incoming raw message. \n\n## Request Body Example\n\n```json\n{\n \"metadata\":{\n },\n \"payload\":\"ewogICAgImRhdGEiOiAiZGF0YSIKfQ==\",\n}\n``` * 'metadata' - integration metadata; \n * 'payload' - JSON object representing the input raw message.\n\n## Response Body Example\n\n * 'metadata' - integration metadata enriched with the data from the input message; \n * 'payload' - base64 string representation of the payload from the unwrapped input message; \n * 'contentType' - string representation payload contentType.", + "operationId": "unwrapRawPayload", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "integrationType", + "in": "path", + "description": "A string value representing the integration type. One of the following:\nAPACHE_PULSAR, AWS_IOT, AWS_KINESIS, AWS_SQS, AZURE_EVENT_HUB, AZURE_IOT_HUB, AZURE_SERVICE_BUS, CHIRPSTACK, COAP, CUSTOM, HTTP, IBM_WATSON_IOT, KAFKA, LORIOT, MQTT, OCEANCONNECT, OPC_UA, PUB_SUB, RABBITMQ, SIGFOX, TCP, THINGPARK, TMOBILE_IOT_CDP, TPE, TTI, TTN, TUYA, UDP", "required": true, "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "mobile", - "in": "query", - "description": "Exclude dashboards that are hidden for mobile", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the dashboard title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - { - "name": "operation", - "in": "query", - "description": "Filter by allowed operations for the current user", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "userId", - "in": "query", - "description": "A string value representing the user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, - "schema": { - "type": "string" + "$ref": "#/components/schemas/IntegrationType" } } ], + "requestBody": { + "description": "A JSON value representing the input message.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataDashboardInfo" + "$ref": "#/components/schemas/JsonNode" } } } @@ -38557,7 +39247,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -38677,56 +39367,32 @@ ] } }, - "/api/report/test": { - "post": { + "/api/converter/{converterId}": { + "get": { "tags": [ - "dashboard-report-controller" + "converter-controller" ], - "summary": "Download test report (downloadTestReport)", - "description": "Generate and download test report.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "downloadTestReport", + "summary": "Get Converter (getConverterById)", + "description": "Fetch the Converter object based on the provided Converter Id. The server checks that the converter is owned by the same tenant. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getConverterById", "parameters": [ { - "name": "reportsServerEndpointUrl", - "in": "query", - "description": "A string value representing the report server endpoint.", - "required": false, + "name": "converterId", + "in": "path", + "description": "A string value representing the converter id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { "type": "string" - }, - "example": "http://localhost:8383" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardReportConfig" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { - "application/pdf": { - "schema": { - "type": "string", - "format": "binary" - } - }, - "image/jpeg": { - "schema": { - "type": "string", - "format": "binary" - } - }, - "image/png": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/Converter" } } } @@ -38742,7 +39408,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -38860,60 +39526,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/report/{dashboardId}/download": { - "post": { + }, + "delete": { "tags": [ - "dashboard-report-controller" + "converter-controller" ], - "summary": "Download dashboard report (downloadDashboardReport)", - "description": "Generate and download a report from the specified dashboard. The request payload is a JSON object with params of report. For example:\n\n```json\n{\n \"type\": \"pdf\",\n \"timezone\": \"Europe/Kiev\",\n \"timewindow\": {\n \"displayValue\": \"\",\n \"hideInterval\": false,\n \"hideLastInterval\": false,\n \"hideQuickInterval\": false,\n \"hideAggregation\": false,\n \"hideAggInterval\": false,\n \"hideTimezone\": false,\n \"selectedTab\": 0,\n \"realtime\": {\n \"realtimeType\": 0,\n \"interval\": 1000,\n \"timewindowMs\": 60000,\n \"quickInterval\": \"CURRENT_DAY\"\n },\n \"history\": {\n \"historyType\": 0,\n \"interval\": 1000,\n \"timewindowMs\": 60000,\n \"fixedTimewindow\": {\n \"startTimeMs\": 1703687976592,\n \"endTimeMs\": 1703774376592\n },\n \"quickInterval\": \"CURRENT_DAY\"\n },\n \"aggregation\": {\n \"type\": \"AVG\",\n \"limit\": 25000\n }\n },\n \"state\": null\n}\n```\n\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "downloadDashboardReport", + "summary": "Delete converter (deleteConverter)", + "description": "Deletes the converter and all the relations (from and to the converter). Referencing non-existing converter Id will cause an error. If the converter is associated with the integration, it will not be allowed for deletion.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", + "operationId": "deleteConverter", "parameters": [ { - "name": "dashboardId", + "name": "converterId", "in": "path", - "description": "A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the converter id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JsonNode" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "OK", - "content": { - "application/pdf": { - "schema": { - "type": "string", - "format": "binary" - } - }, - "image/jpeg": { - "schema": { - "type": "string", - "format": "binary" - } - }, - "image/png": { - "schema": { - "type": "string", - "format": "binary" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -38926,7 +39560,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -39046,33 +39680,69 @@ ] } }, - "/api/device-connectivity/gateway-launch/{deviceId}/docker-compose/download": { + "/api/converter/{converterId}/debugIn": { "get": { "tags": [ - "device-connectivity-controller" + "converter-controller" ], - "summary": "Download generated docker-compose.yml file for gateway (downloadGatewayDockerCompose)", - "description": "Download generated docker-compose.yml for gateway.", - "operationId": "downloadGatewayDockerCompose", + "summary": "Get latest debug input event (getLatestConverterDebugInput)", + "description": "Returns a JSON object of the latest debug event representing the input message the converter processed. \n\n## Uplink Converter Debug Input Event Example\n\n```json\n{\n \"inContentType\":\"JSON\",\n \"inContent\":\"{\\\"temp\\\":40}\",\n \"inMetadata\":\"{\\\"Header:sec-ch-ua\\\":\\\"\\\\\\\"Chromium\\\\\\\";v=\\\\\\\"94\\\\\\\", \\\\\\\"Google Chrome\\\\\\\";v=\\\\\\\"94\\\\\\\", \\\\\\\";Not A Brand\\\\\\\";v=\\\\\\\"99\\\\\\\"\\\",\\\"Header:user-agent\\\":\\\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36\\\",\\\"integrationName\\\":\\\"Integration\\\",\\\"Header:cookie\\\":\\\"GUID=zYSs8hymSwZKv8kHALKY; redirect_to=%2F; JSESSIONID=B0A7C8E481409CE7924E738DB04F62F9\\\",\\\"Header:sec-ch-ua-platform\\\":\\\"\\\\\\\"Linux\\\\\\\"\\\",\\\"Header:accept\\\":\\\"*/*\\\",\\\"Header:origin\\\":\\\"http://localhost:8080\\\",\\\"Header:sec-fetch-site\\\":\\\"same-origin\\\",\\\"Header:connection\\\":\\\"keep-alive\\\",\\\"Header:accept-encoding\\\":\\\"gzip, deflate, br\\\",\\\"Header:content-type\\\":\\\"application/json\\\",\\\"Header:content-length\\\":\\\"16\\\",\\\"Header:sec-fetch-mode\\\":\\\"cors\\\",\\\"Header:sec-ch-ua-mobile\\\":\\\"?0\\\",\\\"Header:sec-fetch-dest\\\":\\\"empty\\\",\\\"Header:host\\\":\\\"localhost:8080\\\",\\\"Header:referer\\\":\\\"http://localhost:8080/swagger-ui.html\\\",\\\"Header:accept-language\\\":\\\"en-US,en;q=0.9,ru-RU;q=0.8,ru;q=0.7,uk;q=0.6,und;q=0.5\\\"}\"\n}\n```\n\n * 'inContentType' - content type of the message received by the integration; \n * 'inContent' - message data received; \n * 'inMetadata' - integration metadata (e.g. headers).\n\n## Downlink Converter Debug Input Event Example\n\n```json\n{\n \"inContentType\":\"JSON\",\n \"inContent\":\"{\\\"temp\\\":42,\\\"humidity\\\":77}\",\n \"inMsgType\":\"POST_TELEMETRY_REQUEST\",\n \"inMetadata\":\"{\\\"data\\\":\\\"40\\\"}\",\n \"inIntegrationMetadata\":\"{\\\"integrationName\\\":\\\"Integration\\\"}\"\n}\n```\n\n * 'inContentType' - content type of the message received by the integration; \n * 'inContent' - content of the message pushed from the rule engine; \n * 'inMsgType' - type of the message pushed from the rule engine; \n * 'inMetadata' - content of the message metadata pushed from the rule engine; \n * 'inIntegrationMetadata' - integration metadata. \n\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getLatestConverterDebugInput", "parameters": [ { - "name": "deviceId", + "name": "converterId", "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the converter id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } + }, + { + "name": "converterType", + "in": "query", + "description": "A string value representing the converter type. One of the following:\nUPLINK, DOWNLINK", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "integrationType", + "in": "query", + "description": "A string value representing the integration type. One of the following:\nAPACHE_PULSAR, AWS_IOT, AWS_KINESIS, AWS_SQS, AZURE_EVENT_HUB, AZURE_IOT_HUB, AZURE_SERVICE_BUS, CHIRPSTACK, COAP, CUSTOM, HTTP, IBM_WATSON_IOT, KAFKA, LORIOT, MQTT, OCEANCONNECT, OPC_UA, PUB_SUB, RABBITMQ, SIGFOX, TCP, THINGPARK, TMOBILE_IOT_CDP, TPE, TTI, TTN, TUYA, UDP", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "integrationName", + "in": "query", + "description": "A string value representing the integration name. For example, 'My New Integration'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "converterVersion", + "in": "query", + "description": "Converter version.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } } ], "responses": { "200": { "description": "OK", "content": { - "application/octet-stream": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/JsonNode" } } } @@ -39208,23 +39878,90 @@ ] } }, - "/api/device-connectivity/{deviceId}": { + "/api/converters": { "get": { "tags": [ - "device-connectivity-controller" + "converter-controller" ], - "summary": "Get commands to publish device telemetry (getDevicePublishTelemetryCommands)", - "description": "Fetch the list of commands to publish device telemetry based on device profile If the user has the authority of 'Tenant Administrator', the server checks that the device is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the device is assigned to the same customer. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getDevicePublishTelemetryCommands", + "summary": "Get Converters (getConverters)", + "description": "Returns a page of converters owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getConverters", "parameters": [ { - "name": "deviceId", - "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "isEdgeTemplate", + "in": "query", + "description": "Fetch edge template converters", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the converter name.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "debugMode" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "integrationType", + "in": "query", + "description": "A string value representing the integration type. One of the following:\nAPACHE_PULSAR, AWS_IOT, AWS_KINESIS, AWS_SQS, AZURE_EVENT_HUB, AZURE_IOT_HUB, AZURE_SERVICE_BUS, CHIRPSTACK, COAP, CUSTOM, HTTP, IBM_WATSON_IOT, KAFKA, LORIOT, MQTT, OCEANCONNECT, OPC_UA, PUB_SUB, RABBITMQ, SIGFOX, TCP, THINGPARK, TMOBILE_IOT_CDP, TPE, TTI, TTN, TUYA, UDP", + "required": false, + "schema": { + "$ref": "#/components/schemas/IntegrationType" + } } ], "responses": { @@ -39233,21 +39970,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" - }, - "examples": { - "http": { - "description": "http", - "value": "curl -v -X POST http://localhost:8080/api/v1/0ySs4FTOn5WU15XLmal8/telemetry --header Content-Type:application/json --data {temperature:25}" - }, - "mqtt": { - "description": "mqtt", - "value": "mosquitto_pub -d -q 1 -h localhost -t v1/devices/me/telemetry -i myClient1 -u myUsername1 -P myPassword -m {temperature:25}" - }, - "coap": { - "description": "coap", - "value": "coap-client -m POST coap://localhost:5683/api/v1/0ySs4FTOn5WU15XLmal8/telemetry -t json -e {temperature:25}" - } + "$ref": "#/components/schemas/PageDataConverter" } } } @@ -39383,22 +40106,25 @@ ] } }, - "/api/device-connectivity/{protocol}/certificate/download": { + "/api/converters/list": { "get": { "tags": [ - "device-connectivity-controller" + "converter-controller" ], - "summary": "Download server certificate using file path defined in device.connectivity properties (downloadServerCertificate)", - "description": "Download server certificate.", - "operationId": "downloadServerCertificate", + "summary": "Get Converters By Ids (getConvertersByIds)", + "description": "Requested converters must be owned by tenant which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getConvertersByIds", "parameters": [ { - "name": "protocol", - "in": "path", - "description": "A string value representing the device connectivity protocol. Possible values: 'mqtt', 'mqtts', 'http', 'https', 'coap', 'coaps'", + "name": "converterIds", + "in": "query", + "description": "A list of converter ids, separated by comma ','", "required": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], @@ -39406,10 +40132,12 @@ "200": { "description": "OK", "content": { - "application/octet-stream": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "type": "array", + "items": { + "$ref": "#/components/schemas/Converter" + } } } } @@ -39545,49 +40273,71 @@ ] } }, - "/api/customer/device/{deviceName}/claim": { - "post": { + "/api/converter/library/{integrationType}/vendors": { + "get": { "tags": [ - "device-controller" + "converter-library-controller" ], - "summary": "Claim device (claimDevice)", - "description": "Claiming makes it possible to assign a device to the specific customer using device/server side claiming data (in the form of secret key).To make this happen you have to provide unique device name and optional claiming data (it is needed only for device-side claiming).Once device is claimed, the customer becomes its owner and customer users may access device data as well as control the device. \nIn order to enable claiming devices feature a system parameter security.claim.allowClaimingByDefault should be set to true, otherwise a server-side claimingAllowed attribute with the value true is obligatory for provisioned devices. \nSee official documentation for more details regarding claiming.\n\nAvailable for users with 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'CLAIM_DEVICES' permission for the entity (entities).", - "operationId": "claimDevice", + "summary": "Get vendors (getVendors)", + "description": "Returns a list of vendors for the integration type", + "operationId": "getVendors", "parameters": [ { - "name": "deviceName", + "name": "integrationType", "in": "path", - "description": "Unique name of the device which is going to be claimed", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/IntegrationType" } }, { - "name": "subCustomerId", + "name": "converterType", "in": "query", "required": false, "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ClaimRequest" - } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 2147483647 + } + }, + { + "name": "loadImages", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true } } - }, + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/Vendor" + } } } } @@ -39603,7 +40353,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -39721,23 +40471,69 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/converter/library/{integrationType}/{vendorName}/models": { + "get": { "tags": [ - "device-controller" + "converter-library-controller" ], - "summary": "Reclaim device (reClaimDevice)", - "description": "Reclaiming means the device will be unassigned from the customer and the device will be available for claiming again.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'CLAIM_DEVICES' permission for the entity (entities).", - "operationId": "reClaimDevice", + "summary": "Get vendor models (getVendorModels)", + "description": "Returns a list of models for the vendor, integration type and converter type", + "operationId": "getVendorModels", "parameters": [ { - "name": "deviceName", + "name": "integrationType", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/IntegrationType" + } + }, + { + "name": "vendorName", "in": "path", - "description": "Unique name of the device which is going to be reclaimed", "required": true, "schema": { "type": "string" } + }, + { + "name": "converterType", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 2147483647 + } + }, + { + "name": "loadImages", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -39746,7 +40542,10 @@ "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/Model" + } } } } @@ -39882,117 +40681,47 @@ ] } }, - "/api/customer/{customerId}/deviceInfos": { + "/api/converter/library/{integrationType}/{vendorName}/{model}/downlink": { "get": { "tags": [ - "device-controller" + "converter-library-controller" ], - "summary": "Get Customer Device Infos (getCustomerDeviceInfos)", - "description": "Returns a page of device info objects owned by the specified customer. Device Info is an extension of the default Device object that contains information about the owner name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerDeviceInfos", + "summary": "Get downlink converter (getDownlinkConverter)", + "description": "Returns downlink converter body for the vendor, integration type and model", + "operationId": "getDownlinkConverter", "parameters": [ { - "name": "customerId", + "name": "integrationType", "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "integer", - "format": "int32" + "$ref": "#/components/schemas/IntegrationType" } }, { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "vendorName", + "in": "path", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "deviceProfileId", - "in": "query", - "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, "schema": { "type": "string" } }, { - "name": "active", - "in": "query", - "description": "A boolean value representing the device active flag.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the device name.", - "required": false, + "name": "model", + "in": "path", + "required": true, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "deviceProfileName", - "label", - "customerTitle" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { "200": { "description": "OK", "content": { - "application/json": { + "text/plain": { "schema": { - "$ref": "#/components/schemas/PageDataDeviceInfo" + "type": "string" } } } @@ -40128,99 +40857,47 @@ ] } }, - "/api/customer/{customerId}/devices": { + "/api/converter/library/{integrationType}/{vendorName}/{model}/downlink/metadata": { "get": { "tags": [ - "device-controller" + "converter-library-controller" ], - "summary": "Get Customer Devices (getCustomerDevices)", - "description": "Returns a page of devices objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerDevices", + "summary": "Get downlink converter metadata (getDownlinkConverterMetadata)", + "description": "Returns downlink converter metadata for the vendor, integration type and model", + "operationId": "getDownlinkConverterMetadata", "parameters": [ { - "name": "customerId", + "name": "integrationType", "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + "$ref": "#/components/schemas/IntegrationType" } }, { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "vendorName", + "in": "path", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "type", - "in": "query", - "description": "Device type as the name of the device profile", - "required": false, "schema": { "type": "string" } }, { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the device name.", - "required": false, + "name": "model", + "in": "path", + "required": true, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "deviceProfileName", - "label", - "customerTitle" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { "200": { "description": "OK", "content": { - "application/json": { + "text/plain": { "schema": { - "$ref": "#/components/schemas/PageDataDevice" + "type": "string" } } } @@ -40356,93 +41033,47 @@ ] } }, - "/api/device": { - "post": { + "/api/converter/library/{integrationType}/{vendorName}/{model}/downlink/payload": { + "get": { "tags": [ - "device-controller" + "converter-library-controller" ], - "summary": "Create Or Update Device (saveDevice)", - "description": "Create or update the Device. When creating device, platform generates Device Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). Device credentials are also generated if not provided in the 'accessToken' request parameter. The newly created device id will be present in the response. Specify existing Device id to update the device. Referencing non-existing device Id will cause 'Not Found' error.\n\nDevice name is unique in the scope of tenant. Use unique identifiers like MAC or IMEI for the device names and non-unique 'label' field for user-friendly visualization purposes.Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Device entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "saveDevice", + "summary": "Get downlink payload (getDownlinkPayload)", + "description": "Returns payload example for the downlink converter for the vendor, integration type and model", + "operationId": "getDownlinkPayload", "parameters": [ { - "name": "accessToken", - "in": "query", - "description": "Optional value of the device credentials to be used during device creation. If omitted, access token will be auto-generated.", - "required": false, + "name": "integrationType", + "in": "path", + "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/IntegrationType" } }, { - "name": "entityGroupId", - "in": "query", - "required": false, + "name": "vendorName", + "in": "path", + "required": true, "schema": { "type": "string" } }, { - "name": "entityGroupIds", - "in": "query", - "description": "A list of entity group ids, separated by comma ','", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "nameConflictPolicy", - "in": "query", - "description": "Optional value of name conflict policy. Possible values: FAIL or UNIQUIFY. If omitted, FAIL policy is applied. FAIL policy implies exception will be thrown if an entity with the same name already exists. UNIQUIFY policy appends a suffix to the entity name, if a name conflict occurs.", - "required": false, - "schema": { - "$ref": "#/components/schemas/NameConflictPolicy", - "default": "FAIL" - } - }, - { - "name": "uniquifySeparator", - "in": "query", - "description": "Optional value of name suffix separator used by UNIQUIFY policy. By default, underscore separator is used. For example, strategy is UNIQUIFY, separator is '-'; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-7fsh4f'.", - "required": false, - "schema": { - "type": "string", - "default": "_" - } - }, - { - "name": "uniquifyStrategy", - "in": "query", - "description": "Optional value of uniquify strategy used by UNIQUIFY policy. Possible values: RANDOM or INCREMENTAL. By default, RANDOM strategy is used, which means random alphanumeric string will be added as a suffix to entity name. INCREMENTAL implies the first possible number starting from 1 will be added as a name suffix. For example, strategy is UNIQUIFY, uniquify strategy is INCREMENTAL; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-1.", - "required": false, + "name": "model", + "in": "path", + "required": true, "schema": { - "$ref": "#/components/schemas/UniquifyStrategy", - "default": "RANDOM" + "type": "string" } } ], - "requestBody": { - "description": "A JSON value representing the device.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Device" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { - "application/json": { + "text/plain": { "schema": { - "$ref": "#/components/schemas/Device" + "type": "string" } } } @@ -40458,7 +41089,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -40578,83 +41209,47 @@ ] } }, - "/api/device-with-credentials": { - "post": { + "/api/converter/library/{integrationType}/{vendorName}/{model}/uplink": { + "get": { "tags": [ - "device-controller" + "converter-library-controller" ], - "summary": "Create Device (saveDevice) with credentials ", - "description": "Create or update the Device. When creating device, platform generates Device Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). Requires to provide the Device Credentials object as well as an existing device profile ID or use \"default\".\nYou may find the example of device with different type of credentials below: \n\n- Credentials type: **\"Access token\"** with **device profile ID** below: \n\n```json\n{\n \"device\": {\n \"name\":\"Name_DeviceWithCredantial_AccessToken\",\n \"label\":\"Label_DeviceWithCredantial_AccessToken\",\n \"deviceProfileId\":{\n \"id\":\"5636aba0-1022-11ee-9631-51fb57f69174\",\n \"entityType\":\"DEVICE_PROFILE\"\n }\n },\n \"credentials\": {\n \"credentialsType\": \"ACCESS_TOKEN\",\n \"credentialsId\": \"6hmxew8pmmzng4e3une2\"\n }\n}\n```\n\n- Credentials type: **\"Access token\"** with **device profile default** below: \n\n```json\n{\n \"device\": {\n \"name\":\"Name_DeviceWithCredantial_AccessToken_Default\",\n \"label\":\"Label_DeviceWithCredantial_AccessToken_Default\",\n \"type\": \"default\"\n },\n \"credentials\": {\n \"credentialsType\": \"ACCESS_TOKEN\",\n \"credentialsId\": \"6hmxew8pmmzng4e3une3\"\n }\n}\n```\n\n- Credentials type: **\"X509\"** with **device profile ID** below: \n\nNote: **credentialsId** - format **Sha3Hash**, **certificateValue** - format **PEM** (with \"--BEGIN CERTIFICATE----\" and -\"----END CERTIFICATE-\").\n\n```json\n{\n \"device\": {\n \"name\":\"Name_DeviceWithCredantial_X509_Certificate\",\n \"label\":\"Label_DeviceWithCredantial_X509_Certificate\",\n \"deviceProfileId\":{\n \"id\":\"9d9588c0-06c9-11ee-b618-19be30fdeb60\",\n \"entityType\":\"DEVICE_PROFILE\"\n }\n },\n \"credentials\": {\n \"credentialsType\": \"X509_CERTIFICATE\",\n \"credentialsId\": \"84f5911765abba1f96bf4165604e9e90338fc6214081a8e623b6ff9669aedb27\",\n \"credentialsValue\": \"-----BEGIN CERTIFICATE----- MIICMTCCAdegAwIBAgIUI9dBuwN6pTtK6uZ03rkiCwV4wEYwCgYIKoZIzj0EAwIwbjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMRowGAYDVQQKDBFUaGluZ3NCb2FyZCwgSW5jLjEwMC4GA1UEAwwnZGV2aWNlQ2VydGlmaWNhdGVAWDUwOVByb3Zpc2lvblN0cmF0ZWd5MB4XDTIzMDMyOTE0NTYxN1oXDTI0MDMyODE0NTYxN1owbjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMRowGAYDVQQKDBFUaGluZ3NCb2FyZCwgSW5jLjEwMC4GA1UEAwwnZGV2aWNlQ2VydGlmaWNhdGVAWDUwOVByb3Zpc2lvblN0cmF0ZWd5MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9Zo791qKQiGNBm11r4ZGxh+w+ossZL3xc46ufq5QckQHP7zkD2XDAcmP5GvdkM1sBFN9AWaCkQfNnWmfERsOOKNTMFEwHQYDVR0OBBYEFFFc5uyCyglQoZiKhzXzMcQ3BKORMB8GA1UdIwQYMBaAFFFc5uyCyglQoZiKhzXzMcQ3BKORMA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIhANbA9CuhoOifZMMmqkpuld+65CR+ItKdXeRAhLMZuccuAiB0FSQB34zMutXrZj1g8Gl5OkE7YryFHbei1z0SveHR8g== -----END CERTIFICATE-----\"\n }\n}\n```\n\n- Credentials type: **\"MQTT_BASIC\"** with **device profile ID** below: \n\n```json\n{\n \"device\": {\n \"name\":\"Name_DeviceWithCredantial_MQTT_Basic\",\n \"label\":\"Label_DeviceWithCredantial_MQTT_Basic\",\n \"deviceProfileId\":{\n \"id\":\"9d9588c0-06c9-11ee-b618-19be30fdeb60\",\n \"entityType\":\"DEVICE_PROFILE\"\n }\n },\n \"credentials\": {\n \"credentialsType\": \"MQTT_BASIC\",\n \"credentialsValue\": \"{\\\"clientId\\\":\\\"5euh5nzm34bjjh1efmlt\\\",\\\"userName\\\":\\\"onasd1lgwasmjl7v2v7h\\\",\\\"password\\\":\\\"b9xtm4ny8kt9zewaga5o\\\"}\"\n }\n}\n```\n\n- You may find the example of **LwM2M** device and **RPK** credentials below: \n\nNote: LwM2M device - only existing device profile ID (Transport configuration -> Transport type: \"LWM2M\".\n\n```json\n{\n \"device\": {\n \"name\":\"Name_LwRpk00000000\",\n \"label\":\"Label_LwRpk00000000\",\n \"deviceProfileId\":{\n \"id\":\"a660bd50-10ef-11ee-8737-b5634e73c779\",\n \"entityType\":\"DEVICE_PROFILE\"\n }\n },\n \"credentials\": {\n \"credentialsType\": \"LWM2M_CREDENTIALS\",\n \"credentialsId\": \"LwRpk00000000\",\n \"credentialsValue\":\n \"{\\\"client\\\":{ \\\"endpoint\\\":\\\"LwRpk00000000\\\", \\\"securityConfigClientMode\\\":\\\"RPK\\\", \\\"key\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUEBxNl/RcYJNm8mk91CyVXoIJiROYDlXcSSqK6e5bDHwOW4ZiN2lNnXalyF0Jxw8MbAytnDMERXyAja5VEMeVQ==\\\" }, \\\"bootstrap\\\":{ \\\"bootstrapServer\\\":{ \\\"securityMode\\\":\\\"RPK\\\", \\\"clientPublicKeyOrId\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUEBxNl/RcYJNm8mk91CyVXoIJiROYDlXcSSqK6e5bDHwOW4ZiN2lNnXalyF0Jxw8MbAytnDMERXyAja5VEMeVQ==\\\", \\\"clientSecretKey\\\":\\\"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgd9GAx7yZW37autew5KZykn4IgRpge/tZSjnudnZJnMahRANCAARQQHE2X9Fxgk2byaT3ULJVeggmJE5gOVdxJKorp7lsMfA5bhmI3aU2ddqXIXQnHDwxsDK2cMwRFfICNrlUQx5V\\\"}, \\\"lwm2mServer\\\":{ \\\"securityMode\\\":\\\"RPK\\\", \\\"clientPublicKeyOrId\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUEBxNl/RcYJNm8mk91CyVXoIJiROYDlXcSSqK6e5bDHwOW4ZiN2lNnXalyF0Jxw8MbAytnDMERXyAja5VEMeVQ==\\\", \\\"clientSecretKey\\\":\\\"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgd9GAx7yZW37autew5KZykn4IgRpge/tZSjnudnZJnMahRANCAARQQHE2X9Fxgk2byaT3ULJVeggmJE5gOVdxJKorp7lsMfA5bhmI3aU2ddqXIXQnHDwxsDK2cMwRFfICNrlUQx5V\\\"}} }\"\n }\n}\n```\n\nRemove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Device entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "saveDeviceWithCredentials", + "summary": "Get uplink converter (getUplinkConverter)", + "description": "Returns uplink converter body for the vendor, integration type and model", + "operationId": "getUplinkConverter", "parameters": [ { - "name": "entityGroupId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "entityGroupIds", - "in": "query", - "description": "A list of entity group ids, separated by comma ','", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "nameConflictPolicy", - "in": "query", - "description": "Optional value of name conflict policy. Possible values: FAIL or UNIQUIFY. If omitted, FAIL policy is applied. FAIL policy implies exception will be thrown if an entity with the same name already exists. UNIQUIFY policy appends a suffix to the entity name, if a name conflict occurs.", - "required": false, + "name": "integrationType", + "in": "path", + "required": true, "schema": { - "$ref": "#/components/schemas/NameConflictPolicy", - "default": "FAIL" + "$ref": "#/components/schemas/IntegrationType" } }, { - "name": "uniquifySeparator", - "in": "query", - "description": "Optional value of name suffix separator used by UNIQUIFY policy. By default, underscore separator is used. For example, strategy is UNIQUIFY, separator is '-'; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-7fsh4f'.", - "required": false, + "name": "vendorName", + "in": "path", + "required": true, "schema": { - "type": "string", - "default": "_" + "type": "string" } }, { - "name": "uniquifyStrategy", - "in": "query", - "description": "Optional value of uniquify strategy used by UNIQUIFY policy. Possible values: RANDOM or INCREMENTAL. By default, RANDOM strategy is used, which means random alphanumeric string will be added as a suffix to entity name. INCREMENTAL implies the first possible number starting from 1 will be added as a name suffix. For example, strategy is UNIQUIFY, uniquify strategy is INCREMENTAL; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-1.", - "required": false, + "name": "model", + "in": "path", + "required": true, "schema": { - "$ref": "#/components/schemas/UniquifyStrategy", - "default": "RANDOM" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SaveDeviceWithCredentialsRequest" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { - "application/json": { + "text/plain": { "schema": { - "$ref": "#/components/schemas/Device" + "type": "string" } } } @@ -40670,7 +41265,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -40790,31 +41385,47 @@ ] } }, - "/api/device/bulk_import": { - "post": { + "/api/converter/library/{integrationType}/{vendorName}/{model}/uplink/metadata": { + "get": { "tags": [ - "device-controller" + "converter-library-controller" ], - "summary": "Import the bulk of devices (processDevicesBulkImport)", - "description": "There's an ability to import the bulk of devices using the only .csv file. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "processDevicesBulkImport", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BulkImportRequest" - } + "summary": "Get uplink converter metadata (getUplinkConverterMetadata)", + "description": "Returns uplink converter metadata for the vendor, integration type and model", + "operationId": "getUplinkConverterMetadata", + "parameters": [ + { + "name": "integrationType", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/IntegrationType" } }, - "required": true - }, + { + "name": "vendorName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "model", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { - "application/json": { + "text/plain": { "schema": { - "$ref": "#/components/schemas/BulkImportResultDevice" + "type": "string" } } } @@ -40830,7 +41441,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -40950,31 +41561,47 @@ ] } }, - "/api/device/credentials": { - "post": { + "/api/converter/library/{integrationType}/{vendorName}/{model}/uplink/payload": { + "get": { "tags": [ - "device-controller" + "converter-library-controller" ], - "summary": "Update device credentials (updateDeviceCredentials)", - "description": "During device creation, platform generates random 'ACCESS_TOKEN' credentials.\nUse this method to update the device credentials. First use 'getDeviceCredentialsByDeviceId' to get the credentials id and value.\nThen use current method to update the credentials type and value. It is not possible to create multiple device credentials for the same device.\nThe structure of device credentials id and value is simple for the 'ACCESS_TOKEN' but is much more complex for the 'MQTT_BASIC' or 'LWM2M_CREDENTIALS'.\nYou may find the example of device with different type of credentials below: \n\n- Credentials type: **\"Access token\"** with **device ID** and with **device ID** below: \n\n```json\n{\n \"id\": {\n \"id\":\"c886a090-168d-11ee-87c9-6f157dbc816a\"\n },\n \"deviceId\": {\n \"id\":\"c5fb3ac0-168d-11ee-87c9-6f157dbc816a\",\n \"entityType\":\"DEVICE\"\n },\n \"credentialsType\": \"ACCESS_TOKEN\",\n \"credentialsId\": \"6hmxew8pmmzng4e3une4\"\n}\n```\n\n- Credentials type: **\"X509\"** with **device profile ID** below: \n\nNote: **credentialsId** - format **Sha3Hash**, **certificateValue** - format **PEM** (with \"--BEGIN CERTIFICATE----\" and -\"----END CERTIFICATE-\").\n\n```json\n{\n \"id\": {\n \"id\":\"309bd9c0-14f4-11ee-9fc9-d9b7463abb63\"\n },\n \"deviceId\": {\n \"id\":\"3092b200-14f4-11ee-9fc9-d9b7463abb63\",\n \"entityType\":\"DEVICE\"\n },\n \"credentialsType\": \"X509_CERTIFICATE\",\n \"credentialsId\": \"6b8adb49015500e51a527acd332b51684ab9b49b4ade03a9582a44c455e2e9b6\",\n \"credentialsValue\": \"-----BEGIN CERTIFICATE----- MIICMTCCAdegAwIBAgIUUEKxS9hTz4l+oLUMF0LV6TC/gCIwCgYIKoZIzj0EAwIwbjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMRowGAYDVQQKDBFUaGluZ3NCb2FyZCwgSW5jLjEwMC4GA1UEAwwnZGV2aWNlUHJvZmlsZUNlcnRAWDUwOVByb3Zpc2lvblN0cmF0ZWd5MB4XDTIzMDMyOTE0NTczNloXDTI0MDMyODE0NTczNlowbjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMRowGAYDVQQKDBFUaGluZ3NCb2FyZCwgSW5jLjEwMC4GA1UEAwwnZGV2aWNlUHJvZmlsZUNlcnRAWDUwOVByb3Zpc2lvblN0cmF0ZWd5MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECMlWO72krDoUL9FQjUmSCetkhaEGJUfQkdSfkLSNa0GyAEIMbfmzI4zITeapunu4rGet3EMyLydQzuQanBicp6NTMFEwHQYDVR0OBBYEFHpZ78tPnztNii4Da/yCw6mhEIL3MB8GA1UdIwQYMBaAFHpZ78tPnztNii4Da/yCw6mhEIL3MA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgJ7qyMFqNcwSYkH6o+UlQXzLWfwZbNjVk+aR7foAZNGsCIQDsd7v3WQIGHiArfZeDs1DLEDuV/2h6L+ZNoGNhEKL+1A== -----END CERTIFICATE-----\"\n}\n```\n\n- Credentials type: **\"MQTT_BASIC\"** with **device profile ID** below: \n\n```json\n{\n \"id\": {\n \"id\":\"d877ffb0-14f5-11ee-9fc9-d9b7463abb63\"\n },\n \"deviceId\": {\n \"id\":\"d875dcd0-14f5-11ee-9fc9-d9b7463abb63\",\n \"entityType\":\"DEVICE\"\n },\n \"credentialsType\": \"MQTT_BASIC\",\n \"credentialsValue\": \"{\\\"clientId\\\":\\\"juy03yv4owqxcmqhqtvk\\\",\\\"userName\\\":\\\"ov19fxca0cyjn7lm7w7u\\\",\\\"password\\\":\\\"twy94he114dfi9usyk1o\\\"}\"\n}\n```\n\n- You may find the example of **LwM2M** device and **RPK** credentials below: \n\nNote: LwM2M device - only existing device profile ID (Transport configuration -> Transport type: \"LWM2M\".\n\n```json\n{\n \"id\": {\n \"id\":\"e238d4d0-1689-11ee-98c6-1713c1be5a8e\"\n },\n \"deviceId\": {\n \"id\":\"e232e160-1689-11ee-98c6-1713c1be5a8e\",\n \"entityType\":\"DEVICE\"\n },\n \"credentialsType\": \"LWM2M_CREDENTIALS\",\n \"credentialsId\": \"LwRpk00000000\",\n \"credentialsValue\":\n \"{\\\"client\\\":{ \\\"endpoint\\\":\\\"LwRpk00000000\\\", \\\"securityConfigClientMode\\\":\\\"RPK\\\", \\\"key\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdvBZZ2vQRK9wgDhctj6B1c7bxR3Z0wYg1+YdoYFnVUKWb+rIfTTyYK9tmQJx5Vlb5fxdLnVv1RJOPiwsLIQbAA==\\\" }, \\\"bootstrap\\\":{ \\\"bootstrapServer\\\":{ \\\"securityMode\\\":\\\"RPK\\\", \\\"clientPublicKeyOrId\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUEBxNl/RcYJNm8mk91CyVXoIJiROYDlXcSSqK6e5bDHwOW4ZiN2lNnXalyF0Jxw8MbAytnDMERXyAja5VEMeVQ==\\\", \\\"clientSecretKey\\\":\\\"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgd9GAx7yZW37autew5KZykn4IgRpge/tZSjnudnZJnMahRANCAARQQHE2X9Fxgk2byaT3ULJVeggmJE5gOVdxJKorp7lsMfA5bhmI3aU2ddqXIXQnHDwxsDK2cMwRFfICNrlUQx5V\\\"}, \\\"lwm2mServer\\\":{ \\\"securityMode\\\":\\\"RPK\\\", \\\"clientPublicKeyOrId\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUEBxNl/RcYJNm8mk91CyVXoIJiROYDlXcSSqK6e5bDHwOW4ZiN2lNnXalyF0Jxw8MbAytnDMERXyAja5VEMeVQ==\\\", \\\"clientSecretKey\\\":\\\"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgd9GAx7yZW37autew5KZykn4IgRpge/tZSjnudnZJnMahRANCAARQQHE2X9Fxgk2byaT3ULJVeggmJE5gOVdxJKorp7lsMfA5bhmI3aU2ddqXIXQnHDwxsDK2cMwRFfICNrlUQx5V\\\"}} }\"\n}\n```\n\nUpdate to real value:\n - 'id' (this is id of Device Credentials -> \"Get Device Credentials (getDeviceCredentialsByDeviceId)\",\n - 'deviceId.id' (this is id of Device).\nRemove 'tenantId' and optionally 'customerId' from the request body example (below) to create new Device entity.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "updateDeviceCredentials", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeviceCredentials" - } + "summary": "Get uplink payload (getUplinkPayload)", + "description": "Returns payload example for the uplink converter for the vendor, integration type and model", + "operationId": "getUplinkPayload", + "parameters": [ + { + "name": "integrationType", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/IntegrationType" } }, - "required": true - }, + { + "name": "vendorName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "model", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { - "application/json": { + "text/plain": { "schema": { - "$ref": "#/components/schemas/DeviceCredentials" + "type": "string" } } } @@ -40990,7 +41617,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -41110,20 +41737,19 @@ ] } }, - "/api/device/info/{deviceId}": { + "/api/customMenu": { "get": { "tags": [ - "device-controller" + "custom-menu-controller" ], - "summary": "Get Device (getDeviceInfoById)", - "description": "Fetch the Device info object based on the provided Device Id. Device Info is an extension of the default Device object that contains information about the owner name. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getDeviceInfoById", + "summary": "Get end-user Custom Menu configuration (getCustomMenu)", + "description": "Fetch the Custom Menu configuration object for the authorized user. The custom menu is configured in the white labeling parameters and has one of three user scopes:SYSTEM, TENANT, CUSTOMER and four assignee type: NO_ASSIGN, ALL, CUSTOMERS, USERS.There are three default (assignee type: ALL) menus configured on the system level for each scope and if no other menu is configured for user, system configuration of the corresponding scope will be applied.If a custom menu with assignee type ALL is configured on the tenant level, it overrides the menu configuration of the corresponding scope on the system level. If a custom menu with assignee type USER_GROUPS is configured on the tenant level, it overrides default tenant menu.If a custom menu with assignee type CUSTOMERS is configured on tenant level for specific customer, it will be applied to all customer users.If a custom menu with assignee type ALL is configured on the customer level, it overrides the menu assigned on tenant level.If a custom menu with assignee type USER_GROUPS is configured on the customer level, it overrides default customer menu.If a custom menu is assigned to specific user, it overrides all other configuration.", + "operationId": "getCustomMenu", "parameters": [ { - "name": "deviceId", - "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, + "name": "If-None-Match", + "in": "header", + "required": false, "schema": { "type": "string" } @@ -41135,7 +41761,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeviceInfo" + "$ref": "#/components/schemas/CustomMenuConfig" } } } @@ -41269,26 +41895,54 @@ "ApiKeyForm": [] } ] - } - }, - "/api/device/types": { - "get": { + }, + "post": { "tags": [ - "device-controller" + "custom-menu-controller" ], - "summary": "Get Device Types (getDeviceTypes)", - "description": "Deprecated. See 'getDeviceProfileNames' API from Device Profile Controller instead.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getDeviceTypes", + "summary": "Create Custom Menu (createCustomMenu)", + "description": "The api is designed to create Custom Menu without configuration. Is not applicable for update.\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the custom menu with specified id.", + "operationId": "createCustomMenu", + "parameters": [ + { + "name": "assignToList", + "in": "query", + "description": "A list of entity ids, separated by comma ','", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "force", + "in": "query", + "description": "Use force if you want to create default menu that conflicts with the existing one (old one will be update NO_ASSIGN assignee type)", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomMenuInfo" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntitySubtype" - } + "$ref": "#/components/schemas/CustomMenu" } } } @@ -41304,7 +41958,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -41414,7 +42068,6 @@ } } }, - "deprecated": true, "security": [ { "HttpLoginForm": [] @@ -41425,23 +42078,87 @@ ] } }, - "/api/device/{deviceId}": { + "/api/customMenu/infos": { "get": { "tags": [ - "device-controller" + "custom-menu-controller" ], - "summary": "Get Device (getDeviceById)", - "description": "Fetch the Device object based on the provided Device Id. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getDeviceById", + "summary": "Get all custom menus configured at user level (getCustomMenuInfos)", + "description": "Returns a page of custom menu info objects owned by the tenant or the customer of a current user, scope and assigneeType request parameters can be used to filter the result.\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", + "operationId": "getCustomMenuInfos", "parameters": [ { - "name": "deviceId", - "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "scope", + "in": "query", + "description": "Custom menu scope.", + "required": false, + "schema": { + "$ref": "#/components/schemas/CMScope" + } + }, + { + "name": "assigneeType", + "in": "query", + "description": "Custom menu assignee type.", + "required": false, + "schema": { + "$ref": "#/components/schemas/CMAssigneeType" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the custom menu name.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "title" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -41450,7 +42167,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Device" + "$ref": "#/components/schemas/PageDataCustomMenuInfo" } } } @@ -41584,28 +42301,47 @@ "ApiKeyForm": [] } ] - }, + } + }, + "/api/customMenu/{customMenuId}": { "delete": { "tags": [ - "device-controller" + "custom-menu-controller" ], - "summary": "Delete device (deleteDevice)", - "description": "Deletes the device, it's credentials and all the relations (from and to the device). Referencing non-existing device Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", - "operationId": "deleteDevice", + "summary": "Delete custom menu (deleteCustomMenu)", + "description": "Deletes the custom menu based on the provided Custom Menu Id. Referencing non-existing custom menu Id will cause an error. If the custom menu is assigned to the list of users or customers bad request is returned.To delete a custom menu that has assignee list set 'force' request param to true ", + "operationId": "deleteCustomMenu", "parameters": [ { - "name": "deviceId", + "name": "customMenuId", "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "name": "force", + "in": "query", + "description": "Force set to true will unassign menu before deletion", + "required": false, + "schema": { + "type": "boolean" } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomMenuDeleteResult" + } + } + } }, "400": { "description": "Bad Request", @@ -41738,22 +42474,23 @@ ] } }, - "/api/device/{deviceId}/credentials": { + "/api/customMenu/{customMenuId}/assigneeList": { "get": { "tags": [ - "device-controller" + "custom-menu-controller" ], - "summary": "Get Device Credentials (getDeviceCredentialsByDeviceId)", - "description": "If during device creation there wasn't specified any credentials, platform generates random 'ACCESS_TOKEN' credentials.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ_CREDENTIALS' permission for the entity (entities).", - "operationId": "getDeviceCredentialsByDeviceId", + "summary": "Get Custom Menu assignee list (getCustomMenuAssigneeList)", + "description": "Fetch the list of Entity Info objects that represents users or customers, or empty list if custom menu is not assigned or has NO_ASSIGN/ALL assignee type.\n\nSecurity check is performed to verify that the user has 'READ' permission for the custom menu with specified id.", + "operationId": "getCustomMenuAssigneeList", "parameters": [ { - "name": "deviceId", + "name": "customMenuId", "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -41763,7 +42500,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeviceCredentials" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityInfo" + } } } } @@ -41899,98 +42639,23 @@ ] } }, - "/api/deviceInfos/all": { + "/api/customMenu/{customMenuId}/config": { "get": { "tags": [ - "device-controller" + "custom-menu-controller" ], - "summary": "Get All Device Infos for current user (getAllDeviceInfos)", - "description": "Returns a page of device info objects owned by the tenant or the customer of a current user. Device Info is an extension of the default Device object that contains information about the owner name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAllDeviceInfos", + "summary": "Get Custom Menu configuration by id (getCustomMenuConfig)", + "description": "Fetch the Custom Menu configuration based on the provided Custom Menu Id. \n\nSecurity check is performed to verify that the user has 'READ' permission for the custom menu with specified id.", + "operationId": "getCustomMenuConfig", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "customMenuId", + "in": "path", + "description": "A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "deviceProfileId", - "in": "query", - "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "active", - "in": "query", - "description": "A boolean value representing the device active flag.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the device name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "deviceProfileName", - "label", - "customerTitle" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, "schema": { "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "format": "uuid" } } ], @@ -42000,7 +42665,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataDeviceInfo" + "$ref": "#/components/schemas/CustomMenuConfig" } } } @@ -42134,40 +42799,43 @@ "ApiKeyForm": [] } ] - } - }, - "/api/devices": { - "get": { + }, + "put": { "tags": [ - "device-controller" + "custom-menu-controller" ], - "summary": "Get Devices By Ids (getDevicesByIds)", - "description": "Requested devices must be owned by tenant or assigned to customer which user is performing the request. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getDevicesByIds", + "summary": "Update Custom Menu configuration based on the provided Custom Menu Id (updateCustomMenuConfig)", + "description": "\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the custom menu with specified id.", + "operationId": "updateCustomMenuConfig", "parameters": [ { - "name": "deviceIds", - "in": "query", - "description": "A list of devices ids, separated by comma ','", + "name": "customMenuId", + "in": "path", + "description": "A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string", + "format": "uuid" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomMenuConfig" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Device" - } + "$ref": "#/components/schemas/CustomMenu" } } } @@ -42301,34 +42969,35 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/customMenu/{customMenuId}/info": { + "get": { "tags": [ - "device-controller" + "custom-menu-controller" ], - "summary": "Find related devices (findDevicesByQuery)", - "description": "Returns all devices that are related to the specific entity. The entity id, relation type, device types, depth of the search, and other query parameters defined using complex 'DeviceSearchQuery' object. See 'Model' tab of the Parameters for more info.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "findDevicesByQuery", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeviceSearchQuery" - } + "summary": "Get Custom Menu Info (getCustomMenuInfoById)", + "description": "Fetch the Custom Menu Info object based on the provided Custom Menu Id. \n\nSecurity check is performed to verify that the user has 'READ' permission for the custom menu with specified id.", + "operationId": "getCustomMenuInfoById", + "parameters": [ + { + "name": "customMenuId", + "in": "path", + "description": "A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Device" - } + "$ref": "#/components/schemas/CustomMenuInfo" } } } @@ -42344,7 +43013,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -42464,50 +43133,41 @@ ] } }, - "/api/devices/count/{otaPackageType}/{deviceProfileId}": { - "get": { + "/api/customMenu/{customMenuId}/name": { + "put": { "tags": [ - "device-controller" + "custom-menu-controller" ], - "summary": "Count devices by device profile (countByDeviceProfileAndEmptyOtaPackage)", - "description": "The platform gives an ability to load OTA (over-the-air) packages to devices. It can be done in two different ways: device scope or device profile scope.In the response you will find the number of devices with specified device profile, but without previously defined device scope OTA package. It can be useful when you want to define number of devices that will be affected with future OTA package\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "countByDeviceProfileAndEmptyOtaPackage", + "summary": "Update Custom Menu name based on the provided Custom Menu Id (updateCustomMenuName)", + "description": "\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the custom menu with specified id.", + "operationId": "updateCustomMenuName", "parameters": [ { - "name": "otaPackageType", + "name": "customMenuId", "in": "path", - "description": "OTA package type", + "description": "A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string", - "enum": [ - "FIRMWARE", - "SOFTWARE" - ] - } - }, - { - "name": "deviceProfileId", - "in": "path", - "description": "Device Profile Id. I.g. '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "format": "uuid" } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "integer", - "format": "int64" - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "New name of the custom menu" } } }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, "400": { "description": "Bad Request", "content": { @@ -42639,56 +43299,57 @@ ] } }, - "/api/devices/count/{otaPackageType}/{otaPackageId}/{entityGroupId}": { - "get": { + "/api/customMenu/{id}/assign/{assigneeType}": { + "put": { "tags": [ - "device-controller" + "custom-menu-controller" ], - "summary": "Count devices by device profile (countByDeviceProfileAndEmptyOtaPackage)", - "description": "The platform gives an ability to load OTA (over-the-air) packages to devices. It can be done in two different ways: device scope or device profile scope.In the response you will find the number of devices with specified device profile, but without previously defined device scope OTA package. It can be useful when you want to define number of devices that will be affected with future OTA package\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "countByDeviceGroupAndEmptyOtaPackage", + "summary": "Update custom menu assignee list (updateCustomMenuAssigneeList)", + "description": "The api designed to update the list of assignees or assignee type based on the provided Custom Menu Id. To change assignee type, put new assignee type in path parameter.\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the custom menu with specified id.", + "operationId": "updateCustomMenuAssigneeList", "parameters": [ { - "name": "otaPackageType", + "name": "id", "in": "path", - "description": "OTA package type", "required": true, "schema": { "type": "string", - "enum": [ - "FIRMWARE", - "SOFTWARE" - ] + "format": "uuid" } }, { - "name": "otaPackageId", + "name": "assigneeType", "in": "path", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/CMAssigneeType" } }, { - "name": "entityGroupId", - "in": "path", - "required": true, + "name": "force", + "in": "query", + "description": "Use force if you want to override default menu", + "required": false, "schema": { - "type": "string" + "type": "boolean" } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "integer", - "format": "int64" + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" } } } + } + }, + "responses": { + "200": { + "description": "OK" }, "400": { "description": "Bad Request", @@ -42821,81 +43482,23 @@ ] } }, - "/api/entityGroup/{entityGroupId}/devices": { + "/api/translation/custom/merged/{localeCode}": { "get": { "tags": [ - "device-controller" + "custom-translation-controller" ], - "summary": "Get devices by Entity Group Id (getDevicesByEntityGroupId)", - "description": "Returns a page of Device objects that belongs to specified Entity Group Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getDevicesByEntityGroupId", + "summary": "Get end-user Custom Translation configuration (getMergedCustomTranslation)", + "description": "Fetch end-user Custom Translation for specified locale. The custom translation is configured in the white labeling parameters. If custom translation translation is defined on the tenant level, it overrides the custom translation of the system level. Similar, if the custom translation is defined on the customer level, it overrides the translation configuration of the tenant level.", + "operationId": "getMergedCustomTranslation", "parameters": [ { - "name": "entityGroupId", + "name": "localeCode", "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "description": "Locale code (e.g. 'en_US').", "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the device name.", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "deviceProfileName", - "label", - "customerTitle" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -42904,7 +43507,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataDevice" + "$ref": "#/components/schemas/JsonNode" } } } @@ -43040,19 +43643,19 @@ ] } }, - "/api/tenant/device": { + "/api/translation/custom/{localeCode}": { "get": { "tags": [ - "device-controller" + "custom-translation-controller" ], - "summary": "Get Tenant Device (getTenantDevice)", - "description": "Requested device must be owned by tenant that the user belongs to. Device name is an unique property of device. So it can be used to identify the device.\n\nAvailable for users with 'TENANT_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getTenantDeviceByName", + "summary": "Get Custom Translation configuration (getCustomTranslation)", + "description": "Fetch the Custom Translation for specified locale that corresponds to the authority of the user. The API call is designed to load the custom translation items for edition. So, the result is NOT merged with the parent level configuration. Let's assume there is a custom translation configured on a system level. And there is no custom translation items configured on a tenant level. In such a case, the API call will return empty object for the tenant administrator. \n\n Response example: \n\n```json\n{\"home\":\"MyHome\"}\n```\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", + "operationId": "getCustomTranslation", "parameters": [ { - "name": "deviceName", - "in": "query", - "description": "A string value representing the Device name.", + "name": "localeCode", + "in": "path", + "description": "Locale code (e.g. 'en_US').", "required": true, "schema": { "type": "string" @@ -43065,7 +43668,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Device" + "$ref": "#/components/schemas/JsonNode" } } } @@ -43199,96 +43802,39 @@ "ApiKeyForm": [] } ] - } - }, - "/api/tenant/devices": { - "get": { + }, + "post": { "tags": [ - "device-controller" + "custom-translation-controller" ], - "summary": "Get Tenant Devices (getTenantDevices)", - "description": "Returns a page of devices owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getTenantDevices", + "summary": "Create Or Update Custom Translation (saveCustomTranslation)", + "description": "Creates or Updates the Custom Translation for specified locale.\n\n Request example: \n\n```json\n{\"home\":\"MyHome\"}\n```\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", + "operationId": "saveCustomTranslation", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "localeCode", + "in": "path", + "description": "Locale code (e.g. 'en_US').", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "type", - "in": "query", - "description": "Device type as the name of the device profile", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the device name.", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "deviceProfileName", - "label", - "customerTitle" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataDevice" - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" } } }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, "400": { "description": "Bad Request", "content": { @@ -43300,7 +43846,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -43418,30 +43964,19 @@ "ApiKeyForm": [] } ] - } - }, - "/api/tenant/{tenantId}/device/{deviceId}": { - "post": { + }, + "delete": { "tags": [ - "device-controller" + "custom-translation-controller" ], - "summary": "Assign device to tenant (assignDeviceToTenant)", - "description": "Creates assignment of the device to tenant. Thereafter tenant will be able to reassign the device to a customer.\n\nAvailable for users with 'TENANT_ADMIN' authority. Security check is performed to verify that the user has 'ASSIGN_TO_TENANT' permission for the entity (entities).", - "operationId": "assignDeviceToTenant", + "summary": "Delete Custom Translation for specified locale (deleteCustomTranslation)", + "description": "Delete entire custom translation settings for end-user\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", + "operationId": "deleteCustomTranslation", "parameters": [ { - "name": "tenantId", - "in": "path", - "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "deviceId", + "name": "localeCode", "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Locale code (e.g. 'en_US').", "required": true, "schema": { "type": "string" @@ -43450,14 +43985,7 @@ ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Device" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -43470,7 +43998,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -43588,96 +44116,39 @@ "ApiKeyForm": [] } ] - } - }, - "/api/user/devices": { - "get": { + }, + "patch": { "tags": [ - "device-controller" + "custom-translation-controller" ], - "summary": "Get Devices (getUserDevices)", - "description": "Returns a page of devices that are available for the current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getUserDevices", + "summary": "Update Custom Translation for specified translation keys only (patchCustomTranslation)", + "description": "The API call is designed to update the custom translation for specified key only. \n\n Request example: \n\n```json\n{\"notification.active\":\"active\"}\n```\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", + "operationId": "patchCustomTranslation", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "localeCode", + "in": "path", + "description": "Locale code (e.g. 'en_US').", "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "type", - "in": "query", - "description": "Device type as the name of the device profile", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the device name.", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "deviceProfileName", - "label", - "customerTitle" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataDevice" - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" } } }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, "400": { "description": "Bad Request", "content": { @@ -43809,33 +44280,46 @@ ] } }, - "/api/deviceGroupOtaPackage": { + "/api/translation/custom/{localeCode}/upload": { "post": { "tags": [ - "device-group-ota-package-controller" + "custom-translation-controller" + ], + "summary": "Upload Custom Translation (uploadCustomTranslation)", + "description": "Upload the Custom Translation for specified locale.\n\n Request example: \n\n```json\n{\"home\":\"MyHome\"}\n```\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", + "operationId": "uploadCustomTranslation", + "parameters": [ + { + "name": "localeCode", + "in": "path", + "description": "Locale code (e.g. 'en_US').", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "saveDeviceGroupOtaPackage", - "operationId": "saveDeviceGroupOtaPackage", "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/DeviceGroupOtaPackage" + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + }, + "required": [ + "file" + ] } } - }, - "required": true + } }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeviceGroupOtaPackage" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -43968,25 +44452,28 @@ ] } }, - "/api/deviceGroupOtaPackage/{groupId}/{firmwareType}": { - "get": { + "/api/translation/custom/{localeCode}/{keyPath}": { + "delete": { "tags": [ - "device-group-ota-package-controller" + "custom-translation-controller" ], - "summary": "getFirmwareById", - "operationId": "getFirmwareById", + "summary": "Delete specified key of Custom Translation (deleteCustomTranslationKey) ", + "description": "The API call is designed to delete specified key of the custom translation and return as a result parent translation.(e.g. if tenant translation for key is 'value1' and customer translation is 'value2' then by deletinf key onn customer level you will get 'value1' in response) \n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", + "operationId": "deleteCustomTranslationKey", "parameters": [ { - "name": "groupId", + "name": "localeCode", "in": "path", + "description": "Locale code (e.g. 'en_US').", "required": true, "schema": { "type": "string" } }, { - "name": "firmwareType", + "name": "keyPath", "in": "path", + "description": "A string value representing key of the custom translation (e.g. 'notification.active').", "required": true, "schema": { "type": "string" @@ -43995,14 +44482,7 @@ ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeviceGroupOtaPackage" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -44135,171 +44615,73 @@ ] } }, - "/api/deviceGroupOtaPackage/{id}": { - "delete": { + "/api/customer": { + "post": { "tags": [ - "device-group-ota-package-controller" + "customer-controller" ], - "summary": "deleteDeviceGroupOtaPackage", - "operationId": "deleteDeviceGroupOtaPackage", + "summary": "Create or update Customer (saveCustomer)", + "description": "Creates or Updates the Customer. When creating customer, platform generates Customer Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Customer Id will be present in the response. Specify existing Customer Id to update the Customer. Referencing non-existing Customer Id will cause 'Not Found' error.Remove 'id', 'tenantId' from the request body example (below) to create new Customer entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "saveCustomer", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "entityGroupId", + "in": "query", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'. If specified, the entity will be added to the corresponding entity group.", + "required": false, "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "OK" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } + { + "name": "entityGroupIds", + "in": "query", + "description": "A list of string values, separated by comma ',' representing the Entity Group Ids. For example, '784f394c-42b6-435a-983c-b7beff2784f9','a84f394c-42b6-435a-083c-b7beff2784f9'. If specified, the entity will be added to the corresponding entity groups.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } + { + "name": "nameConflictPolicy", + "in": "query", + "description": "Optional value of name conflict policy. Possible values: FAIL or UNIQUIFY. If omitted, FAIL policy is applied. FAIL policy implies exception will be thrown if an entity with the same name already exists. UNIQUIFY policy appends a suffix to the entity name, if a name conflict occurs.", + "required": false, + "schema": { + "$ref": "#/components/schemas/NameConflictPolicy", + "default": "FAIL" } }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - } - }, - "security": [ { - "HttpLoginForm": [] + "name": "uniquifySeparator", + "in": "query", + "description": "Optional value of name suffix separator used by UNIQUIFY policy. By default, underscore separator is used. For example, strategy is UNIQUIFY, separator is '-'; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-7fsh4f'.", + "required": false, + "schema": { + "type": "string", + "default": "_" + } }, { - "ApiKeyForm": [] + "name": "uniquifyStrategy", + "in": "query", + "description": "Optional value of uniquify strategy used by UNIQUIFY policy. Possible values: RANDOM or INCREMENTAL. By default, RANDOM strategy is used, which means random alphanumeric string will be added as a suffix to entity name. INCREMENTAL implies the first possible number starting from 1 will be added as a name suffix. For example, strategy is UNIQUIFY, uniquify strategy is INCREMENTAL; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-1.", + "required": false, + "schema": { + "$ref": "#/components/schemas/UniquifyStrategy", + "default": "RANDOM" + } } - ] - } - }, - "/api/deviceProfile": { - "post": { - "tags": [ - "device-profile-controller" ], - "summary": "Create Or Update Device Profile (saveDeviceProfile)", - "description": "Create or update the Device Profile. When creating device profile, platform generates device profile id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created device profile id will be present in the response. Specify existing device profile id to update the device profile. Referencing non-existing device profile Id will cause 'Not Found' error. \n\nDevice profile name is unique in the scope of tenant. Only one 'default' device profile may exist in scope of tenant.\n\n# Device profile data definition\n\nDevice profile data object contains device provision strategy and transport type configuration for device connectivity. Let's review some examples. First one is the default device profile data configuration and second one - the custom one. \n\n```json\n{\n \"configuration\":{\n \"type\":\"DEFAULT\"\n },\n \"provisionConfiguration\":{\n \"type\":\"DISABLED\",\n \"provisionDeviceSecret\":null\n },\n \"transportConfiguration\":{\n \"type\":\"DEFAULT\"\n }\n}\n```\n\n```json\n{\n \"configuration\":{\n \"type\":\"DEFAULT\"\n },\n \"provisionConfiguration\":{\n \"type\":\"ALLOW_CREATE_NEW_DEVICES\",\n \"provisionDeviceSecret\":\"vaxb9hzqdbz3oqukvomg\"\n },\n \"transportConfiguration\":{\n \"type\":\"MQTT\",\n \"deviceTelemetryTopic\":\"v1/devices/me/telemetry\",\n \"deviceAttributesTopic\":\"v1/devices/me/attributes\",\n \"transportPayloadTypeConfiguration\":{\n \"transportPayloadType\":\"PROTOBUF\",\n \"deviceTelemetryProtoSchema\":\"syntax =\\\"proto3\\\";\\npackage telemetry;\\n\\nmessage SensorDataReading {\\n\\n optional double temperature = 1;\\n optional double humidity = 2;\\n InnerObject innerObject = 3;\\n\\n message InnerObject {\\n optional string key1 = 1;\\n optional bool key2 = 2;\\n optional double key3 = 3;\\n optional int32 key4 = 4;\\n optional string key5 = 5;\\n }\\n}\",\n \"deviceAttributesProtoSchema\":\"syntax =\\\"proto3\\\";\\npackage attributes;\\n\\nmessage SensorConfiguration {\\n optional string firmwareVersion = 1;\\n optional string serialNumber = 2;\\n}\",\n \"deviceRpcRequestProtoSchema\":\"syntax =\\\"proto3\\\";\\npackage rpc;\\n\\nmessage RpcRequestMsg {\\n optional string method = 1;\\n optional int32 requestId = 2;\\n optional string params = 3;\\n}\",\n \"deviceRpcResponseProtoSchema\":\"syntax =\\\"proto3\\\";\\npackage rpc;\\n\\nmessage RpcResponseMsg {\\n optional string payload = 1;\\n}\"\n }\n }\n}\n```\n\nLet's review some specific objects examples related to the device profile configuration:# Provision Configuration\n\nThere are 3 types of device provision configuration for the device profile: \n * 'DISABLED';\n * 'ALLOW_CREATE_NEW_DEVICES';\n * 'CHECK_PRE_PROVISIONED_DEVICES'.\n\nPlease refer to the [docs](https://thingsboard.io/docs/user-guide/device-provisioning/) for more details.\n\n# Transport Configuration\n\n5 transport configuration types are available:\n * 'DEFAULT';\n * 'MQTT';\n * 'LWM2M';\n * 'COAP';\n * 'SNMP'.\n\nDefault type supports basic MQTT, HTTP, CoAP and LwM2M transports. Please refer to the [docs](https://thingsboard.io/docs/user-guide/device-profiles/#transport-configuration) for more details about other types.\n\nSee another example of COAP transport configuration below:\n\n```json\n{\n \"type\":\"COAP\",\n \"clientSettings\":{\n \"edrxCycle\":null,\n \"powerMode\":\"DRX\",\n \"psmActivityTimer\":null,\n \"pagingTransmissionWindow\":null\n },\n \"coapDeviceTypeConfiguration\":{\n \"coapDeviceType\":\"DEFAULT\",\n \"transportPayloadTypeConfiguration\":{\n \"transportPayloadType\":\"JSON\"\n }\n }\n}\n```Remove 'id', 'tenantId' from the request body example (below) to create new Device Profile entity. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "saveDeviceProfile", "requestBody": { + "description": "A JSON value representing the customer.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeviceProfile" + "$ref": "#/components/schemas/Customer" } } }, @@ -44311,7 +44693,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeviceProfile" + "$ref": "#/components/schemas/Customer" } } } @@ -44447,20 +44829,20 @@ ] } }, - "/api/deviceProfile/devices/keys/attributes": { + "/api/customer/info/{customerId}": { "get": { "tags": [ - "device-profile-controller" + "customer-controller" ], - "summary": "Get attribute keys (getAttributesKeys)", - "description": "Get a set of unique attribute keys used by devices that belong to specified profile. If profile is not set returns a list of unique keys among all profiles. The call is used for auto-complete in the UI forms. The implementation limits the number of devices that participate in search to 100 as a trade of between accurate results and time-consuming queries. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getAttributesKeys", + "summary": "Get Customer info (getCustomerInfoById)", + "description": "Get the Customer info object based on the provided Customer Id. If the user has the authority of 'Tenant Administrator', the server checks that the customer is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the user belongs to the customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerInfoById", "parameters": [ { - "name": "deviceProfileId", - "in": "query", - "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { "type": "string" } @@ -44472,10 +44854,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/CustomerInfo" } } } @@ -44611,20 +44990,20 @@ ] } }, - "/api/deviceProfile/devices/keys/timeseries": { + "/api/customer/{customerId}": { "get": { "tags": [ - "device-profile-controller" + "customer-controller" ], - "summary": "Get time series keys (getDeviceProfileTimeseriesKeys)", - "description": "Get a set of unique time series keys used by devices that belong to specified profile. If profile is not set returns a list of unique keys among all profiles. The call is used for auto-complete in the UI forms. The implementation limits the number of devices that participate in search to 100 as a trade of between accurate results and time-consuming queries. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getDeviceProfileTimeseriesKeys", + "summary": "Get Customer (getCustomerById)", + "description": "Get the Customer object based on the provided Customer Id. If the user has the authority of 'Tenant Administrator', the server checks that the customer is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the user belongs to the customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerById", "parameters": [ { - "name": "deviceProfileId", - "in": "query", - "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { "type": "string" } @@ -44636,10 +45015,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/Customer" } } } @@ -44773,41 +45149,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/deviceProfile/names": { - "get": { + }, + "delete": { "tags": [ - "device-profile-controller" + "customer-controller" ], - "summary": "Get Device Profile names (getDeviceProfileNames)", - "description": "Returns a set of unique device profile names owned by the tenant.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getDeviceProfileNames", + "summary": "Delete Customer (deleteCustomer)", + "description": "Deletes the Customer and all customer Users. All assigned Dashboards, Assets, Devices, etc. will be unassigned but not deleted. Referencing non-existing Customer Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", + "operationId": "deleteCustomer", "parameters": [ { - "name": "activeOnly", - "in": "query", - "description": "Flag indicating whether to retrieve exclusively the names of device profiles that are referenced by tenant's devices.", - "required": false, + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { - "type": "boolean", - "default": false + "type": "string" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityInfo" - } - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -44940,32 +45303,90 @@ ] } }, - "/api/deviceProfile/{deviceProfileId}": { + "/api/customer/{customerId}/customerInfos": { "get": { "tags": [ - "device-profile-controller" + "customer-controller" ], - "summary": "Get Device Profile (getDeviceProfileById)", - "description": "Fetch the Device Profile object based on the provided Device Profile Id. The server checks that the device profile is owned by the same tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getDeviceProfileById", + "summary": "Get Customer sub-customers Infos (getCustomerCustomerInfos)", + "description": "Returns a page of customer info objects owned by the specified customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerCustomerInfos", "parameters": [ { - "name": "deviceProfileId", + "name": "customerId", "in": "path", - "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "inlineImages", + "name": "pageSize", "in": "query", - "description": "Inline images as a data URL (Base64)", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", "required": false, "schema": { "type": "boolean" } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the customer title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "title", + "email", + "country", + "city" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -44974,7 +45395,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeviceProfile" + "$ref": "#/components/schemas/PageDataCustomerInfo" } } } @@ -45108,19 +45529,21 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/customer/{customerId}/shortInfo": { + "get": { "tags": [ - "device-profile-controller" + "customer-controller" ], - "summary": "Delete device profile (deleteDeviceProfile)", - "description": "Deletes the device profile. Referencing non-existing device profile Id will cause an error. Can't delete the device profile if it is referenced by existing devices.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "deleteDeviceProfile", + "summary": "Get short Customer info (getShortCustomerInfoById)", + "description": "Get the short customer object that contains only the title and 'isPublic' flag. If the user has the authority of 'Tenant Administrator', the server checks that the customer is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the user belongs to the customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getShortCustomerInfoById", "parameters": [ { - "name": "deviceProfileId", + "name": "customerId", "in": "path", - "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -45129,7 +45552,14 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + } }, "400": { "description": "Bad Request", @@ -45262,19 +45692,19 @@ ] } }, - "/api/deviceProfile/{deviceProfileId}/default": { - "post": { + "/api/customer/{customerId}/title": { + "get": { "tags": [ - "device-profile-controller" + "customer-controller" ], - "summary": "Make Device Profile Default (setDefaultDeviceProfile)", - "description": "Marks device profile as default within a tenant scope.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "setDefaultDeviceProfile", + "summary": "Get Customer Title (getCustomerTitleById)", + "description": "Get the title of the customer. If the user has the authority of 'Tenant Administrator', the server checks that the customer is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the user belongs to the customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerTitleById", "parameters": [ { - "name": "deviceProfileId", + "name": "customerId", "in": "path", - "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -45285,9 +45715,9 @@ "200": { "description": "OK", "content": { - "application/json": { + "application/text": { "schema": { - "$ref": "#/components/schemas/DeviceProfile" + "type": "string" } } } @@ -45303,7 +45733,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -45423,21 +45853,90 @@ ] } }, - "/api/deviceProfileInfo/default": { + "/api/customerInfos/all": { "get": { "tags": [ - "device-profile-controller" + "customer-controller" + ], + "summary": "Get All Customer Infos for current user (getAllCustomerInfos)", + "description": "Returns a page of customer info objects owned by the tenant or the customer of a current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAllCustomerInfos", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the customer title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "title", + "email", + "country", + "city" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } ], - "summary": "Get Default Device Profile (getDefaultDeviceProfileInfo)", - "description": "Fetch the Default Device Profile Info object. Device Profile Info is a lightweight object that includes main information about Device Profile excluding the heavyweight configuration object. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getDefaultDeviceProfileInfo", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeviceProfileInfo" + "$ref": "#/components/schemas/PageDataCustomerInfo" } } } @@ -45573,175 +46072,14 @@ ] } }, - "/api/deviceProfileInfo/{deviceProfileId}": { - "get": { - "tags": [ - "device-profile-controller" - ], - "summary": "Get Device Profile Info (getDeviceProfileInfoById)", - "description": "Fetch the Device Profile Info object based on the provided Device Profile Id. Device Profile Info is a lightweight object that includes main information about Device Profile excluding the heavyweight configuration object. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getDeviceProfileInfoById", - "parameters": [ - { - "name": "deviceProfileId", - "in": "path", - "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeviceProfileInfo" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] - } - }, - "/api/deviceProfileInfos": { + "/api/customers": { "get": { "tags": [ - "device-profile-controller" + "customer-controller" ], - "summary": "Get Device Profiles for transport type (getDeviceProfileInfos)", - "description": "Returns a page of devices profile info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Device Profile Info is a lightweight object that includes main information about Device Profile excluding the heavyweight configuration object. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getDeviceProfileInfos", + "summary": "Get Tenant Customers (getCustomers)", + "description": "Returns a page of customers owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomers", "parameters": [ { "name": "pageSize", @@ -45766,7 +46104,7 @@ { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the device profile name.", + "description": "The case insensitive 'substring' filter based on the customer title.", "required": false, "schema": { "type": "string" @@ -45781,11 +46119,10 @@ "type": "string", "enum": [ "createdTime", - "name", - "type", - "transportType", - "description", - "isDefault" + "title", + "email", + "country", + "city" ] } }, @@ -45801,22 +46138,6 @@ "DESC" ] } - }, - { - "name": "transportType", - "in": "query", - "description": "Type of the transport", - "required": false, - "schema": { - "type": "string", - "enum": [ - "DEFAULT", - "MQTT", - "COAP", - "LWM2M", - "SNMP" - ] - } } ], "responses": { @@ -45825,7 +46146,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataDeviceProfileInfo" + "$ref": "#/components/schemas/PageDataCustomer" } } } @@ -45961,19 +46282,19 @@ ] } }, - "/api/deviceProfileInfos/list": { + "/api/customers/list": { "get": { "tags": [ - "device-profile-controller" + "customer-controller" ], - "summary": "Get Device Profile Infos By Ids (getDeviceProfileInfosByIds)", - "description": "Requested device profiles must be owned by tenant which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getDeviceProfileInfosByIds", + "summary": "Get customers by Customer Ids (getCustomersByIds)", + "description": "Returns a list of Customer objects based on the provided ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getCustomersByIds", "parameters": [ { - "name": "deviceProfileIds", + "name": "customerIds", "in": "query", - "description": "A list of device profile ids, separated by comma ','", + "description": "A list of customer ids, separated by comma ','", "required": true, "schema": { "type": "array", @@ -45991,7 +46312,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DeviceProfileInfo" + "$ref": "#/components/schemas/Customer" } } } @@ -46128,23 +46449,32 @@ ] } }, - "/api/deviceProfiles": { + "/api/entityGroup/{entityGroupId}/customers": { "get": { "tags": [ - "device-profile-controller" + "customer-controller" ], - "summary": "Get Device Profiles (getDeviceProfiles)", - "description": "Returns a page of devices profile objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getDeviceProfiles", + "summary": "Get customers by Entity Group Id (getCustomersByEntityGroupId)", + "description": "Returns a page of Customer objects that belongs to specified Entity Group Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getCustomersByEntityGroupId", "parameters": [ + { + "name": "entityGroupId", + "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "pageSize", "in": "query", "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "minimum": 1 } }, { @@ -46153,14 +46483,14 @@ "description": "Sequence number of page starting from 0", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "minimum": 0 } }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the device profile name.", + "description": "The case insensitive 'substring' filter based on the customer title.", "required": false, "schema": { "type": "string" @@ -46175,11 +46505,10 @@ "type": "string", "enum": [ "createdTime", - "name", - "type", - "transportType", - "description", - "isDefault" + "title", + "email", + "country", + "city" ] } }, @@ -46203,7 +46532,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataDeviceProfile" + "$ref": "#/components/schemas/PageDataCustomer" } } } @@ -46339,45 +46668,32 @@ ] } }, - "/api/domain": { - "post": { + "/api/tenant/customers": { + "get": { "tags": [ - "domain-controller" + "customer-controller" ], - "summary": "Save or Update Domain (saveDomain)", - "description": "Create or update the Domain. When creating domain, platform generates Domain Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Domain Id will be present in the response. Specify existing Domain Id to update the domain. Referencing non-existing Domain Id will cause 'Not Found' error.\n\nDomain name is unique for entire platform setup.\n\n\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "saveDomain", + "summary": "Get Tenant Customer by Customer title (getTenantCustomer)", + "description": "Get the Customer using Customer Title. \n\nAvailable for users with 'TENANT_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getTenantCustomer", "parameters": [ { - "name": "oauth2ClientIds", + "name": "customerTitle", "in": "query", - "description": "A list of oauth2 client registration ids, separated by comma ','", - "required": false, + "description": "A string value representing the Customer title.", + "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Domain" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Domain" + "$ref": "#/components/schemas/Customer" } } } @@ -46393,7 +46709,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -46513,22 +46829,71 @@ ] } }, - "/api/domain/cloud/info/{id}": { + "/api/user/customers": { "get": { "tags": [ - "domain-controller" + "customer-controller" ], - "summary": "Get Domain info by Id (getCloudDomainInfoById)", - "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getCloudDomainInfoById", + "summary": "Get Customers (getUserCustomers)", + "description": "Returns a page of customers available for the user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getUserCustomers", "parameters": [ { - "name": "id", - "in": "path", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { "type": "string", - "format": "uuid" + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the customer title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "title", + "email", + "country", + "city" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -46538,7 +46903,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CloudDomainInfo" + "$ref": "#/components/schemas/PageDataCustomer" } } } @@ -46674,32 +47039,21 @@ ] } }, - "/api/domain/info/{id}": { + "/api/customer/dashboard/home/info": { "get": { "tags": [ - "domain-controller" - ], - "summary": "Get Domain info by Id (getDomainInfoById)", - "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getDomainInfoById", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "dashboard-controller" ], + "summary": "Get Customer Home Dashboard Info (getCustomerHomeDashboardInfo)", + "description": "Returns the home dashboard info object that is configured as 'homeDashboardId' parameter in the 'additionalInfo' of the corresponding customer. \n\nAvailable for users with 'CUSTOMER_USER' authority.\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", + "operationId": "getCustomerHomeDashboardInfo", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DomainInfo" + "$ref": "#/components/schemas/HomeDashboardInfo" } } } @@ -46833,75 +47187,27 @@ "ApiKeyForm": [] } ] - } - }, - "/api/domain/infos": { - "get": { + }, + "post": { "tags": [ - "domain-controller" + "dashboard-controller" ], - "summary": "Get Domain infos (getDomainInfos)", - "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getDomainInfos", - "parameters": [ - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "Case-insensitive 'substring' filter based on domain's name", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" + "summary": "Update Customer Home Dashboard Info (setCustomerHomeDashboardInfo)", + "description": "Update the home dashboard assignment for the current customer. \n\nAvailable for users with 'CUSTOMER_USER' authority.\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", + "operationId": "setCustomerHomeDashboardInfo", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HomeDashboardInfo" + } } }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string" - } - } - ], + "required": true + }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataDomainInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -46914,7 +47220,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -47034,28 +47340,99 @@ ] } }, - "/api/domain/{id}": { - "delete": { + "/api/customer/{customerId}/dashboards": { + "get": { "tags": [ - "domain-controller" + "dashboard-controller" ], - "summary": "Delete Domain by ID (deleteDomain)", - "description": "Deletes Domain by ID. Referencing non-existing domain Id will cause an error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "deleteDomain", + "summary": "Get Customer Dashboards (getCustomerDashboards)", + "description": "Returns a page of dashboard info objects owned by the specified customer. The Dashboard Info object contains lightweight information about the dashboard (e.g. title, image, assigned customers) but does not contain the heavyweight configuration JSON. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerDashboards", "parameters": [ { - "name": "id", + "name": "customerId", "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the dashboard title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, "schema": { "type": "string", - "format": "uuid" + "enum": [ + "createdTime", + "title" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataDashboardInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -47188,34 +47565,50 @@ ] } }, - "/api/domain/{id}/oauth2Clients": { - "put": { + "/api/dashboard": { + "post": { "tags": [ - "domain-controller" + "dashboard-controller" ], - "summary": "Update oauth2 clients (updateDomainOauth2Clients)", - "description": "Update oauth2 clients for the specified domain. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "updateDomainOauth2Clients", + "summary": "Create Or Update Dashboard (saveDashboard)", + "description": "Create or update the Dashboard. When creating dashboard, platform generates Dashboard Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Dashboard id will be present in the response. Specify existing Dashboard id to update the dashboard. Referencing non-existing dashboard Id will cause 'Not Found' error. Only users with 'TENANT_ADMIN') authority may create the dashboards.Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Dashboard entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "saveDashboard", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "entityGroupId", + "in": "query", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "entityGroupIds", + "in": "query", + "description": "A list of entity group ids, separated by comma ','", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "Accept-Encoding", + "in": "header", + "required": false, + "schema": { + "type": "string" } } ], "requestBody": { + "description": "A JSON value representing the dashboard.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/schemas/Dashboard" } } }, @@ -47223,7 +47616,14 @@ }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + } }, "400": { "description": "Bad Request", @@ -47236,7 +47636,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -47356,99 +47756,22 @@ ] } }, - "/api/customer/{customerId}/edgeInfos": { + "/api/dashboard/home": { "get": { "tags": [ - "edge-controller" + "dashboard-controller" ], - "summary": "Get Customer Edge Infos (getCustomerEdgeInfos)", - "description": "Returns a page of edge info objects owned by the specified customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerEdgeInfos", + "summary": "Get Home Dashboard (getHomeDashboard)", + "description": "Returns the home dashboard object that is configured as 'homeDashboardId' parameter in the 'additionalInfo' of the User. If 'homeDashboardId' parameter is not set on the User level and the User has authority 'CUSTOMER_USER', check the same parameter for the corresponding Customer. If 'homeDashboardId' parameter is not set on the User and Customer levels then checks the same parameter for the Tenant that owns the user. The Dashboard object is a heavyweight object that contains information about the dashboard (e.g. title, image, assigned customers) and also configuration JSON (e.g. layouts, widgets, entity aliases).\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getHomeDashboard", "parameters": [ { - "name": "customerId", - "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "type", - "in": "query", - "description": "A string value representing the edge type. For example, 'default'", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the edge name.", + "name": "Accept-Encoding", + "in": "header", "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "label", - "customerTitle" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -47457,7 +47780,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEdgeInfo" + "$ref": "#/components/schemas/HomeDashboard" } } } @@ -47593,99 +47916,21 @@ ] } }, - "/api/customer/{customerId}/edges": { + "/api/dashboard/home/info": { "get": { "tags": [ - "edge-controller" - ], - "summary": "Get Customer Edges (getCustomerEdges)", - "description": "Returns a page of edges objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getCustomerEdges", - "parameters": [ - { - "name": "customerId", - "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "type", - "in": "query", - "description": "A string value representing the edge type. For example, 'default'", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the edge name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "label", - "customerTitle" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } + "dashboard-controller" ], + "summary": "Get Home Dashboard Info (getHomeDashboardInfo)", + "description": "Returns the home dashboard info object that is configured as 'homeDashboardId' parameter in the 'additionalInfo' of the User. If 'homeDashboardId' parameter is not set on the User level and the User has authority 'CUSTOMER_USER', check the same parameter for the corresponding Customer. If 'homeDashboardId' parameter is not set on the User and Customer levels then checks the same parameter for the Tenant that owns the user. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getHomeDashboardInfo", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEdge" + "$ref": "#/components/schemas/HomeDashboardInfo" } } } @@ -47821,53 +48066,32 @@ ] } }, - "/api/edge": { - "post": { + "/api/dashboard/info/{dashboardId}": { + "get": { "tags": [ - "edge-controller" + "dashboard-controller" ], - "summary": "Create Or Update Edge (saveEdge)", - "description": "Create or update the Edge. When creating edge, platform generates Edge Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created edge id will be present in the response. Specify existing Edge id to update the edge. Referencing non-existing Edge Id will cause 'Not Found' error.\n\nEdge name is unique in the scope of tenant. Use unique identifiers like MAC or IMEI for the edge names and non-unique 'label' field for user-friendly visualization purposes.Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Edge entity. ", - "operationId": "saveEdge", + "summary": "Get Dashboard Info (getDashboardInfoById)", + "description": "Get the information about the dashboard based on 'dashboardId' parameter. The Dashboard Info object contains lightweight information about the dashboard (e.g. title, image, assigned customers) but does not contain the heavyweight configuration JSON.", + "operationId": "getDashboardInfoById", "parameters": [ { - "name": "entityGroupId", - "in": "query", - "required": false, + "name": "dashboardId", + "in": "path", + "description": "A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { "type": "string" } - }, - { - "name": "entityGroupIds", - "in": "query", - "description": "A list of entity group ids, separated by comma ','", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Edge" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Edge" + "$ref": "#/components/schemas/DashboardInfo" } } } @@ -47883,7 +48107,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -48003,31 +48227,23 @@ ] } }, - "/api/edge/bulk_import": { - "post": { + "/api/dashboard/maxDatapointsLimit": { + "get": { "tags": [ - "edge-controller" + "dashboard-controller" ], - "summary": "Import the bulk of edges (processEdgesBulkImport)", - "description": "There's an ability to import the bulk of edges using the only .csv file.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "processEdgesBulkImport", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BulkImportRequest" - } - } - }, - "required": true - }, + "summary": "Get max data points limit (getMaxDatapointsLimit)", + "description": "Get the maximum number of data points that dashboard may request from the server per in a single subscription command. This value impacts the time window behavior. It impacts 'Max values' parameter in case user selects 'None' as 'Data aggregation function'. It also impacts the 'Grouping interval' in case of any other 'Data aggregation function' is selected. The actual value of the limit is configurable in the system configuration file.", + "operationId": "getMaxDatapointsLimit", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BulkImportResultEdge" + "type": "integer", + "format": "int64", + "example": 5000 } } } @@ -48043,7 +48259,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -48163,32 +48379,23 @@ ] } }, - "/api/edge/info/{edgeId}": { + "/api/dashboard/serverTime": { "get": { "tags": [ - "edge-controller" - ], - "summary": "Get Edge Info (getEdgeInfoById)", - "description": "Get the Edge info object based on the provided Edge Id. If the user has the authority of 'Tenant Administrator', the server checks that the edge is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the edge is assigned to the same customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getEdgeInfoById", - "parameters": [ - { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - } + "dashboard-controller" ], + "summary": "Get server time (getServerTime)", + "description": "Get the server time (milliseconds since January 1, 1970 UTC). Used to adjust view of the dashboards according to the difference between browser and server time.", + "operationId": "getServerTime", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EdgeInfo" + "type": "integer", + "format": "int64", + "example": 1636023857137 } } } @@ -48324,36 +48531,39 @@ ] } }, - "/api/edge/instructions/install/{edgeId}/{method}": { + "/api/dashboard/{dashboardId}": { "get": { "tags": [ - "edge-controller" + "dashboard-controller" ], - "summary": "Get Edge Install Instructions (getEdgeInstallInstructions)", - "description": "Get an install instructions for provided edge id.If the user has the authority of 'Tenant Administrator', the server checks that the edge is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the edge is assigned to the same customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getEdgeInstallInstructions", + "summary": "Get Dashboard (getDashboardById)", + "description": "Get the dashboard based on 'dashboardId' parameter. The Dashboard object is a heavyweight object that contains information about the dashboard (e.g. title, image, assigned customers) and also configuration JSON (e.g. layouts, widgets, entity aliases).\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getDashboardById", "parameters": [ { - "name": "edgeId", + "name": "dashboardId", "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "method", - "in": "path", - "description": "Installation method ('docker', 'ubuntu' or 'centos')", - "required": true, + "name": "includeResources", + "in": "query", + "description": "Export used resources and replace resource links with resource metadata", + "required": false, "schema": { - "type": "string", - "enum": [ - "docker", - "ubuntu", - "centos" - ] + "type": "boolean" + } + }, + { + "name": "Accept-Encoding", + "in": "header", + "required": false, + "schema": { + "type": "string" } } ], @@ -48363,7 +48573,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EdgeInstructions" + "$ref": "#/components/schemas/Dashboard" } } } @@ -48497,38 +48707,179 @@ "ApiKeyForm": [] } ] - } - }, - "/api/edge/instructions/upgrade/{edgeVersion}/{method}": { - "get": { + }, + "delete": { "tags": [ - "edge-controller" + "dashboard-controller" ], - "summary": "Get Edge Upgrade Instructions (getEdgeUpgradeInstructions)", - "description": "Get an upgrade instructions for provided edge version.If the user has the authority of 'Tenant Administrator', the server checks that the edge is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the edge is assigned to the same customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getEdgeUpgradeInstructions", + "summary": "Delete the Dashboard (deleteDashboard)", + "description": "Delete the Dashboard. Only users with 'TENANT_ADMIN') authority may delete the dashboards.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "deleteDashboard", "parameters": [ { - "name": "edgeVersion", + "name": "dashboardId", "in": "path", - "description": "Edge version", + "description": "A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ { - "name": "method", - "in": "path", - "description": "Upgrade method ('docker', 'ubuntu' or 'centos')", + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/dashboards": { + "get": { + "tags": [ + "dashboard-controller" + ], + "summary": "Get dashboards by Dashboard Ids (getDashboardsByIds)", + "description": "Returns a list of DashboardInfo objects based on the provided ids. Filters the list based on the user permissions. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getDashboardsByIds", + "parameters": [ + { + "name": "dashboardIds", + "in": "query", + "description": "A list of dashboard ids, separated by comma ','", "required": true, "schema": { - "type": "string", - "enum": [ - "docker", - "ubuntu", - "centos" - ] + "type": "array", + "items": { + "type": "string" + } } } ], @@ -48538,7 +48889,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EdgeInstructions" + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardInfo" + } } } } @@ -48674,23 +49028,78 @@ ] } }, - "/api/edge/missingToRelatedRuleChains/{edgeId}": { + "/api/dashboards/all": { "get": { "tags": [ - "edge-controller" + "dashboard-controller" ], - "summary": "Find missing rule chains (findMissingToRelatedRuleChains)", - "description": "Returns list of rule chains ids that are not assigned to particular edge, but these rule chains are present in the already assigned rule chains to edge.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "findMissingToRelatedRuleChains", + "summary": "Get All Dashboards for current user (getAllDashboards)", + "description": "Returns a page of dashboard info objects owned by the tenant or the customer of a current user. The Dashboard Info object contains lightweight information about the dashboard (e.g. title, image, assigned customers) but does not contain the heavyweight configuration JSON. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAllDashboards", "parameters": [ { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the dashboard title.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "title" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -48699,7 +49108,7 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/PageDataDashboardInfo" } } } @@ -48835,23 +49244,78 @@ ] } }, - "/api/edge/sync/{edgeId}": { - "post": { + "/api/entityGroup/{entityGroupId}/dashboards": { + "get": { "tags": [ - "edge-controller" + "dashboard-controller" ], - "summary": "Sync edge (syncEdge)", - "description": "Starts synchronization process between edge and cloud. \nAll entities that are assigned to particular edge are going to be send to remote edge service.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "syncEdge", + "summary": "Get dashboards by Entity Group Id (getDashboardsByEntityGroupId)", + "description": "Returns a page of Dashboard objects that belongs to specified Entity Group Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getDashboardsByEntityGroupId", "parameters": [ { - "name": "edgeId", + "name": "entityGroupId", "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the dashboard title.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "title" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -48860,7 +49324,7 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/PageDataDashboardInfo" } } } @@ -48876,7 +49340,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -48996,14 +49460,43 @@ ] } }, - "/api/edge/types": { + "/api/entityGroup/{entityGroupId}/dashboards/export": { "get": { "tags": [ - "edge-controller" + "dashboard-controller" + ], + "summary": "Export Dashboards (exportGroupDashboards)", + "description": "Export the dashboards that belong to specified group id.The Dashboard object is a heavyweight object that contains information about the dashboard (e.g. title, image, assigned customers) and also configuration JSON (e.g. layouts, widgets, entity aliases).\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "exportGroupDashboards", + "parameters": [ + { + "name": "entityGroupId", + "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Limit of the entities to export", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Accept-Encoding", + "in": "header", + "required": false, + "schema": { + "type": "string" + } + } ], - "summary": "Get Edge Types (getEdgeTypes)", - "description": "Returns a set of unique edge types based on edges that are either owned by the tenant or assigned to the customer which user is performing the request.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getEdgeTypes", "responses": { "200": { "description": "OK", @@ -49012,7 +49505,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/EntitySubtype" + "$ref": "#/components/schemas/Dashboard" } } } @@ -49149,36 +49642,53 @@ ] } }, - "/api/edge/{edgeId}": { - "get": { + "/api/entityGroup/{entityGroupId}/dashboards/import": { + "post": { "tags": [ - "edge-controller" + "dashboard-controller" ], - "summary": "Get Edge (getEdgeById)", - "description": "Get the Edge object based on the provided Edge Id. If the user has the authority of 'Tenant Administrator', the server checks that the edge is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the edge is assigned to the same customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getEdgeById", + "summary": "Import Dashboards (importGroupDashboards)", + "description": "Import the dashboards to specified group.The Dashboard object is a heavyweight object that contains information about the dashboard (e.g. title, image, assigned customers) and also configuration JSON (e.g. layouts, widgets, entity aliases).\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", + "operationId": "importGroupDashboards", "parameters": [ { - "name": "edgeId", + "name": "entityGroupId", "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } + }, + { + "name": "overwrite", + "in": "query", + "description": "Overwrite dashboards with the same name", + "required": false, + "schema": { + "type": "boolean", + "default": false + } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Edge" + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "description": "JSON array with the dashboard objects", + "items": { + "$ref": "#/components/schemas/Dashboard" } } } }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, "400": { "description": "Bad Request", "content": { @@ -49190,7 +49700,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -49308,28 +49818,26 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/tenant/dashboard/home/info": { + "get": { "tags": [ - "edge-controller" - ], - "summary": "Delete edge (deleteEdge)", - "description": "Deletes the edge. Referencing non-existing edge Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "deleteEdge", - "parameters": [ - { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - } + "dashboard-controller" ], + "summary": "Get Tenant Home Dashboard Info (getTenantHomeDashboardInfo)", + "description": "Returns the home dashboard info object that is configured as 'homeDashboardId' parameter in the 'additionalInfo' of the corresponding tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", + "operationId": "getTenantHomeDashboardInfo", "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HomeDashboardInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -49460,37 +49968,27 @@ "ApiKeyForm": [] } ] - } - }, - "/api/edge/{edgeId}/upgrade/available": { - "get": { + }, + "post": { "tags": [ - "edge-controller" + "dashboard-controller" ], - "summary": "Is edge upgrade enabled (isEdgeUpgradeAvailable)", - "description": "Returns 'true' if upgrade available for connected edge, 'false' - otherwise.", - "operationId": "isEdgeUpgradeAvailable", - "parameters": [ - { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "Update Tenant Home Dashboard Info (getTenantHomeDashboardInfo)", + "description": "Update the home dashboard assignment for the current tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", + "operationId": "setTenantHomeDashboardInfo", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HomeDashboardInfo" + } } - } - ], + }, + "required": true + }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "boolean" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -49503,7 +50001,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -49623,32 +50121,78 @@ ] } }, - "/api/edge/{edgeId}/{ruleChainId}/root": { - "post": { + "/api/tenant/dashboards": { + "get": { "tags": [ - "edge-controller" + "dashboard-controller" ], - "summary": "Set root rule chain for provided edge (setEdgeRootRuleChain)", - "description": "Change root rule chain of the edge to the new provided rule chain. \nThis operation will send a notification to update root rule chain on remote edge service.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "setEdgeRootRuleChain", + "summary": "Get Tenant Dashboards (getTenantDashboards)", + "description": "Returns a page of dashboard info objects owned by the tenant of a current user. The Dashboard Info object contains lightweight information about the dashboard (e.g. title, image, assigned customers) but does not contain the heavyweight configuration JSON. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getTenantDashboards", "parameters": [ { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int32" } }, { - "name": "ruleChainId", - "in": "path", - "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "mobile", + "in": "query", + "description": "Exclude dashboards that are hidden for mobile", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the dashboard title.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "title" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -49657,7 +50201,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Edge" + "$ref": "#/components/schemas/PageDataDashboardInfo" } } } @@ -49673,7 +50217,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -49793,15 +50337,24 @@ ] } }, - "/api/edgeInfos/all": { + "/api/tenant/{tenantId}/dashboards": { "get": { "tags": [ - "edge-controller" + "dashboard-controller" ], - "summary": "Get All Edge Infos for current user (getAllEdgeInfos)", - "description": "Returns a page of edge info objects owned by the tenant or the customer of a current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAllEdgeInfos", + "summary": "Get Tenant Dashboards by System Administrator (getTenantDashboardsByTenantId)", + "description": "Returns a page of dashboard info objects owned by tenant. The Dashboard Info object contains lightweight information about the dashboard (e.g. title, image, assigned customers) but does not contain the heavyweight configuration JSON. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "getTenantDashboardsByTenantId", "parameters": [ + { + "name": "tenantId", + "in": "path", + "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "pageSize", "in": "query", @@ -49822,28 +50375,10 @@ "format": "int32" } }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "type", - "in": "query", - "description": "A string value representing the edge type. For example, 'default'", - "required": false, - "schema": { - "type": "string" - } - }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the edge name.", + "description": "The case insensitive 'substring' filter based on the dashboard title.", "required": false, "schema": { "type": "string" @@ -49858,10 +50393,7 @@ "type": "string", "enum": [ "createdTime", - "name", - "type", - "label", - "customerTitle" + "title" ] } }, @@ -49885,7 +50417,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEdgeInfo" + "$ref": "#/components/schemas/PageDataDashboardInfo" } } } @@ -50021,14 +50553,14 @@ ] } }, - "/api/edges": { + "/api/user/dashboards": { "get": { "tags": [ - "edge-controller" + "dashboard-controller" ], - "summary": "Get Tenant Edges (getEdges)", - "description": "Returns a page of edges owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getEdges", + "summary": "Get Dashboards (getUserDashboards)", + "description": "Returns a page of Dashboard Info objects available for specified or current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. The Dashboard Info object contains lightweight information about the dashboard (e.g. title, image, assigned customers) but does not contain the heavyweight configuration JSON.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getUserDashboards", "parameters": [ { "name": "pageSize", @@ -50050,10 +50582,19 @@ "format": "int32" } }, + { + "name": "mobile", + "in": "query", + "description": "Exclude dashboards that are hidden for mobile", + "required": false, + "schema": { + "type": "boolean" + } + }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the edge name.", + "description": "The case insensitive 'substring' filter based on the dashboard title.", "required": false, "schema": { "type": "string" @@ -50068,10 +50609,7 @@ "type": "string", "enum": [ "createdTime", - "name", - "type", - "label", - "customerTitle" + "title" ] } }, @@ -50087,6 +50625,24 @@ "DESC" ] } + }, + { + "name": "operation", + "in": "query", + "description": "Filter by allowed operations for the current user", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "query", + "description": "A string value representing the user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -50095,7 +50651,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEdge" + "$ref": "#/components/schemas/PageDataDashboardInfo" } } } @@ -50229,19 +50785,33 @@ "ApiKeyForm": [] } ] - }, + } + }, + "/api/report/test": { "post": { "tags": [ - "edge-controller" + "dashboard-report-controller" + ], + "summary": "Download test report (downloadTestReport)", + "description": "Generate and download test report.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "downloadTestReport", + "parameters": [ + { + "name": "reportsServerEndpointUrl", + "in": "query", + "description": "A string value representing the report server endpoint.", + "required": false, + "schema": { + "type": "string" + }, + "example": "http://localhost:8383" + } ], - "summary": "Find related edges (findEdgesByQuery)", - "description": "Returns all edges that are related to the specific entity. The entity id, relation type, edge types, depth of the search, and other query parameters defined using complex 'EdgeSearchQuery' object. See 'Model' tab of the Parameters for more info.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "findEdgesByQuery", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EdgeSearchQuery" + "$ref": "#/components/schemas/DashboardReportConfig" } } }, @@ -50251,12 +50821,22 @@ "200": { "description": "OK", "content": { - "application/json": { + "application/pdf": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Edge" - } + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/png": { + "schema": { + "type": "string", + "format": "binary" } } } @@ -50392,21 +50972,55 @@ ] } }, - "/api/edges/enabled": { - "get": { + "/api/report/{dashboardId}/download": { + "post": { "tags": [ - "edge-controller" + "dashboard-report-controller" ], - "summary": "Is edges support enabled (isEdgesSupportEnabled)", - "description": "Returns 'true' if edges support enabled on server, 'false' - otherwise.", - "operationId": "isEdgesSupportEnabled", + "summary": "Download dashboard report (downloadDashboardReport)", + "description": "Generate and download a report from the specified dashboard. The request payload is a JSON object with params of report. For example:\n\n```json\n{\n \"type\": \"pdf\",\n \"timezone\": \"Europe/Kiev\",\n \"timewindow\": {\n \"displayValue\": \"\",\n \"hideInterval\": false,\n \"hideLastInterval\": false,\n \"hideQuickInterval\": false,\n \"hideAggregation\": false,\n \"hideAggInterval\": false,\n \"hideTimezone\": false,\n \"selectedTab\": 0,\n \"realtime\": {\n \"realtimeType\": 0,\n \"interval\": 1000,\n \"timewindowMs\": 60000,\n \"quickInterval\": \"CURRENT_DAY\"\n },\n \"history\": {\n \"historyType\": 0,\n \"interval\": 1000,\n \"timewindowMs\": 60000,\n \"fixedTimewindow\": {\n \"startTimeMs\": 1703687976592,\n \"endTimeMs\": 1703774376592\n },\n \"quickInterval\": \"CURRENT_DAY\"\n },\n \"aggregation\": {\n \"type\": \"AVG\",\n \"limit\": 25000\n }\n },\n \"state\": null\n}\n```\n\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "downloadDashboardReport", + "parameters": [ + { + "name": "dashboardId", + "in": "path", + "description": "A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { - "application/json": { + "application/pdf": { "schema": { - "type": "boolean" + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/png": { + "schema": { + "type": "string", + "format": "binary" } } } @@ -50422,7 +51036,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -50542,25 +51156,22 @@ ] } }, - "/api/edges/list": { + "/api/device-connectivity/gateway-launch/{deviceId}/docker-compose/download": { "get": { "tags": [ - "edge-controller" + "device-connectivity-controller" ], - "summary": "Get Edges By Ids (getEdgeList)", - "description": "Requested edges must be owned by tenant or assigned to customer which user is performing the request.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getEdgeList", + "summary": "Download generated docker-compose.yml file for gateway (downloadGatewayDockerCompose)", + "description": "Download generated docker-compose.yml for gateway.", + "operationId": "downloadGatewayDockerCompose", "parameters": [ { - "name": "edgeIds", - "in": "query", - "description": "A list of edges ids, separated by comma ','", + "name": "deviceId", + "in": "path", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } } ], @@ -50568,12 +51179,10 @@ "200": { "description": "OK", "content": { - "application/json": { + "application/octet-stream": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Edge" - } + "type": "string", + "format": "binary" } } } @@ -50709,81 +51318,23 @@ ] } }, - "/api/entityGroup/{entityGroupId}/edges": { + "/api/device-connectivity/{deviceId}": { "get": { "tags": [ - "edge-controller" + "device-connectivity-controller" ], - "summary": "Get edges by Entity Group Id (getEdgesByEntityGroupId)", - "description": "Returns a page of Edge objects that belongs to specified Entity Group Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEdgesByEntityGroupId", + "summary": "Get commands to publish device telemetry (getDevicePublishTelemetryCommands)", + "description": "Fetch the list of commands to publish device telemetry based on device profile If the user has the authority of 'Tenant Administrator', the server checks that the device is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the device is assigned to the same customer. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getDevicePublishTelemetryCommands", "parameters": [ { - "name": "entityGroupId", + "name": "deviceId", "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the edge name.", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "label", - "customerTitle" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -50792,7 +51343,21 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEdge" + "$ref": "#/components/schemas/JsonNode" + }, + "examples": { + "http": { + "description": "http", + "value": "curl -v -X POST http://localhost:8080/api/v1/0ySs4FTOn5WU15XLmal8/telemetry --header Content-Type:application/json --data {temperature:25}" + }, + "mqtt": { + "description": "mqtt", + "value": "mosquitto_pub -d -q 1 -h localhost -t v1/devices/me/telemetry -i myClient1 -u myUsername1 -P myPassword -m {temperature:25}" + }, + "coap": { + "description": "coap", + "value": "coap-client -m POST coap://localhost:5683/api/v1/0ySs4FTOn5WU15XLmal8/telemetry -t json -e {temperature:25}" + } } } } @@ -50928,26 +51493,19 @@ ] } }, - "/api/license/activateInstance": { - "post": { + "/api/device-connectivity/{protocol}/certificate/download": { + "get": { "tags": [ - "edge-controller" + "device-connectivity-controller" ], - "summary": "Activate edge instance (activateInstance)", - "description": "Activates edge license on license portal.", - "operationId": "activateInstance", + "summary": "Download server certificate using file path defined in device.connectivity properties (downloadServerCertificate)", + "description": "Download server certificate.", + "operationId": "downloadServerCertificate", "parameters": [ { - "name": "licenseSecret", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "releaseDate", - "in": "query", + "name": "protocol", + "in": "path", + "description": "A string value representing the device connectivity protocol. Possible values: 'mqtt', 'mqtts', 'http', 'https', 'coap', 'coaps'", "required": true, "schema": { "type": "string" @@ -50958,9 +51516,10 @@ "200": { "description": "OK", "content": { - "application/json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "type": "string", + "format": "binary" } } } @@ -50976,7 +51535,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -51096,23 +51655,41 @@ ] } }, - "/api/license/checkInstance": { + "/api/customer/device/{deviceName}/claim": { "post": { "tags": [ - "edge-controller" + "device-controller" + ], + "summary": "Claim device (claimDevice)", + "description": "Claiming makes it possible to assign a device to the specific customer using device/server side claiming data (in the form of secret key).To make this happen you have to provide unique device name and optional claiming data (it is needed only for device-side claiming).Once device is claimed, the customer becomes its owner and customer users may access device data as well as control the device. \nIn order to enable claiming devices feature a system parameter security.claim.allowClaimingByDefault should be set to true, otherwise a server-side claimingAllowed attribute with the value true is obligatory for provisioned devices. \nSee official documentation for more details regarding claiming.\n\nAvailable for users with 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'CLAIM_DEVICES' permission for the entity (entities).", + "operationId": "claimDevice", + "parameters": [ + { + "name": "deviceName", + "in": "path", + "description": "Unique name of the device which is going to be claimed", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "subCustomerId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } ], - "summary": "Check edge license (checkInstance)", - "description": "Checks license request from edge service by forwarding request to license portal.", - "operationId": "checkInstance", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/ClaimRequest" } } - }, - "required": true + } }, "responses": { "200": { @@ -51120,7 +51697,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "type": "string" } } } @@ -51254,21 +51831,19 @@ "ApiKeyForm": [] } ] - } - }, - "/api/tenant/edge": { - "get": { + }, + "delete": { "tags": [ - "edge-controller" + "device-controller" ], - "summary": "Get Tenant Edge by name (getTenantEdgeByName)", - "description": "Requested edge must be owned by tenant or customer that the user belongs to. Edge name is an unique property of edge. So it can be used to identify the edge.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getTenantEdgeByName", + "summary": "Reclaim device (reClaimDevice)", + "description": "Reclaiming means the device will be unassigned from the customer and the device will be available for claiming again.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'CLAIM_DEVICES' permission for the entity (entities).", + "operationId": "reClaimDevice", "parameters": [ { - "name": "edgeName", - "in": "query", - "description": "Unique name of the edge", + "name": "deviceName", + "in": "path", + "description": "Unique name of the device which is going to be reclaimed", "required": true, "schema": { "type": "string" @@ -51281,7 +51856,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Edge" + "type": "string" } } } @@ -51417,15 +51992,24 @@ ] } }, - "/api/tenant/edges": { + "/api/customer/{customerId}/deviceInfos": { "get": { "tags": [ - "edge-controller" + "device-controller" ], - "summary": "Get Tenant Edges (getTenantEdges)", - "description": "Returns a page of edges owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getTenantEdges", + "summary": "Get Customer Device Infos (getCustomerDeviceInfos)", + "description": "Returns a page of device info objects owned by the specified customer. Device Info is an extension of the default Device object that contains information about the owner name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerDeviceInfos", "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "pageSize", "in": "query", @@ -51447,18 +52031,36 @@ } }, { - "name": "type", + "name": "includeCustomers", "in": "query", - "description": "A string value representing the edge type. For example, 'default'", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "deviceProfileId", + "in": "query", + "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": false, "schema": { "type": "string" } }, + { + "name": "active", + "in": "query", + "description": "A boolean value representing the device active flag.", + "required": false, + "schema": { + "type": "boolean" + } + }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the edge name.", + "description": "The case insensitive 'substring' filter based on the device name.", "required": false, "schema": { "type": "string" @@ -51474,7 +52076,7 @@ "enum": [ "createdTime", "name", - "type", + "deviceProfileName", "label", "customerTitle" ] @@ -51500,7 +52102,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEdge" + "$ref": "#/components/schemas/PageDataDeviceInfo" } } } @@ -51636,23 +52238,32 @@ ] } }, - "/api/user/edges": { + "/api/customer/{customerId}/devices": { "get": { "tags": [ - "edge-controller" + "device-controller" ], - "summary": "Get Edges (getUserEdges)", - "description": "Returns a page of edges available for current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getUserEdges", + "summary": "Get Customer Devices (getCustomerDevices)", + "description": "Returns a page of devices objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerDevices", "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "pageSize", "in": "query", "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string", - "minimum": 1 + "type": "integer", + "format": "int32" } }, { @@ -51661,14 +52272,14 @@ "description": "Sequence number of page starting from 0", "required": true, "schema": { - "type": "string", - "minimum": 0 + "type": "integer", + "format": "int32" } }, { "name": "type", "in": "query", - "description": "A string value representing the edge type. For example, 'default'", + "description": "Device type as the name of the device profile", "required": false, "schema": { "type": "string" @@ -51677,7 +52288,7 @@ { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the edge name.", + "description": "The case insensitive 'substring' filter based on the device name.", "required": false, "schema": { "type": "string" @@ -51693,7 +52304,7 @@ "enum": [ "createdTime", "name", - "type", + "deviceProfileName", "label", "customerTitle" ] @@ -51719,7 +52330,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEdge" + "$ref": "#/components/schemas/PageDataDevice" } } } @@ -51855,110 +52466,93 @@ ] } }, - "/api/edge/{edgeId}/events": { - "get": { + "/api/device": { + "post": { "tags": [ - "edge-event-controller" + "device-controller" ], - "summary": "Get Edge Events (getEdgeEvents)", - "description": "Returns a page of edge events for the requested edge. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. ", - "operationId": "getEdgeEvents", + "summary": "Create Or Update Device (saveDevice)", + "description": "Create or update the Device. When creating device, platform generates Device Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). Device credentials are also generated if not provided in the 'accessToken' request parameter. The newly created device id will be present in the response. Specify existing Device id to update the device. Referencing non-existing device Id will cause 'Not Found' error.\n\nDevice name is unique in the scope of tenant. Use unique identifiers like MAC or IMEI for the device names and non-unique 'label' field for user-friendly visualization purposes.Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Device entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "saveDevice", "parameters": [ { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", + "name": "accessToken", "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, + "description": "Optional value of the device credentials to be used during device creation. If omitted, access token will be auto-generated.", + "required": false, "schema": { - "type": "integer", - "format": "int32" + "type": "string" } }, { - "name": "textSearch", + "name": "entityGroupId", "in": "query", - "description": "The case insensitive 'substring' filter based on the edge event type name.", "required": false, "schema": { "type": "string" } }, { - "name": "sortProperty", + "name": "entityGroupIds", "in": "query", - "description": "Property of entity to sort by", + "description": "A list of entity group ids, separated by comma ','", "required": false, "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "label", - "customerTitle" - ] + "type": "array", + "items": { + "type": "string" + } } }, { - "name": "sortOrder", + "name": "nameConflictPolicy", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "Optional value of name conflict policy. Possible values: FAIL or UNIQUIFY. If omitted, FAIL policy is applied. FAIL policy implies exception will be thrown if an entity with the same name already exists. UNIQUIFY policy appends a suffix to the entity name, if a name conflict occurs.", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "$ref": "#/components/schemas/NameConflictPolicy", + "default": "FAIL" } }, { - "name": "startTime", + "name": "uniquifySeparator", "in": "query", - "description": "Timestamp. Edge events with creation time before it won't be queried", + "description": "Optional value of name suffix separator used by UNIQUIFY policy. By default, underscore separator is used. For example, strategy is UNIQUIFY, separator is '-'; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-7fsh4f'.", "required": false, "schema": { - "type": "integer", - "format": "int64" + "type": "string", + "default": "_" } }, { - "name": "endTime", + "name": "uniquifyStrategy", "in": "query", - "description": "Timestamp. Edge events with creation time after it won't be queried", + "description": "Optional value of uniquify strategy used by UNIQUIFY policy. Possible values: RANDOM or INCREMENTAL. By default, RANDOM strategy is used, which means random alphanumeric string will be added as a suffix to entity name. INCREMENTAL implies the first possible number starting from 1 will be added as a name suffix. For example, strategy is UNIQUIFY, uniquify strategy is INCREMENTAL; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-1.", "required": false, "schema": { - "type": "integer", - "format": "int64" + "$ref": "#/components/schemas/UniquifyStrategy", + "default": "RANDOM" } } ], + "requestBody": { + "description": "A JSON value representing the device.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Device" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEdgeEvent" + "$ref": "#/components/schemas/Device" } } } @@ -51974,7 +52568,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -52094,24 +52688,83 @@ ] } }, - "/api/entities/vc/branches": { - "get": { + "/api/device-with-credentials": { + "post": { "tags": [ - "entities-version-control-controller" + "device-controller" ], - "summary": "List branches (listBranches)", - "description": "Lists branches available in the remote repository. \n\nResponse example: \n```json\n[\n {\n \"name\": \"master\",\n \"default\": true\n },\n {\n \"name\": \"dev\",\n \"default\": false\n },\n {\n \"name\": \"dev-2\",\n \"default\": false\n }\n]\n```", - "operationId": "listBranches", + "summary": "Create Device (saveDevice) with credentials ", + "description": "Create or update the Device. When creating device, platform generates Device Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). Requires to provide the Device Credentials object as well as an existing device profile ID or use \"default\".\nYou may find the example of device with different type of credentials below: \n\n- Credentials type: **\"Access token\"** with **device profile ID** below: \n\n```json\n{\n \"device\": {\n \"name\":\"Name_DeviceWithCredantial_AccessToken\",\n \"label\":\"Label_DeviceWithCredantial_AccessToken\",\n \"deviceProfileId\":{\n \"id\":\"5636aba0-1022-11ee-9631-51fb57f69174\",\n \"entityType\":\"DEVICE_PROFILE\"\n }\n },\n \"credentials\": {\n \"credentialsType\": \"ACCESS_TOKEN\",\n \"credentialsId\": \"6hmxew8pmmzng4e3une2\"\n }\n}\n```\n\n- Credentials type: **\"Access token\"** with **device profile default** below: \n\n```json\n{\n \"device\": {\n \"name\":\"Name_DeviceWithCredantial_AccessToken_Default\",\n \"label\":\"Label_DeviceWithCredantial_AccessToken_Default\",\n \"type\": \"default\"\n },\n \"credentials\": {\n \"credentialsType\": \"ACCESS_TOKEN\",\n \"credentialsId\": \"6hmxew8pmmzng4e3une3\"\n }\n}\n```\n\n- Credentials type: **\"X509\"** with **device profile ID** below: \n\nNote: **credentialsId** - format **Sha3Hash**, **certificateValue** - format **PEM** (with \"--BEGIN CERTIFICATE----\" and -\"----END CERTIFICATE-\").\n\n```json\n{\n \"device\": {\n \"name\":\"Name_DeviceWithCredantial_X509_Certificate\",\n \"label\":\"Label_DeviceWithCredantial_X509_Certificate\",\n \"deviceProfileId\":{\n \"id\":\"9d9588c0-06c9-11ee-b618-19be30fdeb60\",\n \"entityType\":\"DEVICE_PROFILE\"\n }\n },\n \"credentials\": {\n \"credentialsType\": \"X509_CERTIFICATE\",\n \"credentialsId\": \"84f5911765abba1f96bf4165604e9e90338fc6214081a8e623b6ff9669aedb27\",\n \"credentialsValue\": \"-----BEGIN CERTIFICATE----- MIICMTCCAdegAwIBAgIUI9dBuwN6pTtK6uZ03rkiCwV4wEYwCgYIKoZIzj0EAwIwbjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMRowGAYDVQQKDBFUaGluZ3NCb2FyZCwgSW5jLjEwMC4GA1UEAwwnZGV2aWNlQ2VydGlmaWNhdGVAWDUwOVByb3Zpc2lvblN0cmF0ZWd5MB4XDTIzMDMyOTE0NTYxN1oXDTI0MDMyODE0NTYxN1owbjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMRowGAYDVQQKDBFUaGluZ3NCb2FyZCwgSW5jLjEwMC4GA1UEAwwnZGV2aWNlQ2VydGlmaWNhdGVAWDUwOVByb3Zpc2lvblN0cmF0ZWd5MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9Zo791qKQiGNBm11r4ZGxh+w+ossZL3xc46ufq5QckQHP7zkD2XDAcmP5GvdkM1sBFN9AWaCkQfNnWmfERsOOKNTMFEwHQYDVR0OBBYEFFFc5uyCyglQoZiKhzXzMcQ3BKORMB8GA1UdIwQYMBaAFFFc5uyCyglQoZiKhzXzMcQ3BKORMA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIhANbA9CuhoOifZMMmqkpuld+65CR+ItKdXeRAhLMZuccuAiB0FSQB34zMutXrZj1g8Gl5OkE7YryFHbei1z0SveHR8g== -----END CERTIFICATE-----\"\n }\n}\n```\n\n- Credentials type: **\"MQTT_BASIC\"** with **device profile ID** below: \n\n```json\n{\n \"device\": {\n \"name\":\"Name_DeviceWithCredantial_MQTT_Basic\",\n \"label\":\"Label_DeviceWithCredantial_MQTT_Basic\",\n \"deviceProfileId\":{\n \"id\":\"9d9588c0-06c9-11ee-b618-19be30fdeb60\",\n \"entityType\":\"DEVICE_PROFILE\"\n }\n },\n \"credentials\": {\n \"credentialsType\": \"MQTT_BASIC\",\n \"credentialsValue\": \"{\\\"clientId\\\":\\\"5euh5nzm34bjjh1efmlt\\\",\\\"userName\\\":\\\"onasd1lgwasmjl7v2v7h\\\",\\\"password\\\":\\\"b9xtm4ny8kt9zewaga5o\\\"}\"\n }\n}\n```\n\n- You may find the example of **LwM2M** device and **RPK** credentials below: \n\nNote: LwM2M device - only existing device profile ID (Transport configuration -> Transport type: \"LWM2M\".\n\n```json\n{\n \"device\": {\n \"name\":\"Name_LwRpk00000000\",\n \"label\":\"Label_LwRpk00000000\",\n \"deviceProfileId\":{\n \"id\":\"a660bd50-10ef-11ee-8737-b5634e73c779\",\n \"entityType\":\"DEVICE_PROFILE\"\n }\n },\n \"credentials\": {\n \"credentialsType\": \"LWM2M_CREDENTIALS\",\n \"credentialsId\": \"LwRpk00000000\",\n \"credentialsValue\":\n \"{\\\"client\\\":{ \\\"endpoint\\\":\\\"LwRpk00000000\\\", \\\"securityConfigClientMode\\\":\\\"RPK\\\", \\\"key\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUEBxNl/RcYJNm8mk91CyVXoIJiROYDlXcSSqK6e5bDHwOW4ZiN2lNnXalyF0Jxw8MbAytnDMERXyAja5VEMeVQ==\\\" }, \\\"bootstrap\\\":{ \\\"bootstrapServer\\\":{ \\\"securityMode\\\":\\\"RPK\\\", \\\"clientPublicKeyOrId\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUEBxNl/RcYJNm8mk91CyVXoIJiROYDlXcSSqK6e5bDHwOW4ZiN2lNnXalyF0Jxw8MbAytnDMERXyAja5VEMeVQ==\\\", \\\"clientSecretKey\\\":\\\"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgd9GAx7yZW37autew5KZykn4IgRpge/tZSjnudnZJnMahRANCAARQQHE2X9Fxgk2byaT3ULJVeggmJE5gOVdxJKorp7lsMfA5bhmI3aU2ddqXIXQnHDwxsDK2cMwRFfICNrlUQx5V\\\"}, \\\"lwm2mServer\\\":{ \\\"securityMode\\\":\\\"RPK\\\", \\\"clientPublicKeyOrId\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUEBxNl/RcYJNm8mk91CyVXoIJiROYDlXcSSqK6e5bDHwOW4ZiN2lNnXalyF0Jxw8MbAytnDMERXyAja5VEMeVQ==\\\", \\\"clientSecretKey\\\":\\\"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgd9GAx7yZW37autew5KZykn4IgRpge/tZSjnudnZJnMahRANCAARQQHE2X9Fxgk2byaT3ULJVeggmJE5gOVdxJKorp7lsMfA5bhmI3aU2ddqXIXQnHDwxsDK2cMwRFfICNrlUQx5V\\\"}} }\"\n }\n}\n```\n\nRemove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Device entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "saveDeviceWithCredentials", + "parameters": [ + { + "name": "entityGroupId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "entityGroupIds", + "in": "query", + "description": "A list of entity group ids, separated by comma ','", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "nameConflictPolicy", + "in": "query", + "description": "Optional value of name conflict policy. Possible values: FAIL or UNIQUIFY. If omitted, FAIL policy is applied. FAIL policy implies exception will be thrown if an entity with the same name already exists. UNIQUIFY policy appends a suffix to the entity name, if a name conflict occurs.", + "required": false, + "schema": { + "$ref": "#/components/schemas/NameConflictPolicy", + "default": "FAIL" + } + }, + { + "name": "uniquifySeparator", + "in": "query", + "description": "Optional value of name suffix separator used by UNIQUIFY policy. By default, underscore separator is used. For example, strategy is UNIQUIFY, separator is '-'; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-7fsh4f'.", + "required": false, + "schema": { + "type": "string", + "default": "_" + } + }, + { + "name": "uniquifyStrategy", + "in": "query", + "description": "Optional value of uniquify strategy used by UNIQUIFY policy. Possible values: RANDOM or INCREMENTAL. By default, RANDOM strategy is used, which means random alphanumeric string will be added as a suffix to entity name. INCREMENTAL implies the first possible number starting from 1 will be added as a name suffix. For example, strategy is UNIQUIFY, uniquify strategy is INCREMENTAL; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-1.", + "required": false, + "schema": { + "$ref": "#/components/schemas/UniquifyStrategy", + "default": "RANDOM" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SaveDeviceWithCredentialsRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BranchInfo" - } + "$ref": "#/components/schemas/Device" } } } @@ -52127,7 +52780,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -52247,51 +52900,31 @@ ] } }, - "/api/entities/vc/diff/{entityType}/{internalEntityUuid}": { - "get": { + "/api/device/bulk_import": { + "post": { "tags": [ - "entities-version-control-controller" + "device-controller" ], - "summary": "Compare entity data to version (compareEntityDataToVersion)", - "description": "Returns an object with current entity data and the one at a specific version. Entity data structure is the same as stored in a repository. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "compareEntityDataToVersion", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "$ref": "#/components/schemas/EntityType" - } - }, - { - "name": "internalEntityUuid", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Import the bulk of devices (processDevicesBulkImport)", + "description": "There's an ability to import the bulk of devices using the only .csv file. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "processDevicesBulkImport", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BulkImportRequest" + } } }, - { - "name": "versionId", - "in": "query", - "description": "Version id, for example fd82625bdd7d6131cf8027b44ee967012ecaf990. Represents commit hash.", - "required": true, - "schema": { - "type": "string" - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityDataDiff" + "$ref": "#/components/schemas/BulkImportResultDevice" } } } @@ -52307,7 +52940,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -52427,19 +53060,19 @@ ] } }, - "/api/entities/vc/entity": { + "/api/device/credentials": { "post": { "tags": [ - "entities-version-control-controller" + "device-controller" ], - "summary": "Load entities version (loadEntitiesVersion)", - "description": "Loads specific version of remote entities (or single entity) by request. Supported entity types: CUSTOMER, ASSET, RULE_CHAIN, DASHBOARD, DEVICE_PROFILE, DEVICE, ENTITY_VIEW, WIDGETS_BUNDLE, CONVERTER, INTEGRATION, ROLE and USER group.\n\nThere are multiple types of request. Each of them requires branch name (`branch`) and version id (`versionId`). Request of type `SINGLE_ENTITY` is needed to restore a concrete version of a specific entity. It contains id of a remote entity (`externalEntityId`), internal entity id (`internalEntityId`) and additional configuration (`config`):\n- `loadRelations` - to update relations list (in case `saveRelations` option was enabled during version creation);\n- `loadAttributes` - to load entity attributes (if `saveAttributes` config option was enabled);\n- `loadCredentials` - to update device credentials (if `saveCredentials` option was enabled during version creation);\n- `loadPermissions` - when loading user group, to update group permission list;\n- `loadGroupEntities` - when loading an entity group, to load its entities as well;\n- `autoGenerateIntegrationKey` - if loading integration version, to autogenerate routing key.\n\nAn example of such request:\n```json\n{\n \"type\": \"SINGLE_ENTITY\",\n \n \"branch\": \"dev\",\n \"versionId\": \"b3c28d722d328324c7c15b0b30047b0c40011cf7\",\n \n \"externalEntityId\": {\n \"entityType\": \"DEVICE\",\n \"id\": \"b7944123-d4f4-11ec-847b-0f432358ab48\"\n },\n \"config\": {\n \"loadRelations\": false,\n \"loadAttributes\": true,\n \"loadCredentials\": true\n }\n}\n```\n\nAnother request type (`ENTITY_TYPE`) is needed to load specific version of the whole entity types. It contains a structure with entity types to load and configs for each entity type (`entityTypes`). For each specified entity type, the method will load all remote entities of this type that are present at the version. A config for each entity type contains the same options as in `SINGLE_ENTITY` request type, and additionally contains following options:\n- `removeOtherEntities` - to remove local entities that are not present on the remote - basically to overwrite local entity type with the remote one;\n- `findExistingEntityByName` - when you are loading some remote entities that are not yet present at this tenant, try to find existing entity by name and update it rather than create new.\n\nHere is an example of the request to completely restore version of the whole device entity type:\n```json\n{\n \"type\": \"ENTITY_TYPE\",\n\n \"branch\": \"dev\",\n \"versionId\": \"b3c28d722d328324c7c15b0b30047b0c40011cf7\",\n\n \"entityTypes\": {\n \"DEVICE\": {\n \"removeOtherEntities\": true,\n \"findExistingEntityByName\": false,\n \"loadRelations\": true,\n \"loadAttributes\": true,\n \"loadCredentials\": true\n }\n }\n}\n```\n\nThe response will contain generated request UUID that is to be used to check the status of operation via `getVersionLoadRequestStatus`.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "loadEntitiesVersion", + "summary": "Update device credentials (updateDeviceCredentials)", + "description": "During device creation, platform generates random 'ACCESS_TOKEN' credentials.\nUse this method to update the device credentials. First use 'getDeviceCredentialsByDeviceId' to get the credentials id and value.\nThen use current method to update the credentials type and value. It is not possible to create multiple device credentials for the same device.\nThe structure of device credentials id and value is simple for the 'ACCESS_TOKEN' but is much more complex for the 'MQTT_BASIC' or 'LWM2M_CREDENTIALS'.\nYou may find the example of device with different type of credentials below: \n\n- Credentials type: **\"Access token\"** with **device ID** and with **device ID** below: \n\n```json\n{\n \"id\": {\n \"id\":\"c886a090-168d-11ee-87c9-6f157dbc816a\"\n },\n \"deviceId\": {\n \"id\":\"c5fb3ac0-168d-11ee-87c9-6f157dbc816a\",\n \"entityType\":\"DEVICE\"\n },\n \"credentialsType\": \"ACCESS_TOKEN\",\n \"credentialsId\": \"6hmxew8pmmzng4e3une4\"\n}\n```\n\n- Credentials type: **\"X509\"** with **device profile ID** below: \n\nNote: **credentialsId** - format **Sha3Hash**, **certificateValue** - format **PEM** (with \"--BEGIN CERTIFICATE----\" and -\"----END CERTIFICATE-\").\n\n```json\n{\n \"id\": {\n \"id\":\"309bd9c0-14f4-11ee-9fc9-d9b7463abb63\"\n },\n \"deviceId\": {\n \"id\":\"3092b200-14f4-11ee-9fc9-d9b7463abb63\",\n \"entityType\":\"DEVICE\"\n },\n \"credentialsType\": \"X509_CERTIFICATE\",\n \"credentialsId\": \"6b8adb49015500e51a527acd332b51684ab9b49b4ade03a9582a44c455e2e9b6\",\n \"credentialsValue\": \"-----BEGIN CERTIFICATE----- MIICMTCCAdegAwIBAgIUUEKxS9hTz4l+oLUMF0LV6TC/gCIwCgYIKoZIzj0EAwIwbjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMRowGAYDVQQKDBFUaGluZ3NCb2FyZCwgSW5jLjEwMC4GA1UEAwwnZGV2aWNlUHJvZmlsZUNlcnRAWDUwOVByb3Zpc2lvblN0cmF0ZWd5MB4XDTIzMDMyOTE0NTczNloXDTI0MDMyODE0NTczNlowbjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMRowGAYDVQQKDBFUaGluZ3NCb2FyZCwgSW5jLjEwMC4GA1UEAwwnZGV2aWNlUHJvZmlsZUNlcnRAWDUwOVByb3Zpc2lvblN0cmF0ZWd5MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECMlWO72krDoUL9FQjUmSCetkhaEGJUfQkdSfkLSNa0GyAEIMbfmzI4zITeapunu4rGet3EMyLydQzuQanBicp6NTMFEwHQYDVR0OBBYEFHpZ78tPnztNii4Da/yCw6mhEIL3MB8GA1UdIwQYMBaAFHpZ78tPnztNii4Da/yCw6mhEIL3MA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgJ7qyMFqNcwSYkH6o+UlQXzLWfwZbNjVk+aR7foAZNGsCIQDsd7v3WQIGHiArfZeDs1DLEDuV/2h6L+ZNoGNhEKL+1A== -----END CERTIFICATE-----\"\n}\n```\n\n- Credentials type: **\"MQTT_BASIC\"** with **device profile ID** below: \n\n```json\n{\n \"id\": {\n \"id\":\"d877ffb0-14f5-11ee-9fc9-d9b7463abb63\"\n },\n \"deviceId\": {\n \"id\":\"d875dcd0-14f5-11ee-9fc9-d9b7463abb63\",\n \"entityType\":\"DEVICE\"\n },\n \"credentialsType\": \"MQTT_BASIC\",\n \"credentialsValue\": \"{\\\"clientId\\\":\\\"juy03yv4owqxcmqhqtvk\\\",\\\"userName\\\":\\\"ov19fxca0cyjn7lm7w7u\\\",\\\"password\\\":\\\"twy94he114dfi9usyk1o\\\"}\"\n}\n```\n\n- You may find the example of **LwM2M** device and **RPK** credentials below: \n\nNote: LwM2M device - only existing device profile ID (Transport configuration -> Transport type: \"LWM2M\".\n\n```json\n{\n \"id\": {\n \"id\":\"e238d4d0-1689-11ee-98c6-1713c1be5a8e\"\n },\n \"deviceId\": {\n \"id\":\"e232e160-1689-11ee-98c6-1713c1be5a8e\",\n \"entityType\":\"DEVICE\"\n },\n \"credentialsType\": \"LWM2M_CREDENTIALS\",\n \"credentialsId\": \"LwRpk00000000\",\n \"credentialsValue\":\n \"{\\\"client\\\":{ \\\"endpoint\\\":\\\"LwRpk00000000\\\", \\\"securityConfigClientMode\\\":\\\"RPK\\\", \\\"key\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdvBZZ2vQRK9wgDhctj6B1c7bxR3Z0wYg1+YdoYFnVUKWb+rIfTTyYK9tmQJx5Vlb5fxdLnVv1RJOPiwsLIQbAA==\\\" }, \\\"bootstrap\\\":{ \\\"bootstrapServer\\\":{ \\\"securityMode\\\":\\\"RPK\\\", \\\"clientPublicKeyOrId\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUEBxNl/RcYJNm8mk91CyVXoIJiROYDlXcSSqK6e5bDHwOW4ZiN2lNnXalyF0Jxw8MbAytnDMERXyAja5VEMeVQ==\\\", \\\"clientSecretKey\\\":\\\"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgd9GAx7yZW37autew5KZykn4IgRpge/tZSjnudnZJnMahRANCAARQQHE2X9Fxgk2byaT3ULJVeggmJE5gOVdxJKorp7lsMfA5bhmI3aU2ddqXIXQnHDwxsDK2cMwRFfICNrlUQx5V\\\"}, \\\"lwm2mServer\\\":{ \\\"securityMode\\\":\\\"RPK\\\", \\\"clientPublicKeyOrId\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUEBxNl/RcYJNm8mk91CyVXoIJiROYDlXcSSqK6e5bDHwOW4ZiN2lNnXalyF0Jxw8MbAytnDMERXyAja5VEMeVQ==\\\", \\\"clientSecretKey\\\":\\\"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgd9GAx7yZW37autew5KZykn4IgRpge/tZSjnudnZJnMahRANCAARQQHE2X9Fxgk2byaT3ULJVeggmJE5gOVdxJKorp7lsMfA5bhmI3aU2ddqXIXQnHDwxsDK2cMwRFfICNrlUQx5V\\\"}} }\"\n}\n```\n\nUpdate to real value:\n - 'id' (this is id of Device Credentials -> \"Get Device Credentials (getDeviceCredentialsByDeviceId)\",\n - 'deviceId.id' (this is id of Device).\nRemove 'tenantId' and optionally 'customerId' from the request body example (below) to create new Device entity.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "updateDeviceCredentials", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/VersionLoadRequest" + "$ref": "#/components/schemas/DeviceCredentials" } } }, @@ -52451,8 +53084,7 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/DeviceCredentials" } } } @@ -52588,34 +53220,175 @@ ] } }, - "/api/entities/vc/entity/{entityType}/{versionId}": { + "/api/device/info/{deviceId}": { "get": { "tags": [ - "entities-version-control-controller" + "device-controller" ], - "summary": "List entities at version (listEntitiesAtVersion)", - "description": "Returns a list of remote entities of a specific entity type that are available at a concrete version. \nEach entity item in the result has `externalId` property. Entities order will be the same as in the repository.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "listEntitiesAtVersion", + "summary": "Get Device (getDeviceInfoById)", + "description": "Fetch the Device info object based on the provided Device Id. Device Info is an extension of the default Device object that contains information about the owner name. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getDeviceInfoById", "parameters": [ { - "name": "entityType", + "name": "deviceId", "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "$ref": "#/components/schemas/EntityType" + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceInfo" + } + } } }, - { - "name": "versionId", - "in": "path", - "description": "Version id, for example fd82625bdd7d6131cf8027b44ee967012ecaf990. Represents commit hash.", - "required": true, - "schema": { - "type": "string" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] } + ] + } + }, + "/api/device/types": { + "get": { + "tags": [ + "device-controller" ], + "summary": "Get Device Types (getDeviceTypes)", + "description": "Deprecated. See 'getDeviceProfileNames' API from Device Profile Controller instead.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getDeviceTypes", "responses": { "200": { "description": "OK", @@ -52624,7 +53397,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/VersionedEntityInfo" + "$ref": "#/components/schemas/EntitySubtype" } } } @@ -52751,6 +53524,7 @@ } } }, + "deprecated": true, "security": [ { "HttpLoginForm": [] @@ -52761,23 +53535,22 @@ ] } }, - "/api/entities/vc/entity/{requestId}/status": { + "/api/device/{deviceId}": { "get": { "tags": [ - "entities-version-control-controller" + "device-controller" ], - "summary": "Get version load request status (getVersionLoadRequestStatus)", - "description": "Returns the status of previously made version load request. The structure contains following parameters:\n- `done` - if the request was successfully processed;\n- `result` - a list of load results for each entity type:\n - `created` - created entities count;\n - `updated` - updated entities count;\n - `deleted` - removed entities count;\n - `groupsCreated` - created entity groups count;\n - `groupsUpdated` - updated entity groups count;\n - `groupsDeleted` - removed entity groups count.\n- `error` - if an error occurred during processing, error info:\n - `type` - error type;\n - `source` - an external id of remote entity;\n - `target` - if failed to find referenced entity by external id - this external id;\n - `message` - error message.\n\nAn example of successfully processed request status:\n```json\n{\n \"done\": true,\n \"result\": [\n {\n \"entityType\": \"DEVICE\",\n \"created\": 10,\n \"updated\": 5,\n \"deleted\": 5,\n \"groupsCreated\": 1,\n \"groupsUpdated\": 1,\n \"groupsDeleted\": 1\n },\n {\n \"entityType\": \"ASSET\",\n \"created\": 4,\n \"updated\": 0,\n \"deleted\": 8,\n \"groupsCreated\": 1,\n \"groupsUpdated\": 0,\n \"groupsDeleted\": 2\n }\n ]\n}\n```\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getVersionLoadRequestStatus", + "summary": "Get Device (getDeviceById)", + "description": "Fetch the Device object based on the provided Device Id. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getDeviceById", "parameters": [ { - "name": "requestId", + "name": "deviceId", "in": "path", - "description": "A string value representing the version control request id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -52787,7 +53560,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/VersionLoadResult" + "$ref": "#/components/schemas/Device" } } } @@ -52921,21 +53694,19 @@ "ApiKeyForm": [] } ] - } - }, - "/api/entities/vc/entity/{versionId}": { - "get": { + }, + "delete": { "tags": [ - "entities-version-control-controller" + "device-controller" ], - "summary": "List all entities at version (listAllEntitiesAtVersion)", - "description": "Returns a list of all remote entities available in a specific version. Response type is the same as for listAllEntitiesAtVersion API method. \nReturned entities order will be the same as in the repository.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "listAllEntitiesAtVersion", + "summary": "Delete device (deleteDevice)", + "description": "Deletes the device, it's credentials and all the relations (from and to the device). Referencing non-existing device Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", + "operationId": "deleteDevice", "parameters": [ { - "name": "versionId", + "name": "deviceId", "in": "path", - "description": "Version id, for example fd82625bdd7d6131cf8027b44ee967012ecaf990. Represents commit hash.", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -52944,17 +53715,7 @@ ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/VersionedEntityInfo" - } - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -53087,52 +53848,23 @@ ] } }, - "/api/entities/vc/info/{versionId}/{entityType}/{externalEntityUuid}": { + "/api/device/{deviceId}/credentials": { "get": { "tags": [ - "entities-version-control-controller" + "device-controller" ], - "summary": "Get entity data info (getEntityDataInfo)", - "description": "Retrieves short info about the remote entity by external id at a concrete version. \nReturned entity data info contains following properties: `hasRelations` (whether stored entity data contains relations), `hasAttributes` (contains attributes), `hasCredentials` (whether stored device data has credentials), `hasPermissions` (user group data contains group permission list) and `hasGroupEntities` (entity group data contains group entities).\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getEntityDataInfo", + "summary": "Get Device Credentials (getDeviceCredentialsByDeviceId)", + "description": "If during device creation there wasn't specified any credentials, platform generates random 'ACCESS_TOKEN' credentials.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ_CREDENTIALS' permission for the entity (entities).", + "operationId": "getDeviceCredentialsByDeviceId", "parameters": [ { - "name": "versionId", + "name": "deviceId", "in": "path", - "description": "Version id, for example fd82625bdd7d6131cf8027b44ee967012ecaf990. Represents commit hash.", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - }, - { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "$ref": "#/components/schemas/EntityType" - } - }, - { - "name": "externalEntityUuid", - "in": "path", - "description": "A string value representing external entity id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "internalEntityId", - "in": "query", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { @@ -53141,7 +53873,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityDataInfo" + "$ref": "#/components/schemas/DeviceCredentials" } } } @@ -53277,24 +54009,15 @@ ] } }, - "/api/entities/vc/version": { + "/api/deviceInfos/all": { "get": { "tags": [ - "entities-version-control-controller" + "device-controller" ], - "summary": "List all versions (listVersions)", - "description": "Lists all available versions in a branch for all entity types. \nIf specified branch does not exist - empty page data will be returned. The response format is the same as for `listEntityVersions` API method.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "listVersions", + "summary": "Get All Device Infos for current user (getAllDeviceInfos)", + "description": "Returns a page of device info objects owned by the tenant or the customer of a current user. Device Info is an extension of the default Device object that contains information about the owner name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAllDeviceInfos", "parameters": [ - { - "name": "branch", - "in": "query", - "description": "The name of the working branch, for example 'master'", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "pageSize", "in": "query", @@ -53315,10 +54038,37 @@ "format": "int32" } }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "deviceProfileId", + "in": "query", + "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "active", + "in": "query", + "description": "A boolean value representing the device active flag.", + "required": false, + "schema": { + "type": "boolean" + } + }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the entity version name.", + "description": "The case insensitive 'substring' filter based on the device name.", "required": false, "schema": { "type": "string" @@ -53332,7 +54082,11 @@ "schema": { "type": "string", "enum": [ - "timestamp" + "createdTime", + "name", + "deviceProfileName", + "label", + "customerTitle" ] } }, @@ -53356,7 +54110,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityVersion" + "$ref": "#/components/schemas/PageDataDeviceInfo" } } } @@ -53490,32 +54244,40 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/devices": { + "get": { "tags": [ - "entities-version-control-controller" + "device-controller" ], - "summary": "Save entities version (saveEntitiesVersion)", - "description": "Creates a new version of entities (or a single entity) by request.\nSupported entity types: CUSTOMER, ASSET, RULE_CHAIN, DASHBOARD, DEVICE_PROFILE, DEVICE, ENTITY_VIEW, WIDGETS_BUNDLE, CONVERTER, INTEGRATION, ROLE and USER group.\n\nThere are two available types of request: `SINGLE_ENTITY` and `COMPLEX`. Each of them contains version name (`versionName`) and name of a branch (`branch`) to create version (commit) in. If specified branch does not exists in a remote repo, then new empty branch will be created. Request of the `SINGLE_ENTITY` type has id of an entity (`entityId`) and additional configuration (`config`) which has following options: \n- `saveRelations` - whether to add inbound and outbound relations of type COMMON to created entity version;\n- `saveAttributes` - to save attributes of server scope (and also shared scope for devices);\n- `saveCredentials` - when saving a version of a device, to add its credentials to the version;\n- `savePermissions` - when saving a user group - to save group permission list;\n- `saveGroupEntities` - when saving an entity group - to save its entities as well.\n\nAn example of a `SINGLE_ENTITY` version create request:\n```json\n{\n \"type\": \"SINGLE_ENTITY\",\n\n \"versionName\": \"Version 1.0\",\n \"branch\": \"dev\",\n\n \"entityId\": {\n \"entityType\": \"DEVICE\",\n \"id\": \"b79448e0-d4f4-11ec-847b-0f432358ab48\"\n },\n \"config\": {\n \"saveRelations\": true,\n \"saveAttributes\": true,\n \"saveCredentials\": false\n }\n}\n```\n\nSecond request type (`COMPLEX`), additionally to `branch` and `versionName`, contains following properties:\n- `entityTypes` - a structure with entity types to export and configuration for each entity type; this configuration has all the options available for `SINGLE_ENTITY` and additionally has these ones: \n - `allEntities` and `entityIds` - if you want to save the version of all entities of the entity type then set `allEntities` param to true, otherwise set it to false and specify `entityIds` - in case entity type is group entity, list of specific entity groups, or if not - list of entities;\n - `syncStrategy` - synchronization strategy to use for this entity type: when set to `OVERWRITE` then the list of remote entities of this type will be overwritten by newly added entities. If set to `MERGE` - existing remote entities of this entity type will not be removed, new entities will just be added on top (or existing remote entities will be updated).\n- `syncStrategy` - default synchronization strategy to use when it is not specified for an entity type.\n\nExample for this type of request:\n```json\n{\n \"type\": \"COMPLEX\",\n\n \"versionName\": \"Devices and profiles: release 2\",\n \"branch\": \"master\",\n\n \"syncStrategy\": \"OVERWRITE\",\n \"entityTypes\": {\n \"DEVICE\": {\n \"syncStrategy\": null,\n \"allEntities\": true,\n \"saveRelations\": true,\n \"saveAttributes\": true,\n \"saveCredentials\": true\n },\n \"DEVICE_PROFILE\": {\n \"syncStrategy\": \"MERGE\",\n \"allEntities\": false,\n \"entityIds\": [\n \"b79448e0-d4f4-11ec-847b-0f432358ab48\"\n ],\n \"saveRelations\": true\n }\n }\n}\n```\n\nResponse wil contain generated request UUID, that can be then used to retrieve status of operation via `getVersionCreateRequestStatus`.\n\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "saveEntitiesVersion", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VersionCreateRequest" + "summary": "Get Devices By Ids (getDevicesByIds)", + "description": "Requested devices must be owned by tenant or assigned to customer which user is performing the request. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getDevicesByIds", + "parameters": [ + { + "name": "deviceIds", + "in": "query", + "description": "A list of devices ids, separated by comma ','", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" } } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "uuid" + "type": "array", + "items": { + "$ref": "#/components/schemas/Device" + } } } } @@ -53531,7 +54293,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -53649,97 +54411,34 @@ "ApiKeyForm": [] } ] - } - }, - "/api/entities/vc/version/{entityType}": { - "get": { + }, + "post": { "tags": [ - "entities-version-control-controller" + "device-controller" ], - "summary": "List entity type versions (listEntityTypeVersions)", - "description": "Returns list of versions of an entity type in a branch. This is a collected list of versions that were created for entities of this type in a remote branch. \nIf specified branch does not exist - empty page data will be returned. The response structure is the same as for `listEntityVersions` API method.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "listEntityTypeVersions", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "$ref": "#/components/schemas/EntityType" - } - }, - { - "name": "branch", - "in": "query", - "description": "The name of the working branch, for example 'master'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the entity version name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "timestamp" - ] + "summary": "Find related devices (findDevicesByQuery)", + "description": "Returns all devices that are related to the specific entity. The entity id, relation type, device types, depth of the search, and other query parameters defined using complex 'DeviceSearchQuery' object. See 'Model' tab of the Parameters for more info.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "findDevicesByQuery", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceSearchQuery" + } } }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityVersion" + "type": "array", + "items": { + "$ref": "#/components/schemas/Device" + } } } } @@ -53755,7 +54454,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -53875,104 +54574,35 @@ ] } }, - "/api/entities/vc/version/{entityType}/{externalEntityUuid}": { + "/api/devices/count/{otaPackageType}/{deviceProfileId}": { "get": { "tags": [ - "entities-version-control-controller" + "device-controller" ], - "summary": "List entity versions (listEntityVersions)", - "description": "Returns list of versions for a specific entity in a concrete branch. \nYou need to specify external id of an entity to list versions for. This is `externalId` property of an entity, or otherwise if not set - simply id of this entity. \nIf specified branch does not exist - empty page data will be returned. \n\nEach version info item has timestamp, id, name and author. Version id can then be used to restore the version. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nResponse example: \n```json\n{\n \"data\": [\n {\n \"timestamp\": 1655198593000,\n \"id\": \"fd82625bdd7d6131cf8027b44ee967012ecaf990\",\n \"name\": \"Devices and assets - v2.0\",\n \"author\": \"John Doe (johndoe@gmail.com)\"\n },\n {\n \"timestamp\": 1655198528000,\n \"id\": \"682adcffa9c8a2f863af6f00c4850323acbd4219\",\n \"name\": \"Update my device\",\n \"author\": \"John Doe (johndoe@gmail.com)\"\n },\n {\n \"timestamp\": 1655198280000,\n \"id\": \"d2a6087c2b30e18cc55e7cdda345a8d0dfb959a4\",\n \"name\": \"Devices and assets - v1.0\",\n \"author\": \"John Doe (johndoe@gmail.com)\"\n }\n ],\n \"totalPages\": 1,\n \"totalElements\": 3,\n \"hasNext\": false\n}\n```\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "listEntityVersions", + "summary": "Count devices by device profile (countByDeviceProfileAndEmptyOtaPackage)", + "description": "The platform gives an ability to load OTA (over-the-air) packages to devices. It can be done in two different ways: device scope or device profile scope.In the response you will find the number of devices with specified device profile, but without previously defined device scope OTA package. It can be useful when you want to define number of devices that will be affected with future OTA package\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "countByDeviceProfileAndEmptyOtaPackage", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "$ref": "#/components/schemas/EntityType" - } - }, - { - "name": "externalEntityUuid", + "name": "otaPackageType", "in": "path", - "description": "A string value representing external entity id. This is `externalId` property of an entity, or otherwise if not set - simply id of this entity.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "branch", - "in": "query", - "description": "The name of the working branch, for example 'master'", + "description": "OTA package type", "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "internalEntityId", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the entity version name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, "schema": { "type": "string", "enum": [ - "timestamp" + "FIRMWARE", + "SOFTWARE" ] } }, { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, + "name": "deviceProfileId", + "in": "path", + "description": "Device Profile Id. I.g. '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "string" } } ], @@ -53982,7 +54612,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityVersion" + "type": "integer", + "format": "int64" } } } @@ -54118,23 +54749,42 @@ ] } }, - "/api/entities/vc/version/{requestId}/status": { + "/api/devices/count/{otaPackageType}/{otaPackageId}/{entityGroupId}": { "get": { "tags": [ - "entities-version-control-controller" + "device-controller" ], - "summary": "Get version create request status (getVersionCreateRequestStatus)", - "description": "Returns the status of previously made version create request. \n\nThis status contains following properties:\n- `done` - whether request processing is finished;\n- `version` - created version info: timestamp, version id (commit hash), commit name and commit author;\n- `added` - count of items that were created in the remote repo;\n- `modified` - modified items count;\n- `removed` - removed items count;\n- `error` - error message, if an error occurred while handling the request.\n\nAn example of successful status:\n```json\n{\n \"done\": true,\n \"added\": 10,\n \"modified\": 2,\n \"removed\": 5,\n \"version\": {\n \"timestamp\": 1655198528000,\n \"id\":\"8a834dd389ed80e0759ba8ee338b3f1fd160a114\",\n \"name\": \"My devices v2.0\",\n \"author\": \"John Doe\"\n },\n \"error\": null\n}\n```\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getVersionCreateRequestStatus", + "summary": "Count devices by device profile (countByDeviceProfileAndEmptyOtaPackage)", + "description": "The platform gives an ability to load OTA (over-the-air) packages to devices. It can be done in two different ways: device scope or device profile scope.In the response you will find the number of devices with specified device profile, but without previously defined device scope OTA package. It can be useful when you want to define number of devices that will be affected with future OTA package\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "countByDeviceGroupAndEmptyOtaPackage", "parameters": [ { - "name": "requestId", + "name": "otaPackageType", "in": "path", - "description": "A string value representing the version control request id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "OTA package type", "required": true, "schema": { "type": "string", - "format": "uuid" + "enum": [ + "FIRMWARE", + "SOFTWARE" + ] + } + }, + { + "name": "otaPackageId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityGroupId", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], @@ -54144,7 +54794,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/VersionCreationResult" + "type": "integer", + "format": "int64" } } } @@ -54280,37 +54931,79 @@ ] } }, - "/api/allEntityGroups/edge/{edgeId}/{groupType}": { + "/api/entityGroup/{entityGroupId}/devices": { "get": { "tags": [ - "entity-group-controller" + "device-controller" ], - "summary": "Get All Edge Entity Groups by entity type (getAllEdgeEntityGroups)", - "description": "Fetch the list of Entity Group Info objects based on the provided Entity Type and assigned to the provided Edge entity. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAllEdgeEntityGroups", + "summary": "Get devices by Entity Group Id (getDevicesByEntityGroupId)", + "description": "Returns a page of Device objects that belongs to specified Entity Group Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getDevicesByEntityGroupId", "parameters": [ { - "name": "edgeId", + "name": "entityGroupId", "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "groupType", - "in": "path", - "description": "EntityGroup type", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the device name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, "schema": { "type": "string", "enum": [ - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD" + "createdTime", + "name", + "deviceProfileName", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" ] } } @@ -54321,10 +55014,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityGroupInfo" - } + "$ref": "#/components/schemas/PageDataDevice" } } } @@ -54460,44 +55150,19 @@ ] } }, - "/api/edge/{edgeId}/entityGroup/{entityGroupId}/{groupType}": { - "post": { + "/api/tenant/device": { + "get": { "tags": [ - "entity-group-controller" + "device-controller" ], - "summary": "Assign entity group to edge (assignEntityGroupToEdge)", - "description": "Creates assignment of an existing entity group to an instance of The Edge. Assignment works in async way - first, notification event pushed to edge service queue on platform. Second, remote edge service will receive a copy of assignment entity group (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once entity group will be delivered to edge service, edge will request entities of this group to be send to edge. Once entities will be delivered to edge service, they are going to be available for usage on remote edge instance.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "assignEntityGroupToEdge", + "summary": "Get Tenant Device (getTenantDevice)", + "description": "Requested device must be owned by tenant that the user belongs to. Device name is an unique property of device. So it can be used to identify the device.\n\nAvailable for users with 'TENANT_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getTenantDeviceByName", "parameters": [ { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "groupType", - "in": "path", - "description": "EntityGroup type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD" - ] - } - }, - { - "name": "entityGroupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "deviceName", + "in": "query", + "description": "A string value representing the Device name.", "required": true, "schema": { "type": "string" @@ -54510,7 +55175,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityGroup" + "$ref": "#/components/schemas/Device" } } } @@ -54526,7 +55191,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -54644,47 +55309,82 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/tenant/devices": { + "get": { "tags": [ - "entity-group-controller" + "device-controller" ], - "summary": "Unassign entity group from edge (unassignEntityGroupFromEdge)", - "description": "Clears assignment of the entity group to the edge. Unassignment works in async way - first, 'unassign' notification event pushed to edge queue on platform. Second, remote edge service will receive an 'unassign' command to remove entity group (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once 'unassign' command will be delivered to edge service, it's going to remove entity group and entities inside this group locally.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "unassignEntityGroupFromEdge", + "summary": "Get Tenant Devices (getTenantDevices)", + "description": "Returns a page of devices owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getTenantDevices", "parameters": [ { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int32" } }, { - "name": "groupType", - "in": "path", - "description": "EntityGroup type", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "type", + "in": "query", + "description": "Device type as the name of the device profile", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the device name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, "schema": { "type": "string", "enum": [ - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD" + "createdTime", + "name", + "deviceProfileName", + "label", + "customerTitle" ] } }, { - "name": "entityGroupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, "schema": { - "type": "string" + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -54694,7 +55394,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityGroup" + "$ref": "#/components/schemas/PageDataDevice" } } } @@ -54830,31 +55530,41 @@ ] } }, - "/api/entityGroup": { + "/api/tenant/{tenantId}/device/{deviceId}": { "post": { "tags": [ - "entity-group-controller" + "device-controller" ], - "summary": "Create Or Update Entity Group (saveEntityGroup)", - "description": "Create or update the Entity Group. When creating Entity Group, platform generates Entity Group Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Entity Group Id will be present in the response. Specify existing Entity Group Id to update the group. Referencing non-existing Entity Group Id will cause 'Not Found' error.Remove 'id', 'tenantId' and optionally 'ownerId' from the request body example (below) to create new Entity Group entity. When 'ownerId' is not set (or null), it defaults to the current user's owner (Tenant for tenant admins, Customer for customer users). \n\nEntity group name is unique in the scope of owner and entity type. For example, you can't create two tenant device groups called 'Water meters'. However, you may create device and asset group with the same name. And also you may create groups with the same name for two different customers of the same tenant. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", - "operationId": "saveEntityGroup", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityGroup" - } + "summary": "Assign device to tenant (assignDeviceToTenant)", + "description": "Creates assignment of the device to tenant. Thereafter tenant will be able to reassign the device to a customer.\n\nAvailable for users with 'TENANT_ADMIN' authority. Security check is performed to verify that the user has 'ASSIGN_TO_TENANT' permission for the entity (entities).", + "operationId": "assignDeviceToTenant", + "parameters": [ + { + "name": "tenantId", + "in": "path", + "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "deviceId", + "in": "path", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityGroupInfo" + "$ref": "#/components/schemas/Device" } } } @@ -54990,53 +55700,79 @@ ] } }, - "/api/entityGroup/all/{ownerType}/{ownerId}/{groupType}": { + "/api/user/devices": { "get": { "tags": [ - "entity-group-controller" + "device-controller" ], - "summary": "Get special group All by owner and entity type (getEntityGroupsByOwnerAndType)", - "description": "Fetch reserved group 'All' based on the provided Owner Id and Entity Type. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityGroupAllByOwnerAndType", + "summary": "Get Devices (getUserDevices)", + "description": "Returns a page of devices that are available for the current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getUserDevices", "parameters": [ { - "name": "ownerType", - "in": "path", - "description": "Tenant or Customer", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { "type": "string", - "enum": [ - "TENANT", - "CUSTOMER" - ] + "minimum": 1 } }, { - "name": "ownerId", - "in": "path", - "description": "A string value representing the Tenant or Customer id", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "type", + "in": "query", + "description": "Device type as the name of the device profile", + "required": false, "schema": { "type": "string" - }, - "example": "784f394c-42b6-435a-983c-b7beff2784f9" + } }, { - "name": "groupType", - "in": "path", - "description": "Entity Group type", - "required": true, + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the device name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, "schema": { "type": "string", "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" + "createdTime", + "name", + "deviceProfileName", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" ] } } @@ -55047,7 +55783,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityGroupInfo" + "$ref": "#/components/schemas/PageDataDevice" } } } @@ -55183,32 +55919,30 @@ ] } }, - "/api/entityGroup/{entityGroupId}": { - "get": { + "/api/deviceGroupOtaPackage": { + "post": { "tags": [ - "entity-group-controller" + "device-group-ota-package-controller" ], - "summary": "Get Entity Group Info (getEntityGroupById)", - "description": "Fetch the Entity Group object based on the provided Entity Group Id. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nEntity group name is unique in the scope of owner and entity type. For example, you can't create two tenant device groups called 'Water meters'. However, you may create device and asset group with the same name. And also you may create groups with the same name for two different customers of the same tenant. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityGroupById", - "parameters": [ - { - "name": "entityGroupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "saveDeviceGroupOtaPackage", + "operationId": "saveDeviceGroupOtaPackage", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceGroupOtaPackage" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityGroupInfo" + "$ref": "#/components/schemas/DeviceGroupOtaPackage" } } } @@ -55224,7 +55958,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -55342,19 +56076,27 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/deviceGroupOtaPackage/{groupId}/{firmwareType}": { + "get": { "tags": [ - "entity-group-controller" + "device-group-ota-package-controller" ], - "summary": "Delete Entity Group (deleteEntityGroup)", - "description": "Deletes the entity group but does not delete the entities in the group, since they are also present in reserved group 'All'. Referencing non-existing Entity Group Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'DELETE' permission for specified group.", - "operationId": "deleteEntityGroup", + "summary": "getFirmwareById", + "operationId": "getFirmwareById", "parameters": [ { - "name": "entityGroupId", + "name": "groupId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "firmwareType", "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -55363,7 +56105,14 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceGroupOtaPackage" + } + } + } }, "400": { "description": "Bad Request", @@ -55496,39 +56245,23 @@ ] } }, - "/api/entityGroup/{entityGroupId}/addEntities": { - "post": { + "/api/deviceGroupOtaPackage/{id}": { + "delete": { "tags": [ - "entity-group-controller" + "device-group-ota-package-controller" ], - "summary": "Add entities to the group (addEntitiesToEntityGroup)", - "description": "Add entities to the specified entity group. This operation is idempotent: entities that are already members of the group are silently ignored. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'ADD_TO_GROUP' permission for specified group.", - "operationId": "addEntitiesToEntityGroup", + "summary": "deleteDeviceGroupOtaPackage", + "operationId": "deleteDeviceGroupOtaPackage", "parameters": [ { - "name": "entityGroupId", + "name": "id", "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "array", - "description": "A list of entity ids", - "items": { - "type": "string" - } - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK" @@ -55544,7 +56277,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -55664,34 +56397,19 @@ ] } }, - "/api/entityGroup/{entityGroupId}/deleteEntities": { + "/api/deviceProfile": { "post": { "tags": [ - "entity-group-controller" - ], - "summary": "Remove entities from the group (removeEntitiesFromEntityGroup)", - "description": "Removes entities from the specified entity group. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'REMOVE_FROM_GROUP' permission for specified group.", - "operationId": "removeEntitiesFromEntityGroup", - "parameters": [ - { - "name": "entityGroupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - } + "device-profile-controller" ], + "summary": "Create Or Update Device Profile (saveDeviceProfile)", + "description": "Create or update the Device Profile. When creating device profile, platform generates device profile id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created device profile id will be present in the response. Specify existing device profile id to update the device profile. Referencing non-existing device profile Id will cause 'Not Found' error. \n\nDevice profile name is unique in the scope of tenant. Only one 'default' device profile may exist in scope of tenant.\n\n# Device profile data definition\n\nDevice profile data object contains device provision strategy and transport type configuration for device connectivity. Let's review some examples. First one is the default device profile data configuration and second one - the custom one. \n\n```json\n{\n \"configuration\":{\n \"type\":\"DEFAULT\"\n },\n \"provisionConfiguration\":{\n \"type\":\"DISABLED\",\n \"provisionDeviceSecret\":null\n },\n \"transportConfiguration\":{\n \"type\":\"DEFAULT\"\n }\n}\n```\n\n```json\n{\n \"configuration\":{\n \"type\":\"DEFAULT\"\n },\n \"provisionConfiguration\":{\n \"type\":\"ALLOW_CREATE_NEW_DEVICES\",\n \"provisionDeviceSecret\":\"vaxb9hzqdbz3oqukvomg\"\n },\n \"transportConfiguration\":{\n \"type\":\"MQTT\",\n \"deviceTelemetryTopic\":\"v1/devices/me/telemetry\",\n \"deviceAttributesTopic\":\"v1/devices/me/attributes\",\n \"transportPayloadTypeConfiguration\":{\n \"transportPayloadType\":\"PROTOBUF\",\n \"deviceTelemetryProtoSchema\":\"syntax =\\\"proto3\\\";\\npackage telemetry;\\n\\nmessage SensorDataReading {\\n\\n optional double temperature = 1;\\n optional double humidity = 2;\\n InnerObject innerObject = 3;\\n\\n message InnerObject {\\n optional string key1 = 1;\\n optional bool key2 = 2;\\n optional double key3 = 3;\\n optional int32 key4 = 4;\\n optional string key5 = 5;\\n }\\n}\",\n \"deviceAttributesProtoSchema\":\"syntax =\\\"proto3\\\";\\npackage attributes;\\n\\nmessage SensorConfiguration {\\n optional string firmwareVersion = 1;\\n optional string serialNumber = 2;\\n}\",\n \"deviceRpcRequestProtoSchema\":\"syntax =\\\"proto3\\\";\\npackage rpc;\\n\\nmessage RpcRequestMsg {\\n optional string method = 1;\\n optional int32 requestId = 2;\\n optional string params = 3;\\n}\",\n \"deviceRpcResponseProtoSchema\":\"syntax =\\\"proto3\\\";\\npackage rpc;\\n\\nmessage RpcResponseMsg {\\n optional string payload = 1;\\n}\"\n }\n }\n}\n```\n\nLet's review some specific objects examples related to the device profile configuration:# Provision Configuration\n\nThere are 3 types of device provision configuration for the device profile: \n * 'DISABLED';\n * 'ALLOW_CREATE_NEW_DEVICES';\n * 'CHECK_PRE_PROVISIONED_DEVICES'.\n\nPlease refer to the [docs](https://thingsboard.io/docs/user-guide/device-provisioning/) for more details.\n\n# Transport Configuration\n\n5 transport configuration types are available:\n * 'DEFAULT';\n * 'MQTT';\n * 'LWM2M';\n * 'COAP';\n * 'SNMP'.\n\nDefault type supports basic MQTT, HTTP, CoAP and LwM2M transports. Please refer to the [docs](https://thingsboard.io/docs/user-guide/device-profiles/#transport-configuration) for more details about other types.\n\nSee another example of COAP transport configuration below:\n\n```json\n{\n \"type\":\"COAP\",\n \"clientSettings\":{\n \"edrxCycle\":null,\n \"powerMode\":\"DRX\",\n \"psmActivityTimer\":null,\n \"pagingTransmissionWindow\":null\n },\n \"coapDeviceTypeConfiguration\":{\n \"coapDeviceType\":\"DEFAULT\",\n \"transportPayloadTypeConfiguration\":{\n \"transportPayloadType\":\"JSON\"\n }\n }\n}\n```Remove 'id', 'tenantId' from the request body example (below) to create new Device Profile entity. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveDeviceProfile", "requestBody": { "content": { "application/json": { "schema": { - "type": "array", - "description": "A list of entity ids", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/DeviceProfile" } } }, @@ -55699,7 +56417,14 @@ }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceProfile" + } + } + } }, "400": { "description": "Bad Request", @@ -55832,74 +56557,23 @@ ] } }, - "/api/entityGroup/{entityGroupId}/entities": { + "/api/deviceProfile/devices/keys/attributes": { "get": { "tags": [ - "entity-group-controller" + "device-profile-controller" ], - "summary": "Get Group Entities (getEntities)", - "description": "Returns a page of Short Entity View objects that belongs to specified Entity Group Id. Short Entity View object contains the entity id and number of fields (attributes, telemetry, etc). List of those fields is configurable and defined in the group configuration.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntities", + "summary": "Get attribute keys (getAttributesKeys)", + "description": "Get a set of unique attribute keys used by devices that belong to specified profile. If profile is not set returns a list of unique keys among all profiles. The call is used for auto-complete in the UI forms. The implementation limits the number of devices that participate in search to 100 as a trade of between accurate results and time-consuming queries. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAttributesKeys", "parameters": [ { - "name": "entityGroupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the entity group name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", + "name": "deviceProfileId", "in": "query", - "description": "Property of entity to sort by", + "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": false, "schema": { "type": "string" } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -55908,7 +56582,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataShortEntityView" + "type": "array", + "items": { + "type": "string" + } } } } @@ -56044,20 +56721,20 @@ ] } }, - "/api/entityGroup/{entityGroupId}/makePrivate": { - "post": { + "/api/deviceProfile/devices/keys/timeseries": { + "get": { "tags": [ - "entity-group-controller" + "device-profile-controller" ], - "summary": "Make Entity Group Private (makeEntityGroupPrivate)", - "description": "Make the entity group not available for non authorized users. Every group is private by default. This call is useful to hide the group that was previously made public.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", - "operationId": "makeEntityGroupPrivate", + "summary": "Get time series keys (getDeviceProfileTimeseriesKeys)", + "description": "Get a set of unique time series keys used by devices that belong to specified profile. If profile is not set returns a list of unique keys among all profiles. The call is used for auto-complete in the UI forms. The implementation limits the number of devices that participate in search to 100 as a trade of between accurate results and time-consuming queries. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getDeviceProfileTimeseriesKeys", "parameters": [ { - "name": "entityGroupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, + "name": "deviceProfileId", + "in": "query", + "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, "schema": { "type": "string" } @@ -56065,7 +56742,17 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } }, "400": { "description": "Bad Request", @@ -56078,7 +56765,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -56198,28 +56885,39 @@ ] } }, - "/api/entityGroup/{entityGroupId}/makePublic": { - "post": { + "/api/deviceProfile/names": { + "get": { "tags": [ - "entity-group-controller" + "device-profile-controller" ], - "summary": "Make Entity Group Publicly available (makeEntityGroupPublic)", - "description": "Make the entity group available for non authorized users. Useful for public dashboards that will be embedded into the public websites. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", - "operationId": "makeEntityGroupPublic", + "summary": "Get Device Profile names (getDeviceProfileNames)", + "description": "Returns a set of unique device profile names owned by the tenant.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getDeviceProfileNames", "parameters": [ { - "name": "entityGroupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, + "name": "activeOnly", + "in": "query", + "description": "Flag indicating whether to retrieve exclusively the names of device profiles that are referenced by tenant's devices.", + "required": false, "schema": { - "type": "string" + "type": "boolean", + "default": false } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityInfo" + } + } + } + } }, "400": { "description": "Bad Request", @@ -56232,7 +56930,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -56352,38 +57050,44 @@ ] } }, - "/api/entityGroup/{entityGroupId}/share": { - "post": { + "/api/deviceProfile/{deviceProfileId}": { + "get": { "tags": [ - "entity-group-controller" + "device-profile-controller" ], - "summary": "Share the Entity Group (shareEntityGroup)", - "description": "Share the entity group with certain user group based on the provided Share Group Request. The request is quite flexible and processing of the request involves multiple security checks using platform RBAC feature.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", - "operationId": "shareEntityGroup", + "summary": "Get Device Profile (getDeviceProfileById)", + "description": "Fetch the Device Profile object based on the provided Device Profile Id. The server checks that the device profile is owned by the same tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getDeviceProfileById", "parameters": [ { - "name": "entityGroupId", + "name": "deviceProfileId", "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } + }, + { + "name": "inlineImages", + "in": "query", + "description": "Inline images as a data URL (Base64)", + "required": false, + "schema": { + "type": "boolean" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShareGroupRequest" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceProfile" + } + } + } }, "400": { "description": "Bad Request", @@ -56396,7 +57100,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -56514,30 +57218,19 @@ "ApiKeyForm": [] } ] - } - }, - "/api/entityGroup/{entityGroupId}/{entityId}": { - "get": { + }, + "delete": { "tags": [ - "entity-group-controller" + "device-profile-controller" ], - "summary": "Get Group Entity (getGroupEntity)", - "description": "Fetch the Short Entity View object based on the group and entity id. Short Entity View object contains the entity id and number of fields (attributes, telemetry, etc). List of those fields is configurable and defined in the group configuration.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getGroupEntity", + "summary": "Delete device profile (deleteDeviceProfile)", + "description": "Deletes the device profile. Referencing non-existing device profile Id will cause an error. Can't delete the device profile if it is referenced by existing devices.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "deleteDeviceProfile", "parameters": [ { - "name": "entityGroupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", + "name": "deviceProfileId", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -56546,14 +57239,7 @@ ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShortEntityView" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -56686,37 +57372,19 @@ ] } }, - "/api/entityGroup/{entityGroupId}/{userGroupId}/{roleId}/share": { + "/api/deviceProfile/{deviceProfileId}/default": { "post": { "tags": [ - "entity-group-controller" + "device-profile-controller" ], - "summary": "Share the Entity Group with User group (shareEntityGroupToChildOwnerUserGroup)", - "description": "Share the entity group with the specified user group using the specified role. Unlike the 'shareEntityGroup' API method, this method is designed for sharing 'down' the owner hierarchy and does not require 'WRITE' permission for the shared entity group or the target user group. In particular, it allows the current user to re-share an entity group that was shared with them by the parent owner: for example, a customer user may re-share a tenant-owned dashboard group with a user group of their sub-customer.\n\nThe following security checks are performed:\n\n* the target user group must belong to the current user's owner or to one of its sub-customers;\n* the current user must have the 'SHARE_GROUP' operation granted for the shared entity group: either as a generic permission for the corresponding entity group resource (applies only if the shared entity group belongs to the current user's owner hierarchy), or as a group permission created when the entity group was shared with the current user's user group using a group role that includes the 'SHARE_GROUP' operation;\n* the specified role must be a group role that is readable by the current user, so it must belong to the current user's owner or to one of its sub-customers;\n* the operations of the specified role must be a subset of the operations the current user was granted for the shared entity group (always passes if the current user was granted the 'ALL' operation).\n\nIf the specified role also includes the 'SHARE_GROUP' operation, the members of the target user group will be able to re-share the entity group further down their own owner hierarchy in the same way.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "shareEntityGroupToChildOwnerUserGroup", + "summary": "Make Device Profile Default (setDefaultDeviceProfile)", + "description": "Marks device profile as default within a tenant scope.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "setDefaultDeviceProfile", "parameters": [ { - "name": "entityGroupId", - "in": "path", - "description": "ID of the entity group to share", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "userGroupId", - "in": "path", - "description": "ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "roleId", + "name": "deviceProfileId", "in": "path", - "description": "ID of the group role that defines the set of operations to grant to the target user group", + "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -56725,7 +57393,14 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceProfile" + } + } + } }, "400": { "description": "Bad Request", @@ -56858,73 +57533,21 @@ ] } }, - "/api/entityGroup/{ownerType}/{ownerId}/{groupType}/{groupName}": { + "/api/deviceProfileInfo/default": { "get": { "tags": [ - "entity-group-controller" - ], - "summary": "Get Entity Group by owner, type and name (getEntityGroupByOwnerAndNameAndType)", - "description": "Fetch the Entity Group object based on the provided Entity Group Id. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nEntity group name is unique in the scope of owner and entity type. For example, you can't create two tenant device groups called 'Water meters'. However, you may create device and asset group with the same name. And also you may create groups with the same name for two different customers of the same tenant. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityGroupByOwnerAndNameAndType", - "parameters": [ - { - "name": "ownerType", - "in": "path", - "description": "Tenant or Customer", - "required": true, - "schema": { - "type": "string", - "enum": [ - "TENANT", - "CUSTOMER" - ] - } - }, - { - "name": "ownerId", - "in": "path", - "description": "A string value representing the Tenant or Customer id", - "required": true, - "schema": { - "type": "string" - }, - "example": "784f394c-42b6-435a-983c-b7beff2784f9" - }, - { - "name": "groupType", - "in": "path", - "description": "Entity Group type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" - ] - } - }, - { - "name": "groupName", - "in": "path", - "description": "Entity Group name", - "required": true, - "schema": { - "type": "string" - } - } + "device-profile-controller" ], + "summary": "Get Default Device Profile (getDefaultDeviceProfileInfo)", + "description": "Fetch the Default Device Profile Info object. Device Profile Info is a lightweight object that includes main information about Device Profile excluding the heavyweight configuration object. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getDefaultDeviceProfileInfo", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityGroupInfo" + "$ref": "#/components/schemas/DeviceProfileInfo" } } } @@ -57060,19 +57683,19 @@ ] } }, - "/api/entityGroupInfo/{entityGroupId}": { + "/api/deviceProfileInfo/{deviceProfileId}": { "get": { "tags": [ - "entity-group-controller" + "device-profile-controller" ], - "summary": "Get Entity Group Entity Info (getEntityGroupEntityInfoById)", - "description": "Fetch the Entity Group Entity Info object based on the provided Entity Group Id. Entity Info is a lightweight object that contains only id and name of the entity group. \n\nEntity group name is unique in the scope of owner and entity type. For example, you can't create two tenant device groups called 'Water meters'. However, you may create device and asset group with the same name. And also you may create groups with the same name for two different customers of the same tenant. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityGroupEntityInfoById", + "summary": "Get Device Profile Info (getDeviceProfileInfoById)", + "description": "Fetch the Device Profile Info object based on the provided Device Profile Id. Device Profile Info is a lightweight object that includes main information about Device Profile excluding the heavyweight configuration object. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getDeviceProfileInfoById", "parameters": [ { - "name": "entityGroupId", + "name": "deviceProfileId", "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -57085,7 +57708,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityInfo" + "$ref": "#/components/schemas/DeviceProfileInfo" } } } @@ -57221,25 +57844,88 @@ ] } }, - "/api/entityGroupInfos": { + "/api/deviceProfileInfos": { "get": { "tags": [ - "entity-group-controller" + "device-profile-controller" ], - "summary": "Get Entity Group Entity Infos by Ids (getEntityGroupEntityInfosByIds)", - "description": "Fetch the list of Entity Group Entity Info objects based on the provided entity group ids list. Entity Info is a lightweight object that contains only id and name of the entity group. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityGroupEntityInfosByIds", + "summary": "Get Device Profiles for transport type (getDeviceProfileInfos)", + "description": "Returns a page of devices profile info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Device Profile Info is a lightweight object that includes main information about Device Profile excluding the heavyweight configuration object. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getDeviceProfileInfos", "parameters": [ { - "name": "entityGroupIds", + "name": "pageSize", "in": "query", - "description": "A list of group ids, separated by comma ','", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the device profile name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "transportType", + "description", + "isDefault" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "transportType", + "in": "query", + "description": "Type of the transport", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DEFAULT", + "MQTT", + "COAP", + "LWM2M", + "SNMP" + ] } } ], @@ -57249,10 +57935,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityInfo" - } + "$ref": "#/components/schemas/PageDataDeviceProfileInfo" } } } @@ -57388,91 +58071,25 @@ ] } }, - "/api/entityGroupInfos/{groupType}": { + "/api/deviceProfileInfos/list": { "get": { "tags": [ - "entity-group-controller" + "device-profile-controller" ], - "summary": "Get Entity Group Entity Infos by entity type and page link (getEntityGroupEntityInfosByTypeAndPageLink)", - "description": "Returns a page of Entity Group Entity Info objects based on the provided Entity Type and Page Link. Entity Info is a lightweight object that contains only id and name of the entity group. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityGroupEntityInfosByTypeAndPageLink", + "summary": "Get Device Profile Infos By Ids (getDeviceProfileInfosByIds)", + "description": "Requested device profiles must be owned by tenant which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getDeviceProfileInfosByIds", "parameters": [ { - "name": "groupType", - "in": "path", - "description": "Entity Group type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" - ] - } - }, - { - "name": "includeShared", - "in": "query", - "description": "Whether to include shared entity groups.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", + "name": "deviceProfileIds", "in": "query", - "description": "Sequence number of page starting from 0", + "description": "A list of device profile ids, separated by comma ','", "required": true, "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the entity group name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "array", + "items": { + "type": "string" + } } } ], @@ -57482,7 +58099,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceProfileInfo" + } } } } @@ -57618,41 +58238,23 @@ ] } }, - "/api/entityGroupInfos/{groupType}/shared": { + "/api/deviceProfiles": { "get": { "tags": [ - "entity-group-controller" + "device-profile-controller" ], - "summary": "Get Shared Entity Group Entity Infos by entity type and page link (getSharedEntityGroupEntityInfosByTypeAndPageLink)", - "description": "Returns a page of Shared Entity Group Entity Info objects based on the provided Entity Type and Page Link. Entity Info is a lightweight object that contains only id and name of the entity group. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getSharedEntityGroupEntityInfosByTypeAndPageLink", + "summary": "Get Device Profiles (getDeviceProfiles)", + "description": "Returns a page of devices profile objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getDeviceProfiles", "parameters": [ - { - "name": "groupType", - "in": "path", - "description": "Entity Group type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" - ] - } - }, { "name": "pageSize", "in": "query", "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string", - "minimum": 1 + "type": "integer", + "format": "int32" } }, { @@ -57661,14 +58263,14 @@ "description": "Sequence number of page starting from 0", "required": true, "schema": { - "type": "string", - "minimum": 0 + "type": "integer", + "format": "int32" } }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'startsWith' filter based on the entity group name.", + "description": "The case insensitive 'substring' filter based on the device profile name.", "required": false, "schema": { "type": "string" @@ -57680,7 +58282,15 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string" + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "transportType", + "description", + "isDefault" + ] } }, { @@ -57703,7 +58313,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityInfo" + "$ref": "#/components/schemas/PageDataDeviceProfile" } } } @@ -57839,115 +58449,45 @@ ] } }, - "/api/entityGroupInfos/{ownerType}/{ownerId}/{groupType}": { - "get": { + "/api/domain": { + "post": { "tags": [ - "entity-group-controller" + "domain-controller" ], - "summary": "Get Entity Group Entity Infos by owner and entity type and page link (getEntityGroupEntityInfosByOwnerAndTypeAndPageLink)", - "description": "Returns a page of Entity Group Entity Info objects based on the provided Owner Id and Entity Type and Page Link. Entity Info is a lightweight object that contains only id and name of the entity group. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityGroupEntityInfosByOwnerAndTypeAndPageLink", + "summary": "Save or Update Domain (saveDomain)", + "description": "Create or update the Domain. When creating domain, platform generates Domain Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Domain Id will be present in the response. Specify existing Domain Id to update the domain. Referencing non-existing Domain Id will cause 'Not Found' error.\n\nDomain name is unique for entire platform setup.\n\n\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "saveDomain", "parameters": [ { - "name": "ownerType", - "in": "path", - "description": "Tenant or Customer", - "required": true, - "schema": { - "type": "string", - "enum": [ - "TENANT", - "CUSTOMER" - ] - } - }, - { - "name": "ownerId", - "in": "path", - "description": "A string value representing the Tenant or Customer id", - "required": true, - "schema": { - "type": "string" - }, - "example": "784f394c-42b6-435a-983c-b7beff2784f9" - }, - { - "name": "groupType", - "in": "path", - "description": "Entity Group type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" - ] - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the entity group name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", + "name": "oauth2ClientIds", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "A list of oauth2 client registration ids, separated by comma ','", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "array", + "items": { + "type": "string" + } } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domain" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityInfo" + "$ref": "#/components/schemas/Domain" } } } @@ -57963,7 +58503,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -58083,105 +58623,22 @@ ] } }, - "/api/entityGroupInfosHierarchy/{ownerType}/{ownerId}/{groupType}": { + "/api/domain/cloud/info/{id}": { "get": { "tags": [ - "entity-group-controller" + "domain-controller" ], - "summary": "Get Entity Group Entity Infos for all owners starting from specified than ending with owner of current user (getEntityGroupEntityInfosHierarchyByOwnerAndTypeAndPageLink)", - "description": "Returns a page of Entity Group Entity Info objects based on the provided Owner Id and Entity Type and Page Link. Entity Info is a lightweight object that contains only id and name of the entity group. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityGroupEntityInfosHierarchyByOwnerAndTypeAndPageLink", + "summary": "Get Domain info by Id (getCloudDomainInfoById)", + "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getCloudDomainInfoById", "parameters": [ { - "name": "ownerType", - "in": "path", - "description": "Tenant or Customer", - "required": true, - "schema": { - "type": "string", - "enum": [ - "TENANT", - "CUSTOMER" - ] - } - }, - { - "name": "ownerId", - "in": "path", - "description": "A string value representing the Tenant or Customer id", - "required": true, - "schema": { - "type": "string" - }, - "example": "784f394c-42b6-435a-983c-b7beff2784f9" - }, - { - "name": "groupType", + "name": "id", "in": "path", - "description": "Entity Group type", "required": true, "schema": { "type": "string", - "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" - ] - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the entity group name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "format": "uuid" } } ], @@ -58191,7 +58648,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityInfo" + "$ref": "#/components/schemas/CloudDomainInfo" } } } @@ -58327,89 +58784,22 @@ ] } }, - "/api/entityGroups/edge/{edgeId}/{groupType}": { + "/api/domain/info/{id}": { "get": { "tags": [ - "entity-group-controller" + "domain-controller" ], - "summary": "Get Edge Entity Groups by entity type (getEdgeEntityGroups)", - "description": "Returns a page of Entity Group Info objects based on the provided Entity Type and assigned to the provided Edge entity. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getEdgeEntityGroups", + "summary": "Get Domain info by Id (getDomainInfoById)", + "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getDomainInfoById", "parameters": [ { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "groupType", + "name": "id", "in": "path", - "description": "EntityGroup type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD" - ] - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", "required": true, "schema": { "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the entity group name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "format": "uuid" } } ], @@ -58419,7 +58809,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityGroupInfo" + "$ref": "#/components/schemas/DomainInfo" } } } @@ -58555,25 +58945,60 @@ ] } }, - "/api/entityGroups/list": { + "/api/domain/infos": { "get": { "tags": [ - "entity-group-controller" + "domain-controller" ], - "summary": "Get Entity Groups by Ids (getEntityGroupsByIds)", - "description": "Fetch the list of Entity Group Info objects based on the provided entity group ids list. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityGroupsByIds", + "summary": "Get Domain infos (getDomainInfos)", + "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getDomainInfos", "parameters": [ { - "name": "entityGroupIds", + "name": "pageSize", "in": "query", - "description": "A list of group ids, separated by comma ','", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Case-insensitive 'substring' filter based on domain's name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string" } } ], @@ -58583,10 +59008,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityGroupInfo" - } + "$ref": "#/components/schemas/PageDataDomainInfo" } } } @@ -58722,56 +59144,28 @@ ] } }, - "/api/entityGroups/{entityType}/{entityId}": { - "get": { + "/api/domain/{id}": { + "delete": { "tags": [ - "entity-group-controller" + "domain-controller" ], - "summary": "Get Entity Groups by Entity Id (getEntityGroupsForEntity)", - "description": "Returns a list of groups that contain the specified Entity Id. For example, all device groups that contain specific device. The list always contain at least one element - special group 'All'.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getEntityGroupsForEntity", + "summary": "Delete Domain by ID (deleteDomain)", + "description": "Deletes Domain by ID. Referencing non-existing domain Id will cause an error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "deleteDomain", "parameters": [ { - "name": "entityType", + "name": "id", "in": "path", - "description": "Entity Group type", "required": true, "schema": { "type": "string", - "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" - ] - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "format": "uuid" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityGroupId" - } - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -58904,105 +59298,43 @@ ] } }, - "/api/entityGroups/{groupType}": { - "get": { + "/api/domain/{id}/oauth2Clients": { + "put": { "tags": [ - "entity-group-controller" + "domain-controller" ], - "summary": "Get Entity Groups by entity type and page link (getEntityGroupsByTypeAndPageLink)", - "description": "Returns a page of Entity Group Info objects based on the provided Entity Type and Page Link. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityGroupsByTypeAndPageLink", + "summary": "Update oauth2 clients (updateDomainOauth2Clients)", + "description": "Update oauth2 clients for the specified domain. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "updateDomainOauth2Clients", "parameters": [ { - "name": "groupType", + "name": "id", "in": "path", - "description": "Entity Group type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" - ] - } - }, - { - "name": "includeShared", - "in": "query", - "description": "Whether to include shared entity groups.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", "required": true, "schema": { "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the entity group name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "format": "uuid" } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataEntityGroupInfo" + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" } } } }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, "400": { "description": "Bad Request", "content": { @@ -59134,40 +59466,98 @@ ] } }, - "/api/entityGroups/{groupType}/all": { + "/api/customer/{customerId}/edgeInfos": { "get": { "tags": [ - "entity-group-controller" + "edge-controller" ], - "summary": "Get Entity Groups by entity type (getAllEntityGroupsByType)", - "description": "Fetch the list of Entity Group Info objects based on the provided Entity Type. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getAllEntityGroupsByType", + "summary": "Get Customer Edge Infos (getCustomerEdgeInfos)", + "description": "Returns a page of edge info objects owned by the specified customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerEdgeInfos", "parameters": [ { - "name": "groupType", + "name": "customerId", "in": "path", - "description": "Entity Group type", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "type", + "in": "query", + "description": "A string value representing the edge type. For example, 'default'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the edge name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, "schema": { "type": "string", "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" + "createdTime", + "name", + "type", + "label", + "customerTitle" ] } }, { - "name": "includeShared", + "name": "sortOrder", "in": "query", - "description": "Whether to include shared entity groups.", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "boolean" + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -59177,10 +59567,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityGroupInfo" - } + "$ref": "#/components/schemas/PageDataEdgeInfo" } } } @@ -59316,31 +59703,22 @@ ] } }, - "/api/entityGroups/{groupType}/shared": { + "/api/customer/{customerId}/edges": { "get": { "tags": [ - "entity-group-controller" + "edge-controller" ], - "summary": "Get Shared Entity Groups by entity type and page link (getSharedEntityGroupsByTypeAndPageLink)", - "description": "Returns a page of Shared Entity Group Info objects based on the provided Entity Type and Page Link. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getSharedEntityGroupsByTypeAndPageLink", + "summary": "Get Customer Edges (getCustomerEdges)", + "description": "Returns a page of edges objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getCustomerEdges", "parameters": [ { - "name": "groupType", + "name": "customerId", "in": "path", - "description": "Entity Group type", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string", - "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" - ] + "type": "string" } }, { @@ -59349,8 +59727,8 @@ "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string", - "minimum": 1 + "type": "integer", + "format": "int32" } }, { @@ -59359,14 +59737,23 @@ "description": "Sequence number of page starting from 0", "required": true, "schema": { - "type": "string", - "minimum": 0 + "type": "integer", + "format": "int32" + } + }, + { + "name": "type", + "in": "query", + "description": "A string value representing the edge type. For example, 'default'", + "required": false, + "schema": { + "type": "string" } }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'startsWith' filter based on the entity group name.", + "description": "The case insensitive 'substring' filter based on the edge name.", "required": false, "schema": { "type": "string" @@ -59378,7 +59765,14 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string" + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] } }, { @@ -59401,7 +59795,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityGroupInfo" + "$ref": "#/components/schemas/PageDataEdge" } } } @@ -59537,44 +59931,53 @@ ] } }, - "/api/entityGroups/{groupType}/shared/all": { - "get": { + "/api/edge": { + "post": { "tags": [ - "entity-group-controller" + "edge-controller" ], - "summary": "Get Shared Entity Groups by entity type (getAllSharedEntityGroups)", - "description": "Fetch the list of Shared Entity Group Info objects based on the provided Entity Type. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getAllSharedEntityGroups", + "summary": "Create Or Update Edge (saveEdge)", + "description": "Create or update the Edge. When creating edge, platform generates Edge Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created edge id will be present in the response. Specify existing Edge id to update the edge. Referencing non-existing Edge Id will cause 'Not Found' error.\n\nEdge name is unique in the scope of tenant. Use unique identifiers like MAC or IMEI for the edge names and non-unique 'label' field for user-friendly visualization purposes.Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Edge entity. ", + "operationId": "saveEdge", "parameters": [ { - "name": "groupType", - "in": "path", - "description": "Entity Group type", - "required": true, + "name": "entityGroupId", + "in": "query", + "required": false, "schema": { - "type": "string", - "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" - ] + "type": "string" + } + }, + { + "name": "entityGroupIds", + "in": "query", + "description": "A list of entity group ids, separated by comma ','", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Edge" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityGroupInfo" - } + "$ref": "#/components/schemas/Edge" } } } @@ -59590,7 +59993,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -59710,115 +60113,31 @@ ] } }, - "/api/entityGroups/{ownerType}/{ownerId}/{groupType}": { - "get": { + "/api/edge/bulk_import": { + "post": { "tags": [ - "entity-group-controller" + "edge-controller" ], - "summary": "Get Entity Groups by owner and entity type and page link (getEntityGroupsByOwnerAndTypeAndPageLink)", - "description": "Returns a page of Entity Group objects based on the provided Owner Id and Entity Type and Page Link. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityGroupsByOwnerAndTypeAndPageLink", - "parameters": [ - { - "name": "ownerType", - "in": "path", - "description": "Tenant or Customer", - "required": true, - "schema": { - "type": "string", - "enum": [ - "TENANT", - "CUSTOMER" - ] - } - }, - { - "name": "ownerId", - "in": "path", - "description": "A string value representing the Tenant or Customer id", - "required": true, - "schema": { - "type": "string" - }, - "example": "784f394c-42b6-435a-983c-b7beff2784f9" - }, - { - "name": "groupType", - "in": "path", - "description": "Entity Group type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" - ] - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the entity group name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" + "summary": "Import the bulk of edges (processEdgesBulkImport)", + "description": "There's an ability to import the bulk of edges using the only .csv file.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "processEdgesBulkImport", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BulkImportRequest" + } } }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityGroupInfo" + "$ref": "#/components/schemas/BulkImportResultEdge" } } } @@ -59834,7 +60153,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -59954,54 +60273,22 @@ ] } }, - "/api/entityGroups/{ownerType}/{ownerId}/{groupType}/all": { + "/api/edge/info/{edgeId}": { "get": { "tags": [ - "entity-group-controller" + "edge-controller" ], - "summary": "Get Entity Groups by owner and entity type (getAllEntityGroupsByOwnerAndType)", - "description": "Fetch the list of Entity Group Info objects based on the provided Owner Id and Entity Type. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getAllEntityGroupsByOwnerAndType", + "summary": "Get Edge Info (getEdgeInfoById)", + "description": "Get the Edge info object based on the provided Edge Id. If the user has the authority of 'Tenant Administrator', the server checks that the edge is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the edge is assigned to the same customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getEdgeInfoById", "parameters": [ { - "name": "ownerType", - "in": "path", - "description": "Tenant or Customer", - "required": true, - "schema": { - "type": "string", - "enum": [ - "TENANT", - "CUSTOMER" - ] - } - }, - { - "name": "ownerId", + "name": "edgeId", "in": "path", - "description": "A string value representing the Tenant or Customer id", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" - }, - "example": "784f394c-42b6-435a-983c-b7beff2784f9" - }, - { - "name": "groupType", - "in": "path", - "description": "Entity Group type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" - ] } } ], @@ -60011,10 +60298,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityGroupInfo" - } + "$ref": "#/components/schemas/EdgeInfo" } } } @@ -60150,104 +60434,35 @@ ] } }, - "/api/entityGroupsHierarchy/{ownerType}/{ownerId}/{groupType}": { + "/api/edge/instructions/install/{edgeId}/{method}": { "get": { "tags": [ - "entity-group-controller" + "edge-controller" ], - "summary": "Get Entity Groups for all owners starting from specified than ending with owner of current user (getEntityGroupsHierarchyByOwnerAndTypeAndPageLink)", - "description": "Returns a page of Entity Group objects based on the provided Owner Id and Entity Type and Page Link. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityGroupsHierarchyByOwnerAndTypeAndPageLink", + "summary": "Get Edge Install Instructions (getEdgeInstallInstructions)", + "description": "Get an install instructions for provided edge id.If the user has the authority of 'Tenant Administrator', the server checks that the edge is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the edge is assigned to the same customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getEdgeInstallInstructions", "parameters": [ { - "name": "ownerType", - "in": "path", - "description": "Tenant or Customer", - "required": true, - "schema": { - "type": "string", - "enum": [ - "TENANT", - "CUSTOMER" - ] - } - }, - { - "name": "ownerId", + "name": "edgeId", "in": "path", - "description": "A string value representing the Tenant or Customer id", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" - }, - "example": "784f394c-42b6-435a-983c-b7beff2784f9" + } }, { - "name": "groupType", + "name": "method", "in": "path", - "description": "Entity Group type", + "description": "Installation method ('docker', 'ubuntu' or 'centos')", "required": true, "schema": { "type": "string", "enum": [ - "CUSTOMER", - "ASSET", - "DEVICE", - "USER", - "ENTITY_VIEW", - "DASHBOARD", - "EDGE" - ] - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the entity group name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" + "docker", + "ubuntu", + "centos" ] } } @@ -60258,7 +60473,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityGroupInfo" + "$ref": "#/components/schemas/EdgeInstructions" } } } @@ -60394,37 +60609,37 @@ ] } }, - "/api/ownerInfo/{ownerType}/{ownerId}": { + "/api/edge/instructions/upgrade/{edgeVersion}/{method}": { "get": { "tags": [ - "entity-group-controller" + "edge-controller" ], - "summary": "Get Owner Info (getOwnerInfo)", - "description": "Fetch the owner info (tenant or customer) presented as Entity Info object based on the provided owner Id. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getOwnerInfo", + "summary": "Get Edge Upgrade Instructions (getEdgeUpgradeInstructions)", + "description": "Get an upgrade instructions for provided edge version.If the user has the authority of 'Tenant Administrator', the server checks that the edge is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the edge is assigned to the same customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getEdgeUpgradeInstructions", "parameters": [ { - "name": "ownerType", + "name": "edgeVersion", "in": "path", - "description": "Tenant or Customer", + "description": "Edge version", "required": true, "schema": { - "type": "string", - "enum": [ - "TENANT", - "CUSTOMER" - ] + "type": "string" } }, { - "name": "ownerId", + "name": "method", "in": "path", - "description": "A string value representing the Tenant or Customer id", + "description": "Upgrade method ('docker', 'ubuntu' or 'centos')", "required": true, "schema": { - "type": "string" - }, - "example": "784f394c-42b6-435a-983c-b7beff2784f9" + "type": "string", + "enum": [ + "docker", + "ubuntu", + "centos" + ] + } } ], "responses": { @@ -60433,7 +60648,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityInfo" + "$ref": "#/components/schemas/EdgeInstructions" } } } @@ -60569,65 +60784,23 @@ ] } }, - "/api/ownerInfos": { + "/api/edge/missingToRelatedRuleChains/{edgeId}": { "get": { "tags": [ - "entity-group-controller" + "edge-controller" ], - "summary": "Get Owner Infos (getOwnerInfos)", - "description": "Provides a rage view of Customers that the current user has READ access to. If the current user is Tenant administrator, the result set also contains the tenant. The call is designed for the UI auto-complete component to show tenant and all possible Customers that the user may select to change the owner of the particular entity or entity group.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getOwnerInfos", + "summary": "Find missing rule chains (findMissingToRelatedRuleChains)", + "description": "Returns list of rule chains ids that are not assigned to particular edge, but these rule chains are present in the already assigned rule chains to edge.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "findMissingToRelatedRuleChains", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "edgeId", + "in": "path", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the entity group name.", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -60636,7 +60809,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityInfo" + "type": "string" } } } @@ -60772,65 +60945,23 @@ ] } }, - "/api/owners": { - "get": { + "/api/edge/sync/{edgeId}": { + "post": { "tags": [ - "entity-group-controller" + "edge-controller" ], - "summary": "Get Owners (getOwners)", - "description": "Provides a rage view of Customers that the current user has READ access to. If the current user is Tenant administrator, the result set also contains the tenant. The call is designed for the UI auto-complete component to show tenant and all possible Customers that the user may select to change the owner of the particular entity or entity group.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getOwners", + "summary": "Sync edge (syncEdge)", + "description": "Starts synchronization process between edge and cloud. \nAll entities that are assigned to particular edge are going to be send to remote edge service.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "syncEdge", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "edgeId", + "in": "path", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the entity group name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -60839,7 +60970,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataContactBasedObject" + "type": "string" } } } @@ -60855,7 +60986,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -60975,39 +61106,27 @@ ] } }, - "/api/v2/entityGroup/{entityGroupId}/share": { - "post": { + "/api/edge/types": { + "get": { "tags": [ - "entity-group-controller" - ], - "summary": "Share the Entity Group with User group (shareEntityGroupToChildOwnerUserGroupV2)", - "description": "Share the entity group with specified user group using specified role. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", - "operationId": "shareEntityGroupToChildOwnerUserGroupV2", - "parameters": [ - { - "name": "entityGroupId", - "in": "path", - "description": "A uuid value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "edge-controller" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShareGroupRequest" - } - } - }, - "required": true - }, + "summary": "Get Edge Types (getEdgeTypes)", + "description": "Returns a set of unique edge types based on edges that are either owned by the tenant or assigned to the customer which user is performing the request.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getEdgeTypes", "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntitySubtype" + } + } + } + } }, "400": { "description": "Bad Request", @@ -61020,7 +61139,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -61140,32 +61259,32 @@ ] } }, - "/api/alarmsQuery/count": { - "post": { + "/api/edge/{edgeId}": { + "get": { "tags": [ - "entity-query-controller" + "edge-controller" ], - "summary": "Count Alarms by Query (countAlarmsByQuery)", - "description": "Returns the number of alarms that match the query definition.", - "operationId": "countAlarmsByQuery", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlarmCountQuery" - } + "summary": "Get Edge (getEdgeById)", + "description": "Get the Edge object based on the provided Edge Id. If the user has the authority of 'Tenant Administrator', the server checks that the edge is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the edge is assigned to the same customer.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getEdgeById", + "parameters": [ + { + "name": "edgeId", + "in": "path", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "integer", - "format": "int64" + "$ref": "#/components/schemas/Edge" } } } @@ -61181,7 +61300,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -61299,36 +61418,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/alarmsQuery/find": { - "post": { + }, + "delete": { "tags": [ - "entity-query-controller" + "edge-controller" ], - "summary": "Find Alarms by Query", - "description": "This method description defines how Alarm Data Query extends the Entity Data Query. See method 'Find Entity Data by Query' first to get the info about 'Entity Data Query'.\n\n The platform will first search the entities that match the entity and key filters. Then, the platform will use 'Alarm Page Link' to filter the alarms related to those entities. Finally, platform fetch the properties of alarm that are defined in the **'alarmFields'** and combine them with the other entity, attribute and latest time series fields to return the result. \n\n See example of the alarm query below. The query will search first 100 active alarms with type 'Temperature Alarm' or 'Fire Alarm' for any device with current temperature > 0. The query will return combination of the entity fields: name of the device, device model and latest temperature reading and alarms fields: createdTime, type, severity and status: \n\n```json\n{\n \"entityFilter\": {\n \"type\": \"entityType\",\n \"resolveMultiple\": true,\n \"entityType\": \"DEVICE\"\n },\n \"pageLink\": {\n \"page\": 0,\n \"pageSize\": 100,\n \"textSearch\": null,\n \"searchPropagatedAlarms\": false,\n \"statusList\": [\n \"ACTIVE\"\n ],\n \"severityList\": [\n \"CRITICAL\",\n \"MAJOR\"\n ],\n \"typeList\": [\n \"Temperature Alarm\",\n \"Fire Alarm\"\n ],\n \"sortOrder\": {\n \"key\": {\n \"key\": \"createdTime\",\n \"type\": \"ALARM_FIELD\"\n },\n \"direction\": \"DESC\"\n },\n \"timeWindow\": 86400000\n },\n \"keyFilters\": [\n {\n \"key\": {\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n },\n \"valueType\": \"NUMERIC\",\n \"predicate\": {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 0,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n }\n ],\n \"alarmFields\": [\n {\n \"type\": \"ALARM_FIELD\",\n \"key\": \"createdTime\"\n },\n {\n \"type\": \"ALARM_FIELD\",\n \"key\": \"type\"\n },\n {\n \"type\": \"ALARM_FIELD\",\n \"key\": \"severity\"\n },\n {\n \"type\": \"ALARM_FIELD\",\n \"key\": \"status\"\n }\n ],\n \"entityFields\": [\n {\n \"type\": \"ENTITY_FIELD\",\n \"key\": \"name\"\n }\n ],\n \"latestValues\": [\n {\n \"type\": \"ATTRIBUTE\",\n \"key\": \"model\"\n },\n {\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n }\n ]\n}\n```", - "operationId": "findAlarmDataByQuery", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlarmDataQuery" - } + "summary": "Delete edge (deleteEdge)", + "description": "Deletes the edge. Referencing non-existing edge Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "deleteEdge", + "parameters": [ + { + "name": "edgeId", + "in": "path", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataAlarmData" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -61341,7 +61452,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -61461,20 +61572,32 @@ ] } }, - "/api/edqs/state": { + "/api/edge/{edgeId}/upgrade/available": { "get": { "tags": [ - "entity-query-controller" + "edge-controller" + ], + "summary": "Is edge upgrade enabled (isEdgeUpgradeAvailable)", + "description": "Returns 'true' if upgrade available for connected edge, 'false' - otherwise.", + "operationId": "isEdgeUpgradeAvailable", + "parameters": [ + { + "name": "edgeId", + "in": "path", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "getEdqsState", - "operationId": "getEdqsState", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EdqsState" + "type": "boolean" } } } @@ -61610,26 +61733,44 @@ ] } }, - "/api/edqs/system/request": { + "/api/edge/{edgeId}/{ruleChainId}/root": { "post": { "tags": [ - "entity-query-controller" + "edge-controller" ], - "summary": "processSystemEdqsRequest", - "operationId": "processSystemEdqsRequest", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ToCoreEdqsRequest" - } + "summary": "Set root rule chain for provided edge (setEdgeRootRuleChain)", + "description": "Change root rule chain of the edge to the new provided rule chain. \nThis operation will send a notification to update root rule chain on remote edge service.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "setEdgeRootRuleChain", + "parameters": [ + { + "name": "edgeId", + "in": "path", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "ruleChainId", + "in": "path", + "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Edge" + } + } + } }, "400": { "description": "Bad Request", @@ -61762,32 +61903,99 @@ ] } }, - "/api/entitiesQuery/count": { - "post": { + "/api/edgeInfos/all": { + "get": { "tags": [ - "entity-query-controller" + "edge-controller" ], - "summary": "Count Entities by Query", - "description": "Allows to run complex queries to search the count of platform entities (devices, assets, customers, etc) based on the combination of main entity filter and multiple key filters. Returns the number of entities that match the query definition.\n\n# Query Definition\n\n\n\nMain **entity filter** is mandatory and defines generic search criteria. For example, \"find all devices with profile 'Moisture Sensor'\" or \"Find all devices related to asset 'Building A'\"\n\nOptional **key filters** allow to filter results of the entity filter by complex criteria against main entity fields (name, label, type, etc), attributes and telemetry. For example, \"temperature > 20 or temperature< 10\" or \"name starts with 'T', and attribute 'model' is 'T1000', and time series field 'batteryLevel' > 40\".\n\nLet's review the example:\n\n```json\n{\n \"entityFilter\": {\n \"type\": \"entityType\",\n \"entityType\": \"DEVICE\"\n },\n \"keyFilters\": [\n {\n \"key\": {\n \"type\": \"ATTRIBUTE\",\n \"key\": \"active\"\n },\n \"valueType\": \"BOOLEAN\",\n \"predicate\": {\n \"operation\": \"EQUAL\",\n \"value\": {\n \"defaultValue\": true,\n \"dynamicValue\": null\n },\n \"type\": \"BOOLEAN\"\n }\n }\n ]\n}\n```\n\n Example mentioned above search all devices which have attribute 'active' set to 'true'. Now let's review available entity filters and key filters syntax:\n\n # Entity Filters\nEntity Filter body depends on the 'type' parameter. Let's review available entity filter types. In fact, they do correspond to available dashboard aliases.\n\n## Single Entity\n\nAllows to filter only one entity based on the id. For example, this entity filter selects certain device:\n\n```json\n{\n \"type\": \"singleEntity\",\n \"singleEntity\": {\n \"id\": \"d521edb0-2a7a-11ec-94eb-213c95f54092\",\n \"entityType\": \"DEVICE\"\n }\n}\n```\n\n## Group Entities Filter\n\nAllows to filter multiple entities of the same type using the entity group type and id. For example, this entity filter selects all devices that belong to the group 'e52b0020-2a7a-11ec-94eb-213c95f54092':\n\n```json\n{\n \"type\": \"entityGroup\",\n \"groupType\": \"DEVICE\",\n \"entityGroup\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n}\n```\n\n## Entity List Filter\n\nAllows to filter entities of the same type using their ids. For example, this entity filter selects two devices:\n\n```json\n{\n \"type\": \"entityList\",\n \"entityType\": \"DEVICE\",\n \"entityList\": [\n \"e6501f30-2a7a-11ec-94eb-213c95f54092\",\n \"e6657bf0-2a7a-11ec-94eb-213c95f54092\"\n ]\n}\n```\n\n## Entity Name Filter\n\nAllows to filter entities of the same type using the **'starts with'** expression over entity name. For example, this entity filter selects all devices which name starts with 'Air Quality':\n\n```json\n{\n \"type\": \"entityName\",\n \"entityType\": \"DEVICE\",\n \"entityNameFilter\": \"Air Quality\"\n}\n```\n\n## Entity Type Filter\n\nAllows to filter entities based on their type (CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, etc)For example, this entity filter selects all tenant customers:\n\n```json\n{\n \"type\": \"entityType\",\n \"entityType\": \"CUSTOMER\"\n}\n```\n\n## Group List Filter\n\nReturn multiple groups of the same type using specified ids. For example, this entity filter selects 2 device groups (if they are present in the system) with ids 'e52b0020-2a7a-11ec-94eb-213c95f54092' and 'e52b0020-2a7a-11ec-94eb-213c95f54093':\n\n```json\n{\n \"type\": \"entityGroupList\",\n \"groupType\": \"DEVICE\",\n \"entityGroupList\": [\"e52b0020-2a7a-11ec-94eb-213c95f54092\", \"e52b0020-2a7a-11ec-94eb-213c95f54093\"]\n}\n```\n\n## Group Name Filter\n\nAllows to filter entity groups based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all devices which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityGroupName\",\n \"groupType\": \"DEVICE\",\n \"entityGroupNameFilter\": \"CAT\"\n}\n```\n\n## Entities by Group Name Filter\n\nAllows to filter entities that belong to group based on the entity type and the group name. Optional parameter 'ownerId' allows you to specify the owner of the group (Tenant or Customer, current user owner by default).For example, this entity filter selects all devices which belong to group 'Water Meters':\n\n```json\n{\n \"type\": \"entitiesByGroupName\",\n \"groupType\": \"DEVICE\",\n \"entityGroupNameFilter\": \"Water Meters\"\n}\n```\n\n Other example, this entity filter selects all devices which belong to group 'Water Meters' which in turn belongs to (sub-)Customer with id 'e52b0020-2a7a-11ec-94eb-213c95f54093': \n\n```json\n{\n \"type\": \"entitiesByGroupName\",\n \"ownerId\": {\"entityType\": \"CUSTOMER\",\"id\":\"e52b0020-2a7a-11ec-94eb-213c95f54093\"},\n \"groupType\": \"DEVICE\",\n \"entityGroupNameFilter\": \"Water Meters\"\n}\n```\n\n## Entity owner Filter\n\nAllows to fetch owner (Tenant or Customer) of the specified entity. For example, this entity filter selects owner of the device with id 'e52b0020-2a7a-11ec-94eb-213c95f54093':\n\n```json\n{\n \"type\": \"stateEntityOwner\",\n \"singleEntity\": {\n \"id\": \"d521edb0-2a7a-11ec-94eb-213c95f54092\",\n \"entityType\": \"DEVICE\"\n }\n}\n```\n\n## Asset Type Filter\n\nAllows to filter assets based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'charging station' assets which name starts with 'Tesla':\n\n```json\n{\n \"type\": \"assetType\",\n \"assetType\": \"charging station\",\n \"assetNameFilter\": \"Tesla\"\n}\n```\n\n## Device Type Filter\n\nAllows to filter devices based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Temperature Sensor' devices which name starts with 'ABC':\n\n```json\n{\n \"type\": \"deviceType\",\n \"deviceType\": \"Temperature Sensor\",\n \"deviceNameFilter\": \"ABC\"\n}\n```\n\n## Edge Type Filter\n\nAllows to filter edge instances based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Factory' edge instances which name starts with 'Nevada':\n\n```json\n{\n \"type\": \"edgeType\",\n \"edgeType\": \"Factory\",\n \"edgeNameFilter\": \"Nevada\"\n}\n```\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```\n\n## Api Usage Filter\n\nAllows to query for Api Usage based on optional customer id. If the customer id is not set, returns current tenant API usage.For example, this entity filter selects the 'Api Usage' entity for customer with id 'e6501f30-2a7a-11ec-94eb-213c95f54092':\n\n```json\n{\n \"type\": \"apiUsageState\",\n \"customerId\": {\n \"id\": \"d521edb0-2a7a-11ec-94eb-213c95f54092\",\n \"entityType\": \"CUSTOMER\"\n }\n}\n```\n\n## Relations Query Filter\n\nAllows to filter entities that are related to the provided root entity. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'filter' object allows you to define the relation type and set of acceptable entity types to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only those who match the 'filters'.\n\nFor example, this entity filter selects all devices and assets which are related to the asset with id 'e51de0c0-2a7a-11ec-94eb-213c95f54092':\n\n```json\n{\n \"type\": \"relationsQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e51de0c0-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 1,\n \"fetchLastLevelOnly\": false,\n \"filters\": [\n {\n \"relationType\": \"Contains\",\n \"entityTypes\": [\n \"DEVICE\",\n \"ASSET\"\n ]\n }\n ]\n}\n```\n\n## Asset Search Query\n\nAllows to filter assets that are related to the provided root entity. Filters related assets based on the relation type and set of asset types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'assetTypes' defines the type of the asset to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only assets that match 'relationType' and 'assetTypes' conditions.\n\nFor example, this entity filter selects 'charging station' assets which are related to the asset with id 'e51de0c0-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"assetSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e51de0c0-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 1,\n \"fetchLastLevelOnly\": false,\n \"relationType\": \"Contains\",\n \"assetTypes\": [\n \"charging station\"\n ]\n}\n```\n\n## Device Search Query\n\nAllows to filter devices that are related to the provided root entity. Filters related devices based on the relation type and set of device types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'deviceTypes' defines the type of the device to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\nFor example, this entity filter selects 'Charging port' and 'Air Quality Sensor' devices which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"deviceSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 2,\n \"fetchLastLevelOnly\": true,\n \"relationType\": \"Contains\",\n \"deviceTypes\": [\n \"Air Quality Sensor\",\n \"Charging port\"\n ]\n}\n```\n\n## Entity View Query\n\nAllows to filter entity views that are related to the provided root entity. Filters related entity views based on the relation type and set of entity view types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'entityViewTypes' defines the type of the entity view to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\nFor example, this entity filter selects 'Concrete mixer' entity views which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"entityViewSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 1,\n \"fetchLastLevelOnly\": false,\n \"relationType\": \"Contains\",\n \"entityViewTypes\": [\n \"Concrete mixer\"\n ]\n}\n```\n\n## Edge Search Query\n\nAllows to filter edge instances that are related to the provided root entity. Filters related edge instances based on the relation type and set of edge types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'deviceTypes' defines the type of the device to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\nFor example, this entity filter selects 'Factory' edge instances which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"deviceSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 2,\n \"fetchLastLevelOnly\": true,\n \"relationType\": \"Contains\",\n \"edgeTypes\": [\n \"Factory\"\n ]\n}\n```\n\n # Key Filters\nKey Filter allows you to define complex logical expressions over entity field, attribute or latest time series value. The filter is defined using 'key', 'valueType' and 'predicate' objects. Single Entity Query may have zero, one or multiple predicates. If multiple filters are defined, they are evaluated using logical 'AND'. The example below checks that temperature of the entity is above 20 degrees:\n\n```json\n{\n \"key\": {\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n },\n \"valueType\": \"NUMERIC\",\n \"predicate\": {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 20,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n}\n```\n\n Now let's review 'key', 'valueType' and 'predicate' objects in detail.\n\n## Filter Key\n\nFilter Key defines either entity field, attribute or telemetry. It is a JSON object that consists the key name and type. The following filter key types are supported: \n\n * 'CLIENT_ATTRIBUTE' - used for client attributes; \n * 'SHARED_ATTRIBUTE' - used for shared attributes; \n * 'SERVER_ATTRIBUTE' - used for server attributes; \n * 'ATTRIBUTE' - used for any of the above; \n * 'TIME_SERIES' - used for time series values; \n * 'ENTITY_FIELD' - used for accessing entity fields like 'name', 'label', etc. The list of available fields depends on the entity type; \n * 'ALARM_FIELD' - similar to entity field, but is used in alarm queries only; \n\n\n Let's review the example:\n\n```json\n{\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n}\n```\n\n## Value Type and Operations\n\nProvides a hint about the data type of the entity field that is defined in the filter key. The value type impacts the list of possible operations that you may use in the corresponding predicate. For example, you may use 'STARTS_WITH' or 'END_WITH', but you can't use 'GREATER_OR_EQUAL' for string values.The following filter value types and corresponding predicate operations are supported: \n\n * 'STRING' - used to filter any 'String' or 'JSON' values. Operations: EQUAL, NOT_EQUAL, STARTS_WITH, ENDS_WITH, CONTAINS, NOT_CONTAINS; \n * 'NUMERIC' - used for 'Long' and 'Double' values. Operations: EQUAL, NOT_EQUAL, GREATER, LESS, GREATER_OR_EQUAL, LESS_OR_EQUAL; \n * 'BOOLEAN' - used for boolean values. Operations: EQUAL, NOT_EQUAL;\n * 'DATE_TIME' - similar to numeric, transforms value to milliseconds since epoch. Operations: EQUAL, NOT_EQUAL, GREATER, LESS, GREATER_OR_EQUAL, LESS_OR_EQUAL; \n\n\n## Filter Predicate\n\nFilter Predicate defines the logical expression to evaluate. The list of available operations depends on the filter value type, see above. Platform supports 4 predicate types: 'STRING', 'NUMERIC', 'BOOLEAN' and 'COMPLEX'. The last one allows to combine multiple operations over one filter key.\n\nSimple predicate example to check 'value < 100': \n\n```json\n{\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 100,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n}\n```\n\nComplex predicate example, to check 'value < 10 or value > 20': \n\n```json\n{\n \"type\": \"COMPLEX\",\n \"operation\": \"OR\",\n \"predicates\": [\n {\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 10,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n },\n {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 20,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n ]\n}\n```\n\nMore complex predicate example, to check 'value < 10 or (value > 50 && value < 60)': \n\n```json\n{\n \"type\": \"COMPLEX\",\n \"operation\": \"OR\",\n \"predicates\": [\n {\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 10,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n },\n {\n \"type\": \"COMPLEX\",\n \"operation\": \"AND\",\n \"predicates\": [\n {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 50,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n },\n {\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 60,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n ]\n }\n ]\n}\n```\n\n You may also want to replace hardcoded values (for example, temperature > 20) with the more dynamic expression (for example, temperature > 'value of the tenant attribute with key 'temperatureThreshold'). It is possible to use 'dynamicValue' to define attribute of the tenant, customer or user that is performing the API call. See example below: \n\n```json\n{\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 0,\n \"dynamicValue\": {\n \"sourceType\": \"CURRENT_USER\",\n \"sourceAttribute\": \"temperatureThreshold\"\n }\n },\n \"type\": \"NUMERIC\"\n}\n```\n\n Note that you may use 'CURRENT_USER', 'CURRENT_CUSTOMER' and 'CURRENT_TENANT' as a 'sourceType'. The 'defaultValue' is used when the attribute with such a name is not defined for the chosen source.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "countEntitiesByQuery", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityCountQuery" - } + "summary": "Get All Edge Infos for current user (getAllEdgeInfos)", + "description": "Returns a page of edge info objects owned by the tenant or the customer of a current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAllEdgeInfos", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "required": true - }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "type", + "in": "query", + "description": "A string value representing the edge type. For example, 'default'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the edge name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "integer", - "format": "int64" + "$ref": "#/components/schemas/PageDataEdgeInfo" } } } @@ -61803,7 +62011,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -61923,31 +62131,81 @@ ] } }, - "/api/entitiesQuery/find": { - "post": { + "/api/edges": { + "get": { "tags": [ - "entity-query-controller" + "edge-controller" ], - "summary": "Find Entity Data by Query", - "description": "Allows to run complex queries over platform entities (devices, assets, customers, etc) based on the combination of main entity filter and multiple key filters. Returns the paginated result of the query that contains requested entity fields and latest values of requested attributes and time series data.\n\n# Query Definition\n\n\n\nMain **entity filter** is mandatory and defines generic search criteria. For example, \"find all devices with profile 'Moisture Sensor'\" or \"Find all devices related to asset 'Building A'\"\n\nOptional **key filters** allow to filter results of the **entity filter** by complex criteria against main entity fields (name, label, type, etc), attributes and telemetry. For example, \"temperature > 20 or temperature< 10\" or \"name starts with 'T', and attribute 'model' is 'T1000', and time series field 'batteryLevel' > 40\".\n\nThe **entity fields** and **latest values** contains list of entity fields and latest attribute/telemetry fields to fetch for each entity.\n\nThe **page link** contains information about the page to fetch and the sort ordering.\n\nLet's review the example:\n\n```json\n{\n \"entityFilter\": {\n \"type\": \"entityType\",\n \"resolveMultiple\": true,\n \"entityType\": \"DEVICE\"\n },\n \"keyFilters\": [\n {\n \"key\": {\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n },\n \"valueType\": \"NUMERIC\",\n \"predicate\": {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 0,\n \"dynamicValue\": {\n \"sourceType\": \"CURRENT_USER\",\n \"sourceAttribute\": \"temperatureThreshold\",\n \"inherit\": false\n }\n },\n \"type\": \"NUMERIC\"\n }\n }\n ],\n \"entityFields\": [\n {\n \"type\": \"ENTITY_FIELD\",\n \"key\": \"name\"\n },\n {\n \"type\": \"ENTITY_FIELD\",\n \"key\": \"label\"\n },\n {\n \"type\": \"ENTITY_FIELD\",\n \"key\": \"additionalInfo\"\n }\n ],\n \"latestValues\": [\n {\n \"type\": \"ATTRIBUTE\",\n \"key\": \"model\"\n },\n {\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n }\n ],\n \"pageLink\": {\n \"page\": 0,\n \"pageSize\": 10,\n \"sortOrder\": {\n \"key\": {\n \"key\": \"name\",\n \"type\": \"ENTITY_FIELD\"\n },\n \"direction\": \"ASC\"\n }\n }\n}\n```\n\n Example mentioned above search all devices which have attribute 'active' set to 'true'. Now let's review available entity filters and key filters syntax:\n\n # Entity Filters\nEntity Filter body depends on the 'type' parameter. Let's review available entity filter types. In fact, they do correspond to available dashboard aliases.\n\n## Single Entity\n\nAllows to filter only one entity based on the id. For example, this entity filter selects certain device:\n\n```json\n{\n \"type\": \"singleEntity\",\n \"singleEntity\": {\n \"id\": \"d521edb0-2a7a-11ec-94eb-213c95f54092\",\n \"entityType\": \"DEVICE\"\n }\n}\n```\n\n## Group Entities Filter\n\nAllows to filter multiple entities of the same type using the entity group type and id. For example, this entity filter selects all devices that belong to the group 'e52b0020-2a7a-11ec-94eb-213c95f54092':\n\n```json\n{\n \"type\": \"entityGroup\",\n \"groupType\": \"DEVICE\",\n \"entityGroup\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n}\n```\n\n## Entity List Filter\n\nAllows to filter entities of the same type using their ids. For example, this entity filter selects two devices:\n\n```json\n{\n \"type\": \"entityList\",\n \"entityType\": \"DEVICE\",\n \"entityList\": [\n \"e6501f30-2a7a-11ec-94eb-213c95f54092\",\n \"e6657bf0-2a7a-11ec-94eb-213c95f54092\"\n ]\n}\n```\n\n## Entity Name Filter\n\nAllows to filter entities of the same type using the **'starts with'** expression over entity name. For example, this entity filter selects all devices which name starts with 'Air Quality':\n\n```json\n{\n \"type\": \"entityName\",\n \"entityType\": \"DEVICE\",\n \"entityNameFilter\": \"Air Quality\"\n}\n```\n\n## Entity Type Filter\n\nAllows to filter entities based on their type (CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, etc)For example, this entity filter selects all tenant customers:\n\n```json\n{\n \"type\": \"entityType\",\n \"entityType\": \"CUSTOMER\"\n}\n```\n\n## Group List Filter\n\nReturn multiple groups of the same type using specified ids. For example, this entity filter selects 2 device groups (if they are present in the system) with ids 'e52b0020-2a7a-11ec-94eb-213c95f54092' and 'e52b0020-2a7a-11ec-94eb-213c95f54093':\n\n```json\n{\n \"type\": \"entityGroupList\",\n \"groupType\": \"DEVICE\",\n \"entityGroupList\": [\"e52b0020-2a7a-11ec-94eb-213c95f54092\", \"e52b0020-2a7a-11ec-94eb-213c95f54093\"]\n}\n```\n\n## Group Name Filter\n\nAllows to filter entity groups based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all devices which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityGroupName\",\n \"groupType\": \"DEVICE\",\n \"entityGroupNameFilter\": \"CAT\"\n}\n```\n\n## Entities by Group Name Filter\n\nAllows to filter entities that belong to group based on the entity type and the group name. Optional parameter 'ownerId' allows you to specify the owner of the group (Tenant or Customer, current user owner by default).For example, this entity filter selects all devices which belong to group 'Water Meters':\n\n```json\n{\n \"type\": \"entitiesByGroupName\",\n \"groupType\": \"DEVICE\",\n \"entityGroupNameFilter\": \"Water Meters\"\n}\n```\n\n Other example, this entity filter selects all devices which belong to group 'Water Meters' which in turn belongs to (sub-)Customer with id 'e52b0020-2a7a-11ec-94eb-213c95f54093': \n\n```json\n{\n \"type\": \"entitiesByGroupName\",\n \"ownerId\": {\"entityType\": \"CUSTOMER\",\"id\":\"e52b0020-2a7a-11ec-94eb-213c95f54093\"},\n \"groupType\": \"DEVICE\",\n \"entityGroupNameFilter\": \"Water Meters\"\n}\n```\n\n## Entity owner Filter\n\nAllows to fetch owner (Tenant or Customer) of the specified entity. For example, this entity filter selects owner of the device with id 'e52b0020-2a7a-11ec-94eb-213c95f54093':\n\n```json\n{\n \"type\": \"stateEntityOwner\",\n \"singleEntity\": {\n \"id\": \"d521edb0-2a7a-11ec-94eb-213c95f54092\",\n \"entityType\": \"DEVICE\"\n }\n}\n```\n\n## Asset Type Filter\n\nAllows to filter assets based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'charging station' assets which name starts with 'Tesla':\n\n```json\n{\n \"type\": \"assetType\",\n \"assetType\": \"charging station\",\n \"assetNameFilter\": \"Tesla\"\n}\n```\n\n## Device Type Filter\n\nAllows to filter devices based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Temperature Sensor' devices which name starts with 'ABC':\n\n```json\n{\n \"type\": \"deviceType\",\n \"deviceType\": \"Temperature Sensor\",\n \"deviceNameFilter\": \"ABC\"\n}\n```\n\n## Edge Type Filter\n\nAllows to filter edge instances based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Factory' edge instances which name starts with 'Nevada':\n\n```json\n{\n \"type\": \"edgeType\",\n \"edgeType\": \"Factory\",\n \"edgeNameFilter\": \"Nevada\"\n}\n```\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```\n\n## Api Usage Filter\n\nAllows to query for Api Usage based on optional customer id. If the customer id is not set, returns current tenant API usage.For example, this entity filter selects the 'Api Usage' entity for customer with id 'e6501f30-2a7a-11ec-94eb-213c95f54092':\n\n```json\n{\n \"type\": \"apiUsageState\",\n \"customerId\": {\n \"id\": \"d521edb0-2a7a-11ec-94eb-213c95f54092\",\n \"entityType\": \"CUSTOMER\"\n }\n}\n```\n\n## Relations Query Filter\n\nAllows to filter entities that are related to the provided root entity. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'filter' object allows you to define the relation type and set of acceptable entity types to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only those who match the 'filters'.\n\nFor example, this entity filter selects all devices and assets which are related to the asset with id 'e51de0c0-2a7a-11ec-94eb-213c95f54092':\n\n```json\n{\n \"type\": \"relationsQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e51de0c0-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 1,\n \"fetchLastLevelOnly\": false,\n \"filters\": [\n {\n \"relationType\": \"Contains\",\n \"entityTypes\": [\n \"DEVICE\",\n \"ASSET\"\n ]\n }\n ]\n}\n```\n\n## Asset Search Query\n\nAllows to filter assets that are related to the provided root entity. Filters related assets based on the relation type and set of asset types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'assetTypes' defines the type of the asset to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only assets that match 'relationType' and 'assetTypes' conditions.\n\nFor example, this entity filter selects 'charging station' assets which are related to the asset with id 'e51de0c0-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"assetSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e51de0c0-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 1,\n \"fetchLastLevelOnly\": false,\n \"relationType\": \"Contains\",\n \"assetTypes\": [\n \"charging station\"\n ]\n}\n```\n\n## Device Search Query\n\nAllows to filter devices that are related to the provided root entity. Filters related devices based on the relation type and set of device types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'deviceTypes' defines the type of the device to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\nFor example, this entity filter selects 'Charging port' and 'Air Quality Sensor' devices which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"deviceSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 2,\n \"fetchLastLevelOnly\": true,\n \"relationType\": \"Contains\",\n \"deviceTypes\": [\n \"Air Quality Sensor\",\n \"Charging port\"\n ]\n}\n```\n\n## Entity View Query\n\nAllows to filter entity views that are related to the provided root entity. Filters related entity views based on the relation type and set of entity view types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'entityViewTypes' defines the type of the entity view to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\nFor example, this entity filter selects 'Concrete mixer' entity views which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"entityViewSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 1,\n \"fetchLastLevelOnly\": false,\n \"relationType\": \"Contains\",\n \"entityViewTypes\": [\n \"Concrete mixer\"\n ]\n}\n```\n\n## Edge Search Query\n\nAllows to filter edge instances that are related to the provided root entity. Filters related edge instances based on the relation type and set of edge types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'deviceTypes' defines the type of the device to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\nFor example, this entity filter selects 'Factory' edge instances which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"deviceSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 2,\n \"fetchLastLevelOnly\": true,\n \"relationType\": \"Contains\",\n \"edgeTypes\": [\n \"Factory\"\n ]\n}\n```\n\n # Key Filters\nKey Filter allows you to define complex logical expressions over entity field, attribute or latest time series value. The filter is defined using 'key', 'valueType' and 'predicate' objects. Single Entity Query may have zero, one or multiple predicates. If multiple filters are defined, they are evaluated using logical 'AND'. The example below checks that temperature of the entity is above 20 degrees:\n\n```json\n{\n \"key\": {\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n },\n \"valueType\": \"NUMERIC\",\n \"predicate\": {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 20,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n}\n```\n\n Now let's review 'key', 'valueType' and 'predicate' objects in detail.\n\n## Filter Key\n\nFilter Key defines either entity field, attribute or telemetry. It is a JSON object that consists the key name and type. The following filter key types are supported: \n\n * 'CLIENT_ATTRIBUTE' - used for client attributes; \n * 'SHARED_ATTRIBUTE' - used for shared attributes; \n * 'SERVER_ATTRIBUTE' - used for server attributes; \n * 'ATTRIBUTE' - used for any of the above; \n * 'TIME_SERIES' - used for time series values; \n * 'ENTITY_FIELD' - used for accessing entity fields like 'name', 'label', etc. The list of available fields depends on the entity type; \n * 'ALARM_FIELD' - similar to entity field, but is used in alarm queries only; \n\n\n Let's review the example:\n\n```json\n{\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n}\n```\n\n## Value Type and Operations\n\nProvides a hint about the data type of the entity field that is defined in the filter key. The value type impacts the list of possible operations that you may use in the corresponding predicate. For example, you may use 'STARTS_WITH' or 'END_WITH', but you can't use 'GREATER_OR_EQUAL' for string values.The following filter value types and corresponding predicate operations are supported: \n\n * 'STRING' - used to filter any 'String' or 'JSON' values. Operations: EQUAL, NOT_EQUAL, STARTS_WITH, ENDS_WITH, CONTAINS, NOT_CONTAINS; \n * 'NUMERIC' - used for 'Long' and 'Double' values. Operations: EQUAL, NOT_EQUAL, GREATER, LESS, GREATER_OR_EQUAL, LESS_OR_EQUAL; \n * 'BOOLEAN' - used for boolean values. Operations: EQUAL, NOT_EQUAL;\n * 'DATE_TIME' - similar to numeric, transforms value to milliseconds since epoch. Operations: EQUAL, NOT_EQUAL, GREATER, LESS, GREATER_OR_EQUAL, LESS_OR_EQUAL; \n\n\n## Filter Predicate\n\nFilter Predicate defines the logical expression to evaluate. The list of available operations depends on the filter value type, see above. Platform supports 4 predicate types: 'STRING', 'NUMERIC', 'BOOLEAN' and 'COMPLEX'. The last one allows to combine multiple operations over one filter key.\n\nSimple predicate example to check 'value < 100': \n\n```json\n{\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 100,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n}\n```\n\nComplex predicate example, to check 'value < 10 or value > 20': \n\n```json\n{\n \"type\": \"COMPLEX\",\n \"operation\": \"OR\",\n \"predicates\": [\n {\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 10,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n },\n {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 20,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n ]\n}\n```\n\nMore complex predicate example, to check 'value < 10 or (value > 50 && value < 60)': \n\n```json\n{\n \"type\": \"COMPLEX\",\n \"operation\": \"OR\",\n \"predicates\": [\n {\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 10,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n },\n {\n \"type\": \"COMPLEX\",\n \"operation\": \"AND\",\n \"predicates\": [\n {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 50,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n },\n {\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 60,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n ]\n }\n ]\n}\n```\n\n You may also want to replace hardcoded values (for example, temperature > 20) with the more dynamic expression (for example, temperature > 'value of the tenant attribute with key 'temperatureThreshold'). It is possible to use 'dynamicValue' to define attribute of the tenant, customer or user that is performing the API call. See example below: \n\n```json\n{\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 0,\n \"dynamicValue\": {\n \"sourceType\": \"CURRENT_USER\",\n \"sourceAttribute\": \"temperatureThreshold\"\n }\n },\n \"type\": \"NUMERIC\"\n}\n```\n\n Note that you may use 'CURRENT_USER', 'CURRENT_CUSTOMER' and 'CURRENT_TENANT' as a 'sourceType'. The 'defaultValue' is used when the attribute with such a name is not defined for the chosen source.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "findEntityDataByQuery", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityDataQuery" - } + "summary": "Get Tenant Edges (getEdges)", + "description": "Returns a page of edges owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getEdges", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "required": true - }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the edge name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityData" + "$ref": "#/components/schemas/PageDataEdge" } } } @@ -61963,7 +62221,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -62081,55 +62339,19 @@ "ApiKeyForm": [] } ] - } - }, - "/api/entitiesQuery/find/keys": { + }, "post": { "tags": [ - "entity-query-controller" - ], - "summary": "Find Available Entity Keys by Query (deprecated)", - "description": "**Deprecated.** Use the V2 endpoint (`POST /api/v2/entitiesQuery/find/keys`) instead.\n\nReturns unique time series and/or attribute key names from entities matching the query.\n\nExecutes the Entity Data Query to find up to 100 entities, then fetches and aggregates all distinct key names.\n\nPrimarily used for UI features like autocomplete suggestions.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "findAvailableEntityKeysByQuery", - "parameters": [ - { - "name": "timeseries", - "in": "query", - "description": "When true, includes unique time series key names in the response.\nWhen false, the 'timeseries' list will be empty.", - "required": true, - "schema": { - "type": "boolean" - } - }, - { - "name": "attributes", - "in": "query", - "description": "When true, includes unique attribute key names in the response.\nWhen false, the 'attribute' list will be empty. Use 'scope' parameter to filter by attribute scope.", - "required": true, - "schema": { - "type": "boolean" - } - }, - { - "name": "scope", - "in": "query", - "description": "Filters attribute keys by scope. Only applies when 'attributes' is true.\nIf not specified, returns attribute keys from all scopes.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "SERVER_SCOPE", - "SHARED_SCOPE", - "CLIENT_SCOPE" - ] - } - } + "edge-controller" ], + "summary": "Find related edges (findEdgesByQuery)", + "description": "Returns all edges that are related to the specific entity. The entity id, relation type, edge types, depth of the search, and other query parameters defined using complex 'EdgeSearchQuery' object. See 'Model' tab of the Parameters for more info.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "findEdgesByQuery", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityDataQuery" + "$ref": "#/components/schemas/EdgeSearchQuery" } } }, @@ -62141,7 +62363,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AvailableEntityKeys" + "type": "array", + "items": { + "$ref": "#/components/schemas/Edge" + } } } } @@ -62267,7 +62492,6 @@ } } }, - "deprecated": true, "security": [ { "HttpLoginForm": [] @@ -62278,77 +62502,21 @@ ] } }, - "/api/v2/entitiesQuery/find/keys": { - "post": { + "/api/edges/enabled": { + "get": { "tags": [ - "entity-query-controller" - ], - "summary": "Find Available Entity Keys By Query", - "description": "Discovers unique time series and/or attribute key names available on entities that match the given query.\nWorks in two steps: first, the request body (an Entity Data Query) is executed to find matching entities\n(page size is capped at 100); then, all distinct key names are collected from those entities.\n\nOptionally, each key can include a sample — the most recent value (by timestamp) for that key\nacross all matched entities.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "findAvailableEntityKeysByQueryV2", - "parameters": [ - { - "name": "includeTimeseries", - "in": "query", - "description": "When true, includes unique time series keys in the response.\nWhen false, the 'timeseries' field is omitted. At least one of 'includeTimeseries' or 'includeAttributes' must be true.", - "required": false, - "schema": { - "type": "boolean", - "default": true - } - }, - { - "name": "includeAttributes", - "in": "query", - "description": "When true, includes unique attribute keys in the response.\nWhen false, the 'attributes' field is omitted. At least one of 'includeTimeseries' or 'includeAttributes' must be true.", - "required": false, - "schema": { - "type": "boolean", - "default": true - } - }, - { - "name": "scopes", - "in": "query", - "description": "Filters attribute keys by scope. Only applies when 'includeAttributes' is true.\nWhen not specified, scopes are auto-determined: all three scopes (server, client, shared) for device entities,\nserver scope only for other entity types.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "SERVER_SCOPE", - "SHARED_SCOPE", - "CLIENT_SCOPE" - ] - } - }, - { - "name": "includeSamples", - "in": "query", - "description": "When true, each key entry includes a 'sample' object with the most recent value and timestamp.\nWhen false, only key names are returned (sample is omitted from JSON).", - "required": false, - "schema": { - "type": "boolean", - "default": false - } - } + "edge-controller" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityDataQuery" - } - } - }, - "required": true - }, + "summary": "Is edges support enabled (isEdgesSupportEnabled)", + "description": "Returns 'true' if edges support enabled on server, 'false' - otherwise.", + "operationId": "isEdgesSupportEnabled", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AvailableEntityKeysV2" + "type": "boolean" } } } @@ -62364,7 +62532,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -62484,67 +62652,25 @@ ] } }, - "/api/relation": { + "/api/edges/list": { "get": { "tags": [ - "entity-relation-controller" + "edge-controller" ], - "summary": "Get Relation (getRelation)", - "description": "Returns relation object between two specified entities if present. Otherwise throws exception. \n\nIf the user has the authority of 'System Administrator', the server checks that 'from' and 'to' entities are owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that 'from' and 'to' entities are owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the 'from' and 'to' entities are assigned to the same customer.", - "operationId": "getRelation", + "summary": "Get Edges By Ids (getEdgeList)", + "description": "Requested edges must be owned by tenant or assigned to customer which user is performing the request.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getEdgeList", "parameters": [ { - "name": "fromId", - "in": "query", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fromType", - "in": "query", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "relationType", - "in": "query", - "description": "A string value representing relation type between entities. For example, 'Contains', 'Manages'. It can be any string value.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "relationTypeGroup", - "in": "query", - "description": "A string value representing relation type group. For example, 'COMMON'", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "toId", - "in": "query", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "toType", + "name": "edgeIds", "in": "query", - "description": "A string value representing the entity type. For example, 'DEVICE'", + "description": "A list of edges ids, separated by comma ','", "required": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], @@ -62554,7 +62680,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityRelation" + "type": "array", + "items": { + "$ref": "#/components/schemas/Edge" + } } } } @@ -62690,34 +62819,90 @@ ] } }, - "/api/relations": { - "post": { + "/api/entityGroup/{entityGroupId}/edges": { + "get": { "tags": [ - "entity-relation-controller" + "edge-controller" ], - "summary": "Find related entities (findEntityRelationsByQuery)", - "description": "Returns all entities that are related to the specific entity. The entity id, relation type, entity types, depth of the search, and other query parameters defined using complex 'EntityRelationsQuery' object. See 'Model' tab of the Parameters for more info.", - "operationId": "findEntityRelationsByQuery", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityRelationsQuery" - } + "summary": "Get edges by Entity Group Id (getEdgesByEntityGroupId)", + "description": "Returns a page of Edge objects that belongs to specified Entity Group Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEdgesByEntityGroupId", + "parameters": [ + { + "name": "entityGroupId", + "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the edge name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityRelation" - } + "$ref": "#/components/schemas/PageDataEdge" } } } @@ -62733,7 +62918,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -62851,28 +63036,28 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/license/activateInstance": { + "post": { "tags": [ - "entity-relation-controller" + "edge-controller" ], - "summary": "Delete common relations (deleteRelations)", - "description": "Deletes all the relations ('from' and 'to' direction) for the specified entity and relation type group: 'COMMON'. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer.", - "operationId": "deleteRelations", + "summary": "Activate edge instance (activateInstance)", + "description": "Activates edge license on license portal.", + "operationId": "activateInstance", "parameters": [ { - "name": "entityId", + "name": "licenseSecret", "in": "query", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "entityType", + "name": "releaseDate", "in": "query", - "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { "type": "string" @@ -62881,7 +63066,14 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + } }, "400": { "description": "Bad Request", @@ -62894,7 +63086,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -63014,53 +63206,31 @@ ] } }, - "/api/relations/from/{fromType}/{fromId}": { - "get": { + "/api/license/checkInstance": { + "post": { "tags": [ - "entity-relation-controller" + "edge-controller" ], - "summary": "Get List of Relations (findEntityRelationsByFrom)", - "description": "Returns list of relation objects for the specified entity by the 'from' direction. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer.", - "operationId": "findEntityRelationsByFrom", - "parameters": [ - { - "name": "fromType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fromId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "Check edge license (checkInstance)", + "description": "Checks license request from edge service by forwarding request to license portal.", + "operationId": "checkInstance", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } } }, - { - "name": "relationTypeGroup", - "in": "query", - "description": "A string value representing relation type group. For example, 'COMMON'", - "required": false, - "schema": { - "type": "string" - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityRelation" - } + "$ref": "#/components/schemas/JsonNode" } } } @@ -63076,7 +63246,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -63196,47 +63366,20 @@ ] } }, - "/api/relations/from/{fromType}/{fromId}/{relationType}": { + "/api/tenant/edge": { "get": { "tags": [ - "entity-relation-controller" + "edge-controller" ], - "summary": "Get List of Relations (findEntityRelationsByFromAndRelationType)", - "description": "Returns list of relation objects for the specified entity by the 'from' direction and relation type. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer.", - "operationId": "findEntityRelationsByFromAndRelationType", + "summary": "Get Tenant Edge by name (getTenantEdgeByName)", + "description": "Requested edge must be owned by tenant or customer that the user belongs to. Edge name is an unique property of edge. So it can be used to identify the edge.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getTenantEdgeByName", "parameters": [ { - "name": "fromType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fromId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "relationType", - "in": "path", - "description": "A string value representing relation type between entities. For example, 'Contains', 'Manages'. It can be any string value.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "relationTypeGroup", + "name": "edgeName", "in": "query", - "description": "A string value representing relation type group. For example, 'COMMON'", - "required": false, + "description": "Unique name of the edge", + "required": true, "schema": { "type": "string" } @@ -63248,10 +63391,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityRelation" - } + "$ref": "#/components/schemas/Edge" } } } @@ -63387,34 +63527,90 @@ ] } }, - "/api/relations/info": { - "post": { + "/api/tenant/edges": { + "get": { "tags": [ - "entity-relation-controller" + "edge-controller" ], - "summary": "Find related entity infos (findEntityRelationInfosByQuery)", - "description": "Returns all entity infos that are related to the specific entity. The entity id, relation type, entity types, depth of the search, and other query parameters defined using complex 'EntityRelationsQuery' object. See 'Model' tab of the Parameters for more info. Relation Info is an extension of the default Relation object that contains information about the 'from' and 'to' entity names. ", - "operationId": "findEntityRelationInfosByQuery", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityRelationsQuery" - } + "summary": "Get Tenant Edges (getTenantEdges)", + "description": "Returns a page of edges owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getTenantEdges", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "required": true - }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "type", + "in": "query", + "description": "A string value representing the edge type. For example, 'default'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the edge name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityRelationInfo" - } + "$ref": "#/components/schemas/PageDataEdge" } } } @@ -63430,7 +63626,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -63550,41 +63746,81 @@ ] } }, - "/api/relations/info/from/{fromType}/{fromId}": { + "/api/user/edges": { "get": { "tags": [ - "entity-relation-controller" + "edge-controller" ], - "summary": "Get List of Relation Infos (findEntityRelationInfosByFrom)", - "description": "Returns list of relation info objects for the specified entity by the 'from' direction. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer. Relation Info is an extension of the default Relation object that contains information about the 'from' and 'to' entity names. ", - "operationId": "findEntityRelationInfosByFrom", + "summary": "Get Edges (getUserEdges)", + "description": "Returns a page of edges available for current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getUserEdges", "parameters": [ { - "name": "fromType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string" + "type": "string", + "minimum": 1 } }, { - "name": "fromId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "type", + "in": "query", + "description": "A string value representing the edge type. For example, 'default'", + "required": false, "schema": { "type": "string" } }, { - "name": "relationTypeGroup", + "name": "textSearch", "in": "query", - "description": "A string value representing relation type group. For example, 'COMMON'", + "description": "The case insensitive 'substring' filter based on the edge name.", "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -63593,10 +63829,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityRelationInfo" - } + "$ref": "#/components/schemas/PageDataEdge" } } } @@ -63732,41 +63965,101 @@ ] } }, - "/api/relations/info/to/{toType}/{toId}": { + "/api/edge/{edgeId}/events": { "get": { "tags": [ - "entity-relation-controller" + "edge-event-controller" ], - "summary": "Get List of Relation Infos (findEntityRelationInfosByTo)", - "description": "Returns list of relation info objects for the specified entity by the 'to' direction. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer. Relation Info is an extension of the default Relation object that contains information about the 'from' and 'to' entity names. ", - "operationId": "findEntityRelationInfosByTo", + "summary": "Get Edge Events (getEdgeEvents)", + "description": "Returns a page of edge events for the requested edge. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. ", + "operationId": "getEdgeEvents", "parameters": [ { - "name": "toType", + "name": "edgeId", "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "toId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int32" } }, { - "name": "relationTypeGroup", + "name": "page", "in": "query", - "description": "A string value representing relation type group. For example, 'COMMON'", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the edge event type name.", "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "label", + "customerTitle" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "startTime", + "in": "query", + "description": "Timestamp. Edge events with creation time before it won't be queried", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "Timestamp. Edge events with creation time after it won't be queried", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } } ], "responses": { @@ -63775,10 +64068,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityRelationInfo" - } + "$ref": "#/components/schemas/PageDataEdgeEvent" } } } @@ -63914,43 +64204,14 @@ ] } }, - "/api/relations/to/{toType}/{toId}": { + "/api/entities/vc/branches": { "get": { "tags": [ - "entity-relation-controller" - ], - "summary": "Get List of Relations (findEntityRelationsByTo)", - "description": "Returns list of relation objects for the specified entity by the 'to' direction. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer.", - "operationId": "findEntityRelationsByTo", - "parameters": [ - { - "name": "toType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "toId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "relationTypeGroup", - "in": "query", - "description": "A string value representing relation type group. For example, 'COMMON'", - "required": false, - "schema": { - "type": "string" - } - } + "entities-version-control-controller" ], + "summary": "List branches (listBranches)", + "description": "Lists branches available in the remote repository. \n\nResponse example: \n```json\n[\n {\n \"name\": \"master\",\n \"default\": true\n },\n {\n \"name\": \"dev\",\n \"default\": false\n },\n {\n \"name\": \"dev-2\",\n \"default\": false\n }\n]\n```", + "operationId": "listBranches", "responses": { "200": { "description": "OK", @@ -63959,7 +64220,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/EntityRelation" + "$ref": "#/components/schemas/BranchInfo" } } } @@ -64096,47 +64357,39 @@ ] } }, - "/api/relations/to/{toType}/{toId}/{relationType}": { + "/api/entities/vc/diff/{entityType}/{internalEntityUuid}": { "get": { "tags": [ - "entity-relation-controller" + "entities-version-control-controller" ], - "summary": "Get List of Relations (findEntityRelationsByToAndRelationType)", - "description": "Returns list of relation objects for the specified entity by the 'to' direction and relation type. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer.", - "operationId": "findEntityRelationsByToAndRelationType", + "summary": "Compare entity data to version (compareEntityDataToVersion)", + "description": "Returns an object with current entity data and the one at a specific version. Entity data structure is the same as stored in a repository. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "compareEntityDataToVersion", "parameters": [ { - "name": "toType", + "name": "entityType", "in": "path", "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/EntityType" } }, { - "name": "toId", + "name": "internalEntityUuid", "in": "path", "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" - } - }, - { - "name": "relationType", - "in": "path", - "description": "A string value representing relation type between entities. For example, 'Contains', 'Manages'. It can be any string value.", - "required": true, - "schema": { - "type": "string" + "type": "string", + "format": "uuid" } }, { - "name": "relationTypeGroup", + "name": "versionId", "in": "query", - "description": "A string value representing relation type group. For example, 'COMMON'", - "required": false, + "description": "Version id, for example fd82625bdd7d6131cf8027b44ee967012ecaf990. Represents commit hash.", + "required": true, "schema": { "type": "string" } @@ -64148,10 +64401,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityRelation" - } + "$ref": "#/components/schemas/EntityDataDiff" } } } @@ -64287,19 +64537,19 @@ ] } }, - "/api/v2/relation": { + "/api/entities/vc/entity": { "post": { "tags": [ - "entity-relation-controller" + "entities-version-control-controller" ], - "summary": "Create Relation (saveRelation)", - "description": "Creates or updates a relation between two entities in the platform. Relations unique key is a combination of from/to entity id and relation type group and relation type. \n\nIf the user has the authority of 'System Administrator', the server checks that 'from' and 'to' entities are owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that 'from' and 'to' entities are owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the 'from' and 'to' entities are assigned to the same customer.", - "operationId": "saveRelation", + "summary": "Load entities version (loadEntitiesVersion)", + "description": "Loads specific version of remote entities (or single entity) by request. Supported entity types: CUSTOMER, ASSET, RULE_CHAIN, DASHBOARD, DEVICE_PROFILE, DEVICE, ENTITY_VIEW, WIDGETS_BUNDLE, CONVERTER, INTEGRATION, ROLE and USER group.\n\nThere are multiple types of request. Each of them requires branch name (`branch`) and version id (`versionId`). Request of type `SINGLE_ENTITY` is needed to restore a concrete version of a specific entity. It contains id of a remote entity (`externalEntityId`), internal entity id (`internalEntityId`) and additional configuration (`config`):\n- `loadRelations` - to update relations list (in case `saveRelations` option was enabled during version creation);\n- `loadAttributes` - to load entity attributes (if `saveAttributes` config option was enabled);\n- `loadCredentials` - to update device credentials (if `saveCredentials` option was enabled during version creation);\n- `loadPermissions` - when loading user group, to update group permission list;\n- `loadGroupEntities` - when loading an entity group, to load its entities as well;\n- `autoGenerateIntegrationKey` - if loading integration version, to autogenerate routing key.\n\nAn example of such request:\n```json\n{\n \"type\": \"SINGLE_ENTITY\",\n \n \"branch\": \"dev\",\n \"versionId\": \"b3c28d722d328324c7c15b0b30047b0c40011cf7\",\n \n \"externalEntityId\": {\n \"entityType\": \"DEVICE\",\n \"id\": \"b7944123-d4f4-11ec-847b-0f432358ab48\"\n },\n \"config\": {\n \"loadRelations\": false,\n \"loadAttributes\": true,\n \"loadCredentials\": true\n }\n}\n```\n\nAnother request type (`ENTITY_TYPE`) is needed to load specific version of the whole entity types. It contains a structure with entity types to load and configs for each entity type (`entityTypes`). For each specified entity type, the method will load all remote entities of this type that are present at the version. A config for each entity type contains the same options as in `SINGLE_ENTITY` request type, and additionally contains following options:\n- `removeOtherEntities` - to remove local entities that are not present on the remote - basically to overwrite local entity type with the remote one;\n- `findExistingEntityByName` - when you are loading some remote entities that are not yet present at this tenant, try to find existing entity by name and update it rather than create new.\n\nHere is an example of the request to completely restore version of the whole device entity type:\n```json\n{\n \"type\": \"ENTITY_TYPE\",\n\n \"branch\": \"dev\",\n \"versionId\": \"b3c28d722d328324c7c15b0b30047b0c40011cf7\",\n\n \"entityTypes\": {\n \"DEVICE\": {\n \"removeOtherEntities\": true,\n \"findExistingEntityByName\": false,\n \"loadRelations\": true,\n \"loadAttributes\": true,\n \"loadCredentials\": true\n }\n }\n}\n```\n\nThe response will contain generated request UUID that is to be used to check the status of operation via `getVersionLoadRequestStatus`.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "loadEntitiesVersion", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityRelation" + "$ref": "#/components/schemas/VersionLoadRequest" } } }, @@ -64311,7 +64561,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityRelation" + "type": "string", + "format": "uuid" } } } @@ -64445,64 +64696,30 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/entities/vc/entity/{entityType}/{versionId}": { + "get": { "tags": [ - "entity-relation-controller" + "entities-version-control-controller" ], - "summary": "Delete Relation (deleteRelation)", - "description": "Deletes a relation between two entities in the platform. \n\nIf the user has the authority of 'System Administrator', the server checks that 'from' and 'to' entities are owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that 'from' and 'to' entities are owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the 'from' and 'to' entities are assigned to the same customer.", - "operationId": "deleteRelation", + "summary": "List entities at version (listEntitiesAtVersion)", + "description": "Returns a list of remote entities of a specific entity type that are available at a concrete version. \nEach entity item in the result has `externalId` property. Entities order will be the same as in the repository.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "listEntitiesAtVersion", "parameters": [ { - "name": "fromId", - "in": "query", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fromType", - "in": "query", + "name": "entityType", + "in": "path", "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { - "type": "string" - } - }, - { - "name": "relationType", - "in": "query", - "description": "A string value representing relation type between entities. For example, 'Contains', 'Manages'. It can be any string value.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "relationTypeGroup", - "in": "query", - "description": "A string value representing relation type group. For example, 'COMMON'", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "toId", - "in": "query", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "$ref": "#/components/schemas/EntityType" } }, { - "name": "toType", - "in": "query", - "description": "A string value representing the entity type. For example, 'DEVICE'", + "name": "versionId", + "in": "path", + "description": "Version id, for example fd82625bdd7d6131cf8027b44ee967012ecaf990. Represents commit hash.", "required": true, "schema": { "type": "string" @@ -64515,7 +64732,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityRelation" + "type": "array", + "items": { + "$ref": "#/components/schemas/VersionedEntityInfo" + } } } } @@ -64651,96 +64871,23 @@ ] } }, - "/api/customer/{customerId}/entityViewInfos": { + "/api/entities/vc/entity/{requestId}/status": { "get": { "tags": [ - "entity-view-controller" + "entities-version-control-controller" ], - "summary": "Get Customer Entity View Infos (getCustomerEntityViewInfos)", - "description": "Returns a page of entity view info objects owned by the specified customer. Entity Views Info extends the Entity View with owner name. Entity Views limit the degree of exposure of the Device or Asset telemetry and attributes to the Customers. Every Entity View references exactly one entity (device or asset) and defines telemetry and attribute keys that will be visible to the assigned Customer. As a Tenant Administrator you are able to create multiple EVs per Device or Asset and assign them to different Customers. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerEntityViewInfos", + "summary": "Get version load request status (getVersionLoadRequestStatus)", + "description": "Returns the status of previously made version load request. The structure contains following parameters:\n- `done` - if the request was successfully processed;\n- `result` - a list of load results for each entity type:\n - `created` - created entities count;\n - `updated` - updated entities count;\n - `deleted` - removed entities count;\n - `groupsCreated` - created entity groups count;\n - `groupsUpdated` - updated entity groups count;\n - `groupsDeleted` - removed entity groups count.\n- `error` - if an error occurred during processing, error info:\n - `type` - error type;\n - `source` - an external id of remote entity;\n - `target` - if failed to find referenced entity by external id - this external id;\n - `message` - error message.\n\nAn example of successfully processed request status:\n```json\n{\n \"done\": true,\n \"result\": [\n {\n \"entityType\": \"DEVICE\",\n \"created\": 10,\n \"updated\": 5,\n \"deleted\": 5,\n \"groupsCreated\": 1,\n \"groupsUpdated\": 1,\n \"groupsDeleted\": 1\n },\n {\n \"entityType\": \"ASSET\",\n \"created\": 4,\n \"updated\": 0,\n \"deleted\": 8,\n \"groupsCreated\": 1,\n \"groupsUpdated\": 0,\n \"groupsDeleted\": 2\n }\n ]\n}\n```\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getVersionLoadRequestStatus", "parameters": [ { - "name": "customerId", + "name": "requestId", "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "description": "A string value representing the version control request id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "type", - "in": "query", - "description": "\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the entity view name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, "schema": { "type": "string", - "enum": [ - "createdTime", - "name", - "type" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "format": "uuid" } } ], @@ -64750,7 +64897,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityViewInfo" + "$ref": "#/components/schemas/VersionLoadResult" } } } @@ -64886,88 +65033,23 @@ ] } }, - "/api/customer/{customerId}/entityViews": { + "/api/entities/vc/entity/{versionId}": { "get": { "tags": [ - "entity-view-controller" + "entities-version-control-controller" ], - "summary": "Get Customer Entity Views (getCustomerEntityViews)", - "description": "Returns a page of Entity View objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getCustomerEntityViews", + "summary": "List all entities at version (listAllEntitiesAtVersion)", + "description": "Returns a list of all remote entities available in a specific version. Response type is the same as for listAllEntitiesAtVersion API method. \nReturned entities order will be the same as in the repository.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "listAllEntitiesAtVersion", "parameters": [ { - "name": "customerId", + "name": "versionId", "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Version id, for example fd82625bdd7d6131cf8027b44ee967012ecaf990. Represents commit hash.", "required": true, "schema": { "type": "string" } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "type", - "in": "query", - "description": "\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the entity view name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -64976,7 +65058,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityView" + "type": "array", + "items": { + "$ref": "#/components/schemas/VersionedEntityInfo" + } } } } @@ -65112,78 +65197,51 @@ ] } }, - "/api/entityGroup/{entityGroupId}/entityViews": { + "/api/entities/vc/info/{versionId}/{entityType}/{externalEntityUuid}": { "get": { "tags": [ - "entity-view-controller" + "entities-version-control-controller" ], - "summary": "Get entity views by Entity Group Id (getEntityViewsByEntityGroupId)", - "description": "Returns a page of Entity View objects that belongs to specified Entity View Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getEntityViewsByEntityGroupId", + "summary": "Get entity data info (getEntityDataInfo)", + "description": "Retrieves short info about the remote entity by external id at a concrete version. \nReturned entity data info contains following properties: `hasRelations` (whether stored entity data contains relations), `hasAttributes` (contains attributes), `hasCredentials` (whether stored device data has credentials), `hasPermissions` (user group data contains group permission list) and `hasGroupEntities` (entity group data contains group entities).\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getEntityDataInfo", "parameters": [ { - "name": "entityGroupId", + "name": "versionId", "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Version id, for example fd82625bdd7d6131cf8027b44ee967012ecaf990. Represents commit hash.", "required": true, "schema": { "type": "string" } }, { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { - "type": "string", - "minimum": 1 + "$ref": "#/components/schemas/EntityType" } }, { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "externalEntityUuid", + "in": "path", + "description": "A string value representing external entity id", "required": true, "schema": { "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the entity view name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type" - ] + "format": "uuid" } }, { - "name": "sortOrder", + "name": "internalEntityId", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": false, "schema": { "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "format": "uuid" } } ], @@ -65193,7 +65251,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityView" + "$ref": "#/components/schemas/EntityDataInfo" } } } @@ -65329,83 +65387,86 @@ ] } }, - "/api/entityView": { - "post": { + "/api/entities/vc/version": { + "get": { "tags": [ - "entity-view-controller" + "entities-version-control-controller" ], - "summary": "Save or update entity view (saveEntityView)", - "description": "Entity Views limit the degree of exposure of the Device or Asset telemetry and attributes to the Customers. Every Entity View references exactly one entity (device or asset) and defines telemetry and attribute keys that will be visible to the assigned Customer. As a Tenant Administrator you are able to create multiple EVs per Device or Asset and assign them to different Customers. See the 'Model' tab for more details.Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Entity View entity.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "saveEntityView", + "summary": "List all versions (listVersions)", + "description": "Lists all available versions in a branch for all entity types. \nIf specified branch does not exist - empty page data will be returned. The response format is the same as for `listEntityVersions` API method.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "listVersions", "parameters": [ { - "name": "entityGroupId", + "name": "branch", "in": "query", - "required": false, + "description": "The name of the working branch, for example 'master'", + "required": true, "schema": { "type": "string" } }, { - "name": "entityGroupIds", + "name": "pageSize", "in": "query", - "description": "A list of entity group ids, separated by comma ','", - "required": false, + "description": "Maximum amount of entities in a one page", + "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "integer", + "format": "int32" } }, { - "name": "nameConflictPolicy", + "name": "page", "in": "query", - "description": "Optional value of name conflict policy. Possible values: FAIL or UNIQUIFY. If omitted, FAIL policy is applied. FAIL policy implies exception will be thrown if an entity with the same name already exists. UNIQUIFY policy appends a suffix to the entity name, if a name conflict occurs.", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the entity version name.", "required": false, "schema": { - "$ref": "#/components/schemas/NameConflictPolicy", - "default": "FAIL" + "type": "string" } }, { - "name": "uniquifySeparator", + "name": "sortProperty", "in": "query", - "description": "Optional value of name suffix separator used by UNIQUIFY policy. By default, underscore separator is used. For example, strategy is UNIQUIFY, separator is '-'; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-7fsh4f'.", + "description": "Property of entity to sort by", "required": false, "schema": { "type": "string", - "default": "_" + "enum": [ + "timestamp" + ] } }, { - "name": "uniquifyStrategy", + "name": "sortOrder", "in": "query", - "description": "Optional value of uniquify strategy used by UNIQUIFY policy. Possible values: RANDOM or INCREMENTAL. By default, RANDOM strategy is used, which means random alphanumeric string will be added as a suffix to entity name. INCREMENTAL implies the first possible number starting from 1 will be added as a name suffix. For example, strategy is UNIQUIFY, uniquify strategy is INCREMENTAL; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-1.", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "$ref": "#/components/schemas/UniquifyStrategy", - "default": "RANDOM" + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityView" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityView" + "$ref": "#/components/schemas/PageDataEntityVersion" } } } @@ -65421,7 +65482,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -65539,34 +65600,32 @@ "ApiKeyForm": [] } ] - } - }, - "/api/entityView/info/{entityViewId}": { - "get": { + }, + "post": { "tags": [ - "entity-view-controller" + "entities-version-control-controller" ], - "summary": "Get entity view info (getEntityViewInfoById)", - "description": "Fetch the Entity View info object based on the provided entity view id. Entity Views Info extends the Entity View with owner name. Entity Views limit the degree of exposure of the Device or Asset telemetry and attributes to the Customers. Every Entity View references exactly one entity (device or asset) and defines telemetry and attribute keys that will be visible to the assigned Customer. As a Tenant Administrator you are able to create multiple EVs per Device or Asset and assign them to different Customers. See the 'Model' tab for more details.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getEntityViewInfoById", - "parameters": [ - { - "name": "entityViewId", - "in": "path", - "description": "A string value representing the entity view id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "Save entities version (saveEntitiesVersion)", + "description": "Creates a new version of entities (or a single entity) by request.\nSupported entity types: CUSTOMER, ASSET, RULE_CHAIN, DASHBOARD, DEVICE_PROFILE, DEVICE, ENTITY_VIEW, WIDGETS_BUNDLE, CONVERTER, INTEGRATION, ROLE and USER group.\n\nThere are two available types of request: `SINGLE_ENTITY` and `COMPLEX`. Each of them contains version name (`versionName`) and name of a branch (`branch`) to create version (commit) in. If specified branch does not exists in a remote repo, then new empty branch will be created. Request of the `SINGLE_ENTITY` type has id of an entity (`entityId`) and additional configuration (`config`) which has following options: \n- `saveRelations` - whether to add inbound and outbound relations of type COMMON to created entity version;\n- `saveAttributes` - to save attributes of server scope (and also shared scope for devices);\n- `saveCredentials` - when saving a version of a device, to add its credentials to the version;\n- `savePermissions` - when saving a user group - to save group permission list;\n- `saveGroupEntities` - when saving an entity group - to save its entities as well.\n\nAn example of a `SINGLE_ENTITY` version create request:\n```json\n{\n \"type\": \"SINGLE_ENTITY\",\n\n \"versionName\": \"Version 1.0\",\n \"branch\": \"dev\",\n\n \"entityId\": {\n \"entityType\": \"DEVICE\",\n \"id\": \"b79448e0-d4f4-11ec-847b-0f432358ab48\"\n },\n \"config\": {\n \"saveRelations\": true,\n \"saveAttributes\": true,\n \"saveCredentials\": false\n }\n}\n```\n\nSecond request type (`COMPLEX`), additionally to `branch` and `versionName`, contains following properties:\n- `entityTypes` - a structure with entity types to export and configuration for each entity type; this configuration has all the options available for `SINGLE_ENTITY` and additionally has these ones: \n - `allEntities` and `entityIds` - if you want to save the version of all entities of the entity type then set `allEntities` param to true, otherwise set it to false and specify `entityIds` - in case entity type is group entity, list of specific entity groups, or if not - list of entities;\n - `syncStrategy` - synchronization strategy to use for this entity type: when set to `OVERWRITE` then the list of remote entities of this type will be overwritten by newly added entities. If set to `MERGE` - existing remote entities of this entity type will not be removed, new entities will just be added on top (or existing remote entities will be updated).\n- `syncStrategy` - default synchronization strategy to use when it is not specified for an entity type.\n\nExample for this type of request:\n```json\n{\n \"type\": \"COMPLEX\",\n\n \"versionName\": \"Devices and profiles: release 2\",\n \"branch\": \"master\",\n\n \"syncStrategy\": \"OVERWRITE\",\n \"entityTypes\": {\n \"DEVICE\": {\n \"syncStrategy\": null,\n \"allEntities\": true,\n \"saveRelations\": true,\n \"saveAttributes\": true,\n \"saveCredentials\": true\n },\n \"DEVICE_PROFILE\": {\n \"syncStrategy\": \"MERGE\",\n \"allEntities\": false,\n \"entityIds\": [\n \"b79448e0-d4f4-11ec-847b-0f432358ab48\"\n ],\n \"saveRelations\": true\n }\n }\n}\n```\n\nResponse wil contain generated request UUID, that can be then used to retrieve status of operation via `getVersionCreateRequestStatus`.\n\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveEntitiesVersion", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VersionCreateRequest" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityViewInfo" + "type": "string", + "format": "uuid" } } } @@ -65582,7 +65641,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -65702,24 +65761,95 @@ ] } }, - "/api/entityView/types": { + "/api/entities/vc/version/{entityType}": { "get": { "tags": [ - "entity-view-controller" + "entities-version-control-controller" + ], + "summary": "List entity type versions (listEntityTypeVersions)", + "description": "Returns list of versions of an entity type in a branch. This is a collected list of versions that were created for entities of this type in a remote branch. \nIf specified branch does not exist - empty page data will be returned. The response structure is the same as for `listEntityVersions` API method.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "listEntityTypeVersions", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "$ref": "#/components/schemas/EntityType" + } + }, + { + "name": "branch", + "in": "query", + "description": "The name of the working branch, for example 'master'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the entity version name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "timestamp" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } ], - "summary": "Get Entity View Types (getEntityViewTypes)", - "description": "Returns a set of unique entity view types based on entity views that are either owned by the tenant or assigned to the customer which user is performing the request.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getEntityViewTypes", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntitySubtype" - } + "$ref": "#/components/schemas/PageDataEntityVersion" } } } @@ -65855,23 +65985,105 @@ ] } }, - "/api/entityView/{entityViewId}": { + "/api/entities/vc/version/{entityType}/{externalEntityUuid}": { "get": { "tags": [ - "entity-view-controller" + "entities-version-control-controller" ], - "summary": "Get entity view (getEntityViewById)", - "description": "Fetch the EntityView object based on the provided entity view id. Entity Views limit the degree of exposure of the Device or Asset telemetry and attributes to the Customers. Every Entity View references exactly one entity (device or asset) and defines telemetry and attribute keys that will be visible to the assigned Customer. As a Tenant Administrator you are able to create multiple EVs per Device or Asset and assign them to different Customers. See the 'Model' tab for more details.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getEntityViewById", + "summary": "List entity versions (listEntityVersions)", + "description": "Returns list of versions for a specific entity in a concrete branch. \nYou need to specify external id of an entity to list versions for. This is `externalId` property of an entity, or otherwise if not set - simply id of this entity. \nIf specified branch does not exist - empty page data will be returned. \n\nEach version info item has timestamp, id, name and author. Version id can then be used to restore the version. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nResponse example: \n```json\n{\n \"data\": [\n {\n \"timestamp\": 1655198593000,\n \"id\": \"fd82625bdd7d6131cf8027b44ee967012ecaf990\",\n \"name\": \"Devices and assets - v2.0\",\n \"author\": \"John Doe (johndoe@gmail.com)\"\n },\n {\n \"timestamp\": 1655198528000,\n \"id\": \"682adcffa9c8a2f863af6f00c4850323acbd4219\",\n \"name\": \"Update my device\",\n \"author\": \"John Doe (johndoe@gmail.com)\"\n },\n {\n \"timestamp\": 1655198280000,\n \"id\": \"d2a6087c2b30e18cc55e7cdda345a8d0dfb959a4\",\n \"name\": \"Devices and assets - v1.0\",\n \"author\": \"John Doe (johndoe@gmail.com)\"\n }\n ],\n \"totalPages\": 1,\n \"totalElements\": 3,\n \"hasNext\": false\n}\n```\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "listEntityVersions", "parameters": [ { - "name": "entityViewId", + "name": "entityType", "in": "path", - "description": "A string value representing the entity view id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "$ref": "#/components/schemas/EntityType" + } + }, + { + "name": "externalEntityUuid", + "in": "path", + "description": "A string value representing external entity id. This is `externalId` property of an entity, or otherwise if not set - simply id of this entity.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "branch", + "in": "query", + "description": "The name of the working branch, for example 'master'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "internalEntityId", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the entity version name.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "timestamp" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -65880,7 +66092,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityView" + "$ref": "#/components/schemas/PageDataEntityVersion" } } } @@ -66014,28 +66226,38 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/entities/vc/version/{requestId}/status": { + "get": { "tags": [ - "entity-view-controller" + "entities-version-control-controller" ], - "summary": "Delete entity view (deleteEntityView)", - "description": "Delete the EntityView object based on the provided entity view id. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "deleteEntityView", + "summary": "Get version create request status (getVersionCreateRequestStatus)", + "description": "Returns the status of previously made version create request. \n\nThis status contains following properties:\n- `done` - whether request processing is finished;\n- `version` - created version info: timestamp, version id (commit hash), commit name and commit author;\n- `added` - count of items that were created in the remote repo;\n- `modified` - modified items count;\n- `removed` - removed items count;\n- `error` - error message, if an error occurred while handling the request.\n\nAn example of successful status:\n```json\n{\n \"done\": true,\n \"added\": 10,\n \"modified\": 2,\n \"removed\": 5,\n \"version\": {\n \"timestamp\": 1655198528000,\n \"id\":\"8a834dd389ed80e0759ba8ee338b3f1fd160a114\",\n \"name\": \"My devices v2.0\",\n \"author\": \"John Doe\"\n },\n \"error\": null\n}\n```\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getVersionCreateRequestStatus", "parameters": [ { - "name": "entityViewId", + "name": "requestId", "in": "path", - "description": "A string value representing the entity view id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the version control request id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VersionCreationResult" + } + } + } }, "400": { "description": "Bad Request", @@ -66168,86 +66390,37 @@ ] } }, - "/api/entityViewInfos/all": { + "/api/allEntityGroups/edge/{edgeId}/{groupType}": { "get": { "tags": [ - "entity-view-controller" + "entity-group-controller" ], - "summary": "Get All Entity View Infos for current user (getAllEntityViewInfos)", - "description": "Returns a page of entity view info objects owned by the tenant or the customer of a current user. Entity Views Info extends the Entity View with owner name. Entity Views limit the degree of exposure of the Device or Asset telemetry and attributes to the Customers. Every Entity View references exactly one entity (device or asset) and defines telemetry and attribute keys that will be visible to the assigned Customer. As a Tenant Administrator you are able to create multiple EVs per Device or Asset and assign them to different Customers. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAllEntityViewInfos", + "summary": "Get All Edge Entity Groups by entity type (getAllEdgeEntityGroups)", + "description": "Fetch the list of Entity Group Info objects based on the provided Entity Type and assigned to the provided Edge entity. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAllEdgeEntityGroups", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "edgeId", + "in": "path", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "type", - "in": "query", - "description": "\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the entity view name.", - "required": false, "schema": { "type": "string" } }, { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, + "name": "groupType", + "in": "path", + "description": "EntityGroup type", + "required": true, "schema": { "type": "string", "enum": [ - "ASC", - "DESC" + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD" ] } } @@ -66258,7 +66431,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityViewInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityGroupInfo" + } } } } @@ -66394,34 +66570,57 @@ ] } }, - "/api/entityViews": { + "/api/edge/{edgeId}/entityGroup/{entityGroupId}/{groupType}": { "post": { "tags": [ - "entity-view-controller" + "entity-group-controller" ], - "summary": "Find related entity views (findEntityViewsByQuery)", - "description": "Returns all entity views that are related to the specific entity. The entity id, relation type, entity view types, depth of the search, and other query parameters defined using complex 'EntityViewSearchQuery' object. See 'Model' tab of the Parameters for more info.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "findEntityViewsByQuery", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityViewSearchQuery" - } + "summary": "Assign entity group to edge (assignEntityGroupToEdge)", + "description": "Creates assignment of an existing entity group to an instance of The Edge. Assignment works in async way - first, notification event pushed to edge service queue on platform. Second, remote edge service will receive a copy of assignment entity group (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once entity group will be delivered to edge service, edge will request entities of this group to be send to edge. Once entities will be delivered to edge service, they are going to be available for usage on remote edge instance.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "assignEntityGroupToEdge", + "parameters": [ + { + "name": "edgeId", + "in": "path", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "groupType", + "in": "path", + "description": "EntityGroup type", + "required": true, + "schema": { + "type": "string", + "enum": [ + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD" + ] + } + }, + { + "name": "entityGroupId", + "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityView" - } + "$ref": "#/components/schemas/EntityGroup" } } } @@ -66555,27 +66754,47 @@ "ApiKeyForm": [] } ] - } - }, - "/api/entityViews/list": { - "get": { + }, + "delete": { "tags": [ - "entity-view-controller" + "entity-group-controller" ], - "summary": "Get Entity Views By Ids (getEntityViewsByIds)", - "description": "Requested entity views must be owned by tenant or assigned to customer which user is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getEntityViewsByIds", + "summary": "Unassign entity group from edge (unassignEntityGroupFromEdge)", + "description": "Clears assignment of the entity group to the edge. Unassignment works in async way - first, 'unassign' notification event pushed to edge queue on platform. Second, remote edge service will receive an 'unassign' command to remove entity group (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once 'unassign' command will be delivered to edge service, it's going to remove entity group and entities inside this group locally.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "unassignEntityGroupFromEdge", "parameters": [ { - "name": "entityViewIds", - "in": "query", - "description": "A list of entity view ids, separated by comma ','", + "name": "edgeId", + "in": "path", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" + } + }, + { + "name": "groupType", + "in": "path", + "description": "EntityGroup type", + "required": true, + "schema": { + "type": "string", + "enum": [ + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD" + ] + } + }, + { + "name": "entityGroupId", + "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } } ], @@ -66585,10 +66804,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityView" - } + "$ref": "#/components/schemas/EntityGroup" } } } @@ -66724,32 +66940,31 @@ ] } }, - "/api/tenant/entityView": { - "get": { + "/api/entityGroup": { + "post": { "tags": [ - "entity-view-controller" + "entity-group-controller" ], - "summary": "Get Entity View by name (getTenantEntityViewByName)", - "description": "Fetch the Entity View object based on the tenant id and entity view name. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getTenantEntityViewByName", - "parameters": [ - { - "name": "entityViewName", - "in": "query", - "description": "Entity View name", - "required": true, - "schema": { - "type": "string" + "summary": "Create Or Update Entity Group (saveEntityGroup)", + "description": "Create or update the Entity Group. When creating Entity Group, platform generates Entity Group Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Entity Group Id will be present in the response. Specify existing Entity Group Id to update the group. Referencing non-existing Entity Group Id will cause 'Not Found' error.Remove 'id', 'tenantId' and optionally 'ownerId' from the request body example (below) to create new Entity Group entity. When 'ownerId' is not set (or null), it defaults to the current user's owner (Tenant for tenant admins, Customer for customer users). \n\nEntity group name is unique in the scope of owner and entity type. For example, you can't create two tenant device groups called 'Water meters'. However, you may create device and asset group with the same name. And also you may create groups with the same name for two different customers of the same tenant. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", + "operationId": "saveEntityGroup", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityGroup" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityView" + "$ref": "#/components/schemas/EntityGroupInfo" } } } @@ -66765,7 +66980,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -66885,77 +67100,53 @@ ] } }, - "/api/tenant/entityViews": { + "/api/entityGroup/all/{ownerType}/{ownerId}/{groupType}": { "get": { "tags": [ - "entity-view-controller" + "entity-group-controller" ], - "summary": "Get Tenant Entity Views (getTenantEntityViews)", - "description": "Returns a page of entity views owned by tenant. Entity Views limit the degree of exposure of the Device or Asset telemetry and attributes to the Customers. Every Entity View references exactly one entity (device or asset) and defines telemetry and attribute keys that will be visible to the assigned Customer. As a Tenant Administrator you are able to create multiple EVs per Device or Asset and assign them to different Customers. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getTenantEntityViews", + "summary": "Get special group All by owner and entity type (getEntityGroupsByOwnerAndType)", + "description": "Fetch reserved group 'All' based on the provided Owner Id and Entity Type. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityGroupAllByOwnerAndType", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", + "name": "ownerType", + "in": "path", + "description": "Tenant or Customer", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "enum": [ + "TENANT", + "CUSTOMER" + ] } }, { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "ownerId", + "in": "path", + "description": "A string value representing the Tenant or Customer id", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "type", - "in": "query", - "description": "\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the entity view name.", - "required": false, "schema": { "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type" - ] - } + }, + "example": "784f394c-42b6-435a-983c-b7beff2784f9" }, { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, + "name": "groupType", + "in": "path", + "description": "Entity Group type", + "required": true, "schema": { "type": "string", "enum": [ - "ASC", - "DESC" + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" ] } } @@ -66966,7 +67157,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityView" + "$ref": "#/components/schemas/EntityGroupInfo" } } } @@ -67102,79 +67293,23 @@ ] } }, - "/api/user/entityViews": { + "/api/entityGroup/{entityGroupId}": { "get": { "tags": [ - "entity-view-controller" + "entity-group-controller" ], - "summary": "Get Entity Views (getUserEntityViews)", - "description": "Returns a page of entity views that are available for the current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getUserEntityViews", + "summary": "Get Entity Group Info (getEntityGroupById)", + "description": "Fetch the Entity Group object based on the provided Entity Group Id. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nEntity group name is unique in the scope of owner and entity type. For example, you can't create two tenant device groups called 'Water meters'. However, you may create device and asset group with the same name. And also you may create groups with the same name for two different customers of the same tenant. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityGroupById", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "entityGroupId", + "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "type", - "in": "query", - "description": "\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```", - "required": false, "schema": { "type": "string" } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the entity view name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -67183,7 +67318,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityView" + "$ref": "#/components/schemas/EntityGroupInfo" } } } @@ -67317,117 +67452,176 @@ "ApiKeyForm": [] } ] - } - }, - "/api/events/{entityType}/{entityId}": { - "post": { + }, + "delete": { "tags": [ - "event-controller" + "entity-group-controller" ], - "summary": "Get Events by event filter (getEventsByFilter)", - "description": "Returns a page of events for the chosen entity by specifying the event filter. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n# Event Filter Definition\n\n6 different eventFilter objects could be set for different event types. The eventType field is required. Others are optional. If some of them are set, the filtering will be applied according to them. See the examples below for all the fields used for each event type filtering. \n\nNote,\n\n * 'server' - string value representing the server name, identif ier or ip address where the platform is running;\n * 'errorStr' - the case insensitive 'contains' filter based on error message.\n\n## Error Event Filter\n\n```json\n{\n \"eventType\":\"ERROR\",\n \"server\":\"ip-172-31-24-152\",\n \"method\":\"onClusterEventMsg\",\n \"errorStr\":\"Error Message\"\n}\n```\n\n * 'method' - string value representing the method name when the error happened.\n\n## Lifecycle Event Filter\n\n```json\n{\n \"eventType\":\"LC_EVENT\",\n \"server\":\"ip-172-31-24-152\",\n \"event\":\"STARTED\",\n \"status\":\"Success\",\n \"errorStr\":\"Error Message\"\n}\n```\n\n * 'event' - string value representing the lifecycle event type;\n * 'status' - string value representing status of the lifecycle event.\n\n## Statistics Event Filter\n\n```json\n{\n \"eventType\":\"STATS\",\n \"server\":\"ip-172-31-24-152\",\n \"messagesProcessed\":10,\n \"errorsOccurred\":5\n}\n```\n\n * 'messagesProcessed' - the minimum number of successfully processed messages;\n * 'errorsOccurred' - the minimum number of errors occurred during messages processing.\n\n## Debug Rule Node Event Filter\n\n```json\n{\n \"eventType\":\"DEBUG_RULE_NODE\",\n \"msgDirectionType\":\"IN\",\n \"server\":\"ip-172-31-24-152\",\n \"dataSearch\":\"humidity\",\n \"metadataSearch\":\"deviceName\",\n \"entityName\":\"DEVICE\",\n \"relationType\":\"Success\",\n \"entityId\":\"de9d54a0-2b7a-11ec-a3cc-23386423d98f\",\n \"msgType\":\"POST_TELEMETRY_REQUEST\",\n \"isError\":\"false\",\n \"errorStr\":\"Error Message\"\n}\n```\n\n## Debug Rule Chain Event Filter\n\n```json\n{\n \"eventType\":\"DEBUG_RULE_CHAIN\",\n \"msgDirectionType\":\"IN\",\n \"server\":\"ip-172-31-24-152\",\n \"dataSearch\":\"humidity\",\n \"metadataSearch\":\"deviceName\",\n \"entityName\":\"DEVICE\",\n \"relationType\":\"Success\",\n \"entityId\":\"de9d54a0-2b7a-11ec-a3cc-23386423d98f\",\n \"msgType\":\"POST_TELEMETRY_REQUEST\",\n \"isError\":\"false\",\n \"errorStr\":\"Error Message\"\n}\n```\n\n * 'msgDirectionType' - string value representing msg direction type (incoming to entity or outcoming from entity);\n * 'dataSearch' - the case insensitive 'contains' filter based on data (key and value) for the message;\n * 'metadataSearch' - the case insensitive 'contains' filter based on metadata (key and value) for the message;\n * 'entityName' - string value representing the entity type;\n * 'relationType' - string value representing the type of message routing;\n * 'entityId' - string value representing the entity id in the event body (originator of the message);\n * 'msgType' - string value representing the message type;\n * 'isError' - boolean value to filter the errors.\n\n## Debug Calculated Field Event Filter\n\n```json\n{\n \"eventType\":\"DEBUG_CALCULATED_FIELD\",\n \"server\":\"ip-172-31-24-152\",\n \"isError\":\"false\",\n \"errorStr\":\"Error Message\"\n \"entityId\":\"cf4b8741-f618-471f-ae08-d881ca7f9fe9\",\n \"msgId\":\"5cf7d3a0-aee7-40dd-a737-ade05528e7eb\",\n \"msgType\":\"POST_TELEMETRY_REQUEST\",\n \"arguments\":\"{\n \"x\": {\n \"ts\": 1739432016629,\n \"value\": 20\n },\n \"y\": {\n \"ts\": 1739429717656,\n \"value\": 12\n }\n }\",\n \"result\":\"{\n \"x + y\": 32\n }\",\n}\n```\n\n * 'entityId' - string value representing the entity id in the event body;\n * 'entityType' - string value representing the entity type;\n * 'msgId' - string value representing the message id in the rule engine;\n * 'msgType' - string value representing the message type;\n * 'arguments' - string value representing the arguments that were used in the calculation performed;\n * 'result' - string value representing the result of a calculation;\n * 'isError' - boolean value to filter the errors.\n\n", - "operationId": "getEventsByFilter", + "summary": "Delete Entity Group (deleteEntityGroup)", + "description": "Deletes the entity group but does not delete the entities in the group, since they are also present in reserved group 'All'. Referencing non-existing Entity Group Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'DELETE' permission for specified group.", + "operationId": "deleteEntityGroup", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", + "name": "entityGroupId", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "description": "OK" }, - { - "name": "tenantId", - "in": "query", - "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "textSearch", - "in": "query", - "description": "The value is not used in searching.", - "required": false, - "schema": { - "type": "string" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ts", - "id" - ] + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } - }, + } + }, + "security": [ { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } + "HttpLoginForm": [] }, { - "name": "startTime", - "in": "query", - "description": "Timestamp. Events with creation time before it won't be queried.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, + "ApiKeyForm": [] + } + ] + } + }, + "/api/entityGroup/{entityGroupId}/addEntities": { + "post": { + "tags": [ + "entity-group-controller" + ], + "summary": "Add entities to the group (addEntitiesToEntityGroup)", + "description": "Add entities to the specified entity group. This operation is idempotent: entities that are already members of the group are silently ignored. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'ADD_TO_GROUP' permission for specified group.", + "operationId": "addEntitiesToEntityGroup", + "parameters": [ { - "name": "endTime", - "in": "query", - "description": "Timestamp. Events with creation time after it won't be queried.", - "required": false, + "name": "entityGroupId", + "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { - "type": "integer", - "format": "int64" + "type": "string" } } ], @@ -67435,7 +67629,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventFilter" + "type": "array", + "description": "A list of entity ids", + "items": { + "type": "string" + } } } }, @@ -67443,14 +67641,7 @@ }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataEventInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -67583,59 +67774,34 @@ ] } }, - "/api/events/{entityType}/{entityId}/clear": { + "/api/entityGroup/{entityGroupId}/deleteEntities": { "post": { "tags": [ - "event-controller" + "entity-group-controller" ], - "summary": "Clear Events (clearEvents)", - "description": "Clears events by filter for specified entity.", - "operationId": "clearEvents", + "summary": "Remove entities from the group (removeEntitiesFromEntityGroup)", + "description": "Removes entities from the specified entity group. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'REMOVE_FROM_GROUP' permission for specified group.", + "operationId": "removeEntitiesFromEntityGroup", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", + "name": "entityGroupId", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - }, - { - "name": "startTime", - "in": "query", - "description": "Timestamp. Events with creation time before it won't be queried.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTime", - "in": "query", - "description": "Timestamp. Events with creation time after it won't be queried.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventFilter" + "type": "array", + "description": "A list of entity ids", + "items": { + "type": "string" + } } } }, @@ -67776,47 +67942,19 @@ ] } }, - "/api/events/{entityType}/{entityId}/{eventType}": { + "/api/entityGroup/{entityGroupId}/entities": { "get": { "tags": [ - "event-controller" + "entity-group-controller" ], - "summary": "Get Events by type (getEventsByType)", - "description": "Returns a page of events for specified entity by specifying event type. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. ", - "operationId": "getEventsByType", + "summary": "Get Group Entities (getEntities)", + "description": "Returns a page of Short Entity View objects that belongs to specified Entity Group Id. Short Entity View object contains the entity id and number of fields (attributes, telemetry, etc). List of those fields is configurable and defined in the group configuration.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntities", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "eventType", + "name": "entityGroupId", "in": "path", - "description": "A string value representing event type", - "required": true, - "schema": { - "type": "string" - }, - "example": "STATS" - }, - { - "name": "tenantId", - "in": "query", - "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -67828,8 +67966,8 @@ "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "minimum": 1 } }, { @@ -67838,14 +67976,14 @@ "description": "Sequence number of page starting from 0", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "minimum": 0 } }, { "name": "textSearch", "in": "query", - "description": "The value is not used in searching.", + "description": "The case insensitive 'startsWith' filter based on the entity group name.", "required": false, "schema": { "type": "string" @@ -67857,11 +67995,7 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string", - "enum": [ - "ts", - "id" - ] + "type": "string" } }, { @@ -67876,26 +68010,6 @@ "DESC" ] } - }, - { - "name": "startTime", - "in": "query", - "description": "Timestamp. Events with creation time before it won't be queried.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTime", - "in": "query", - "description": "Timestamp. Events with creation time after it won't be queried.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } } ], "responses": { @@ -67904,7 +68018,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEventInfo" + "$ref": "#/components/schemas/PageDataShortEntityView" } } } @@ -68040,14 +68154,14 @@ ] } }, - "/api/entityGroup/{entityGroupId}/groupPermissions": { - "get": { + "/api/entityGroup/{entityGroupId}/makePrivate": { + "post": { "tags": [ - "group-permission-controller" + "entity-group-controller" ], - "summary": "Get group permissions by Entity Group Id (getEntityGroupPermissions)", - "description": "Returns a list of group permission objects that is assigned for the specified Entity Group Id. Group permission entity represents list of allowed operations for certain User Group to perform against certain Entity Group. Basically, this entity wires three other entities: \n\n * Role that defines set of allowed operations;\n * User Group that defines set of users who may perform the operations; \n * Entity Group that defines set of entities which will be accessible to users;\n\nThere are two types of group permissions depending on the Role type: \n\n * **Generic permission** — uses a GENERIC role. The 'entityGroupId' field must be null (or omitted). Grants the role's operations to all entities within the owner's scope (all tenant entities for tenant admins, only customer-owned entities for customer users).\n * **Group permission** — uses a GROUP role. The 'entityGroupId' field must reference a valid entity group. Grants the role's operations only to entities in the specified group.\n\nAssigning a GENERIC role with a non-null 'entityGroupId' will cause an error. The 'entityGroupType' field is auto-populated from the referenced entity group and should not be set manually. Duplicate permissions (same userGroupId + roleId + entityGroupId combination) are rejected.\n\n Group Permission Info object extends the Group Permissions with the full information about Role and User and/or Entity Groups. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getEntityGroupPermissions", + "summary": "Make Entity Group Private (makeEntityGroupPrivate)", + "description": "Make the entity group not available for non authorized users. Every group is private by default. This call is useful to hide the group that was previously made public.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", + "operationId": "makeEntityGroupPrivate", "parameters": [ { "name": "entityGroupId", @@ -68061,17 +68175,7 @@ ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GroupPermissionInfo" - } - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -68084,7 +68188,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -68204,34 +68308,28 @@ ] } }, - "/api/groupPermission": { + "/api/entityGroup/{entityGroupId}/makePublic": { "post": { "tags": [ - "group-permission-controller" + "entity-group-controller" ], - "summary": "Create Or Update Group Permission (saveGroupPermission)", - "description": "Creates or Updates the Group Permission. When creating group permission, platform generates Group Permission Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Group Permission id will be present in the response. Specify existing Group Permission id to update the permission. Referencing non-existing Group Permission Id will cause 'Not Found' error.\n\nGroup permission entity represents list of allowed operations for certain User Group to perform against certain Entity Group. Basically, this entity wires three other entities: \n\n * Role that defines set of allowed operations;\n * User Group that defines set of users who may perform the operations; \n * Entity Group that defines set of entities which will be accessible to users;\n\nThere are two types of group permissions depending on the Role type: \n\n * **Generic permission** — uses a GENERIC role. The 'entityGroupId' field must be null (or omitted). Grants the role's operations to all entities within the owner's scope (all tenant entities for tenant admins, only customer-owned entities for customer users).\n * **Group permission** — uses a GROUP role. The 'entityGroupId' field must reference a valid entity group. Grants the role's operations only to entities in the specified group.\n\nAssigning a GENERIC role with a non-null 'entityGroupId' will cause an error. The 'entityGroupType' field is auto-populated from the referenced entity group and should not be set manually. Duplicate permissions (same userGroupId + roleId + entityGroupId combination) are rejected.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "saveGroupPermission", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GroupPermission" - } + "summary": "Make Entity Group Publicly available (makeEntityGroupPublic)", + "description": "Make the entity group available for non authorized users. Useful for public dashboards that will be embedded into the public websites. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", + "operationId": "makeEntityGroupPublic", + "parameters": [ + { + "name": "entityGroupId", + "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GroupPermission" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -68364,45 +68462,39 @@ ] } }, - "/api/groupPermission/info/{groupPermissionId}": { - "get": { + "/api/entityGroup/{entityGroupId}/share": { + "post": { "tags": [ - "group-permission-controller" + "entity-group-controller" ], - "summary": "Get Group Permission Info (getGroupPermissionInfoById)", - "description": "Fetch the Group Permission Info object based on the provided Group Permission Id and the flag that controls what additional information to load: User or Entity Group. Group permission entity represents list of allowed operations for certain User Group to perform against certain Entity Group. Basically, this entity wires three other entities: \n\n * Role that defines set of allowed operations;\n * User Group that defines set of users who may perform the operations; \n * Entity Group that defines set of entities which will be accessible to users;\n\nThere are two types of group permissions depending on the Role type: \n\n * **Generic permission** — uses a GENERIC role. The 'entityGroupId' field must be null (or omitted). Grants the role's operations to all entities within the owner's scope (all tenant entities for tenant admins, only customer-owned entities for customer users).\n * **Group permission** — uses a GROUP role. The 'entityGroupId' field must reference a valid entity group. Grants the role's operations only to entities in the specified group.\n\nAssigning a GENERIC role with a non-null 'entityGroupId' will cause an error. The 'entityGroupType' field is auto-populated from the referenced entity group and should not be set manually. Duplicate permissions (same userGroupId + roleId + entityGroupId combination) are rejected.\n\n Group Permission Info object extends the Group Permissions with the full information about Role and User and/or Entity Groups. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getGroupPermissionInfoById", + "summary": "Share the Entity Group (shareEntityGroup)", + "description": "Share the entity group with certain user group based on the provided Share Group Request. The request is quite flexible and processing of the request involves multiple security checks using platform RBAC feature.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", + "operationId": "shareEntityGroup", "parameters": [ { - "name": "groupPermissionId", + "name": "entityGroupId", "in": "path", - "description": "A string value representing the group permission id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - }, - { - "name": "isUserGroup", - "in": "query", - "description": "Load additional information about User('true') or Entity Group('false).", - "required": true, - "schema": { - "type": "boolean" - } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GroupPermissionInfo" - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShareGroupRequest" } } }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, "400": { "description": "Bad Request", "content": { @@ -68414,7 +68506,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -68534,19 +68626,28 @@ ] } }, - "/api/groupPermission/{groupPermissionId}": { + "/api/entityGroup/{entityGroupId}/{entityId}": { "get": { "tags": [ - "group-permission-controller" + "entity-group-controller" ], - "summary": "Get Group Permission (getGroupPermissionById)", - "description": "Fetch the Group Permission object based on the provided Group Permission Id. Group permission entity represents list of allowed operations for certain User Group to perform against certain Entity Group. Basically, this entity wires three other entities: \n\n * Role that defines set of allowed operations;\n * User Group that defines set of users who may perform the operations; \n * Entity Group that defines set of entities which will be accessible to users;\n\nThere are two types of group permissions depending on the Role type: \n\n * **Generic permission** — uses a GENERIC role. The 'entityGroupId' field must be null (or omitted). Grants the role's operations to all entities within the owner's scope (all tenant entities for tenant admins, only customer-owned entities for customer users).\n * **Group permission** — uses a GROUP role. The 'entityGroupId' field must reference a valid entity group. Grants the role's operations only to entities in the specified group.\n\nAssigning a GENERIC role with a non-null 'entityGroupId' will cause an error. The 'entityGroupType' field is auto-populated from the referenced entity group and should not be set manually. Duplicate permissions (same userGroupId + roleId + entityGroupId combination) are rejected.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getGroupPermissionById", + "summary": "Get Group Entity (getGroupEntity)", + "description": "Fetch the Short Entity View object based on the group and entity id. Short Entity View object contains the entity id and number of fields (attributes, telemetry, etc). List of those fields is configurable and defined in the group configuration.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getGroupEntity", "parameters": [ { - "name": "groupPermissionId", + "name": "entityGroupId", "in": "path", - "description": "A string value representing the group permission id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -68559,7 +68660,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GroupPermission" + "$ref": "#/components/schemas/ShortEntityView" } } } @@ -68693,19 +68794,39 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/entityGroup/{entityGroupId}/{userGroupId}/{roleId}/share": { + "post": { "tags": [ - "group-permission-controller" + "entity-group-controller" ], - "summary": "Delete group permission (deleteGroupPermission)", - "description": "Deletes the group permission. Referencing non-existing group permission Id will cause an error.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", - "operationId": "deleteGroupPermission", + "summary": "Share the Entity Group with User group (shareEntityGroupToChildOwnerUserGroup)", + "description": "Share the entity group with the specified user group using the specified role. Unlike the 'shareEntityGroup' API method, this method is designed for sharing 'down' the owner hierarchy and does not require 'WRITE' permission for the shared entity group or the target user group. In particular, it allows the current user to re-share an entity group that was shared with them by the parent owner: for example, a customer user may re-share a tenant-owned dashboard group with a user group of their sub-customer.\n\nThe following security checks are performed:\n\n* the target user group must belong to the current user's owner or to one of its sub-customers;\n* the current user must have the 'SHARE_GROUP' operation granted for the shared entity group: either as a generic permission for the corresponding entity group resource (applies only if the shared entity group belongs to the current user's owner hierarchy), or as a group permission created when the entity group was shared with the current user's user group using a group role that includes the 'SHARE_GROUP' operation;\n* the specified role must be a group role that is readable by the current user, so it must belong to the current user's owner or to one of its sub-customers;\n* the operations of the specified role must be a subset of the operations the current user was granted for the shared entity group (always passes if the current user was granted the 'ALL' operation).\n\nIf the specified role also includes the 'SHARE_GROUP' operation, the members of the target user group will be able to re-share the entity group further down their own owner hierarchy in the same way.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "shareEntityGroupToChildOwnerUserGroup", "parameters": [ { - "name": "groupPermissionId", + "name": "entityGroupId", "in": "path", - "description": "A string value representing the group permission id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "ID of the entity group to share", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userGroupId", + "in": "path", + "description": "ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "roleId", + "in": "path", + "description": "ID of the group role that defines the set of operations to grant to the target user group", "required": true, "schema": { "type": "string" @@ -68727,7 +68848,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -68847,38 +68968,73 @@ ] } }, - "/api/userGroup/groupPermissions/info": { - "post": { + "/api/entityGroup/{ownerType}/{ownerId}/{groupType}/{groupName}": { + "get": { "tags": [ - "group-permission-controller" + "entity-group-controller" ], - "summary": "Load User Group Permissions (loadUserGroupPermissionInfos)", - "description": "Enrich a list of group permission objects with the information about Role, User and Entity Groups. Group permission entity represents list of allowed operations for certain User Group to perform against certain Entity Group. Basically, this entity wires three other entities: \n\n * Role that defines set of allowed operations;\n * User Group that defines set of users who may perform the operations; \n * Entity Group that defines set of entities which will be accessible to users;\n\nThere are two types of group permissions depending on the Role type: \n\n * **Generic permission** — uses a GENERIC role. The 'entityGroupId' field must be null (or omitted). Grants the role's operations to all entities within the owner's scope (all tenant entities for tenant admins, only customer-owned entities for customer users).\n * **Group permission** — uses a GROUP role. The 'entityGroupId' field must reference a valid entity group. Grants the role's operations only to entities in the specified group.\n\nAssigning a GENERIC role with a non-null 'entityGroupId' will cause an error. The 'entityGroupType' field is auto-populated from the referenced entity group and should not be set manually. Duplicate permissions (same userGroupId + roleId + entityGroupId combination) are rejected.\n\n Group Permission Info object extends the Group Permissions with the full information about Role and User and/or Entity Groups. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "loadUserGroupPermissionInfos", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "array", - "description": "JSON array of group permission objects", - "items": { - "$ref": "#/components/schemas/GroupPermission" - } - } + "summary": "Get Entity Group by owner, type and name (getEntityGroupByOwnerAndNameAndType)", + "description": "Fetch the Entity Group object based on the provided Entity Group Id. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nEntity group name is unique in the scope of owner and entity type. For example, you can't create two tenant device groups called 'Water meters'. However, you may create device and asset group with the same name. And also you may create groups with the same name for two different customers of the same tenant. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityGroupByOwnerAndNameAndType", + "parameters": [ + { + "name": "ownerType", + "in": "path", + "description": "Tenant or Customer", + "required": true, + "schema": { + "type": "string", + "enum": [ + "TENANT", + "CUSTOMER" + ] } }, - "required": true - }, + { + "name": "ownerId", + "in": "path", + "description": "A string value representing the Tenant or Customer id", + "required": true, + "schema": { + "type": "string" + }, + "example": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + { + "name": "groupType", + "in": "path", + "description": "Entity Group type", + "required": true, + "schema": { + "type": "string", + "enum": [ + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" + ] + } + }, + { + "name": "groupName", + "in": "path", + "description": "Entity Group name", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GroupPermissionInfo" - } + "$ref": "#/components/schemas/EntityGroupInfo" } } } @@ -68894,7 +69050,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -69014,17 +69170,17 @@ ] } }, - "/api/userGroup/{userGroupId}/groupPermissions": { + "/api/entityGroupInfo/{entityGroupId}": { "get": { "tags": [ - "group-permission-controller" + "entity-group-controller" ], - "summary": "Get group permissions by User Group Id (getUserGroupPermissions)", - "description": "Returns a list of group permission objects that belongs to specified User Group Id. Group permission entity represents list of allowed operations for certain User Group to perform against certain Entity Group. Basically, this entity wires three other entities: \n\n * Role that defines set of allowed operations;\n * User Group that defines set of users who may perform the operations; \n * Entity Group that defines set of entities which will be accessible to users;\n\nThere are two types of group permissions depending on the Role type: \n\n * **Generic permission** — uses a GENERIC role. The 'entityGroupId' field must be null (or omitted). Grants the role's operations to all entities within the owner's scope (all tenant entities for tenant admins, only customer-owned entities for customer users).\n * **Group permission** — uses a GROUP role. The 'entityGroupId' field must reference a valid entity group. Grants the role's operations only to entities in the specified group.\n\nAssigning a GENERIC role with a non-null 'entityGroupId' will cause an error. The 'entityGroupType' field is auto-populated from the referenced entity group and should not be set manually. Duplicate permissions (same userGroupId + roleId + entityGroupId combination) are rejected.\n\n Group Permission Info object extends the Group Permissions with the full information about Role and User and/or Entity Groups. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getUserGroupPermissions", + "summary": "Get Entity Group Entity Info (getEntityGroupEntityInfoById)", + "description": "Fetch the Entity Group Entity Info object based on the provided Entity Group Id. Entity Info is a lightweight object that contains only id and name of the entity group. \n\nEntity group name is unique in the scope of owner and entity type. For example, you can't create two tenant device groups called 'Water meters'. However, you may create device and asset group with the same name. And also you may create groups with the same name for two different customers of the same tenant. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityGroupEntityInfoById", "parameters": [ { - "name": "userGroupId", + "name": "entityGroupId", "in": "path", "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, @@ -69039,10 +69195,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GroupPermissionInfo" - } + "$ref": "#/components/schemas/EntityInfo" } } } @@ -69178,44 +69331,38 @@ ] } }, - "/api/image": { - "post": { + "/api/entityGroupInfos": { + "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "uploadImage", - "operationId": "uploadImage", - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "file": { - "type": "string", - "format": "binary" - }, - "title": { - "type": "string" - }, - "imageSubType": { - "type": "string" - } - }, - "required": [ - "file" - ] + "summary": "Get Entity Group Entity Infos by Ids (getEntityGroupEntityInfosByIds)", + "description": "Fetch the list of Entity Group Entity Info objects based on the provided entity group ids list. Entity Info is a lightweight object that contains only id and name of the entity group. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityGroupEntityInfosByIds", + "parameters": [ + { + "name": "entityGroupIds", + "in": "query", + "description": "A list of group ids, separated by comma ','", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityInfo" + } } } } @@ -69231,7 +69378,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -69351,30 +69498,101 @@ ] } }, - "/api/image/import": { - "put": { + "/api/entityGroupInfos/{groupType}": { + "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "importImage", - "operationId": "importImage", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResourceExportData" - } + "summary": "Get Entity Group Entity Infos by entity type and page link (getEntityGroupEntityInfosByTypeAndPageLink)", + "description": "Returns a page of Entity Group Entity Info objects based on the provided Entity Type and Page Link. Entity Info is a lightweight object that contains only id and name of the entity group. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityGroupEntityInfosByTypeAndPageLink", + "parameters": [ + { + "name": "groupType", + "in": "path", + "description": "Entity Group type", + "required": true, + "schema": { + "type": "string", + "enum": [ + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" + ] } }, - "required": true - }, + { + "name": "includeShared", + "in": "query", + "description": "Whether to include shared entity groups.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the entity group name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "$ref": "#/components/schemas/PageDataEntityInfo" } } } @@ -69510,60 +69728,57 @@ ] } }, - "/api/images": { + "/api/entityGroupInfos/{groupType}/shared": { "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "getImages", - "operationId": "getImages", + "summary": "Get Shared Entity Group Entity Infos by entity type and page link (getSharedEntityGroupEntityInfosByTypeAndPageLink)", + "description": "Returns a page of Shared Entity Group Entity Info objects based on the provided Entity Type and Page Link. Entity Info is a lightweight object that contains only id and name of the entity group. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getSharedEntityGroupEntityInfosByTypeAndPageLink", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", + "name": "groupType", + "in": "path", + "description": "Entity Group type", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "enum": [ + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" + ] } }, { - "name": "page", + "name": "pageSize", "in": "query", - "description": "Sequence number of page starting from 0", + "description": "Maximum amount of entities in a one page", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "imageSubType", - "in": "query", - "description": "A string value representing resource sub-type.", - "required": false, "schema": { "type": "string", - "enum": [ - "IMAGE", - "SCADA_SYMBOL" - ] + "minimum": 1 } }, { - "name": "includeSystemImages", + "name": "page", "in": "query", - "description": "Use 'true' to include system images. Disabled by default. Ignored for requests by users with system administrator authority.", - "required": false, + "description": "Sequence number of page starting from 0", + "required": true, "schema": { - "type": "boolean" + "type": "string", + "minimum": 0 } }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the resource title.", + "description": "The case insensitive 'startsWith' filter based on the entity group name.", "required": false, "schema": { "type": "string" @@ -69575,13 +69790,7 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string", - "enum": [ - "createdTime", - "title", - "resourceType", - "tenantId" - ] + "type": "string" } }, { @@ -69604,7 +69813,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataTbResourceInfo" + "$ref": "#/components/schemas/PageDataEntityInfo" } } } @@ -69740,47 +69949,115 @@ ] } }, - "/api/images/public/{publicResourceKey}": { + "/api/entityGroupInfos/{ownerType}/{ownerId}/{groupType}": { "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "downloadPublicImage", - "operationId": "downloadPublicImage", + "summary": "Get Entity Group Entity Infos by owner and entity type and page link (getEntityGroupEntityInfosByOwnerAndTypeAndPageLink)", + "description": "Returns a page of Entity Group Entity Info objects based on the provided Owner Id and Entity Type and Page Link. Entity Info is a lightweight object that contains only id and name of the entity group. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityGroupEntityInfosByOwnerAndTypeAndPageLink", "parameters": [ { - "name": "publicResourceKey", + "name": "ownerType", + "in": "path", + "description": "Tenant or Customer", + "required": true, + "schema": { + "type": "string", + "enum": [ + "TENANT", + "CUSTOMER" + ] + } + }, + { + "name": "ownerId", "in": "path", + "description": "A string value representing the Tenant or Customer id", "required": true, "schema": { "type": "string" + }, + "example": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + { + "name": "groupType", + "in": "path", + "description": "Entity Group type", + "required": true, + "schema": { + "type": "string", + "enum": [ + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" + ] } }, { - "name": "If-None-Match", - "in": "header", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the entity group name.", "required": false, "schema": { "type": "string" } }, { - "name": "Accept-Encoding", - "in": "header", + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", "required": false, "schema": { "type": "string" } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { "200": { "description": "OK", "content": { - "image/*": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/PageDataEntityInfo" } } } @@ -69916,61 +70193,115 @@ ] } }, - "/api/images/{type}/{key}": { + "/api/entityGroupInfosHierarchy/{ownerType}/{ownerId}/{groupType}": { "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "downloadImage", - "operationId": "downloadImage", + "summary": "Get Entity Group Entity Infos for all owners starting from specified than ending with owner of current user (getEntityGroupEntityInfosHierarchyByOwnerAndTypeAndPageLink)", + "description": "Returns a page of Entity Group Entity Info objects based on the provided Owner Id and Entity Type and Page Link. Entity Info is a lightweight object that contains only id and name of the entity group. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityGroupEntityInfosHierarchyByOwnerAndTypeAndPageLink", "parameters": [ { - "name": "type", + "name": "ownerType", "in": "path", - "description": "Type of the image: tenant or system", + "description": "Tenant or Customer", "required": true, "schema": { "type": "string", "enum": [ - "tenant", - "system" + "TENANT", + "CUSTOMER" ] } }, { - "name": "key", + "name": "ownerId", "in": "path", - "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "description": "A string value representing the Tenant or Customer id", "required": true, "schema": { "type": "string" + }, + "example": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + { + "name": "groupType", + "in": "path", + "description": "Entity Group type", + "required": true, + "schema": { + "type": "string", + "enum": [ + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" + ] } }, { - "name": "If-None-Match", - "in": "header", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the entity group name.", "required": false, "schema": { "type": "string" } }, { - "name": "Accept-Encoding", - "in": "header", + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", "required": false, "schema": { "type": "string" } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { "200": { "description": "OK", "content": { - "image/*": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/PageDataEntityInfo" } } } @@ -70104,62 +70435,101 @@ "ApiKeyForm": [] } ] - }, - "put": { + } + }, + "/api/entityGroups/edge/{edgeId}/{groupType}": { + "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "updateImage", - "operationId": "updateImage", + "summary": "Get Edge Entity Groups by entity type (getEdgeEntityGroups)", + "description": "Returns a page of Entity Group Info objects based on the provided Entity Type and assigned to the provided Edge entity. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getEdgeEntityGroups", "parameters": [ { - "name": "type", + "name": "edgeId", "in": "path", - "description": "Type of the image: tenant or system", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "groupType", + "in": "path", + "description": "EntityGroup type", "required": true, "schema": { "type": "string", "enum": [ - "tenant", - "system" + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD" ] } }, { - "name": "key", - "in": "path", - "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the entity group name.", + "required": false, "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "file": { - "type": "string", - "format": "binary" - } - }, - "required": [ - "file" - ] - } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } - }, + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "$ref": "#/components/schemas/PageDataEntityGroupInfo" } } } @@ -70293,42 +70663,27 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/entityGroups/list": { + "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "deleteImage", - "operationId": "deleteImage", + "summary": "Get Entity Groups by Ids (getEntityGroupsByIds)", + "description": "Fetch the list of Entity Group Info objects based on the provided entity group ids list. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityGroupsByIds", "parameters": [ { - "name": "type", - "in": "path", - "description": "Type of the image: tenant or system", - "required": true, - "schema": { - "type": "string", - "enum": [ - "tenant", - "system" - ] - } - }, - { - "name": "key", - "in": "path", - "description": "Image resource key, for example thermostats_dashboard_background.jpeg", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "force", + "name": "entityGroupIds", "in": "query", - "required": false, + "description": "A list of group ids, separated by comma ','", + "required": true, "schema": { - "type": "boolean" + "type": "array", + "items": { + "type": "string" + } } } ], @@ -70338,7 +70693,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbImageDeleteResult" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityGroupInfo" + } } } } @@ -70474,31 +70832,37 @@ ] } }, - "/api/images/{type}/{key}/export": { + "/api/entityGroups/{entityType}/{entityId}": { "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "exportImage", - "operationId": "exportImage", + "summary": "Get Entity Groups by Entity Id (getEntityGroupsForEntity)", + "description": "Returns a list of groups that contain the specified Entity Id. For example, all device groups that contain specific device. The list always contain at least one element - special group 'All'.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getEntityGroupsForEntity", "parameters": [ { - "name": "type", + "name": "entityType", "in": "path", - "description": "Type of the image: tenant or system", + "description": "Entity Group type", "required": true, "schema": { "type": "string", "enum": [ - "tenant", - "system" + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" ] } }, { - "name": "key", + "name": "entityId", "in": "path", - "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -70511,7 +70875,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ResourceExportData" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityGroupId" + } } } } @@ -70647,35 +71014,92 @@ ] } }, - "/api/images/{type}/{key}/info": { + "/api/entityGroups/{groupType}": { "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "getImageInfo", - "operationId": "getImageInfo", + "summary": "Get Entity Groups by entity type and page link (getEntityGroupsByTypeAndPageLink)", + "description": "Returns a page of Entity Group Info objects based on the provided Entity Type and Page Link. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityGroupsByTypeAndPageLink", "parameters": [ { - "name": "type", + "name": "groupType", "in": "path", - "description": "Type of the image: tenant or system", + "description": "Entity Group type", "required": true, "schema": { "type": "string", "enum": [ - "tenant", - "system" + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" ] } }, { - "name": "key", - "in": "path", - "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "name": "includeShared", + "in": "query", + "description": "Whether to include shared entity groups.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the entity group name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -70684,7 +71108,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "$ref": "#/components/schemas/PageDataEntityGroupInfo" } } } @@ -70818,54 +71242,55 @@ "ApiKeyForm": [] } ] - }, - "put": { + } + }, + "/api/entityGroups/{groupType}/all": { + "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "updateImageInfo", - "operationId": "updateImageInfo", + "summary": "Get Entity Groups by entity type (getAllEntityGroupsByType)", + "description": "Fetch the list of Entity Group Info objects based on the provided Entity Type. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getAllEntityGroupsByType", "parameters": [ { - "name": "type", + "name": "groupType", "in": "path", - "description": "Type of the image: tenant or system", + "description": "Entity Group type", "required": true, "schema": { "type": "string", "enum": [ - "tenant", - "system" + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" ] } }, { - "name": "key", - "in": "path", - "description": "Image resource key, for example thermostats_dashboard_background.jpeg", - "required": true, + "name": "includeShared", + "in": "query", + "description": "Whether to include shared entity groups.", + "required": false, "schema": { - "type": "string" + "type": "boolean" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TbResourceInfo" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityGroupInfo" + } } } } @@ -71001,61 +71426,92 @@ ] } }, - "/api/images/{type}/{key}/preview": { + "/api/entityGroups/{groupType}/shared": { "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "downloadImagePreview", - "operationId": "downloadImagePreview", + "summary": "Get Shared Entity Groups by entity type and page link (getSharedEntityGroupsByTypeAndPageLink)", + "description": "Returns a page of Shared Entity Group Info objects based on the provided Entity Type and Page Link. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getSharedEntityGroupsByTypeAndPageLink", "parameters": [ { - "name": "type", + "name": "groupType", "in": "path", - "description": "Type of the image: tenant or system", + "description": "Entity Group type", "required": true, "schema": { "type": "string", "enum": [ - "tenant", - "system" + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" ] } }, { - "name": "key", - "in": "path", - "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string" + "type": "string", + "minimum": 1 } }, { - "name": "If-None-Match", - "in": "header", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the entity group name.", "required": false, "schema": { "type": "string" } }, { - "name": "Accept-Encoding", - "in": "header", + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", "required": false, "schema": { "type": "string" } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { "200": { "description": "OK", "content": { - "image/png": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/PageDataEntityGroupInfo" } } } @@ -71191,43 +71647,32 @@ ] } }, - "/api/images/{type}/{key}/public/{isPublic}": { - "put": { + "/api/entityGroups/{groupType}/shared/all": { + "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "updateImagePublicStatus", - "operationId": "updateImagePublicStatus", + "summary": "Get Shared Entity Groups by entity type (getAllSharedEntityGroups)", + "description": "Fetch the list of Shared Entity Group Info objects based on the provided Entity Type. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getAllSharedEntityGroups", "parameters": [ { - "name": "type", + "name": "groupType", "in": "path", - "description": "Type of the image: tenant or system", + "description": "Entity Group type", "required": true, "schema": { "type": "string", "enum": [ - "tenant", - "system" + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" ] } - }, - { - "name": "key", - "in": "path", - "description": "Image resource key, for example thermostats_dashboard_background.jpeg", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "isPublic", - "in": "path", - "required": true, - "schema": { - "type": "boolean" - } } ], "responses": { @@ -71236,7 +71681,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityGroupInfo" + } } } } @@ -71372,61 +71820,115 @@ ] } }, - "/api/noauth/whiteLabel/loginFavicon/{type}/{key}": { + "/api/entityGroups/{ownerType}/{ownerId}/{groupType}": { "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "downloadLoginFavicon", - "operationId": "downloadLoginFavicon", + "summary": "Get Entity Groups by owner and entity type and page link (getEntityGroupsByOwnerAndTypeAndPageLink)", + "description": "Returns a page of Entity Group objects based on the provided Owner Id and Entity Type and Page Link. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityGroupsByOwnerAndTypeAndPageLink", "parameters": [ { - "name": "type", + "name": "ownerType", "in": "path", - "description": "Type of the image: tenant or system", + "description": "Tenant or Customer", "required": true, "schema": { "type": "string", "enum": [ - "tenant", - "system" + "TENANT", + "CUSTOMER" ] } }, { - "name": "key", + "name": "ownerId", "in": "path", - "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "description": "A string value representing the Tenant or Customer id", "required": true, "schema": { "type": "string" + }, + "example": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + { + "name": "groupType", + "in": "path", + "description": "Entity Group type", + "required": true, + "schema": { + "type": "string", + "enum": [ + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" + ] } }, { - "name": "If-None-Match", - "in": "header", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the entity group name.", "required": false, "schema": { "type": "string" } }, { - "name": "Accept-Encoding", - "in": "header", + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", "required": false, "schema": { "type": "string" } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { "200": { "description": "OK", "content": { - "image/*": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/PageDataEntityGroupInfo" } } } @@ -71551,53 +72053,65 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/whiteLabel/loginLogo/{type}/{key}": { + "/api/entityGroups/{ownerType}/{ownerId}/{groupType}/all": { "get": { "tags": [ - "image-controller" + "entity-group-controller" ], - "summary": "downloadLoginLogo", - "operationId": "downloadLoginLogo", + "summary": "Get Entity Groups by owner and entity type (getAllEntityGroupsByOwnerAndType)", + "description": "Fetch the list of Entity Group Info objects based on the provided Owner Id and Entity Type. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.Entity Group Info extends Entity Group object and adds 'ownerIds' - a list of owner ids.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getAllEntityGroupsByOwnerAndType", "parameters": [ { - "name": "type", + "name": "ownerType", "in": "path", - "description": "Type of the image: tenant or system", + "description": "Tenant or Customer", "required": true, "schema": { "type": "string", "enum": [ - "tenant", - "system" + "TENANT", + "CUSTOMER" ] } }, { - "name": "key", + "name": "ownerId", "in": "path", - "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "description": "A string value representing the Tenant or Customer id", "required": true, "schema": { "type": "string" - } - }, - { - "name": "If-None-Match", - "in": "header", - "required": false, - "schema": { - "type": "string" - } + }, + "example": "784f394c-42b6-435a-983c-b7beff2784f9" }, { - "name": "Accept-Encoding", - "in": "header", - "required": false, + "name": "groupType", + "in": "path", + "description": "Entity Group type", + "required": true, "schema": { - "type": "string" + "type": "string", + "enum": [ + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" + ] } } ], @@ -71605,10 +72119,12 @@ "200": { "description": "OK", "content": { - "image/*": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityGroupInfo" + } } } } @@ -71733,37 +72249,116 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/edge/integration/{edgeId}/missingAttributes": { + "/api/entityGroupsHierarchy/{ownerType}/{ownerId}/{groupType}": { "get": { "tags": [ - "integration-controller" + "entity-group-controller" ], - "summary": "Find edge missing attributes for assigned integrations (findEdgeMissingAttributes)", - "description": "Returns list of edge attribute names that are missing in assigned integrations.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "findEdgeMissingAttributes", + "summary": "Get Entity Groups for all owners starting from specified than ending with owner of current user (getEntityGroupsHierarchyByOwnerAndTypeAndPageLink)", + "description": "Returns a page of Entity Group objects based on the provided Owner Id and Entity Type and Page Link. Entity group allows you to group multiple entities of the same entity type (Device, Asset, Customer, User, Dashboard, etc). Entity Group always have an owner - particular Tenant or Customer. Each entity may belong to multiple groups simultaneously.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityGroupsHierarchyByOwnerAndTypeAndPageLink", "parameters": [ { - "name": "edgeId", + "name": "ownerType", "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Tenant or Customer", + "required": true, + "schema": { + "type": "string", + "enum": [ + "TENANT", + "CUSTOMER" + ] + } + }, + { + "name": "ownerId", + "in": "path", + "description": "A string value representing the Tenant or Customer id", "required": true, "schema": { "type": "string" + }, + "example": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + { + "name": "groupType", + "in": "path", + "description": "Entity Group type", + "required": true, + "schema": { + "type": "string", + "enum": [ + "CUSTOMER", + "ASSET", + "DEVICE", + "USER", + "ENTITY_VIEW", + "DASHBOARD", + "EDGE" + ] } }, { - "name": "integrationIds", + "name": "pageSize", "in": "query", - "description": "A list of assigned integration ids, separated by comma ','", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the entity group name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -71773,7 +72368,7 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/PageDataEntityGroupInfo" } } } @@ -71909,23 +72504,37 @@ ] } }, - "/api/edge/integration/{integrationId}/allMissingAttributes": { + "/api/ownerInfo/{ownerType}/{ownerId}": { "get": { "tags": [ - "integration-controller" + "entity-group-controller" ], - "summary": "Find missing attributes for all related edges (findAllRelatedEdgesMissingAttributes)", - "description": "Returns list of attribute names of all related edges that are missing in the integration configuration.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "findAllRelatedEdgesMissingAttributes", + "summary": "Get Owner Info (getOwnerInfo)", + "description": "Fetch the owner info (tenant or customer) presented as Entity Info object based on the provided owner Id. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getOwnerInfo", "parameters": [ { - "name": "integrationId", + "name": "ownerType", "in": "path", - "description": "A string value representing the integration id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Tenant or Customer", "required": true, "schema": { - "type": "string" + "type": "string", + "enum": [ + "TENANT", + "CUSTOMER" + ] } + }, + { + "name": "ownerId", + "in": "path", + "description": "A string value representing the Tenant or Customer id", + "required": true, + "schema": { + "type": "string" + }, + "example": "784f394c-42b6-435a-983c-b7beff2784f9" } ], "responses": { @@ -71934,7 +72543,7 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/EntityInfo" } } } @@ -72070,30 +72679,65 @@ ] } }, - "/api/edge/{edgeId}/integration/{integrationId}": { - "post": { + "/api/ownerInfos": { + "get": { "tags": [ - "integration-controller" + "entity-group-controller" ], - "summary": "Assign integration to edge (assignIntegrationToEdge)", - "description": "Creates assignment of an existing integration edge template to an instance of The Edge. Assignment works in async way - first, notification event pushed to edge service queue on platform. Second, remote edge service will receive a copy of assignment integration (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once integration will be delivered to edge service, it's going to start locally. \n\nOnly integration edge template can be assigned to edge.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "assignIntegrationToEdge", + "summary": "Get Owner Infos (getOwnerInfos)", + "description": "Provides a rage view of Customers that the current user has READ access to. If the current user is Tenant administrator, the result set also contains the tenant. The call is designed for the UI auto-complete component to show tenant and all possible Customers that the user may select to change the owner of the particular entity or entity group.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getOwnerInfos", "parameters": [ { - "name": "edgeId", - "in": "path", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string" + "type": "string", + "minimum": 1 } }, { - "name": "integrationId", - "in": "path", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the entity group name.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -72102,7 +72746,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Integration" + "$ref": "#/components/schemas/PageDataEntityInfo" } } } @@ -72118,7 +72762,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -72236,30 +72880,67 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/owners": { + "get": { "tags": [ - "integration-controller" + "entity-group-controller" ], - "summary": "Unassign integration from edge (unassignIntegrationFromEdge)", - "description": "Clears assignment of the integration to the edge. Unassignment works in async way - first, 'unassign' notification event pushed to edge queue on platform. Second, remote edge service will receive an 'unassign' command to remove integration (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once 'unassign' command will be delivered to edge service, it's going to remove integration locally.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "unassignIntegrationFromEdge", + "summary": "Get Owners (getOwners)", + "description": "Provides a rage view of Customers that the current user has READ access to. If the current user is Tenant administrator, the result set also contains the tenant. The call is designed for the UI auto-complete component to show tenant and all possible Customers that the user may select to change the owner of the particular entity or entity group.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getOwners", "parameters": [ { - "name": "edgeId", - "in": "path", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string" + "type": "string", + "minimum": 1 } }, { - "name": "integrationId", - "in": "path", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the entity group name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -72268,7 +72949,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Integration" + "$ref": "#/components/schemas/PageDataContactBasedObject" } } } @@ -72404,98 +73085,40 @@ ] } }, - "/api/edge/{edgeId}/integrationInfos": { - "get": { + "/api/v2/entityGroup/{entityGroupId}/share": { + "post": { "tags": [ - "integration-controller" + "entity-group-controller" ], - "summary": "Get Edge Integrations (getEdgeIntegrationInfos)", - "description": "Returns a page of Integrations assigned to the specified edge. The integration object contains information about the Integration, including the heavyweight configuration object. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getEdgeIntegrationInfos", + "summary": "Share the Entity Group with User group (shareEntityGroupToChildOwnerUserGroupV2)", + "description": "Share the entity group with specified user group using specified role. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", + "operationId": "shareEntityGroupToChildOwnerUserGroupV2", "parameters": [ { - "name": "edgeId", + "name": "entityGroupId", "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "description": "A uuid value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the integration name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, "schema": { "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "debugMode", - "allowCreateDevicesOrAssets", - "enabled", - "remote", - "routingKey", - "secret" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "format": "uuid" } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataIntegrationInfo" - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShareGroupRequest" } } }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, "400": { "description": "Bad Request", "content": { @@ -72507,7 +73130,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -72627,94 +73250,32 @@ ] } }, - "/api/edge/{edgeId}/integrations": { - "get": { + "/api/alarmsQuery/count": { + "post": { "tags": [ - "integration-controller" + "entity-query-controller" ], - "summary": "Get Edge Integrations (getEdgeIntegrations)", - "description": "Returns a page of Integrations assigned to the specified edge. The integration object contains information about the Integration, including the heavyweight configuration object. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getEdgeIntegrations", - "parameters": [ - { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the integration name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "debugMode", - "allowCreateDevicesOrAssets", - "enabled", - "remote", - "routingKey", - "secret" - ] + "summary": "Count Alarms by Query (countAlarmsByQuery)", + "description": "Returns the number of alarms that match the query definition.", + "operationId": "countAlarmsByQuery", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AlarmCountQuery" + } } }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataIntegration" + "type": "integer", + "format": "int64" } } } @@ -72730,7 +73291,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -72850,19 +73411,19 @@ ] } }, - "/api/integration": { + "/api/alarmsQuery/find": { "post": { "tags": [ - "integration-controller" + "entity-query-controller" ], - "summary": "Create Or Update Integration (saveIntegration)", - "description": "Create or update the Integration. When creating integration, platform generates Integration Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created integration id will be present in the response. Specify existing Integration id to update the integration. Referencing non-existing integration Id will cause 'Not Found' error. Integration configuration is validated for each type of the integration before it can be created. \n\n# Integration Configuration\n\nIntegration configuration (**'configuration'** field) is the JSON object representing the special configuration per integration type with the connectivity fields and other important parameters dependent on the specific integration type. Let's review the configuration object for the MQTT Integration type below. \n\n```json\n{\n \"clientConfiguration\":{\n \"host\":\"broker.hivemq.com\",\n \"port\":1883,\n \"cleanSession\":false,\n \"ssl\":false,\n \"connectTimeoutSec\":10,\n \"clientId\":\"\",\n \"maxBytesInMessage\":32368,\n \"credentials\":{\n \"type\":\"anonymous\"\n }\n },\n \"downlinkTopicPattern\":\"${topic}\",\n \"topicFilters\":[\n {\n \"filter\":\"tb/mqtt-integration-tutorial/sensors/+/temperature\",\n \"qos\":0\n }\n ],\n \"metadata\":{\n }\n}\n```\n\nRemove 'id', 'tenantId' from the request body example (below) to create new Integration entity. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "saveIntegration", + "summary": "Find Alarms by Query", + "description": "This method description defines how Alarm Data Query extends the Entity Data Query. See method 'Find Entity Data by Query' first to get the info about 'Entity Data Query'.\n\n The platform will first search the entities that match the entity and key filters. Then, the platform will use 'Alarm Page Link' to filter the alarms related to those entities. Finally, platform fetch the properties of alarm that are defined in the **'alarmFields'** and combine them with the other entity, attribute and latest time series fields to return the result. \n\n See example of the alarm query below. The query will search first 100 active alarms with type 'Temperature Alarm' or 'Fire Alarm' for any device with current temperature > 0. The query will return combination of the entity fields: name of the device, device model and latest temperature reading and alarms fields: createdTime, type, severity and status: \n\n```json\n{\n \"entityFilter\": {\n \"type\": \"entityType\",\n \"resolveMultiple\": true,\n \"entityType\": \"DEVICE\"\n },\n \"pageLink\": {\n \"page\": 0,\n \"pageSize\": 100,\n \"textSearch\": null,\n \"searchPropagatedAlarms\": false,\n \"statusList\": [\n \"ACTIVE\"\n ],\n \"severityList\": [\n \"CRITICAL\",\n \"MAJOR\"\n ],\n \"typeList\": [\n \"Temperature Alarm\",\n \"Fire Alarm\"\n ],\n \"sortOrder\": {\n \"key\": {\n \"key\": \"createdTime\",\n \"type\": \"ALARM_FIELD\"\n },\n \"direction\": \"DESC\"\n },\n \"timeWindow\": 86400000\n },\n \"keyFilters\": [\n {\n \"key\": {\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n },\n \"valueType\": \"NUMERIC\",\n \"predicate\": {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 0,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n }\n ],\n \"alarmFields\": [\n {\n \"type\": \"ALARM_FIELD\",\n \"key\": \"createdTime\"\n },\n {\n \"type\": \"ALARM_FIELD\",\n \"key\": \"type\"\n },\n {\n \"type\": \"ALARM_FIELD\",\n \"key\": \"severity\"\n },\n {\n \"type\": \"ALARM_FIELD\",\n \"key\": \"status\"\n }\n ],\n \"entityFields\": [\n {\n \"type\": \"ENTITY_FIELD\",\n \"key\": \"name\"\n }\n ],\n \"latestValues\": [\n {\n \"type\": \"ATTRIBUTE\",\n \"key\": \"model\"\n },\n {\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n }\n ]\n}\n```", + "operationId": "findAlarmDataByQuery", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Integration" + "$ref": "#/components/schemas/AlarmDataQuery" } } }, @@ -72874,7 +73435,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Integration" + "$ref": "#/components/schemas/PageDataAlarmData" } } } @@ -73010,27 +73571,23 @@ ] } }, - "/api/integration/check": { - "post": { + "/api/edqs/state": { + "get": { "tags": [ - "integration-controller" + "entity-query-controller" ], - "summary": "Check integration connectivity (checkIntegrationConnection)", - "description": "Checks if the connection to the integration is established. Throws an error if the connection is not established. Example: Failed to connect to MQTT broker at host:port.", - "operationId": "checkIntegrationConnection", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Integration" - } - } - }, - "required": true - }, + "summary": "getEdqsState", + "operationId": "getEdqsState", "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EdqsState" + } + } + } }, "400": { "description": "Bad Request", @@ -73043,7 +73600,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -73163,35 +73720,26 @@ ] } }, - "/api/integration/routingKey/{routingKey}": { - "get": { + "/api/edqs/system/request": { + "post": { "tags": [ - "integration-controller" + "entity-query-controller" ], - "summary": "Get Integration by Routing Key (getIntegrationByRoutingKey)", - "description": "Fetch the Integration object based on the provided routing key. The server checks that the integration is owned by the same tenant. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getIntegrationByRoutingKey", - "parameters": [ - { - "name": "routingKey", - "in": "path", - "description": "A string value representing the integration routing key. For example, '542047e6-c1b2-112e-a87e-e49247c09d4b'", - "required": true, - "schema": { - "type": "string" + "summary": "processSystemEdqsRequest", + "operationId": "processSystemEdqsRequest", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ToCoreEdqsRequest" + } } - } - ], + }, + "required": true + }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Integration" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -73204,7 +73752,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -73324,32 +73872,32 @@ ] } }, - "/api/integration/{integrationId}": { - "get": { + "/api/entitiesQuery/count": { + "post": { "tags": [ - "integration-controller" + "entity-query-controller" ], - "summary": "Get Integration (getIntegrationById)", - "description": "Fetch the Integration object based on the provided Integration Id. The server checks that the integration is owned by the same tenant. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getIntegrationById", - "parameters": [ - { - "name": "integrationId", - "in": "path", - "description": "A string value representing the integration id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "Count Entities by Query", + "description": "Allows to run complex queries to search the count of platform entities (devices, assets, customers, etc) based on the combination of main entity filter and multiple key filters. Returns the number of entities that match the query definition.\n\n# Query Definition\n\n\n\nMain **entity filter** is mandatory and defines generic search criteria. For example, \"find all devices with profile 'Moisture Sensor'\" or \"Find all devices related to asset 'Building A'\"\n\nOptional **key filters** allow to filter results of the entity filter by complex criteria against main entity fields (name, label, type, etc), attributes and telemetry. For example, \"temperature > 20 or temperature< 10\" or \"name starts with 'T', and attribute 'model' is 'T1000', and time series field 'batteryLevel' > 40\".\n\nLet's review the example:\n\n```json\n{\n \"entityFilter\": {\n \"type\": \"entityType\",\n \"entityType\": \"DEVICE\"\n },\n \"keyFilters\": [\n {\n \"key\": {\n \"type\": \"ATTRIBUTE\",\n \"key\": \"active\"\n },\n \"valueType\": \"BOOLEAN\",\n \"predicate\": {\n \"operation\": \"EQUAL\",\n \"value\": {\n \"defaultValue\": true,\n \"dynamicValue\": null\n },\n \"type\": \"BOOLEAN\"\n }\n }\n ]\n}\n```\n\n Example mentioned above search all devices which have attribute 'active' set to 'true'. Now let's review available entity filters and key filters syntax:\n\n # Entity Filters\nEntity Filter body depends on the 'type' parameter. Let's review available entity filter types. In fact, they do correspond to available dashboard aliases.\n\n## Single Entity\n\nAllows to filter only one entity based on the id. For example, this entity filter selects certain device:\n\n```json\n{\n \"type\": \"singleEntity\",\n \"singleEntity\": {\n \"id\": \"d521edb0-2a7a-11ec-94eb-213c95f54092\",\n \"entityType\": \"DEVICE\"\n }\n}\n```\n\n## Group Entities Filter\n\nAllows to filter multiple entities of the same type using the entity group type and id. For example, this entity filter selects all devices that belong to the group 'e52b0020-2a7a-11ec-94eb-213c95f54092':\n\n```json\n{\n \"type\": \"entityGroup\",\n \"groupType\": \"DEVICE\",\n \"entityGroup\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n}\n```\n\n## Entity List Filter\n\nAllows to filter entities of the same type using their ids. For example, this entity filter selects two devices:\n\n```json\n{\n \"type\": \"entityList\",\n \"entityType\": \"DEVICE\",\n \"entityList\": [\n \"e6501f30-2a7a-11ec-94eb-213c95f54092\",\n \"e6657bf0-2a7a-11ec-94eb-213c95f54092\"\n ]\n}\n```\n\n## Entity Name Filter\n\nAllows to filter entities of the same type using the **'starts with'** expression over entity name. For example, this entity filter selects all devices which name starts with 'Air Quality':\n\n```json\n{\n \"type\": \"entityName\",\n \"entityType\": \"DEVICE\",\n \"entityNameFilter\": \"Air Quality\"\n}\n```\n\n## Entity Type Filter\n\nAllows to filter entities based on their type (CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, etc)For example, this entity filter selects all tenant customers:\n\n```json\n{\n \"type\": \"entityType\",\n \"entityType\": \"CUSTOMER\"\n}\n```\n\n## Group List Filter\n\nReturn multiple groups of the same type using specified ids. For example, this entity filter selects 2 device groups (if they are present in the system) with ids 'e52b0020-2a7a-11ec-94eb-213c95f54092' and 'e52b0020-2a7a-11ec-94eb-213c95f54093':\n\n```json\n{\n \"type\": \"entityGroupList\",\n \"groupType\": \"DEVICE\",\n \"entityGroupList\": [\"e52b0020-2a7a-11ec-94eb-213c95f54092\", \"e52b0020-2a7a-11ec-94eb-213c95f54093\"]\n}\n```\n\n## Group Name Filter\n\nAllows to filter entity groups based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all devices which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityGroupName\",\n \"groupType\": \"DEVICE\",\n \"entityGroupNameFilter\": \"CAT\"\n}\n```\n\n## Entities by Group Name Filter\n\nAllows to filter entities that belong to group based on the entity type and the group name. Optional parameter 'ownerId' allows you to specify the owner of the group (Tenant or Customer, current user owner by default).For example, this entity filter selects all devices which belong to group 'Water Meters':\n\n```json\n{\n \"type\": \"entitiesByGroupName\",\n \"groupType\": \"DEVICE\",\n \"entityGroupNameFilter\": \"Water Meters\"\n}\n```\n\n Other example, this entity filter selects all devices which belong to group 'Water Meters' which in turn belongs to (sub-)Customer with id 'e52b0020-2a7a-11ec-94eb-213c95f54093': \n\n```json\n{\n \"type\": \"entitiesByGroupName\",\n \"ownerId\": {\"entityType\": \"CUSTOMER\",\"id\":\"e52b0020-2a7a-11ec-94eb-213c95f54093\"},\n \"groupType\": \"DEVICE\",\n \"entityGroupNameFilter\": \"Water Meters\"\n}\n```\n\n## Entity owner Filter\n\nAllows to fetch owner (Tenant or Customer) of the specified entity. For example, this entity filter selects owner of the device with id 'e52b0020-2a7a-11ec-94eb-213c95f54093':\n\n```json\n{\n \"type\": \"stateEntityOwner\",\n \"singleEntity\": {\n \"id\": \"d521edb0-2a7a-11ec-94eb-213c95f54092\",\n \"entityType\": \"DEVICE\"\n }\n}\n```\n\n## Asset Type Filter\n\nAllows to filter assets based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'charging station' assets which name starts with 'Tesla':\n\n```json\n{\n \"type\": \"assetType\",\n \"assetType\": \"charging station\",\n \"assetNameFilter\": \"Tesla\"\n}\n```\n\n## Device Type Filter\n\nAllows to filter devices based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Temperature Sensor' devices which name starts with 'ABC':\n\n```json\n{\n \"type\": \"deviceType\",\n \"deviceType\": \"Temperature Sensor\",\n \"deviceNameFilter\": \"ABC\"\n}\n```\n\n## Edge Type Filter\n\nAllows to filter edge instances based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Factory' edge instances which name starts with 'Nevada':\n\n```json\n{\n \"type\": \"edgeType\",\n \"edgeType\": \"Factory\",\n \"edgeNameFilter\": \"Nevada\"\n}\n```\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```\n\n## Api Usage Filter\n\nAllows to query for Api Usage based on optional customer id. If the customer id is not set, returns current tenant API usage.For example, this entity filter selects the 'Api Usage' entity for customer with id 'e6501f30-2a7a-11ec-94eb-213c95f54092':\n\n```json\n{\n \"type\": \"apiUsageState\",\n \"customerId\": {\n \"id\": \"d521edb0-2a7a-11ec-94eb-213c95f54092\",\n \"entityType\": \"CUSTOMER\"\n }\n}\n```\n\n## Relations Query Filter\n\nAllows to filter entities that are related to the provided root entity. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'filter' object allows you to define the relation type and set of acceptable entity types to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only those who match the 'filters'.\n\nFor example, this entity filter selects all devices and assets which are related to the asset with id 'e51de0c0-2a7a-11ec-94eb-213c95f54092':\n\n```json\n{\n \"type\": \"relationsQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e51de0c0-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 1,\n \"fetchLastLevelOnly\": false,\n \"filters\": [\n {\n \"relationType\": \"Contains\",\n \"entityTypes\": [\n \"DEVICE\",\n \"ASSET\"\n ]\n }\n ]\n}\n```\n\n## Asset Search Query\n\nAllows to filter assets that are related to the provided root entity. Filters related assets based on the relation type and set of asset types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'assetTypes' defines the type of the asset to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only assets that match 'relationType' and 'assetTypes' conditions.\n\nFor example, this entity filter selects 'charging station' assets which are related to the asset with id 'e51de0c0-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"assetSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e51de0c0-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 1,\n \"fetchLastLevelOnly\": false,\n \"relationType\": \"Contains\",\n \"assetTypes\": [\n \"charging station\"\n ]\n}\n```\n\n## Device Search Query\n\nAllows to filter devices that are related to the provided root entity. Filters related devices based on the relation type and set of device types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'deviceTypes' defines the type of the device to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\nFor example, this entity filter selects 'Charging port' and 'Air Quality Sensor' devices which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"deviceSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 2,\n \"fetchLastLevelOnly\": true,\n \"relationType\": \"Contains\",\n \"deviceTypes\": [\n \"Air Quality Sensor\",\n \"Charging port\"\n ]\n}\n```\n\n## Entity View Query\n\nAllows to filter entity views that are related to the provided root entity. Filters related entity views based on the relation type and set of entity view types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'entityViewTypes' defines the type of the entity view to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\nFor example, this entity filter selects 'Concrete mixer' entity views which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"entityViewSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 1,\n \"fetchLastLevelOnly\": false,\n \"relationType\": \"Contains\",\n \"entityViewTypes\": [\n \"Concrete mixer\"\n ]\n}\n```\n\n## Edge Search Query\n\nAllows to filter edge instances that are related to the provided root entity. Filters related edge instances based on the relation type and set of edge types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'deviceTypes' defines the type of the device to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\nFor example, this entity filter selects 'Factory' edge instances which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"deviceSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 2,\n \"fetchLastLevelOnly\": true,\n \"relationType\": \"Contains\",\n \"edgeTypes\": [\n \"Factory\"\n ]\n}\n```\n\n # Key Filters\nKey Filter allows you to define complex logical expressions over entity field, attribute or latest time series value. The filter is defined using 'key', 'valueType' and 'predicate' objects. Single Entity Query may have zero, one or multiple predicates. If multiple filters are defined, they are evaluated using logical 'AND'. The example below checks that temperature of the entity is above 20 degrees:\n\n```json\n{\n \"key\": {\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n },\n \"valueType\": \"NUMERIC\",\n \"predicate\": {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 20,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n}\n```\n\n Now let's review 'key', 'valueType' and 'predicate' objects in detail.\n\n## Filter Key\n\nFilter Key defines either entity field, attribute or telemetry. It is a JSON object that consists the key name and type. The following filter key types are supported: \n\n * 'CLIENT_ATTRIBUTE' - used for client attributes; \n * 'SHARED_ATTRIBUTE' - used for shared attributes; \n * 'SERVER_ATTRIBUTE' - used for server attributes; \n * 'ATTRIBUTE' - used for any of the above; \n * 'TIME_SERIES' - used for time series values; \n * 'ENTITY_FIELD' - used for accessing entity fields like 'name', 'label', etc. The list of available fields depends on the entity type; \n * 'ALARM_FIELD' - similar to entity field, but is used in alarm queries only; \n\n\n Let's review the example:\n\n```json\n{\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n}\n```\n\n## Value Type and Operations\n\nProvides a hint about the data type of the entity field that is defined in the filter key. The value type impacts the list of possible operations that you may use in the corresponding predicate. For example, you may use 'STARTS_WITH' or 'END_WITH', but you can't use 'GREATER_OR_EQUAL' for string values.The following filter value types and corresponding predicate operations are supported: \n\n * 'STRING' - used to filter any 'String' or 'JSON' values. Operations: EQUAL, NOT_EQUAL, STARTS_WITH, ENDS_WITH, CONTAINS, NOT_CONTAINS; \n * 'NUMERIC' - used for 'Long' and 'Double' values. Operations: EQUAL, NOT_EQUAL, GREATER, LESS, GREATER_OR_EQUAL, LESS_OR_EQUAL; \n * 'BOOLEAN' - used for boolean values. Operations: EQUAL, NOT_EQUAL;\n * 'DATE_TIME' - similar to numeric, transforms value to milliseconds since epoch. Operations: EQUAL, NOT_EQUAL, GREATER, LESS, GREATER_OR_EQUAL, LESS_OR_EQUAL; \n\n\n## Filter Predicate\n\nFilter Predicate defines the logical expression to evaluate. The list of available operations depends on the filter value type, see above. Platform supports 4 predicate types: 'STRING', 'NUMERIC', 'BOOLEAN' and 'COMPLEX'. The last one allows to combine multiple operations over one filter key.\n\nSimple predicate example to check 'value < 100': \n\n```json\n{\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 100,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n}\n```\n\nComplex predicate example, to check 'value < 10 or value > 20': \n\n```json\n{\n \"type\": \"COMPLEX\",\n \"operation\": \"OR\",\n \"predicates\": [\n {\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 10,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n },\n {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 20,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n ]\n}\n```\n\nMore complex predicate example, to check 'value < 10 or (value > 50 && value < 60)': \n\n```json\n{\n \"type\": \"COMPLEX\",\n \"operation\": \"OR\",\n \"predicates\": [\n {\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 10,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n },\n {\n \"type\": \"COMPLEX\",\n \"operation\": \"AND\",\n \"predicates\": [\n {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 50,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n },\n {\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 60,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n ]\n }\n ]\n}\n```\n\n You may also want to replace hardcoded values (for example, temperature > 20) with the more dynamic expression (for example, temperature > 'value of the tenant attribute with key 'temperatureThreshold'). It is possible to use 'dynamicValue' to define attribute of the tenant, customer or user that is performing the API call. See example below: \n\n```json\n{\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 0,\n \"dynamicValue\": {\n \"sourceType\": \"CURRENT_USER\",\n \"sourceAttribute\": \"temperatureThreshold\"\n }\n },\n \"type\": \"NUMERIC\"\n}\n```\n\n Note that you may use 'CURRENT_USER', 'CURRENT_CUSTOMER' and 'CURRENT_TENANT' as a 'sourceType'. The 'defaultValue' is used when the attribute with such a name is not defined for the chosen source.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "countEntitiesByQuery", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityCountQuery" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Integration" + "type": "integer", + "format": "int64" } } } @@ -73365,7 +73913,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -73483,186 +74031,33 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/entitiesQuery/find": { + "post": { "tags": [ - "integration-controller" - ], - "summary": "Delete integration (deleteIntegration)", - "description": "Deletes the integration and all the relations (from and to the integration). Referencing non-existing integration Id will cause an error. \n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", - "operationId": "deleteIntegration", - "parameters": [ - { - "name": "integrationId", - "in": "path", - "description": "A string value representing the integration id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - } + "entity-query-controller" ], - "responses": { - "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } + "summary": "Find Entity Data by Query", + "description": "Allows to run complex queries over platform entities (devices, assets, customers, etc) based on the combination of main entity filter and multiple key filters. Returns the paginated result of the query that contains requested entity fields and latest values of requested attributes and time series data.\n\n# Query Definition\n\n\n\nMain **entity filter** is mandatory and defines generic search criteria. For example, \"find all devices with profile 'Moisture Sensor'\" or \"Find all devices related to asset 'Building A'\"\n\nOptional **key filters** allow to filter results of the **entity filter** by complex criteria against main entity fields (name, label, type, etc), attributes and telemetry. For example, \"temperature > 20 or temperature< 10\" or \"name starts with 'T', and attribute 'model' is 'T1000', and time series field 'batteryLevel' > 40\".\n\nThe **entity fields** and **latest values** contains list of entity fields and latest attribute/telemetry fields to fetch for each entity.\n\nThe **page link** contains information about the page to fetch and the sort ordering.\n\nLet's review the example:\n\n```json\n{\n \"entityFilter\": {\n \"type\": \"entityType\",\n \"resolveMultiple\": true,\n \"entityType\": \"DEVICE\"\n },\n \"keyFilters\": [\n {\n \"key\": {\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n },\n \"valueType\": \"NUMERIC\",\n \"predicate\": {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 0,\n \"dynamicValue\": {\n \"sourceType\": \"CURRENT_USER\",\n \"sourceAttribute\": \"temperatureThreshold\",\n \"inherit\": false\n }\n },\n \"type\": \"NUMERIC\"\n }\n }\n ],\n \"entityFields\": [\n {\n \"type\": \"ENTITY_FIELD\",\n \"key\": \"name\"\n },\n {\n \"type\": \"ENTITY_FIELD\",\n \"key\": \"label\"\n },\n {\n \"type\": \"ENTITY_FIELD\",\n \"key\": \"additionalInfo\"\n }\n ],\n \"latestValues\": [\n {\n \"type\": \"ATTRIBUTE\",\n \"key\": \"model\"\n },\n {\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n }\n ],\n \"pageLink\": {\n \"page\": 0,\n \"pageSize\": 10,\n \"sortOrder\": {\n \"key\": {\n \"key\": \"name\",\n \"type\": \"ENTITY_FIELD\"\n },\n \"direction\": \"ASC\"\n }\n }\n}\n```\n\n Example mentioned above search all devices which have attribute 'active' set to 'true'. Now let's review available entity filters and key filters syntax:\n\n # Entity Filters\nEntity Filter body depends on the 'type' parameter. Let's review available entity filter types. In fact, they do correspond to available dashboard aliases.\n\n## Single Entity\n\nAllows to filter only one entity based on the id. For example, this entity filter selects certain device:\n\n```json\n{\n \"type\": \"singleEntity\",\n \"singleEntity\": {\n \"id\": \"d521edb0-2a7a-11ec-94eb-213c95f54092\",\n \"entityType\": \"DEVICE\"\n }\n}\n```\n\n## Group Entities Filter\n\nAllows to filter multiple entities of the same type using the entity group type and id. For example, this entity filter selects all devices that belong to the group 'e52b0020-2a7a-11ec-94eb-213c95f54092':\n\n```json\n{\n \"type\": \"entityGroup\",\n \"groupType\": \"DEVICE\",\n \"entityGroup\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n}\n```\n\n## Entity List Filter\n\nAllows to filter entities of the same type using their ids. For example, this entity filter selects two devices:\n\n```json\n{\n \"type\": \"entityList\",\n \"entityType\": \"DEVICE\",\n \"entityList\": [\n \"e6501f30-2a7a-11ec-94eb-213c95f54092\",\n \"e6657bf0-2a7a-11ec-94eb-213c95f54092\"\n ]\n}\n```\n\n## Entity Name Filter\n\nAllows to filter entities of the same type using the **'starts with'** expression over entity name. For example, this entity filter selects all devices which name starts with 'Air Quality':\n\n```json\n{\n \"type\": \"entityName\",\n \"entityType\": \"DEVICE\",\n \"entityNameFilter\": \"Air Quality\"\n}\n```\n\n## Entity Type Filter\n\nAllows to filter entities based on their type (CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, etc)For example, this entity filter selects all tenant customers:\n\n```json\n{\n \"type\": \"entityType\",\n \"entityType\": \"CUSTOMER\"\n}\n```\n\n## Group List Filter\n\nReturn multiple groups of the same type using specified ids. For example, this entity filter selects 2 device groups (if they are present in the system) with ids 'e52b0020-2a7a-11ec-94eb-213c95f54092' and 'e52b0020-2a7a-11ec-94eb-213c95f54093':\n\n```json\n{\n \"type\": \"entityGroupList\",\n \"groupType\": \"DEVICE\",\n \"entityGroupList\": [\"e52b0020-2a7a-11ec-94eb-213c95f54092\", \"e52b0020-2a7a-11ec-94eb-213c95f54093\"]\n}\n```\n\n## Group Name Filter\n\nAllows to filter entity groups based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all devices which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityGroupName\",\n \"groupType\": \"DEVICE\",\n \"entityGroupNameFilter\": \"CAT\"\n}\n```\n\n## Entities by Group Name Filter\n\nAllows to filter entities that belong to group based on the entity type and the group name. Optional parameter 'ownerId' allows you to specify the owner of the group (Tenant or Customer, current user owner by default).For example, this entity filter selects all devices which belong to group 'Water Meters':\n\n```json\n{\n \"type\": \"entitiesByGroupName\",\n \"groupType\": \"DEVICE\",\n \"entityGroupNameFilter\": \"Water Meters\"\n}\n```\n\n Other example, this entity filter selects all devices which belong to group 'Water Meters' which in turn belongs to (sub-)Customer with id 'e52b0020-2a7a-11ec-94eb-213c95f54093': \n\n```json\n{\n \"type\": \"entitiesByGroupName\",\n \"ownerId\": {\"entityType\": \"CUSTOMER\",\"id\":\"e52b0020-2a7a-11ec-94eb-213c95f54093\"},\n \"groupType\": \"DEVICE\",\n \"entityGroupNameFilter\": \"Water Meters\"\n}\n```\n\n## Entity owner Filter\n\nAllows to fetch owner (Tenant or Customer) of the specified entity. For example, this entity filter selects owner of the device with id 'e52b0020-2a7a-11ec-94eb-213c95f54093':\n\n```json\n{\n \"type\": \"stateEntityOwner\",\n \"singleEntity\": {\n \"id\": \"d521edb0-2a7a-11ec-94eb-213c95f54092\",\n \"entityType\": \"DEVICE\"\n }\n}\n```\n\n## Asset Type Filter\n\nAllows to filter assets based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'charging station' assets which name starts with 'Tesla':\n\n```json\n{\n \"type\": \"assetType\",\n \"assetType\": \"charging station\",\n \"assetNameFilter\": \"Tesla\"\n}\n```\n\n## Device Type Filter\n\nAllows to filter devices based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Temperature Sensor' devices which name starts with 'ABC':\n\n```json\n{\n \"type\": \"deviceType\",\n \"deviceType\": \"Temperature Sensor\",\n \"deviceNameFilter\": \"ABC\"\n}\n```\n\n## Edge Type Filter\n\nAllows to filter edge instances based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Factory' edge instances which name starts with 'Nevada':\n\n```json\n{\n \"type\": \"edgeType\",\n \"edgeType\": \"Factory\",\n \"edgeNameFilter\": \"Nevada\"\n}\n```\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```\n\n## Api Usage Filter\n\nAllows to query for Api Usage based on optional customer id. If the customer id is not set, returns current tenant API usage.For example, this entity filter selects the 'Api Usage' entity for customer with id 'e6501f30-2a7a-11ec-94eb-213c95f54092':\n\n```json\n{\n \"type\": \"apiUsageState\",\n \"customerId\": {\n \"id\": \"d521edb0-2a7a-11ec-94eb-213c95f54092\",\n \"entityType\": \"CUSTOMER\"\n }\n}\n```\n\n## Relations Query Filter\n\nAllows to filter entities that are related to the provided root entity. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'filter' object allows you to define the relation type and set of acceptable entity types to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only those who match the 'filters'.\n\nFor example, this entity filter selects all devices and assets which are related to the asset with id 'e51de0c0-2a7a-11ec-94eb-213c95f54092':\n\n```json\n{\n \"type\": \"relationsQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e51de0c0-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 1,\n \"fetchLastLevelOnly\": false,\n \"filters\": [\n {\n \"relationType\": \"Contains\",\n \"entityTypes\": [\n \"DEVICE\",\n \"ASSET\"\n ]\n }\n ]\n}\n```\n\n## Asset Search Query\n\nAllows to filter assets that are related to the provided root entity. Filters related assets based on the relation type and set of asset types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'assetTypes' defines the type of the asset to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only assets that match 'relationType' and 'assetTypes' conditions.\n\nFor example, this entity filter selects 'charging station' assets which are related to the asset with id 'e51de0c0-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"assetSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e51de0c0-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 1,\n \"fetchLastLevelOnly\": false,\n \"relationType\": \"Contains\",\n \"assetTypes\": [\n \"charging station\"\n ]\n}\n```\n\n## Device Search Query\n\nAllows to filter devices that are related to the provided root entity. Filters related devices based on the relation type and set of device types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'deviceTypes' defines the type of the device to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\nFor example, this entity filter selects 'Charging port' and 'Air Quality Sensor' devices which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"deviceSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 2,\n \"fetchLastLevelOnly\": true,\n \"relationType\": \"Contains\",\n \"deviceTypes\": [\n \"Air Quality Sensor\",\n \"Charging port\"\n ]\n}\n```\n\n## Entity View Query\n\nAllows to filter entity views that are related to the provided root entity. Filters related entity views based on the relation type and set of entity view types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'entityViewTypes' defines the type of the entity view to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\nFor example, this entity filter selects 'Concrete mixer' entity views which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"entityViewSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 1,\n \"fetchLastLevelOnly\": false,\n \"relationType\": \"Contains\",\n \"entityViewTypes\": [\n \"Concrete mixer\"\n ]\n}\n```\n\n## Edge Search Query\n\nAllows to filter edge instances that are related to the provided root entity. Filters related edge instances based on the relation type and set of edge types. Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. The 'relationType' defines the type of the relation to search for. The 'deviceTypes' defines the type of the device to search for. The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\nFor example, this entity filter selects 'Factory' edge instances which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n```json\n{\n \"type\": \"deviceSearchQuery\",\n \"rootEntity\": {\n \"entityType\": \"ASSET\",\n \"id\": \"e52b0020-2a7a-11ec-94eb-213c95f54092\"\n },\n \"direction\": \"FROM\",\n \"maxLevel\": 2,\n \"fetchLastLevelOnly\": true,\n \"relationType\": \"Contains\",\n \"edgeTypes\": [\n \"Factory\"\n ]\n}\n```\n\n # Key Filters\nKey Filter allows you to define complex logical expressions over entity field, attribute or latest time series value. The filter is defined using 'key', 'valueType' and 'predicate' objects. Single Entity Query may have zero, one or multiple predicates. If multiple filters are defined, they are evaluated using logical 'AND'. The example below checks that temperature of the entity is above 20 degrees:\n\n```json\n{\n \"key\": {\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n },\n \"valueType\": \"NUMERIC\",\n \"predicate\": {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 20,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n}\n```\n\n Now let's review 'key', 'valueType' and 'predicate' objects in detail.\n\n## Filter Key\n\nFilter Key defines either entity field, attribute or telemetry. It is a JSON object that consists the key name and type. The following filter key types are supported: \n\n * 'CLIENT_ATTRIBUTE' - used for client attributes; \n * 'SHARED_ATTRIBUTE' - used for shared attributes; \n * 'SERVER_ATTRIBUTE' - used for server attributes; \n * 'ATTRIBUTE' - used for any of the above; \n * 'TIME_SERIES' - used for time series values; \n * 'ENTITY_FIELD' - used for accessing entity fields like 'name', 'label', etc. The list of available fields depends on the entity type; \n * 'ALARM_FIELD' - similar to entity field, but is used in alarm queries only; \n\n\n Let's review the example:\n\n```json\n{\n \"type\": \"TIME_SERIES\",\n \"key\": \"temperature\"\n}\n```\n\n## Value Type and Operations\n\nProvides a hint about the data type of the entity field that is defined in the filter key. The value type impacts the list of possible operations that you may use in the corresponding predicate. For example, you may use 'STARTS_WITH' or 'END_WITH', but you can't use 'GREATER_OR_EQUAL' for string values.The following filter value types and corresponding predicate operations are supported: \n\n * 'STRING' - used to filter any 'String' or 'JSON' values. Operations: EQUAL, NOT_EQUAL, STARTS_WITH, ENDS_WITH, CONTAINS, NOT_CONTAINS; \n * 'NUMERIC' - used for 'Long' and 'Double' values. Operations: EQUAL, NOT_EQUAL, GREATER, LESS, GREATER_OR_EQUAL, LESS_OR_EQUAL; \n * 'BOOLEAN' - used for boolean values. Operations: EQUAL, NOT_EQUAL;\n * 'DATE_TIME' - similar to numeric, transforms value to milliseconds since epoch. Operations: EQUAL, NOT_EQUAL, GREATER, LESS, GREATER_OR_EQUAL, LESS_OR_EQUAL; \n\n\n## Filter Predicate\n\nFilter Predicate defines the logical expression to evaluate. The list of available operations depends on the filter value type, see above. Platform supports 4 predicate types: 'STRING', 'NUMERIC', 'BOOLEAN' and 'COMPLEX'. The last one allows to combine multiple operations over one filter key.\n\nSimple predicate example to check 'value < 100': \n\n```json\n{\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 100,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n}\n```\n\nComplex predicate example, to check 'value < 10 or value > 20': \n\n```json\n{\n \"type\": \"COMPLEX\",\n \"operation\": \"OR\",\n \"predicates\": [\n {\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 10,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n },\n {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 20,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n ]\n}\n```\n\nMore complex predicate example, to check 'value < 10 or (value > 50 && value < 60)': \n\n```json\n{\n \"type\": \"COMPLEX\",\n \"operation\": \"OR\",\n \"predicates\": [\n {\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 10,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n },\n {\n \"type\": \"COMPLEX\",\n \"operation\": \"AND\",\n \"predicates\": [\n {\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 50,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n },\n {\n \"operation\": \"LESS\",\n \"value\": {\n \"defaultValue\": 60,\n \"dynamicValue\": null\n },\n \"type\": \"NUMERIC\"\n }\n ]\n }\n ]\n}\n```\n\n You may also want to replace hardcoded values (for example, temperature > 20) with the more dynamic expression (for example, temperature > 'value of the tenant attribute with key 'temperatureThreshold'). It is possible to use 'dynamicValue' to define attribute of the tenant, customer or user that is performing the API call. See example below: \n\n```json\n{\n \"operation\": \"GREATER\",\n \"value\": {\n \"defaultValue\": 0,\n \"dynamicValue\": {\n \"sourceType\": \"CURRENT_USER\",\n \"sourceAttribute\": \"temperatureThreshold\"\n }\n },\n \"type\": \"NUMERIC\"\n}\n```\n\n Note that you may use 'CURRENT_USER', 'CURRENT_CUSTOMER' and 'CURRENT_TENANT' as a 'sourceType'. The 'defaultValue' is used when the attribute with such a name is not defined for the chosen source.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "findEntityDataByQuery", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityDataQuery" } } }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - } + "required": true }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] - } - }, - "/api/integration/{integrationId}/export-package": { - "get": { - "tags": [ - "integration-controller" - ], - "summary": "Export integration as IoT Hub package", - "description": "Returns a ZIP containing integration.json, uplink.json, optional downlink.json, and form.json. Sensitive fields are tokenized via @TemplateField annotations on the integration's runtime POJO.", - "operationId": "exportIntegrationPackage", - "parameters": [ - { - "name": "integrationId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "byte" + "$ref": "#/components/schemas/PageDataEntityData" } } } @@ -73678,7 +74073,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -73798,95 +74193,65 @@ ] } }, - "/api/integrationInfos": { - "get": { + "/api/entitiesQuery/find/keys": { + "post": { "tags": [ - "integration-controller" + "entity-query-controller" ], - "summary": "Get Integration Infos (getIntegrationInfos)", - "description": "Returns a page of integration infos owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getIntegrationInfos", + "summary": "Find Available Entity Keys by Query (deprecated)", + "description": "**Deprecated.** Use the V2 endpoint (`POST /api/v2/entitiesQuery/find/keys`) instead.\n\nReturns unique time series and/or attribute key names from entities matching the query.\n\nExecutes the Entity Data Query to find up to 100 entities, then fetches and aggregates all distinct key names.\n\nPrimarily used for UI features like autocomplete suggestions.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "findAvailableEntityKeysByQuery", "parameters": [ { - "name": "isEdgeTemplate", - "in": "query", - "description": "Fetch edge template integrations", - "required": false, - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "pageSize", + "name": "timeseries", "in": "query", - "description": "Maximum amount of entities in a one page", + "description": "When true, includes unique time series key names in the response.\nWhen false, the 'timeseries' list will be empty.", "required": true, "schema": { - "type": "string", - "minimum": 1 + "type": "boolean" } }, { - "name": "page", + "name": "attributes", "in": "query", - "description": "Sequence number of page starting from 0", + "description": "When true, includes unique attribute key names in the response.\nWhen false, the 'attribute' list will be empty. Use 'scope' parameter to filter by attribute scope.", "required": true, "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the integration name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "debugMode", - "allowCreateDevicesOrAssets", - "enabled", - "remote", - "routingKey", - "secret" - ] + "type": "boolean" } }, { - "name": "sortOrder", + "name": "scope", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "Filters attribute keys by scope. Only applies when 'attributes' is true.\nIf not specified, returns attribute keys from all scopes.", "required": false, "schema": { "type": "string", "enum": [ - "ASC", - "DESC" + "SERVER_SCOPE", + "SHARED_SCOPE", + "CLIENT_SCOPE" ] } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityDataQuery" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataIntegrationInfo" + "$ref": "#/components/schemas/AvailableEntityKeys" } } } @@ -73902,7 +74267,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -74012,6 +74377,7 @@ } } }, + "deprecated": true, "security": [ { "HttpLoginForm": [] @@ -74022,95 +74388,77 @@ ] } }, - "/api/integrations": { - "get": { + "/api/v2/entitiesQuery/find/keys": { + "post": { "tags": [ - "integration-controller" + "entity-query-controller" ], - "summary": "Get Integrations (getIntegrations)", - "description": "Returns a page of integrations owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getIntegrations", + "summary": "Find Available Entity Keys By Query", + "description": "Discovers unique time series and/or attribute key names available on entities that match the given query.\nWorks in two steps: first, the request body (an Entity Data Query) is executed to find matching entities\n(page size is capped at 100); then, all distinct key names are collected from those entities.\n\nOptionally, each key can include a sample — the most recent value (by timestamp) for that key\nacross all matched entities.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "findAvailableEntityKeysByQueryV2", "parameters": [ { - "name": "isEdgeTemplate", + "name": "includeTimeseries", "in": "query", - "description": "Fetch edge template integrations", + "description": "When true, includes unique time series keys in the response.\nWhen false, the 'timeseries' field is omitted. At least one of 'includeTimeseries' or 'includeAttributes' must be true.", "required": false, "schema": { "type": "boolean", - "default": false - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "string", - "minimum": 0 + "default": true } }, { - "name": "textSearch", + "name": "includeAttributes", "in": "query", - "description": "The case insensitive 'startsWith' filter based on the integration name.", + "description": "When true, includes unique attribute keys in the response.\nWhen false, the 'attributes' field is omitted. At least one of 'includeTimeseries' or 'includeAttributes' must be true.", "required": false, "schema": { - "type": "string" + "type": "boolean", + "default": true } }, { - "name": "sortProperty", + "name": "scopes", "in": "query", - "description": "Property of entity to sort by", + "description": "Filters attribute keys by scope. Only applies when 'includeAttributes' is true.\nWhen not specified, scopes are auto-determined: all three scopes (server, client, shared) for device entities,\nserver scope only for other entity types.", "required": false, "schema": { "type": "string", "enum": [ - "createdTime", - "name", - "type", - "debugMode", - "allowCreateDevicesOrAssets", - "enabled", - "remote", - "routingKey", - "secret" + "SERVER_SCOPE", + "SHARED_SCOPE", + "CLIENT_SCOPE" ] } }, { - "name": "sortOrder", + "name": "includeSamples", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "When true, each key entry includes a 'sample' object with the most recent value and timestamp.\nWhen false, only key names are returned (sample is omitted from JSON).", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "boolean", + "default": false } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityDataQuery" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataIntegration" + "$ref": "#/components/schemas/AvailableEntityKeysV2" } } } @@ -74126,7 +74474,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -74246,24 +74594,77 @@ ] } }, - "/api/integrations/converters/info": { + "/api/relation": { "get": { "tags": [ - "integration-controller" + "entity-relation-controller" + ], + "summary": "Get Relation (getRelation)", + "description": "Returns relation object between two specified entities if present. Otherwise throws exception. \n\nIf the user has the authority of 'System Administrator', the server checks that 'from' and 'to' entities are owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that 'from' and 'to' entities are owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the 'from' and 'to' entities are assigned to the same customer.", + "operationId": "getRelation", + "parameters": [ + { + "name": "fromId", + "in": "query", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fromType", + "in": "query", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "relationType", + "in": "query", + "description": "A string value representing relation type between entities. For example, 'Contains', 'Manages'. It can be any string value.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "relationTypeGroup", + "in": "query", + "description": "A string value representing relation type group. For example, 'COMMON'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "toId", + "in": "query", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "toType", + "in": "query", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Get Integrations Converters info (getIntegrationsConvertersInfo)", - "description": "Returns a JSON object containing information about existing tenant converters and converters available in library. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getIntegrationsConvertersInfo", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/IntegrationConvertersInfo" - } + "$ref": "#/components/schemas/EntityRelation" } } } @@ -74399,28 +74800,24 @@ ] } }, - "/api/integrations/list": { - "get": { + "/api/relations": { + "post": { "tags": [ - "integration-controller" + "entity-relation-controller" ], - "summary": "Get Integrations By Ids (getIntegrationsByIds)", - "description": "Requested integrations must be owned by tenant which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getIntegrationsByIds", - "parameters": [ - { - "name": "integrationIds", - "in": "query", - "description": "A list of integration ids, separated by comma ','", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string" + "summary": "Find related entities (findEntityRelationsByQuery)", + "description": "Returns all entities that are related to the specific entity. The entity id, relation type, entity types, depth of the search, and other query parameters defined using complex 'EntityRelationsQuery' object. See 'Model' tab of the Parameters for more info.", + "operationId": "findEntityRelationsByQuery", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityRelationsQuery" } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -74429,7 +74826,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Integration" + "$ref": "#/components/schemas/EntityRelation" } } } @@ -74446,7 +74843,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -74564,37 +74961,37 @@ "ApiKeyForm": [] } ] - } - }, - "/api/job/{id}": { - "get": { + }, + "delete": { "tags": [ - "job-controller" + "entity-relation-controller" ], - "summary": "Get job by id (getJobById)", - "description": "Fetches job info by id.\n\nExample of a RUNNING CF_REPROCESSING job response:\n```json\n{\n \"id\": {\n \"entityType\": \"JOB\",\n \"id\": \"475e94e0-2f2d-11f0-8240-91e99922a704\"\n },\n \"createdTime\": 1747053196590,\n \"tenantId\": {\n \"entityType\": \"TENANT\",\n \"id\": \"46859a00-2f2d-11f0-8240-91e99922a704\"\n },\n \"type\": \"CF_REPROCESSING\",\n \"key\": \"474e4130-2f2d-11f0-8240-91e99922a704\",\n \"entityId\": {\n \"entityType\": \"DEVICE_PROFILE\",\n \"id\": \"9fd41f20-31a1-11f0-933e-27998d6db02e\"\n },\n \"status\": \"RUNNING\",\n \"configuration\": {\n \"type\": \"CF_REPROCESSING\",\n \"calculatedFieldId\": {\n \"entityType\": \"CALCULATED_FIELD\",\n \"id\": \"474e4130-2f2d-11f0-8240-91e99922a704\"\n },\n \"startTs\": 1747051995760,\n \"endTs\": 1747052895760,\n \"tasksKey\": \"c3cdbd42-799e-4d3a-9aad-9310f767aa36\",\n \"toReprocess\": null\n },\n \"result\": {\n \"jobType\": \"CF_REPROCESSING\",\n \"successfulCount\": 1,\n \"failedCount\": 0,\n \"discardedCount\": 0,\n \"totalCount\": 2,\n \"results\": [],\n \"generalError\": null,\n \"startTs\": 1747323069445,\n \"finishTs\": 1747323070585,\n \"cancellationTs\": 0\n }\n}\n\n```\n\nExample of a CF_REPROCESSING job with failures:\n```json\n{\n ...,\n \"status\": \"FAILED\",\n ...,\n \"result\": {\n \"jobType\": \"CF_REPROCESSING\",\n \"successfulCount\": 0,\n \"failedCount\": 2,\n \"discardedCount\": 0,\n \"totalCount\": 2,\n \"results\": [\n {\n \"jobType\": \"CF_REPROCESSING\",\n \"key\": \"c3cdbd42-799e-4d3a-9aad-9310f767aa36\",\n \"success\": false,\n \"discarded\": false,\n \"failure\": {\n \"error\": \"Failed to fetch temperature: Failed to fetch timeseries data\",\n \"entityInfo\": {\n \"id\": {\n \"entityType\": \"DEVICE\",\n \"id\": \"9fd41f20-31a1-11f0-933e-27998d6db02e\"\n },\n \"name\": \"Test device 1\"\n }\n }\n },\n {\n \"jobType\": \"CF_REPROCESSING\",\n \"key\": \"c3cdbd42-799e-4d3a-9aad-9310f767aa36\",\n \"success\": false,\n \"discarded\": false,\n \"failure\": {\n \"error\": \"Failed to fetch temperature: Failed to fetch timeseries data\",\n \"entityInfo\": {\n \"id\": {\n \"entityType\": \"DEVICE\",\n \"id\": \"9ffc4090-31a1-11f0-933e-27998d6db02e\"\n },\n \"name\": \"Test device 2\"\n }\n }\n }\n ],\n \"generalError\": null,\n \"startTs\": 1747323069445,\n \"finishTs\": 1747323070585,\n \"cancellationTs\": 0\n }\n}\n\n```\n\nExample of a FAILED job result with general error:\n```json\n{\n ...,\n \"status\": \"FAILED\",\n ...,\n \"result\": {\n \"jobType\": \"CF_REPROCESSING\",\n \"successfulCount\": 1,\n \"failedCount\": 0,\n \"discardedCount\": 0,\n \"totalCount\": null,\n \"results\": [],\n \"generalError\": \"Timeout to find devices by profile\",\n \"cancellationTs\": 0\n }\n}\n\n```\n\nExample of a CANCELLED job result:\n```json\n{\n ...,\n \"status\": \"CANCELLED\",\n ...,\n \"result\": {\n \"jobType\": \"CF_REPROCESSING\",\n \"successfulCount\": 15,\n \"failedCount\": 0,\n \"discardedCount\": 85,\n \"totalCount\": 100,\n \"results\": [],\n \"generalError\": null,\n \"cancellationTs\": 1747065908414\n }\n}\n\n```\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getJobById", + "summary": "Delete common relations (deleteRelations)", + "description": "Deletes all the relations ('from' and 'to' direction) for the specified entity and relation type group: 'COMMON'. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer.", + "operationId": "deleteRelations", "parameters": [ { - "name": "id", - "in": "path", + "name": "entityId", + "in": "query", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "entityType", + "in": "query", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Job" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -74725,27 +75122,58 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/relations/from/{fromType}/{fromId}": { + "get": { "tags": [ - "job-controller" + "entity-relation-controller" ], - "summary": "deleteJob", - "operationId": "deleteJob", + "summary": "Get List of Relations (findEntityRelationsByFrom)", + "description": "Returns list of relation objects for the specified entity by the 'from' direction. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer.", + "operationId": "findEntityRelationsByFrom", "parameters": [ { - "name": "id", + "name": "fromType", "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "fromId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "relationTypeGroup", + "in": "query", + "description": "A string value representing relation type group. For example, 'COMMON'", + "required": false, + "schema": { + "type": "string" } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityRelation" + } + } + } + } }, "400": { "description": "Bad Request", @@ -74878,28 +75306,65 @@ ] } }, - "/api/job/{id}/cancel": { - "post": { + "/api/relations/from/{fromType}/{fromId}/{relationType}": { + "get": { "tags": [ - "job-controller" + "entity-relation-controller" ], - "summary": "Cancel job (cancelJob)", - "description": "Cancels the job. The status of the job must be QUEUED, PENDING or RUNNING.\n\nFor a running job, all the tasks not yet processed will be discarded.\n\nSee the example of a cancelled job result in getJobById method description.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "cancelJob", + "summary": "Get List of Relations (findEntityRelationsByFromAndRelationType)", + "description": "Returns list of relation objects for the specified entity by the 'from' direction and relation type. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer.", + "operationId": "findEntityRelationsByFromAndRelationType", "parameters": [ { - "name": "id", + "name": "fromType", "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "fromId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "relationType", + "in": "path", + "description": "A string value representing relation type between entities. For example, 'Contains', 'Manages'. It can be any string value.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "relationTypeGroup", + "in": "query", + "description": "A string value representing relation type group. For example, 'COMMON'", + "required": false, + "schema": { + "type": "string" } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityRelation" + } + } + } + } }, "400": { "description": "Bad Request", @@ -74912,7 +75377,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -75032,28 +75497,37 @@ ] } }, - "/api/job/{id}/reprocess": { + "/api/relations/info": { "post": { "tags": [ - "job-controller" + "entity-relation-controller" ], - "summary": "Reprocess job (reprocessJob)", - "description": "Reprocesses the job. Failures are located at job.result.results list. Platform iterates over this list and submits new tasks for them. Doesn't create new job entity but updates the existing one. Successfully reprocessed job will look the same as completed one.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "reprocessJob", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "Find related entity infos (findEntityRelationInfosByQuery)", + "description": "Returns all entity infos that are related to the specific entity. The entity id, relation type, entity types, depth of the search, and other query parameters defined using complex 'EntityRelationsQuery' object. See 'Model' tab of the Parameters for more info. Relation Info is an extension of the default Relation object that contains information about the 'from' and 'to' entity names. ", + "operationId": "findEntityRelationInfosByQuery", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityRelationsQuery" + } } - } - ], + }, + "required": true + }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityRelationInfo" + } + } + } + } }, "400": { "description": "Bad Request", @@ -75186,126 +75660,41 @@ ] } }, - "/api/jobs": { + "/api/relations/info/from/{fromType}/{fromId}": { "get": { "tags": [ - "job-controller" + "entity-relation-controller" ], - "summary": "Get jobs (getJobs)", - "description": "Returns the page of jobs.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getJobs", + "summary": "Get List of Relation Infos (findEntityRelationInfosByFrom)", + "description": "Returns list of relation info objects for the specified entity by the 'from' direction. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer. Relation Info is an extension of the default Relation object that contains information about the 'from' and 'to' entity names. ", + "operationId": "findEntityRelationInfosByFrom", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "fromType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "Case-insensitive 'substring' filter based on job's description", - "required": false, "schema": { "type": "string" } }, { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, + "name": "fromId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { "type": "string" } }, { - "name": "sortOrder", + "name": "relationTypeGroup", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "A string value representing relation type group. For example, 'COMMON'", "required": false, "schema": { "type": "string" } - }, - { - "name": "types", - "in": "query", - "description": "Comma-separated list of job types to include. If empty - all job types are included.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "statuses", - "in": "query", - "description": "Comma-separated list of job statuses to include. If empty - all job statuses are included.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "entities", - "in": "query", - "description": "Comma-separated list of entity ids. If empty - jobs for all entities are included.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "startTime", - "in": "query", - "description": "To only include jobs created after this timestamp.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTime", - "in": "query", - "description": "To only include jobs created before this timestamp.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { @@ -75314,7 +75703,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataJob" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityRelationInfo" + } } } } @@ -75450,228 +75842,71 @@ ] } }, - "/api/auth/login": { - "post": { + "/api/relations/info/to/{toType}/{toId}": { + "get": { "tags": [ - "login-endpoint" + "entity-relation-controller" ], - "summary": "Login method to get user JWT token data", - "description": "Login method used to authenticate user and get JWT token data.\n\nValue of the response **token** field can be used as **X-Authorization** header value:\n\n`X-Authorization: Bearer $JWT_TOKEN_VALUE`.", - "operationId": "login", - "requestBody": { - "description": "Login request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LoginRequest" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LoginResponse" - } - } + "summary": "Get List of Relation Infos (findEntityRelationInfosByTo)", + "description": "Returns list of relation info objects for the specified entity by the 'to' direction. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer. Relation Info is an extension of the default Relation object that contains information about the 'from' and 'to' entity names. ", + "operationId": "findEntityRelationInfosByTo", + "parameters": [ + { + "name": "toType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "bad-credentials": { - "summary": "Bad credentials", - "value": { - "message": "Invalid username or password", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - }, - "token-expired": { - "summary": "JWT token expired", - "value": { - "message": "Token has expired", - "errorCode": 11, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - }, - "account-disabled": { - "summary": "Disabled account", - "value": { - "message": "User account is not active", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - }, - "account-locked": { - "summary": "Locked account", - "value": { - "message": "User account is locked due to security policy", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - }, - "authentication-failed": { - "summary": "General authentication error", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } + { + "name": "toId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } }, - "401 ": { - "description": "Unauthorized (**Expired credentials**)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardCredentialsExpiredResponse" - }, - "examples": { - "credentials-expired": { - "summary": "Expired credentials", - "value": { - "status": 401, - "message": "User password expired!", - "errorCode": 15, - "timestamp": 1609459200000, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "resetToken": "udgDQOpS1Q4ZFEL8qHF9s8cSKQ7d1h" - } - } - } - } + { + "name": "relationTypeGroup", + "in": "query", + "description": "A string value representing relation type group. For example, 'COMMON'", + "required": false, + "schema": { + "type": "string" } } - } - } - }, - "/api/auth/token": { - "post": { - "tags": [ - "login-endpoint" ], - "summary": "Refresh user JWT token data", - "description": "Method to refresh JWT token. Provide a valid refresh token to get a new JWT token.\n\nThe response contains a new token that can be used for authorization.\n\n`X-Authorization: Bearer $JWT_TOKEN_VALUE`", - "operationId": "refreshToken", - "requestBody": { - "description": "Refresh token request", - "content": { - "application/json": { - "schema": { - "properties": { - "refreshToken": {} - } - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LoginResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityRelationInfo" + } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ThingsboardErrorResponse" }, "examples": { - "bad-credentials": { - "summary": "Bad credentials", - "value": { - "message": "Invalid username or password", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - }, - "token-expired": { - "summary": "JWT token expired", - "value": { - "message": "Token has expired", - "errorCode": 11, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - }, - "account-disabled": { - "summary": "Disabled account", - "value": { - "message": "User account is not active", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - }, - "account-locked": { - "summary": "Locked account", - "value": { - "message": "User account is locked due to security policy", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - }, - "authentication-failed": { - "summary": "General authentication error", + "error-code-400": { + "summary": "Bad Request", "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, "subscriptionErrorCode": null, "subscriptionEntry": null, "subscriptionValue": null, @@ -75682,45 +75917,20 @@ } } }, - "401 ": { - "description": "Unauthorized (**Expired credentials**)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardCredentialsExpiredResponse" - }, - "examples": { - "credentials-expired": { - "summary": "Expired credentials", - "value": { - "status": 401, - "message": "User password expired!", - "errorCode": 15, - "timestamp": 1609459200000, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "resetToken": "udgDQOpS1Q4ZFEL8qHF9s8cSKQ7d1h" - } - } - } - } - } - }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ThingsboardErrorResponse" }, "examples": { - "error-code-400": { - "summary": "Bad Request", + "error-code-401": { + "summary": "Unauthorized", "value": { - "message": "Invalid request body", - "errorCode": 31, - "status": 400, + "message": "Authentication failed", + "errorCode": 10, + "status": 401, "subscriptionErrorCode": null, "subscriptionEntry": null, "subscriptionValue": null, @@ -75803,45 +76013,64 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/lwm2m/device-credentials": { - "post": { + "/api/relations/to/{toType}/{toId}": { + "get": { "tags": [ - "lwm-2m-controller" + "entity-relation-controller" ], - "summary": "Save LwM2M device with credentials (saveLwm2mDeviceWithCredentials)", - "description": "Deprecated.", - "operationId": "saveLwm2mDeviceWithCredentials", + "summary": "Get List of Relations (findEntityRelationsByTo)", + "description": "Returns list of relation objects for the specified entity by the 'to' direction. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer.", + "operationId": "findEntityRelationsByTo", "parameters": [ { - "name": "entityGroupId", + "name": "toType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "toId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "relationTypeGroup", "in": "query", + "description": "A string value representing relation type group. For example, 'COMMON'", "required": false, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": {} - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Device" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityRelation" + } } } } @@ -75857,7 +76086,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -75977,22 +76206,49 @@ ] } }, - "/api/lwm2m/deviceProfile/bootstrap/{isBootstrapServer}": { + "/api/relations/to/{toType}/{toId}/{relationType}": { "get": { "tags": [ - "lwm-2m-controller" + "entity-relation-controller" ], - "summary": "Get Lwm2m Bootstrap SecurityInfo (getLwm2mBootstrapSecurityInfo)", - "description": "Get the Lwm2m Bootstrap SecurityInfo object (of the current server) based on the provided isBootstrapServer parameter. If isBootstrapServer == true, get the parameters of the current Bootstrap Server. If isBootstrapServer == false, get the parameters of the current Lwm2m Server. Used for client settings when starting the client in Bootstrap mode. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getLwm2mBootstrapSecurityInfo", + "summary": "Get List of Relations (findEntityRelationsByToAndRelationType)", + "description": "Returns list of relation objects for the specified entity by the 'to' direction and relation type. \n\nIf the user has the authority of 'System Administrator', the server checks that the entity is owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that the entity is owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the entity is assigned to the same customer.", + "operationId": "findEntityRelationsByToAndRelationType", "parameters": [ { - "name": "isBootstrapServer", + "name": "toType", "in": "path", - "description": "A Boolean value representing the Server SecurityInfo for future Bootstrap client mode settings. Values: 'true' for Bootstrap Server; 'false' for Lwm2m Server. ", + "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { - "type": "boolean" + "type": "string" + } + }, + { + "name": "toId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "relationType", + "in": "path", + "description": "A string value representing relation type between entities. For example, 'Contains', 'Manages'. It can be any string value.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "relationTypeGroup", + "in": "query", + "description": "A string value representing relation type group. For example, 'COMMON'", + "required": false, + "schema": { + "type": "string" } } ], @@ -76002,7 +76258,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LwM2MServerSecurityConfigDefault" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityRelation" + } } } } @@ -76138,21 +76397,31 @@ ] } }, - "/api/mail/config/template": { - "get": { + "/api/v2/relation": { + "post": { "tags": [ - "mail-config-template-controller" + "entity-relation-controller" ], - "summary": "Get the list of all OAuth2 client registration templates (getMailConfigTemplates)\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "description": "Mail configuration template is set of default smtp settings for mail server that specific provider supports", - "operationId": "getMailConfigTemplates", + "summary": "Create Relation (saveRelation)", + "description": "Creates or updates a relation between two entities in the platform. Relations unique key is a combination of from/to entity id and relation type group and relation type. \n\nIf the user has the authority of 'System Administrator', the server checks that 'from' and 'to' entities are owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that 'from' and 'to' entities are owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the 'from' and 'to' entities are assigned to the same customer.", + "operationId": "saveRelation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityRelation" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/EntityRelation" } } } @@ -76168,7 +76437,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -76286,47 +76555,77 @@ "ApiKeyForm": [] } ] - } - }, - "/api/mobile/bundle": { - "post": { + }, + "delete": { "tags": [ - "mobile-app-bundle-controller" + "entity-relation-controller" ], - "summary": "Save Or update Mobile app bundle (saveMobileAppBundle)", - "description": "Create or update the Mobile app bundle that represents tha pair of ANDROID and IOS app and mobile settings like oauth2 clients, self-registration and layout configuration.When creating mobile app bundle, platform generates Mobile App Bundle Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Mobile App Bundle Id will be present in the response. Referencing non-existing Mobile App Bundle Id will cause 'Not Found' error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "saveMobileAppBundle", + "summary": "Delete Relation (deleteRelation)", + "description": "Deletes a relation between two entities in the platform. \n\nIf the user has the authority of 'System Administrator', the server checks that 'from' and 'to' entities are owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that 'from' and 'to' entities are owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the 'from' and 'to' entities are assigned to the same customer.", + "operationId": "deleteRelation", "parameters": [ { - "name": "oauth2ClientIds", + "name": "fromId", "in": "query", - "description": "A list of oauth2 client ids, separated by comma ','", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fromType", + "in": "query", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "relationType", + "in": "query", + "description": "A string value representing relation type between entities. For example, 'Contains', 'Manages'. It can be any string value.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "relationTypeGroup", + "in": "query", + "description": "A string value representing relation type group. For example, 'COMMON'", "required": false, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MobileAppBundle" - } + }, + { + "name": "toId", + "in": "query", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "toType", + "in": "query", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MobileAppBundle" + "$ref": "#/components/schemas/EntityRelation" } } } @@ -76342,7 +76641,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -76462,22 +76761,96 @@ ] } }, - "/api/mobile/bundle/info/{id}": { + "/api/customer/{customerId}/entityViewInfos": { "get": { "tags": [ - "mobile-app-bundle-controller" + "entity-view-controller" ], - "summary": "Get mobile app bundle info by id (getMobileAppBundleInfoById)", - "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getMobileAppBundleInfoById", + "summary": "Get Customer Entity View Infos (getCustomerEntityViewInfos)", + "description": "Returns a page of entity view info objects owned by the specified customer. Entity Views Info extends the Entity View with owner name. Entity Views limit the degree of exposure of the Device or Asset telemetry and attributes to the Customers. Every Entity View references exactly one entity (device or asset) and defines telemetry and attribute keys that will be visible to the assigned Customer. As a Tenant Administrator you are able to create multiple EVs per Device or Asset and assign them to different Customers. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerEntityViewInfos", "parameters": [ { - "name": "id", + "name": "customerId", "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "type", + "in": "query", + "description": "\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the entity view name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, "schema": { "type": "string", - "format": "uuid" + "enum": [ + "createdTime", + "name", + "type" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -76487,7 +76860,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MobileAppBundleInfo" + "$ref": "#/components/schemas/PageDataEntityViewInfo" } } } @@ -76623,15 +76996,24 @@ ] } }, - "/api/mobile/bundle/infos": { + "/api/customer/{customerId}/entityViews": { "get": { "tags": [ - "mobile-app-bundle-controller" + "entity-view-controller" ], - "summary": "Get mobile app bundle infos (getTenantMobileAppBundleInfos)", - "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getTenantMobileAppBundleInfos", + "summary": "Get Customer Entity Views (getCustomerEntityViews)", + "description": "Returns a page of Entity View objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getCustomerEntityViews", "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "pageSize", "in": "query", @@ -76652,10 +77034,19 @@ "format": "int32" } }, + { + "name": "type", + "in": "query", + "description": "\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```", + "required": false, + "schema": { + "type": "string" + } + }, { "name": "textSearch", "in": "query", - "description": "Case-insensitive 'substring' filter based on app's name", + "description": "The case insensitive 'substring' filter based on the entity view name.", "required": false, "schema": { "type": "string" @@ -76667,7 +77058,12 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string" + "type": "string", + "enum": [ + "createdTime", + "name", + "type" + ] } }, { @@ -76676,7 +77072,11 @@ "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "string" + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -76686,7 +77086,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataMobileAppBundleInfo" + "$ref": "#/components/schemas/PageDataEntityView" } } } @@ -76822,28 +77222,91 @@ ] } }, - "/api/mobile/bundle/{id}": { - "delete": { + "/api/entityGroup/{entityGroupId}/entityViews": { + "get": { "tags": [ - "mobile-app-bundle-controller" + "entity-view-controller" ], - "summary": "Delete Mobile App Bundle by ID (deleteMobileAppBundle)", - "description": "Deletes Mobile App Bundle by ID. Referencing non-existing mobile app bundle Id will cause an error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "deleteMobileAppBundle", + "summary": "Get entity views by Entity Group Id (getEntityViewsByEntityGroupId)", + "description": "Returns a page of Entity View objects that belongs to specified Entity View Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getEntityViewsByEntityGroupId", "parameters": [ { - "name": "id", + "name": "entityGroupId", "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { "type": "string", - "format": "uuid" + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the entity view name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataEntityView" + } + } + } }, "400": { "description": "Bad Request", @@ -76976,22 +77439,63 @@ ] } }, - "/api/mobile/bundle/{id}/oauth2Clients": { - "put": { + "/api/entityView": { + "post": { "tags": [ - "mobile-app-bundle-controller" + "entity-view-controller" ], - "summary": "Update oauth2 clients (updateMobileAppBundleOauth2Clients)", - "description": "Update oauth2 clients of the specified mobile app bundle.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "updateMobileAppBundleOauth2Clients", + "summary": "Save or update entity view (saveEntityView)", + "description": "Entity Views limit the degree of exposure of the Device or Asset telemetry and attributes to the Customers. Every Entity View references exactly one entity (device or asset) and defines telemetry and attribute keys that will be visible to the assigned Customer. As a Tenant Administrator you are able to create multiple EVs per Device or Asset and assign them to different Customers. See the 'Model' tab for more details.Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Entity View entity.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "saveEntityView", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "entityGroupId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "entityGroupIds", + "in": "query", + "description": "A list of entity group ids, separated by comma ','", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "nameConflictPolicy", + "in": "query", + "description": "Optional value of name conflict policy. Possible values: FAIL or UNIQUIFY. If omitted, FAIL policy is applied. FAIL policy implies exception will be thrown if an entity with the same name already exists. UNIQUIFY policy appends a suffix to the entity name, if a name conflict occurs.", + "required": false, + "schema": { + "$ref": "#/components/schemas/NameConflictPolicy", + "default": "FAIL" + } + }, + { + "name": "uniquifySeparator", + "in": "query", + "description": "Optional value of name suffix separator used by UNIQUIFY policy. By default, underscore separator is used. For example, strategy is UNIQUIFY, separator is '-'; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-7fsh4f'.", + "required": false, "schema": { "type": "string", - "format": "uuid" + "default": "_" + } + }, + { + "name": "uniquifyStrategy", + "in": "query", + "description": "Optional value of uniquify strategy used by UNIQUIFY policy. Possible values: RANDOM or INCREMENTAL. By default, RANDOM strategy is used, which means random alphanumeric string will be added as a suffix to entity name. INCREMENTAL implies the first possible number starting from 1 will be added as a name suffix. For example, strategy is UNIQUIFY, uniquify strategy is INCREMENTAL; if a name conflict occurs for entity name 'test-name', created entity will have name like 'test-name-1.", + "required": false, + "schema": { + "$ref": "#/components/schemas/UniquifyStrategy", + "default": "RANDOM" } } ], @@ -76999,11 +77503,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "$ref": "#/components/schemas/EntityView" } } }, @@ -77011,7 +77511,14 @@ }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityView" + } + } + } }, "400": { "description": "Bad Request", @@ -77024,7 +77531,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -77144,36 +77651,23 @@ ] } }, - "/api/mobile": { + "/api/entityView/info/{entityViewId}": { "get": { "tags": [ - "mobile-app-controller" + "entity-view-controller" ], - "summary": "Get user mobile app basic info (getUserMobileInfo)", - "description": "\n\nAvailable for any authorized user. ", - "operationId": "getUserMobileInfo", + "summary": "Get entity view info (getEntityViewInfoById)", + "description": "Fetch the Entity View info object based on the provided entity view id. Entity Views Info extends the Entity View with owner name. Entity Views limit the degree of exposure of the Device or Asset telemetry and attributes to the Customers. Every Entity View references exactly one entity (device or asset) and defines telemetry and attribute keys that will be visible to the assigned Customer. As a Tenant Administrator you are able to create multiple EVs per Device or Asset and assign them to different Customers. See the 'Model' tab for more details.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getEntityViewInfoById", "parameters": [ { - "name": "pkgName", - "in": "query", - "description": "Mobile application package name", + "name": "entityViewId", + "in": "path", + "description": "A string value representing the entity view id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - }, - { - "name": "platform", - "in": "query", - "description": "Platform type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "ANDROID", - "IOS" - ] - } } ], "responses": { @@ -77182,7 +77676,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserMobileInfo" + "$ref": "#/components/schemas/EntityViewInfo" } } } @@ -77318,79 +77812,24 @@ ] } }, - "/api/mobile/app": { + "/api/entityView/types": { "get": { "tags": [ - "mobile-app-controller" - ], - "summary": "Get mobile app infos (getTenantMobileApps)", - "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getTenantMobileApps", - "parameters": [ - { - "name": "platformType", - "in": "query", - "description": "Platform type: ANDROID or IOS", - "required": false, - "schema": { - "$ref": "#/components/schemas/PlatformType" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "Case-insensitive 'substring' filter based on app's name", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string" - } - } + "entity-view-controller" ], + "summary": "Get Entity View Types (getEntityViewTypes)", + "description": "Returns a set of unique entity view types based on entity views that are either owned by the tenant or assigned to the customer which user is performing the request.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getEntityViewTypes", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataMobileApp" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntitySubtype" + } } } } @@ -77524,31 +77963,34 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/entityView/{entityViewId}": { + "get": { "tags": [ - "mobile-app-controller" + "entity-view-controller" ], - "summary": "Save Or update Mobile app (saveMobileApp)", - "description": "Create or update the Mobile app. When creating mobile app, platform generates Mobile App Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Mobile App Id will be present in the response. Specify existing Mobile App Id to update the mobile app. Referencing non-existing Mobile App Id will cause 'Not Found' error.\n\nThe pair of mobile app package name and platform type is unique for entire platform setup.\n\n\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "saveMobileApp", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MobileApp" - } + "summary": "Get entity view (getEntityViewById)", + "description": "Fetch the EntityView object based on the provided entity view id. Entity Views limit the degree of exposure of the Device or Asset telemetry and attributes to the Customers. Every Entity View references exactly one entity (device or asset) and defines telemetry and attribute keys that will be visible to the assigned Customer. As a Tenant Administrator you are able to create multiple EVs per Device or Asset and assign them to different Customers. See the 'Model' tab for more details.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getEntityViewById", + "parameters": [ + { + "name": "entityViewId", + "in": "path", + "description": "A string value representing the entity view id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MobileApp" + "$ref": "#/components/schemas/EntityView" } } } @@ -77564,7 +78006,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -77682,37 +78124,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/mobile/app/{id}": { - "get": { + }, + "delete": { "tags": [ - "mobile-app-controller" + "entity-view-controller" ], - "summary": "Get mobile info by id (getMobileAppById)", - "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getMobileAppById", + "summary": "Delete entity view (deleteEntityView)", + "description": "Delete the EntityView object based on the provided entity view id. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "deleteEntityView", "parameters": [ { - "name": "id", + "name": "entityViewId", "in": "path", + "description": "A string value representing the entity view id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MobileApp" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -77843,28 +78276,102 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/entityViewInfos/all": { + "get": { "tags": [ - "mobile-app-controller" + "entity-view-controller" ], - "summary": "Delete Mobile App by ID (deleteMobileApp)", - "description": "Deletes Mobile App by ID. Referencing non-existing mobile app Id will cause an error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "deleteMobileApp", + "summary": "Get All Entity View Infos for current user (getAllEntityViewInfos)", + "description": "Returns a page of entity view info objects owned by the tenant or the customer of a current user. Entity Views Info extends the Entity View with owner name. Entity Views limit the degree of exposure of the Device or Asset telemetry and attributes to the Customers. Every Entity View references exactly one entity (device or asset) and defines telemetry and attribute keys that will be visible to the assigned Customer. As a Tenant Administrator you are able to create multiple EVs per Device or Asset and assign them to different Customers. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAllEntityViewInfos", "parameters": [ { - "name": "id", - "in": "path", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "type", + "in": "query", + "description": "\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the entity view name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, "schema": { "type": "string", - "format": "uuid" + "enum": [ + "createdTime", + "name", + "type" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataEntityViewInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -77997,44 +78504,34 @@ ] } }, - "/api/noauth/mobile": { - "get": { + "/api/entityViews": { + "post": { "tags": [ - "mobile-app-controller" + "entity-view-controller" ], - "summary": "Get mobile app login info (getLoginMobileInfo)", - "operationId": "getLoginMobileInfo", - "parameters": [ - { - "name": "pkgName", - "in": "query", - "description": "Mobile application package name", - "required": true, - "schema": { - "type": "string" + "summary": "Find related entity views (findEntityViewsByQuery)", + "description": "Returns all entity views that are related to the specific entity. The entity id, relation type, entity view types, depth of the search, and other query parameters defined using complex 'EntityViewSearchQuery' object. See 'Model' tab of the Parameters for more info.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "findEntityViewsByQuery", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityViewSearchQuery" + } } }, - { - "name": "platform", - "in": "query", - "description": "Platform type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "ANDROID", - "IOS" - ] - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LoginMobileInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityView" + } } } } @@ -78050,7 +78547,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -78159,17 +78656,39 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/notification/deliveryMethods": { + "/api/entityViews/list": { "get": { "tags": [ - "notification-controller" + "entity-view-controller" + ], + "summary": "Get Entity Views By Ids (getEntityViewsByIds)", + "description": "Requested entity views must be owned by tenant or assigned to customer which user is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getEntityViewsByIds", + "parameters": [ + { + "name": "entityViewIds", + "in": "query", + "description": "A list of entity view ids, separated by comma ','", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } ], - "summary": "Get available delivery methods (getAvailableDeliveryMethods)", - "description": "Returns the list of delivery methods that are properly configured and are allowed to be used for sending notifications.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getAvailableDeliveryMethods", "responses": { "200": { "description": "OK", @@ -78178,7 +78697,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/NotificationDeliveryMethod" + "$ref": "#/components/schemas/EntityView" } } } @@ -78315,40 +78834,35 @@ ] } }, - "/api/notification/entitiesLimitIncreaseRequest/{entityType}": { - "post": { + "/api/tenant/entityView": { + "get": { "tags": [ - "notification-controller" + "entity-view-controller" ], - "summary": "Send entity limit increase request notification to System/Tenant administrators (sendEntitiesLimitIncreaseRequest)", - "description": "Send entity limit increase request notification by Tenant Administrator or Customer User to System/Tenant administrators.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "sendEntitiesLimitIncreaseRequest", + "summary": "Get Entity View by name (getTenantEntityViewByName)", + "description": "Fetch the Entity View object based on the tenant id and entity view name. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getTenantEntityViewByName", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "Entity type", + "name": "entityViewName", + "in": "query", + "description": "Entity View name", "required": true, "schema": { - "type": "string", - "enum": [ - "DEVICE", - "ASSET", - "CUSTOMER", - "USER", - "DASHBOARD", - "RULE_CHAIN", - "EDGE", - "INTEGRATION", - "CONVERTER", - "SCHEDULER_EVENT" - ] + "type": "string" } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityView" + } + } + } }, "400": { "description": "Bad Request", @@ -78361,7 +78875,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -78481,31 +78995,88 @@ ] } }, - "/api/notification/request": { - "post": { + "/api/tenant/entityViews": { + "get": { "tags": [ - "notification-controller" + "entity-view-controller" ], - "summary": "Create notification request (createNotificationRequest)", - "description": "Processes notification request.\nMandatory request properties are `targets` (list of targets ids to send notification to), and either `templateId` (existing notification template id) or `template` (to send notification without saving the template).\nOptionally, you can set `sendingDelayInSec` inside the `additionalConfig` field to schedule the notification.\n\nFor each enabled delivery method in the notification template, there must be a target in the `targets` list that supports this delivery method: if you chose `WEB`, `EMAIL` or `SMS` - there must be at least one target in `targets` of `PLATFORM_USERS` type.\nFor `SLACK` delivery method - you need to chose at least one `SLACK` notification target.\n\nNotification request object with `PROCESSING` status will be returned immediately, and the notification sending itself is done asynchronously. After all notifications are sent, the `status` of the request becomes `SENT`. Use `getNotificationRequestById` to see the notification request processing status and some sending stats. \n\nHere is an example of notification request to one target using saved template:\n```json\n{\n \"templateId\": {\n \"entityType\": \"NOTIFICATION_TEMPLATE\",\n \"id\": \"6dbc3670-e4dd-11ed-9401-dbcc5dff78be\"\n },\n \"targets\": [\n \"320e3ed0-d785-11ed-a06c-21dd57dd88ca\"\n ],\n \"additionalConfig\": {\n \"sendingDelayInSec\": 0\n }\n}\n```\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "createNotificationRequest", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NotificationRequest" - } + "summary": "Get Tenant Entity Views (getTenantEntityViews)", + "description": "Returns a page of entity views owned by tenant. Entity Views limit the degree of exposure of the Device or Asset telemetry and attributes to the Customers. Every Entity View references exactly one entity (device or asset) and defines telemetry and attribute keys that will be visible to the assigned Customer. As a Tenant Administrator you are able to create multiple EVs per Device or Asset and assign them to different Customers. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getTenantEntityViews", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "required": true - }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "type", + "in": "query", + "description": "\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the entity view name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotificationRequest" + "$ref": "#/components/schemas/PageDataEntityView" } } } @@ -78521,7 +79092,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -78641,44 +79212,88 @@ ] } }, - "/api/notification/request/preview": { - "post": { + "/api/user/entityViews": { + "get": { "tags": [ - "notification-controller" + "entity-view-controller" ], - "summary": "Get notification request preview (getNotificationRequestPreview)", - "description": "Returns preview for notification request.\n\n`processedTemplates` shows how the notifications for each delivery method will look like for the first recipient of the corresponding notification target.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getNotificationRequestPreview", + "summary": "Get Entity Views (getUserEntityViews)", + "description": "Returns a page of entity views that are available for the current user. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getUserEntityViews", "parameters": [ { - "name": "recipientsPreviewSize", + "name": "pageSize", "in": "query", - "description": "Amount of the recipients to show in preview", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "type", + "in": "query", + "description": "\n\n## Entity View Filter\n\nAllows to filter entity views based on their type and the **'starts with'** expression over their name. For example, this entity filter selects all 'Concrete Mixer' entity views which name starts with 'CAT':\n\n```json\n{\n \"type\": \"entityViewType\",\n \"entityViewType\": \"Concrete Mixer\",\n \"entityViewNameFilter\": \"CAT\"\n}\n```", "required": false, "schema": { - "type": "integer", - "format": "int32", - "default": 20 + "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NotificationRequest" - } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the entity view name.", + "required": false, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotificationRequestPreview" + "$ref": "#/components/schemas/PageDataEntityView" } } } @@ -78694,7 +79309,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -78814,32 +79429,135 @@ ] } }, - "/api/notification/request/{id}": { - "get": { + "/api/events/{entityType}/{entityId}": { + "post": { "tags": [ - "notification-controller" + "event-controller" ], - "summary": "Get notification request by id (getNotificationRequestById)", - "description": "Fetches notification request info by request id.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getNotificationRequestById", + "summary": "Get Events by event filter (getEventsByFilter)", + "description": "Returns a page of events for the chosen entity by specifying the event filter. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n# Event Filter Definition\n\n6 different eventFilter objects could be set for different event types. The eventType field is required. Others are optional. If some of them are set, the filtering will be applied according to them. See the examples below for all the fields used for each event type filtering. \n\nNote,\n\n * 'server' - string value representing the server name, identif ier or ip address where the platform is running;\n * 'errorStr' - the case insensitive 'contains' filter based on error message.\n\n## Error Event Filter\n\n```json\n{\n \"eventType\":\"ERROR\",\n \"server\":\"ip-172-31-24-152\",\n \"method\":\"onClusterEventMsg\",\n \"errorStr\":\"Error Message\"\n}\n```\n\n * 'method' - string value representing the method name when the error happened.\n\n## Lifecycle Event Filter\n\n```json\n{\n \"eventType\":\"LC_EVENT\",\n \"server\":\"ip-172-31-24-152\",\n \"event\":\"STARTED\",\n \"status\":\"Success\",\n \"errorStr\":\"Error Message\"\n}\n```\n\n * 'event' - string value representing the lifecycle event type;\n * 'status' - string value representing status of the lifecycle event.\n\n## Statistics Event Filter\n\n```json\n{\n \"eventType\":\"STATS\",\n \"server\":\"ip-172-31-24-152\",\n \"messagesProcessed\":10,\n \"errorsOccurred\":5\n}\n```\n\n * 'messagesProcessed' - the minimum number of successfully processed messages;\n * 'errorsOccurred' - the minimum number of errors occurred during messages processing.\n\n## Debug Rule Node Event Filter\n\n```json\n{\n \"eventType\":\"DEBUG_RULE_NODE\",\n \"msgDirectionType\":\"IN\",\n \"server\":\"ip-172-31-24-152\",\n \"dataSearch\":\"humidity\",\n \"metadataSearch\":\"deviceName\",\n \"entityName\":\"DEVICE\",\n \"relationType\":\"Success\",\n \"entityId\":\"de9d54a0-2b7a-11ec-a3cc-23386423d98f\",\n \"msgType\":\"POST_TELEMETRY_REQUEST\",\n \"isError\":\"false\",\n \"errorStr\":\"Error Message\"\n}\n```\n\n## Debug Rule Chain Event Filter\n\n```json\n{\n \"eventType\":\"DEBUG_RULE_CHAIN\",\n \"msgDirectionType\":\"IN\",\n \"server\":\"ip-172-31-24-152\",\n \"dataSearch\":\"humidity\",\n \"metadataSearch\":\"deviceName\",\n \"entityName\":\"DEVICE\",\n \"relationType\":\"Success\",\n \"entityId\":\"de9d54a0-2b7a-11ec-a3cc-23386423d98f\",\n \"msgType\":\"POST_TELEMETRY_REQUEST\",\n \"isError\":\"false\",\n \"errorStr\":\"Error Message\"\n}\n```\n\n * 'msgDirectionType' - string value representing msg direction type (incoming to entity or outcoming from entity);\n * 'dataSearch' - the case insensitive 'contains' filter based on data (key and value) for the message;\n * 'metadataSearch' - the case insensitive 'contains' filter based on metadata (key and value) for the message;\n * 'entityName' - string value representing the entity type;\n * 'relationType' - string value representing the type of message routing;\n * 'entityId' - string value representing the entity id in the event body (originator of the message);\n * 'msgType' - string value representing the message type;\n * 'isError' - boolean value to filter the errors.\n\n## Debug Calculated Field Event Filter\n\n```json\n{\n \"eventType\":\"DEBUG_CALCULATED_FIELD\",\n \"server\":\"ip-172-31-24-152\",\n \"isError\":\"false\",\n \"errorStr\":\"Error Message\"\n \"entityId\":\"cf4b8741-f618-471f-ae08-d881ca7f9fe9\",\n \"msgId\":\"5cf7d3a0-aee7-40dd-a737-ade05528e7eb\",\n \"msgType\":\"POST_TELEMETRY_REQUEST\",\n \"arguments\":\"{\n \"x\": {\n \"ts\": 1739432016629,\n \"value\": 20\n },\n \"y\": {\n \"ts\": 1739429717656,\n \"value\": 12\n }\n }\",\n \"result\":\"{\n \"x + y\": 32\n }\",\n}\n```\n\n * 'entityId' - string value representing the entity id in the event body;\n * 'entityType' - string value representing the entity type;\n * 'msgId' - string value representing the message id in the rule engine;\n * 'msgType' - string value representing the message type;\n * 'arguments' - string value representing the arguments that were used in the calculation performed;\n * 'result' - string value representing the result of a calculation;\n * 'isError' - boolean value to filter the errors.\n\n", + "operationId": "getEventsByFilter", "parameters": [ { - "name": "id", + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tenantId", + "in": "query", + "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The value is not used in searching.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, "schema": { "type": "string", - "format": "uuid" + "enum": [ + "ts", + "id" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "startTime", + "in": "query", + "description": "Timestamp. Events with creation time before it won't be queried.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "Timestamp. Events with creation time after it won't be queried.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventFilter" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotificationRequestInfo" + "$ref": "#/components/schemas/PageDataEventInfo" } } } @@ -78855,7 +79573,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -78973,25 +79691,66 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/events/{entityType}/{entityId}/clear": { + "post": { "tags": [ - "notification-controller" + "event-controller" ], - "summary": "Delete notification request (deleteNotificationRequest)", - "description": "Deletes notification request by its id.\n\nIf the request has status `SENT` - all sent notifications for this request will be deleted. If it is `SCHEDULED`, the request will be cancelled.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "deleteNotificationRequest", + "summary": "Clear Events (clearEvents)", + "description": "Clears events by filter for specified entity.", + "operationId": "clearEvents", "parameters": [ { - "name": "id", + "name": "entityType", "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "startTime", + "in": "query", + "description": "Timestamp. Events with creation time before it won't be queried.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "Timestamp. Events with creation time after it won't be queried.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventFilter" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK" @@ -79007,7 +79766,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -79127,15 +79886,52 @@ ] } }, - "/api/notification/requests": { + "/api/events/{entityType}/{entityId}/{eventType}": { "get": { "tags": [ - "notification-controller" + "event-controller" ], - "summary": "Get notification requests (getNotificationRequests)", - "description": "Returns the page of notification requests submitted by users of this tenant or sysadmins.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getNotificationRequests", + "summary": "Get Events by type (getEventsByType)", + "description": "Returns a page of events for specified entity by specifying event type. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. ", + "operationId": "getEventsByType", "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "eventType", + "in": "path", + "description": "A string value representing event type", + "required": true, + "schema": { + "type": "string" + }, + "example": "STATS" + }, + { + "name": "tenantId", + "in": "query", + "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "pageSize", "in": "query", @@ -79159,7 +79955,7 @@ { "name": "textSearch", "in": "query", - "description": "Case-insensitive 'substring' filed based on the used template name", + "description": "The value is not used in searching.", "required": false, "schema": { "type": "string" @@ -79171,7 +79967,11 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string" + "type": "string", + "enum": [ + "ts", + "id" + ] } }, { @@ -79180,7 +79980,31 @@ "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "string" + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "startTime", + "in": "query", + "description": "Timestamp. Events with creation time before it won't be queried.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "Timestamp. Events with creation time after it won't be queried.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" } } ], @@ -79190,7 +80014,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataNotificationRequestInfo" + "$ref": "#/components/schemas/PageDataEventInfo" } } } @@ -79326,33 +80150,38 @@ ] } }, - "/api/notification/sendAddonAccessError/{addonType}": { - "post": { + "/api/entityGroup/{entityGroupId}/groupPermissions": { + "get": { "tags": [ - "notification-controller" + "group-permission-controller" ], - "summary": "Send add-on access error notification to System/Tenant administrators (sendAddonAccessError)", - "description": "Send add-on access error notification by Tenant Administrator or Customer User to System/Tenant administrators.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "sendAddonAccessError", + "summary": "Get group permissions by Entity Group Id (getEntityGroupPermissions)", + "description": "Returns a list of group permission objects that is assigned for the specified Entity Group Id. Group permission entity represents list of allowed operations for certain User Group to perform against certain Entity Group. Basically, this entity wires three other entities: \n\n * Role that defines set of allowed operations;\n * User Group that defines set of users who may perform the operations; \n * Entity Group that defines set of entities which will be accessible to users;\n\nThere are two types of group permissions depending on the Role type: \n\n * **Generic permission** — uses a GENERIC role. The 'entityGroupId' field must be null (or omitted). Grants the role's operations to all entities within the owner's scope (all tenant entities for tenant admins, only customer-owned entities for customer users).\n * **Group permission** — uses a GROUP role. The 'entityGroupId' field must reference a valid entity group. Grants the role's operations only to entities in the specified group.\n\nAssigning a GENERIC role with a non-null 'entityGroupId' will cause an error. The 'entityGroupType' field is auto-populated from the referenced entity group and should not be set manually. Duplicate permissions (same userGroupId + roleId + entityGroupId combination) are rejected.\n\n Group Permission Info object extends the Group Permissions with the full information about Role and User and/or Entity Groups. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getEntityGroupPermissions", "parameters": [ { - "name": "addonType", + "name": "entityGroupId", "in": "path", - "description": "Addon type", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string", - "enum": [ - "EDGE", - "TRENDZ", - "WHITE_LABELING" - ] + "type": "string" } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupPermissionInfo" + } + } + } + } }, "400": { "description": "Bad Request", @@ -79365,7 +80194,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -79485,33 +80314,34 @@ ] } }, - "/api/notification/sendAddonAccessRequest/{addonType}": { + "/api/groupPermission": { "post": { "tags": [ - "notification-controller" + "group-permission-controller" ], - "summary": "Send add-on access request notification to System/Tenant administrators (sendAddonAccessRequest)", - "description": "Send add-on access request notification by Tenant Administrator or Customer User to System/Tenant administrators.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "sendAddonAccessRequest", - "parameters": [ - { - "name": "addonType", - "in": "path", - "description": "Addon type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "EDGE", - "TRENDZ", - "WHITE_LABELING" - ] + "summary": "Create Or Update Group Permission (saveGroupPermission)", + "description": "Creates or Updates the Group Permission. When creating group permission, platform generates Group Permission Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Group Permission id will be present in the response. Specify existing Group Permission id to update the permission. Referencing non-existing Group Permission Id will cause 'Not Found' error.\n\nGroup permission entity represents list of allowed operations for certain User Group to perform against certain Entity Group. Basically, this entity wires three other entities: \n\n * Role that defines set of allowed operations;\n * User Group that defines set of users who may perform the operations; \n * Entity Group that defines set of entities which will be accessible to users;\n\nThere are two types of group permissions depending on the Role type: \n\n * **Generic permission** — uses a GENERIC role. The 'entityGroupId' field must be null (or omitted). Grants the role's operations to all entities within the owner's scope (all tenant entities for tenant admins, only customer-owned entities for customer users).\n * **Group permission** — uses a GROUP role. The 'entityGroupId' field must reference a valid entity group. Grants the role's operations only to entities in the specified group.\n\nAssigning a GENERIC role with a non-null 'entityGroupId' will cause an error. The 'entityGroupType' field is auto-populated from the referenced entity group and should not be set manually. Duplicate permissions (same userGroupId + roleId + entityGroupId combination) are rejected.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "saveGroupPermission", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupPermission" + } } - } - ], + }, + "required": true + }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupPermission" + } + } + } }, "400": { "description": "Bad Request", @@ -79644,28 +80474,44 @@ ] } }, - "/api/notification/sendPlanUpgradeRequest/{planName}": { - "post": { + "/api/groupPermission/info/{groupPermissionId}": { + "get": { "tags": [ - "notification-controller" + "group-permission-controller" ], - "summary": "Send plan upgrade request notification to Tenant administrators (sendPlanUpgradeRequest)", - "description": "Send plan upgrade access request notification by Tenant user to Tenant administrators.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "sendPlanUpgradeRequest", + "summary": "Get Group Permission Info (getGroupPermissionInfoById)", + "description": "Fetch the Group Permission Info object based on the provided Group Permission Id and the flag that controls what additional information to load: User or Entity Group. Group permission entity represents list of allowed operations for certain User Group to perform against certain Entity Group. Basically, this entity wires three other entities: \n\n * Role that defines set of allowed operations;\n * User Group that defines set of users who may perform the operations; \n * Entity Group that defines set of entities which will be accessible to users;\n\nThere are two types of group permissions depending on the Role type: \n\n * **Generic permission** — uses a GENERIC role. The 'entityGroupId' field must be null (or omitted). Grants the role's operations to all entities within the owner's scope (all tenant entities for tenant admins, only customer-owned entities for customer users).\n * **Group permission** — uses a GROUP role. The 'entityGroupId' field must reference a valid entity group. Grants the role's operations only to entities in the specified group.\n\nAssigning a GENERIC role with a non-null 'entityGroupId' will cause an error. The 'entityGroupType' field is auto-populated from the referenced entity group and should not be set manually. Duplicate permissions (same userGroupId + roleId + entityGroupId combination) are rejected.\n\n Group Permission Info object extends the Group Permissions with the full information about Role and User and/or Entity Groups. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getGroupPermissionInfoById", "parameters": [ { - "name": "planName", + "name": "groupPermissionId", "in": "path", - "description": "Plan name", + "description": "A string value representing the group permission id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } + }, + { + "name": "isUserGroup", + "in": "query", + "description": "Load additional information about User('true') or Entity Group('false).", + "required": true, + "schema": { + "type": "boolean" + } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupPermissionInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -79678,7 +80524,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -79798,21 +80644,32 @@ ] } }, - "/api/notification/settings": { + "/api/groupPermission/{groupPermissionId}": { "get": { "tags": [ - "notification-controller" + "group-permission-controller" + ], + "summary": "Get Group Permission (getGroupPermissionById)", + "description": "Fetch the Group Permission object based on the provided Group Permission Id. Group permission entity represents list of allowed operations for certain User Group to perform against certain Entity Group. Basically, this entity wires three other entities: \n\n * Role that defines set of allowed operations;\n * User Group that defines set of users who may perform the operations; \n * Entity Group that defines set of entities which will be accessible to users;\n\nThere are two types of group permissions depending on the Role type: \n\n * **Generic permission** — uses a GENERIC role. The 'entityGroupId' field must be null (or omitted). Grants the role's operations to all entities within the owner's scope (all tenant entities for tenant admins, only customer-owned entities for customer users).\n * **Group permission** — uses a GROUP role. The 'entityGroupId' field must reference a valid entity group. Grants the role's operations only to entities in the specified group.\n\nAssigning a GENERIC role with a non-null 'entityGroupId' will cause an error. The 'entityGroupType' field is auto-populated from the referenced entity group and should not be set manually. Duplicate permissions (same userGroupId + roleId + entityGroupId combination) are rejected.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getGroupPermissionById", + "parameters": [ + { + "name": "groupPermissionId", + "in": "path", + "description": "A string value representing the group permission id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Get notification settings (getNotificationSettings)", - "description": "Retrieves notification settings for this tenant or sysadmin.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getNotificationSettings", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotificationSettings" + "$ref": "#/components/schemas/GroupPermission" } } } @@ -79947,33 +80804,27 @@ } ] }, - "post": { + "delete": { "tags": [ - "notification-controller" + "group-permission-controller" ], - "summary": "Save notification settings (saveNotificationSettings)", - "description": "Saves notification settings for this tenant or sysadmin.\n`deliveryMethodsConfigs` of the settings must be specified.\n\nHere is an example of the notification settings with Slack configuration:\n```json\n{\n \"deliveryMethodsConfigs\": {\n \"SLACK\": {\n \"method\": \"SLACK\",\n \"botToken\": \"xoxb-....\"\n }\n }\n}\n```\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "saveNotificationSettings", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NotificationSettings" - } + "summary": "Delete group permission (deleteGroupPermission)", + "description": "Deletes the group permission. Referencing non-existing group permission Id will cause an error.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", + "operationId": "deleteGroupPermission", + "parameters": [ + { + "name": "groupPermissionId", + "in": "path", + "description": "A string value representing the group permission id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NotificationSettings" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -79986,7 +80837,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -80106,20 +80957,38 @@ ] } }, - "/api/notification/settings/user": { - "get": { + "/api/userGroup/groupPermissions/info": { + "post": { "tags": [ - "notification-controller" + "group-permission-controller" ], - "summary": "getUserNotificationSettings", - "operationId": "getUserNotificationSettings", + "summary": "Load User Group Permissions (loadUserGroupPermissionInfos)", + "description": "Enrich a list of group permission objects with the information about Role, User and Entity Groups. Group permission entity represents list of allowed operations for certain User Group to perform against certain Entity Group. Basically, this entity wires three other entities: \n\n * Role that defines set of allowed operations;\n * User Group that defines set of users who may perform the operations; \n * Entity Group that defines set of entities which will be accessible to users;\n\nThere are two types of group permissions depending on the Role type: \n\n * **Generic permission** — uses a GENERIC role. The 'entityGroupId' field must be null (or omitted). Grants the role's operations to all entities within the owner's scope (all tenant entities for tenant admins, only customer-owned entities for customer users).\n * **Group permission** — uses a GROUP role. The 'entityGroupId' field must reference a valid entity group. Grants the role's operations only to entities in the specified group.\n\nAssigning a GENERIC role with a non-null 'entityGroupId' will cause an error. The 'entityGroupType' field is auto-populated from the referenced entity group and should not be set manually. Duplicate permissions (same userGroupId + roleId + entityGroupId combination) are rejected.\n\n Group Permission Info object extends the Group Permissions with the full information about Role and User and/or Entity Groups. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "loadUserGroupPermissionInfos", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "description": "JSON array of group permission objects", + "items": { + "$ref": "#/components/schemas/GroupPermission" + } + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserNotificationSettings" + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupPermissionInfo" + } } } } @@ -80135,7 +81004,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -80253,30 +81122,37 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/userGroup/{userGroupId}/groupPermissions": { + "get": { "tags": [ - "notification-controller" + "group-permission-controller" ], - "summary": "saveUserNotificationSettings", - "operationId": "saveUserNotificationSettings", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserNotificationSettings" - } + "summary": "Get group permissions by User Group Id (getUserGroupPermissions)", + "description": "Returns a list of group permission objects that belongs to specified User Group Id. Group permission entity represents list of allowed operations for certain User Group to perform against certain Entity Group. Basically, this entity wires three other entities: \n\n * Role that defines set of allowed operations;\n * User Group that defines set of users who may perform the operations; \n * Entity Group that defines set of entities which will be accessible to users;\n\nThere are two types of group permissions depending on the Role type: \n\n * **Generic permission** — uses a GENERIC role. The 'entityGroupId' field must be null (or omitted). Grants the role's operations to all entities within the owner's scope (all tenant entities for tenant admins, only customer-owned entities for customer users).\n * **Group permission** — uses a GROUP role. The 'entityGroupId' field must reference a valid entity group. Grants the role's operations only to entities in the specified group.\n\nAssigning a GENERIC role with a non-null 'entityGroupId' will cause an error. The 'entityGroupType' field is auto-populated from the referenced entity group and should not be set manually. Duplicate permissions (same userGroupId + roleId + entityGroupId combination) are rejected.\n\n Group Permission Info object extends the Group Permissions with the full information about Role and User and/or Entity Groups. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getUserGroupPermissions", + "parameters": [ + { + "name": "userGroupId", + "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserNotificationSettings" + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupPermissionInfo" + } } } } @@ -80292,7 +81168,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -80412,28 +81288,47 @@ ] } }, - "/api/notification/{id}": { - "delete": { + "/api/image": { + "post": { "tags": [ - "notification-controller" + "image-controller" ], - "summary": "Delete notification (deleteNotification)", - "description": "Deletes notification by its id.\n\nAvailable for any authorized user. ", - "operationId": "deleteNotification", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "uploadImage", + "operationId": "uploadImage", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + }, + "title": { + "type": "string" + }, + "imageSubType": { + "type": "string" + } + }, + "required": [ + "file" + ] + } } } - ], + }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TbResourceInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -80446,7 +81341,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -80566,28 +81461,33 @@ ] } }, - "/api/notification/{id}/read": { + "/api/image/import": { "put": { "tags": [ - "notification-controller" + "image-controller" ], - "summary": "Mark notification as read (markNotificationAsRead)", - "description": "Marks notification as read by its id.\n\nAvailable for any authorized user. ", - "operationId": "markNotificationAsRead", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" + "summary": "importImage", + "operationId": "importImage", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResourceExportData" + } } - } - ], + }, + "required": true + }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TbResourceInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -80720,14 +81620,13 @@ ] } }, - "/api/notifications": { + "/api/images": { "get": { "tags": [ - "notification-controller" + "image-controller" ], - "summary": "Get notifications (getNotifications)", - "description": "Returns the page of notifications for current user.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for any authorized user. \n\n**WebSocket API**:\n\nThere are 2 types of subscriptions: one for unread notifications count, another for unread notifications themselves.\n\nThe URI for opening WS session for notifications: `/api/ws/plugins/notifications`.\n\nSubscription command for unread notifications count:\n```\n{\n \"unreadCountSubCmd\": {\n \"cmdId\": 1234\n }\n}\n```\nTo subscribe for latest unread notifications:\n```\n{\n \"unreadSubCmd\": {\n \"cmdId\": 1234,\n \"limit\": 10\n }\n}\n```\nTo unsubscribe from any subscription:\n```\n{\n \"unsubCmd\": {\n \"cmdId\": 1234\n }\n}\n```\nTo mark certain notifications as read, use following command:\n```\n{\n \"markAsReadCmd\": {\n \"cmdId\": 1234,\n \"notifications\": [\n \"6f860330-7fc2-11ed-b855-7dd3b7d2faa9\",\n \"5b6dfee0-8d0d-11ed-b61f-35a57b03dade\"\n ]\n }\n}\n\n```\nTo mark all notifications as read:\n```\n{\n \"markAllAsReadCmd\": {\n \"cmdId\": 1234\n }\n}\n```\n\n\nUpdate structure for unread **notifications count subscription**:\n```\n{\n \"cmdId\": 1234,\n \"totalUnreadCount\": 55\n}\n```\nFor **notifications subscription**:\n- full update of latest unread notifications:\n```\n{\n \"cmdId\": 1234,\n \"notifications\": [\n {\n \"id\": {\n \"entityType\": \"NOTIFICATION\",\n \"id\": \"6f860330-7fc2-11ed-b855-7dd3b7d2faa9\"\n },\n ...\n }\n ],\n \"totalUnreadCount\": 1\n}\n```\n- when new notification arrives or shown notification is updated:\n```\n{\n \"cmdId\": 1234,\n \"update\": {\n \"id\": {\n \"entityType\": \"NOTIFICATION\",\n \"id\": \"6f860330-7fc2-11ed-b855-7dd3b7d2faa9\"\n },\n # updated notification info, text, subject etc.\n ...\n },\n \"totalUnreadCount\": 2\n}\n```\n- when unread notifications count changes:\n```\n{\n \"cmdId\": 1234,\n \"totalUnreadCount\": 5\n}\n```", - "operationId": "getNotifications", + "summary": "getImages", + "operationId": "getImages", "parameters": [ { "name": "pageSize", @@ -80750,52 +81649,61 @@ } }, { - "name": "textSearch", + "name": "imageSubType", "in": "query", - "description": "Case-insensitive 'substring' filter based on notification subject or text", + "description": "A string value representing resource sub-type.", "required": false, "schema": { - "type": "string" + "type": "string", + "enum": [ + "IMAGE", + "SCADA_SYMBOL" + ] } }, { - "name": "sortProperty", + "name": "includeSystemImages", "in": "query", - "description": "Property of entity to sort by", + "description": "Use 'true' to include system images. Disabled by default. Ignored for requests by users with system administrator authority.", "required": false, "schema": { - "type": "string" + "type": "boolean" } }, { - "name": "sortOrder", + "name": "textSearch", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "The case insensitive 'substring' filter based on the resource title.", "required": false, "schema": { "type": "string" } }, { - "name": "unreadOnly", + "name": "sortProperty", "in": "query", - "description": "To search for unread notifications only", + "description": "Property of entity to sort by", "required": false, "schema": { - "type": "boolean", - "default": false + "type": "string", + "enum": [ + "createdTime", + "title", + "resourceType", + "tenantId" + ] } }, { - "name": "deliveryMethod", + "name": "sortOrder", "in": "query", - "description": "Delivery method", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { "type": "string", "enum": [ - "WEB", - "MOBILE_APP" + "ASC", + "DESC" ] } } @@ -80806,7 +81714,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataNotification" + "$ref": "#/components/schemas/PageDataTbResourceInfo" } } } @@ -80942,184 +81850,36 @@ ] } }, - "/api/notifications/read": { - "put": { + "/api/images/public/{publicResourceKey}": { + "get": { "tags": [ - "notification-controller" + "image-controller" ], - "summary": "Mark all notifications as read (markAllNotificationsAsRead)", - "description": "Marks all unread notifications as read.\n\nAvailable for any authorized user. ", - "operationId": "markAllNotificationsAsRead", + "summary": "downloadPublicImage", + "operationId": "downloadPublicImage", "parameters": [ { - "name": "deliveryMethod", - "in": "query", - "description": "Delivery method", - "required": false, + "name": "publicResourceKey", + "in": "path", + "required": true, "schema": { - "type": "string", - "enum": [ - "WEB", - "MOBILE_APP" - ] - } - } - ], - "responses": { - "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } + "type": "string" } }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - } - }, - "security": [ { - "HttpLoginForm": [] + "name": "If-None-Match", + "in": "header", + "required": false, + "schema": { + "type": "string" + } }, { - "ApiKeyForm": [] - } - ] - } - }, - "/api/notifications/unread/count": { - "get": { - "tags": [ - "notification-controller" - ], - "summary": "Get unread notifications count (getUnreadNotificationsCount)", - "description": "Returns unread notifications count for chosen delivery method.\n\nAvailable for any authorized user. ", - "operationId": "getUnreadNotificationsCount", - "parameters": [ - { - "name": "deliveryMethod", - "in": "query", - "description": "Delivery method", + "name": "Accept-Encoding", + "in": "header", "required": false, "schema": { - "type": "string", - "enum": [ - "WEB", - "MOBILE_APP" - ] + "type": "string" } } ], @@ -81127,10 +81887,10 @@ "200": { "description": "OK", "content": { - "application/json": { + "image/*": { "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "format": "binary" } } } @@ -81266,31 +82026,61 @@ ] } }, - "/api/notification/rule": { - "post": { + "/api/images/{type}/{key}": { + "get": { "tags": [ - "notification-rule-controller" + "image-controller" ], - "summary": "Save notification rule (saveNotificationRule)", - "description": "Creates or updates notification rule. \n\nMandatory properties are `name`, `templateId` (of a template with `notificationType` matching to rule's `triggerType`), `triggerType`, `triggerConfig` and `recipientConfig`. Additionally, you may specify rule `description` inside of `additionalConfig`.\n\nTrigger type of the rule cannot be changed. Available trigger types for tenant: `ENTITY_ACTION`, `ALARM`, `ALARM_COMMENT`, `ALARM_ASSIGNMENT`, `DEVICE_ACTIVITY`, `RULE_ENGINE_COMPONENT_LIFECYCLE_EVENT`.\nFor sysadmin, there are following trigger types available: `ENTITIES_LIMIT`, `API_USAGE_LIMIT`, `NEW_PLATFORM_VERSION`.\n\nHere is an example of notification rule to send notification when a device, asset or customer is created or deleted:\n```json\n{\n \"name\": \"Entity action\",\n \"templateId\": {\n \"entityType\": \"NOTIFICATION_TEMPLATE\",\n \"id\": \"32117320-d785-11ed-a06c-21dd57dd88ca\"\n },\n \"triggerType\": \"ENTITY_ACTION\",\n \"triggerConfig\": {\n \"entityTypes\": [\n \"CUSTOMER\",\n \"DEVICE\",\n \"ASSET\"\n ],\n \"created\": true,\n \"updated\": false,\n \"deleted\": true,\n \"triggerType\": \"ENTITY_ACTION\"\n },\n \"recipientsConfig\": {\n \"targets\": [\n \"320f2930-d785-11ed-a06c-21dd57dd88ca\"\n ],\n \"triggerType\": \"ENTITY_ACTION\"\n },\n \"additionalConfig\": {\n \"description\": \"Send notification to tenant admins or customer users when a device, asset or customer is created\"\n },\n \"templateName\": \"Entity action notification\",\n \"deliveryMethods\": [\n \"WEB\"\n ]\n}\n```\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "saveNotificationRule", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NotificationRule" - } + "summary": "downloadImage", + "operationId": "downloadImage", + "parameters": [ + { + "name": "type", + "in": "path", + "description": "Type of the image: tenant or system", + "required": true, + "schema": { + "type": "string", + "enum": [ + "tenant", + "system" + ] } }, - "required": true - }, + { + "name": "key", + "in": "path", + "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "If-None-Match", + "in": "header", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "Accept-Encoding", + "in": "header", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { - "application/json": { + "image/*": { "schema": { - "$ref": "#/components/schemas/NotificationRule" + "type": "string", + "format": "binary" } } } @@ -81306,7 +82096,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -81424,34 +82214,62 @@ "ApiKeyForm": [] } ] - } - }, - "/api/notification/rule/{id}": { - "get": { + }, + "put": { "tags": [ - "notification-rule-controller" + "image-controller" ], - "summary": "Get notification rule by id (getNotificationRuleById)", - "description": "Fetches notification rule info by rule's id.\nIn addition to regular notification rule fields, there are `templateName` and `deliveryMethods` in the response.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getNotificationRuleById", + "summary": "updateImage", + "operationId": "updateImage", "parameters": [ { - "name": "id", + "name": "type", "in": "path", + "description": "Type of the image: tenant or system", "required": true, "schema": { "type": "string", - "format": "uuid" + "enum": [ + "tenant", + "system" + ] + } + }, + { + "name": "key", + "in": "path", + "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "required": true, + "schema": { + "type": "string" } } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + }, + "required": [ + "file" + ] + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotificationRuleInfo" + "$ref": "#/components/schemas/TbResourceInfo" } } } @@ -81588,25 +82406,52 @@ }, "delete": { "tags": [ - "notification-rule-controller" + "image-controller" ], - "summary": "Delete notification rule (deleteNotificationRule)", - "description": "Deletes notification rule by id.\nCancels all related scheduled notification requests (e.g. due to escalation table)\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "deleteNotificationRule", + "summary": "deleteImage", + "operationId": "deleteImage", "parameters": [ { - "name": "id", + "name": "type", "in": "path", + "description": "Type of the image: tenant or system", "required": true, "schema": { "type": "string", - "format": "uuid" + "enum": [ + "tenant", + "system" + ] + } + }, + { + "name": "key", + "in": "path", + "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "required": false, + "schema": { + "type": "boolean" } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TbImageDeleteResult" + } + } + } }, "400": { "description": "Bad Request", @@ -81739,58 +82584,32 @@ ] } }, - "/api/notification/rules": { + "/api/images/{type}/{key}/export": { "get": { "tags": [ - "notification-rule-controller" + "image-controller" ], - "summary": "Get notification rules (getNotificationRules)", - "description": "Returns the page of notification rules.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getNotificationRules", + "summary": "exportImage", + "operationId": "exportImage", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", + "name": "type", + "in": "path", + "description": "Type of the image: tenant or system", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "enum": [ + "tenant", + "system" + ] } }, { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "key", + "in": "path", + "description": "Image resource key, for example thermostats_dashboard_background.jpeg", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "Case-insensitive 'substring' filter based on rule's name", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, "schema": { "type": "string" } @@ -81802,7 +82621,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataNotificationRuleInfo" + "$ref": "#/components/schemas/ResourceExportData" } } } @@ -81938,31 +82757,44 @@ ] } }, - "/api/notification/target": { - "post": { + "/api/images/{type}/{key}/info": { + "get": { "tags": [ - "notification-target-controller" + "image-controller" ], - "summary": "Save notification target (saveNotificationTarget)", - "description": "Creates or updates notification target.\n\nAvailable `configuration` types are `PLATFORM_USERS` and `SLACK`.\nFor `PLATFORM_USERS` the `usersFilter` must be specified. For tenant, there are following users filter types available: `USER_LIST`, `CUSTOMER_USERS`, `USER_GROUP_LIST`, `TENANT_ADMINISTRATORS`, `USER_ROLE`, `ALL_USERS`, `ORIGINATOR_ENTITY_OWNER_USERS`, `AFFECTED_USER`.\nFor sysadmin: `TENANT_ADMINISTRATORS`, `AFFECTED_TENANT_ADMINISTRATORS`, `SYSTEM_ADMINISTRATORS`, `ALL_USERS`.\n\nHere is an example of tenant-level notification target to send notification to customer's users:\n```json\n{\n \"name\": \"Users of Customer A\",\n \"configuration\": {\n \"type\": \"PLATFORM_USERS\",\n \"usersFilter\": {\n \"type\": \"CUSTOMER_USERS\",\n \"customerId\": \"32499a20-d785-11ed-a06c-21dd57dd88ca\"\n },\n \"description\": \"Users of Customer A\"\n }\n}\n```\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "saveNotificationTarget", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NotificationTarget" - } + "summary": "getImageInfo", + "operationId": "getImageInfo", + "parameters": [ + { + "name": "type", + "in": "path", + "description": "Type of the image: tenant or system", + "required": true, + "schema": { + "type": "string", + "enum": [ + "tenant", + "system" + ] } }, - "required": true - }, + { + "name": "key", + "in": "path", + "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotificationTarget" + "$ref": "#/components/schemas/TbResourceInfo" } } } @@ -81978,7 +82810,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -82096,35 +82928,34 @@ "ApiKeyForm": [] } ] - } - }, - "/api/notification/target/recipients": { - "post": { + }, + "put": { "tags": [ - "notification-target-controller" + "image-controller" ], - "summary": "Get recipients for notification target config (getRecipientsForNotificationTargetConfig)", - "description": "Returns the page of recipients for such notification target configuration.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getRecipientsForNotificationTargetConfig", + "summary": "updateImageInfo", + "operationId": "updateImageInfo", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", + "name": "type", + "in": "path", + "description": "Type of the image: tenant or system", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "enum": [ + "tenant", + "system" + ] } }, { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "key", + "in": "path", + "description": "Image resource key, for example thermostats_dashboard_background.jpeg", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string" } } ], @@ -82132,7 +82963,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotificationTarget" + "$ref": "#/components/schemas/TbResourceInfo" } } }, @@ -82144,7 +82975,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataUser" + "$ref": "#/components/schemas/TbResourceInfo" } } } @@ -82160,7 +82991,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -82280,22 +83111,50 @@ ] } }, - "/api/notification/target/{id}": { + "/api/images/{type}/{key}/preview": { "get": { "tags": [ - "notification-target-controller" + "image-controller" ], - "summary": "Get notification target by id (getNotificationTargetById)", - "description": "Fetches notification target by id.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getNotificationTargetById", + "summary": "downloadImagePreview", + "operationId": "downloadImagePreview", "parameters": [ { - "name": "id", + "name": "type", "in": "path", + "description": "Type of the image: tenant or system", "required": true, "schema": { "type": "string", - "format": "uuid" + "enum": [ + "tenant", + "system" + ] + } + }, + { + "name": "key", + "in": "path", + "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "If-None-Match", + "in": "header", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "Accept-Encoding", + "in": "header", + "required": false, + "schema": { + "type": "string" } } ], @@ -82303,9 +83162,10 @@ "200": { "description": "OK", "content": { - "application/json": { + "image/png": { "schema": { - "$ref": "#/components/schemas/NotificationTarget" + "type": "string", + "format": "binary" } } } @@ -82439,28 +83299,57 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/images/{type}/{key}/public/{isPublic}": { + "put": { "tags": [ - "notification-target-controller" + "image-controller" ], - "summary": "Delete notification target by id (deleteNotificationTargetById)", - "description": "Deletes notification target by its id.\n\nThis target cannot be referenced by existing scheduled notification requests or any notification rules.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "deleteNotificationTargetById", + "summary": "updateImagePublicStatus", + "operationId": "updateImagePublicStatus", "parameters": [ { - "name": "id", + "name": "type", "in": "path", + "description": "Type of the image: tenant or system", "required": true, "schema": { "type": "string", - "format": "uuid" + "enum": [ + "tenant", + "system" + ] + } + }, + { + "name": "key", + "in": "path", + "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "isPublic", + "in": "path", + "required": true, + "schema": { + "type": "boolean" } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TbResourceInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -82593,57 +83482,47 @@ ] } }, - "/api/notification/targets": { + "/api/noauth/whiteLabel/loginFavicon/{type}/{key}": { "get": { "tags": [ - "notification-target-controller" + "image-controller" ], - "summary": "Get notification targets (getNotificationTargets)", - "description": "Returns the page of notification targets owned by sysadmin or tenant.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getNotificationTargets", + "summary": "downloadLoginFavicon", + "operationId": "downloadLoginFavicon", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", + "name": "type", + "in": "path", + "description": "Type of the image: tenant or system", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "enum": [ + "tenant", + "system" + ] } }, { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "key", + "in": "path", + "description": "Image resource key, for example thermostats_dashboard_background.jpeg", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "Case-insensitive 'substring' filed based on the target's name", - "required": false, "schema": { "type": "string" } }, { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", + "name": "If-None-Match", + "in": "header", "required": false, "schema": { "type": "string" } }, { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "name": "Accept-Encoding", + "in": "header", "required": false, "schema": { "type": "string" @@ -82654,9 +83533,10 @@ "200": { "description": "OK", "content": { - "application/json": { + "image/*": { "schema": { - "$ref": "#/components/schemas/PageDataNotificationTarget" + "type": "string", + "format": "binary" } } } @@ -82781,36 +83661,53 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/notification/targets/list": { + "/api/noauth/whiteLabel/loginLogo/{type}/{key}": { "get": { "tags": [ - "notification-target-controller" + "image-controller" ], - "summary": "Get notification targets by ids (getNotificationTargetsByIds)", - "description": "Returns the list of notification targets found by provided ids.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getNotificationTargetsByIds", + "summary": "downloadLoginLogo", + "operationId": "downloadLoginLogo", "parameters": [ { - "name": "ids", - "in": "query", - "description": "Comma-separated list of uuids representing targets ids", + "name": "type", + "in": "path", + "description": "Type of the image: tenant or system", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string", + "enum": [ + "tenant", + "system" + ] + } + }, + { + "name": "key", + "in": "path", + "description": "Image resource key, for example thermostats_dashboard_background.jpeg", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "If-None-Match", + "in": "header", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "Accept-Encoding", + "in": "header", + "required": false, + "schema": { + "type": "string" } } ], @@ -82818,12 +83715,10 @@ "200": { "description": "OK", "content": { - "application/json": { + "image/*": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NotificationTarget" - } + "type": "string", + "format": "binary" } } } @@ -82948,80 +83843,37 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/notification/targets/notificationType/{notificationType}": { + "/api/edge/integration/{edgeId}/missingAttributes": { "get": { "tags": [ - "notification-target-controller" + "integration-controller" ], - "summary": "Get notification targets by supported notification type (getNotificationTargetsBySupportedNotificationType)", - "description": "Returns the page of notification targets filtered by notification type that they can be used for.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getNotificationTargetsBySupportedNotificationType", + "summary": "Find edge missing attributes for assigned integrations (findEdgeMissingAttributes)", + "description": "Returns list of edge attribute names that are missing in assigned integrations.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "findEdgeMissingAttributes", "parameters": [ { - "name": "notificationType", + "name": "edgeId", "in": "path", - "description": "Notification type to filter targets by", - "required": true, - "schema": { - "$ref": "#/components/schemas/NotificationType" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "Case-insensitive 'substring' filed based on the target's name", - "required": false, "schema": { "type": "string" } }, { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", + "name": "integrationIds", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, + "description": "A list of assigned integration ids, separated by comma ','", + "required": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], @@ -83031,7 +83883,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataNotificationTarget" + "type": "string" } } } @@ -83167,28 +84019,20 @@ ] } }, - "/api/notification/slack/conversations": { + "/api/edge/integration/{integrationId}/allMissingAttributes": { "get": { "tags": [ - "notification-template-controller" + "integration-controller" ], - "summary": "List Slack conversations (listSlackConversations)", - "description": "List available Slack conversations by type.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "listSlackConversations", + "summary": "Find missing attributes for all related edges (findAllRelatedEdgesMissingAttributes)", + "description": "Returns list of attribute names of all related edges that are missing in the integration configuration.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "findAllRelatedEdgesMissingAttributes", "parameters": [ { - "name": "type", - "in": "query", + "name": "integrationId", + "in": "path", + "description": "A string value representing the integration id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "$ref": "#/components/schemas/SlackConversationType" - } - }, - { - "name": "token", - "in": "query", - "description": "Slack bot token. If absent - system Slack settings will be used", - "required": false, "schema": { "type": "string" } @@ -83200,10 +84044,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SlackConversation" - } + "type": "string" } } } @@ -83339,31 +84180,39 @@ ] } }, - "/api/notification/template": { + "/api/edge/{edgeId}/integration/{integrationId}": { "post": { "tags": [ - "notification-template-controller" + "integration-controller" ], - "summary": "Save notification template (saveNotificationTemplate)", - "description": "Creates or updates notification template.\n\nHere is an example of template to send notification via Web, SMS and Slack:\n```json\n{\n \"name\": \"Greetings\",\n \"notificationType\": \"GENERAL\",\n \"configuration\": {\n \"deliveryMethodsTemplates\": {\n \"WEB\": {\n \"enabled\": true,\n \"subject\": \"Greetings\",\n \"body\": \"Hi there, ${recipientTitle}\",\n \"additionalConfig\": {\n \"icon\": {\n \"enabled\": true,\n \"icon\": \"back_hand\",\n \"color\": \"#757575\"\n },\n \"actionButtonConfig\": {\n \"enabled\": false\n }\n },\n \"method\": \"WEB\"\n },\n \"SMS\": {\n \"enabled\": true,\n \"body\": \"Hi there, ${recipientTitle}\",\n \"method\": \"SMS\"\n },\n \"SLACK\": {\n \"enabled\": true,\n \"body\": \"Hi there, @${recipientTitle}\",\n \"method\": \"SLACK\"\n }\n }\n }\n}\n```\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "saveNotificationTemplate", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NotificationTemplate" - } + "summary": "Assign integration to edge (assignIntegrationToEdge)", + "description": "Creates assignment of an existing integration edge template to an instance of The Edge. Assignment works in async way - first, notification event pushed to edge service queue on platform. Second, remote edge service will receive a copy of assignment integration (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once integration will be delivered to edge service, it's going to start locally. \n\nOnly integration edge template can be assigned to edge.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "assignIntegrationToEdge", + "parameters": [ + { + "name": "edgeId", + "in": "path", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "integrationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotificationTemplate" + "$ref": "#/components/schemas/Integration" } } } @@ -83497,24 +84346,29 @@ "ApiKeyForm": [] } ] - } - }, - "/api/notification/template/{id}": { - "get": { + }, + "delete": { "tags": [ - "notification-template-controller" + "integration-controller" ], - "summary": "Get notification template by id (getNotificationTemplateById)", - "description": "Fetches notification template by id.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getNotificationTemplateById", + "summary": "Unassign integration from edge (unassignIntegrationFromEdge)", + "description": "Clears assignment of the integration to the edge. Unassignment works in async way - first, 'unassign' notification event pushed to edge queue on platform. Second, remote edge service will receive an 'unassign' command to remove integration (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once 'unassign' command will be delivered to edge service, it's going to remove integration locally.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "unassignIntegrationFromEdge", "parameters": [ { - "name": "id", + "name": "edgeId", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "integrationId", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], @@ -83524,7 +84378,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotificationTemplate" + "$ref": "#/components/schemas/Integration" } } } @@ -83658,169 +84512,26 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/edge/{edgeId}/integrationInfos": { + "get": { "tags": [ - "notification-template-controller" + "integration-controller" ], - "summary": "Delete notification template by id (deleteNotificationTemplateById", - "description": "Deletes notification template by its id.\n\nThis template cannot be referenced by existing scheduled notification requests or any notification rules.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "deleteNotificationTemplateById", + "summary": "Get Edge Integrations (getEdgeIntegrationInfos)", + "description": "Returns a page of Integrations assigned to the specified edge. The integration object contains information about the Integration, including the heavyweight configuration object. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getEdgeIntegrationInfos", "parameters": [ { - "name": "id", + "name": "edgeId", "in": "path", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } + "type": "string" } - } - }, - "security": [ - { - "HttpLoginForm": [] }, - { - "ApiKeyForm": [] - } - ] - } - }, - "/api/notification/templates": { - "get": { - "tags": [ - "notification-template-controller" - ], - "summary": "Get notification templates (getNotificationTemplates)", - "description": "Returns the page of notification templates owned by sysadmin or tenant.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getNotificationTemplates", - "parameters": [ { "name": "pageSize", "in": "query", @@ -83844,7 +84555,7 @@ { "name": "textSearch", "in": "query", - "description": "Case-insensitive 'substring' filter based on template's name and notification type", + "description": "The case insensitive 'startsWith' filter based on the integration name.", "required": false, "schema": { "type": "string" @@ -83856,7 +84567,18 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string" + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "debugMode", + "allowCreateDevicesOrAssets", + "enabled", + "remote", + "routingKey", + "secret" + ] } }, { @@ -83865,19 +84587,11 @@ "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "string" - } - }, - { - "name": "notificationTypes", - "in": "query", - "description": "Comma-separated list of notification types to filter the templates", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -83887,7 +84601,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataNotificationTemplate" + "$ref": "#/components/schemas/PageDataIntegrationInfo" } } } @@ -84023,24 +84737,94 @@ ] } }, - "/api/oauth2/config/template": { + "/api/edge/{edgeId}/integrations": { "get": { "tags": [ - "o-auth-2-config-template-controller" + "integration-controller" + ], + "summary": "Get Edge Integrations (getEdgeIntegrations)", + "description": "Returns a page of Integrations assigned to the specified edge. The integration object contains information about the Integration, including the heavyweight configuration object. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getEdgeIntegrations", + "parameters": [ + { + "name": "edgeId", + "in": "path", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the integration name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "debugMode", + "allowCreateDevicesOrAssets", + "enabled", + "remote", + "routingKey", + "secret" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } ], - "summary": "Get the list of all OAuth2 client registration templates (getOAuth2ClientRegistrationTemplates)\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "description": "Client registration template is OAuth2 provider configuration template with default settings for registering new OAuth2 clients", - "operationId": "getOAuth2ClientRegistrationTemplates", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OAuth2ClientRegistrationTemplate" - } + "$ref": "#/components/schemas/PageDataIntegration" } } } @@ -84174,19 +84958,21 @@ "ApiKeyForm": [] } ] - }, + } + }, + "/api/integration": { "post": { "tags": [ - "o-auth-2-config-template-controller" + "integration-controller" ], - "summary": "Create or update OAuth2 client registration template (saveClientRegistrationTemplate)\n\nAvailable for users with 'SYS_ADMIN' authority.", - "description": "Client registration template is OAuth2 provider configuration template with default settings for registering new OAuth2 clients", - "operationId": "saveClientRegistrationTemplate", + "summary": "Create Or Update Integration (saveIntegration)", + "description": "Create or update the Integration. When creating integration, platform generates Integration Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created integration id will be present in the response. Specify existing Integration id to update the integration. Referencing non-existing integration Id will cause 'Not Found' error. Integration configuration is validated for each type of the integration before it can be created. \n\n# Integration Configuration\n\nIntegration configuration (**'configuration'** field) is the JSON object representing the special configuration per integration type with the connectivity fields and other important parameters dependent on the specific integration type. Let's review the configuration object for the MQTT Integration type below. \n\n```json\n{\n \"clientConfiguration\":{\n \"host\":\"broker.hivemq.com\",\n \"port\":1883,\n \"cleanSession\":false,\n \"ssl\":false,\n \"connectTimeoutSec\":10,\n \"clientId\":\"\",\n \"maxBytesInMessage\":32368,\n \"credentials\":{\n \"type\":\"anonymous\"\n }\n },\n \"downlinkTopicPattern\":\"${topic}\",\n \"topicFilters\":[\n {\n \"filter\":\"tb/mqtt-integration-tutorial/sensors/+/temperature\",\n \"qos\":0\n }\n ],\n \"metadata\":{\n }\n}\n```\n\nRemove 'id', 'tenantId' from the request body example (below) to create new Integration entity. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveIntegration", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OAuth2ClientRegistrationTemplate" + "$ref": "#/components/schemas/Integration" } } }, @@ -84198,7 +84984,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OAuth2ClientRegistrationTemplate" + "$ref": "#/components/schemas/Integration" } } } @@ -84334,26 +85120,24 @@ ] } }, - "/api/oauth2/config/template/{clientRegistrationTemplateId}": { - "delete": { + "/api/integration/check": { + "post": { "tags": [ - "o-auth-2-config-template-controller" - ], - "summary": "Delete OAuth2 client registration template by id (deleteClientRegistrationTemplate)\n\nAvailable for users with 'SYS_ADMIN' authority.", - "description": "Client registration template is OAuth2 provider configuration template with default settings for registering new OAuth2 clients", - "operationId": "deleteClientRegistrationTemplate", - "parameters": [ - { - "name": "clientRegistrationTemplateId", - "in": "path", - "description": "String representation of client registration template id to delete", - "required": true, - "schema": { - "type": "string" - }, - "example": "139b1f81-2f5d-11ec-9dbe-9b627e1a88f4" - } + "integration-controller" ], + "summary": "Check integration connectivity (checkIntegrationConnection)", + "description": "Checks if the connection to the integration is established. Throws an error if the connection is not established. Example: Failed to connect to MQTT broker at host:port.", + "operationId": "checkIntegrationConnection", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Integration" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK" @@ -84369,7 +85153,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -84489,37 +85273,23 @@ ] } }, - "/api/noauth/oauth2Clients": { - "post": { + "/api/integration/routingKey/{routingKey}": { + "get": { "tags": [ - "o-auth-2-controller" + "integration-controller" ], - "summary": "Get OAuth2 clients (getOAuth2Clients)", - "description": "Get the list of OAuth2 clients to log in with, available for such domain scheme (HTTP or HTTPS) (if x-forwarded-proto request header is present - the scheme is known from it) and domain name and port (port may be known from x-forwarded-port header)", - "operationId": "getOAuth2Clients", + "summary": "Get Integration by Routing Key (getIntegrationByRoutingKey)", + "description": "Fetch the Integration object based on the provided routing key. The server checks that the integration is owned by the same tenant. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getIntegrationByRoutingKey", "parameters": [ { - "name": "pkgName", - "in": "query", - "description": "Mobile application package name, to find OAuth2 clients where there is configured mobile application with such package name", - "required": false, + "name": "routingKey", + "in": "path", + "description": "A string value representing the integration routing key. For example, '542047e6-c1b2-112e-a87e-e49247c09d4b'", + "required": true, "schema": { "type": "string" } - }, - { - "name": "platform", - "in": "query", - "description": "Platform type to search OAuth2 clients for which the usage with this platform type is allowed in the settings. If platform type is not one of allowable values - it will just be ignored", - "required": false, - "schema": { - "type": "string", - "enum": [ - "WEB", - "ANDROID", - "IOS" - ] - } } ], "responses": { @@ -84528,10 +85298,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OAuth2ClientLoginInfo" - } + "$ref": "#/components/schemas/Integration" } } } @@ -84547,7 +85314,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -84656,34 +85423,43 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/oauth2/client": { - "post": { + "/api/integration/{integrationId}": { + "get": { "tags": [ - "o-auth-2-controller" + "integration-controller" ], - "summary": "Save OAuth2 Client (saveOAuth2Client)", - "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "saveOAuth2Client", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OAuth2Client" - } + "summary": "Get Integration (getIntegrationById)", + "description": "Fetch the Integration object based on the provided Integration Id. The server checks that the integration is owned by the same tenant. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getIntegrationById", + "parameters": [ + { + "name": "integrationId", + "in": "path", + "description": "A string value representing the integration id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OAuth2Client" + "$ref": "#/components/schemas/Integration" } } } @@ -84699,7 +85475,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -84817,60 +85593,20 @@ "ApiKeyForm": [] } ] - } - }, - "/api/oauth2/client/infos": { - "get": { + }, + "delete": { "tags": [ - "o-auth-2-controller" + "integration-controller" ], - "summary": "Get OAuth2 Client infos (findOAuth2ClientInfos)", - "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "findOAuth2ClientInfos", + "summary": "Delete integration (deleteIntegration)", + "description": "Deletes the integration and all the relations (from and to the integration). Referencing non-existing integration Id will cause an error. \n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", + "operationId": "deleteIntegration", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "integrationId", + "in": "path", + "description": "A string value representing the integration id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "Case-insensitive 'substring' filter based on client's title", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, "schema": { "type": "string" } @@ -84878,14 +85614,7 @@ ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataOAuth2ClientInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -85018,25 +85747,21 @@ ] } }, - "/api/oauth2/client/list": { + "/api/integration/{integrationId}/export-package": { "get": { "tags": [ - "o-auth-2-controller" + "integration-controller" ], - "summary": "Get OAuth2 Client infos By Ids (findTenantOAuth2ClientInfosByIds)", - "description": "Fetch OAuth2 Client info objects based on the provided ids. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "findTenantOAuth2ClientInfosByIds", + "summary": "Export integration as IoT Hub package", + "description": "Returns a ZIP containing integration.json, uplink.json, optional downlink.json, and form.json. Sensitive fields are tokenized via @TemplateField annotations on the integration's runtime POJO.", + "operationId": "exportIntegrationPackage", "parameters": [ { - "name": "clientIds", - "in": "query", - "description": "A list of oauth2 ids, separated by comma ','", + "name": "integrationId", + "in": "path", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } } ], @@ -85046,10 +85771,8 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OAuth2ClientInfo" - } + "type": "string", + "format": "byte" } } } @@ -85185,22 +85908,85 @@ ] } }, - "/api/oauth2/client/{id}": { + "/api/integrationInfos": { "get": { "tags": [ - "o-auth-2-controller" + "integration-controller" ], - "summary": "Get OAuth2 Client by id (getOAuth2ClientById)", - "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getOAuth2ClientById", + "summary": "Get Integration Infos (getIntegrationInfos)", + "description": "Returns a page of integration infos owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getIntegrationInfos", "parameters": [ { - "name": "id", - "in": "path", + "name": "isEdgeTemplate", + "in": "query", + "description": "Fetch edge template integrations", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { "type": "string", - "format": "uuid" + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the integration name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "debugMode", + "allowCreateDevicesOrAssets", + "enabled", + "remote", + "routingKey", + "secret" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -85210,7 +85996,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OAuth2Client" + "$ref": "#/components/schemas/PageDataIntegrationInfo" } } } @@ -85344,28 +86130,100 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/integrations": { + "get": { "tags": [ - "o-auth-2-controller" + "integration-controller" ], - "summary": "Delete oauth2 client (deleteOauth2Client)", - "description": "Deletes the oauth2 client. Referencing non-existing oauth2 client Id will cause an error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "deleteOauth2Client", + "summary": "Get Integrations (getIntegrations)", + "description": "Returns a page of integrations owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getIntegrations", "parameters": [ { - "name": "id", - "in": "path", + "name": "isEdgeTemplate", + "in": "query", + "description": "Fetch edge template integrations", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { "type": "string", - "format": "uuid" + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the integration name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "type", + "debugMode", + "allowCreateDevicesOrAssets", + "enabled", + "remote", + "routingKey", + "secret" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataIntegration" + } + } + } }, "400": { "description": "Bad Request", @@ -85498,184 +86356,27 @@ ] } }, - "/api/oauth2/loginProcessingUrl": { + "/api/integrations/converters/info": { "get": { "tags": [ - "o-auth-2-controller" + "integration-controller" ], - "summary": "Get OAuth2 log in processing URL (getLoginProcessingUrl)", - "description": "Returns the URL enclosed in double quotes. After successful authentication with OAuth2 provider, it makes a redirect to this path so that the platform can do further log in processing. This URL may be configured as 'security.oauth2.loginProcessingUrl' property in yml configuration file, or as 'SECURITY_OAUTH2_LOGIN_PROCESSING_URL' env variable. By default it is '/login/oauth2/code/'\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getLoginProcessingUrl", + "summary": "Get Integrations Converters info (getIntegrationsConvertersInfo)", + "description": "Returns a JSON object containing information about existing tenant converters and converters available in library. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getIntegrationsConvertersInfo", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/IntegrationConvertersInfo" } } } } - } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] - } - }, - "/api/otaPackage": { - "post": { - "tags": [ - "ota-package-controller" - ], - "summary": "Create Or Update OTA Package Info (saveOtaPackageInfo)", - "description": "Create or update the OTA Package Info. When creating OTA Package Info, platform generates OTA Package id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created OTA Package id will be present in the response. Specify existing OTA Package id to update the OTA Package Info. Referencing non-existing OTA Package Id will cause 'Not Found' error. \n\nOTA Package combination of the title with the version is unique in the scope of tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "saveOtaPackageInfo", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SaveOtaPackageInfoRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OtaPackageInfo" - } - } - } }, "400": { "description": "Bad Request", @@ -85688,7 +86389,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -85808,22 +86509,25 @@ ] } }, - "/api/otaPackage/info/{otaPackageId}": { + "/api/integrations/list": { "get": { "tags": [ - "ota-package-controller" + "integration-controller" ], - "summary": "Get OTA Package Info (getOtaPackageInfoById)", - "description": "Fetch the OTA Package Info object based on the provided OTA Package Id. OTA Package Info is a lightweight object that includes main information about the OTA Package excluding the heavyweight data. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getOtaPackageInfoById", + "summary": "Get Integrations By Ids (getIntegrationsByIds)", + "description": "Requested integrations must be owned by tenant which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getIntegrationsByIds", "parameters": [ { - "name": "otaPackageId", - "in": "path", - "description": "A string value representing the ota package id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "integrationIds", + "in": "query", + "description": "A list of integration ids, separated by comma ','", "required": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], @@ -85833,7 +86537,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OtaPackageInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/Integration" + } } } } @@ -85969,22 +86676,22 @@ ] } }, - "/api/otaPackage/{otaPackageId}": { + "/api/job/{id}": { "get": { "tags": [ - "ota-package-controller" + "job-controller" ], - "summary": "Get OTA Package (getOtaPackageById)", - "description": "Fetch the OTA Package object based on the provided OTA Package Id. The server checks that the OTA Package is owned by the same tenant. OTA Package is a heavyweight object that includes main information about the OTA Package and also data. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getOtaPackageById", + "summary": "Get job by id (getJobById)", + "description": "Fetches job info by id.\n\nExample of a RUNNING CF_REPROCESSING job response:\n```json\n{\n \"id\": {\n \"entityType\": \"JOB\",\n \"id\": \"475e94e0-2f2d-11f0-8240-91e99922a704\"\n },\n \"createdTime\": 1747053196590,\n \"tenantId\": {\n \"entityType\": \"TENANT\",\n \"id\": \"46859a00-2f2d-11f0-8240-91e99922a704\"\n },\n \"type\": \"CF_REPROCESSING\",\n \"key\": \"474e4130-2f2d-11f0-8240-91e99922a704\",\n \"entityId\": {\n \"entityType\": \"DEVICE_PROFILE\",\n \"id\": \"9fd41f20-31a1-11f0-933e-27998d6db02e\"\n },\n \"status\": \"RUNNING\",\n \"configuration\": {\n \"type\": \"CF_REPROCESSING\",\n \"calculatedFieldId\": {\n \"entityType\": \"CALCULATED_FIELD\",\n \"id\": \"474e4130-2f2d-11f0-8240-91e99922a704\"\n },\n \"startTs\": 1747051995760,\n \"endTs\": 1747052895760,\n \"tasksKey\": \"c3cdbd42-799e-4d3a-9aad-9310f767aa36\",\n \"toReprocess\": null\n },\n \"result\": {\n \"jobType\": \"CF_REPROCESSING\",\n \"successfulCount\": 1,\n \"failedCount\": 0,\n \"discardedCount\": 0,\n \"totalCount\": 2,\n \"results\": [],\n \"generalError\": null,\n \"startTs\": 1747323069445,\n \"finishTs\": 1747323070585,\n \"cancellationTs\": 0\n }\n}\n\n```\n\nExample of a CF_REPROCESSING job with failures:\n```json\n{\n ...,\n \"status\": \"FAILED\",\n ...,\n \"result\": {\n \"jobType\": \"CF_REPROCESSING\",\n \"successfulCount\": 0,\n \"failedCount\": 2,\n \"discardedCount\": 0,\n \"totalCount\": 2,\n \"results\": [\n {\n \"jobType\": \"CF_REPROCESSING\",\n \"key\": \"c3cdbd42-799e-4d3a-9aad-9310f767aa36\",\n \"success\": false,\n \"discarded\": false,\n \"failure\": {\n \"error\": \"Failed to fetch temperature: Failed to fetch timeseries data\",\n \"entityInfo\": {\n \"id\": {\n \"entityType\": \"DEVICE\",\n \"id\": \"9fd41f20-31a1-11f0-933e-27998d6db02e\"\n },\n \"name\": \"Test device 1\"\n }\n }\n },\n {\n \"jobType\": \"CF_REPROCESSING\",\n \"key\": \"c3cdbd42-799e-4d3a-9aad-9310f767aa36\",\n \"success\": false,\n \"discarded\": false,\n \"failure\": {\n \"error\": \"Failed to fetch temperature: Failed to fetch timeseries data\",\n \"entityInfo\": {\n \"id\": {\n \"entityType\": \"DEVICE\",\n \"id\": \"9ffc4090-31a1-11f0-933e-27998d6db02e\"\n },\n \"name\": \"Test device 2\"\n }\n }\n }\n ],\n \"generalError\": null,\n \"startTs\": 1747323069445,\n \"finishTs\": 1747323070585,\n \"cancellationTs\": 0\n }\n}\n\n```\n\nExample of a FAILED job result with general error:\n```json\n{\n ...,\n \"status\": \"FAILED\",\n ...,\n \"result\": {\n \"jobType\": \"CF_REPROCESSING\",\n \"successfulCount\": 1,\n \"failedCount\": 0,\n \"discardedCount\": 0,\n \"totalCount\": null,\n \"results\": [],\n \"generalError\": \"Timeout to find devices by profile\",\n \"cancellationTs\": 0\n }\n}\n\n```\n\nExample of a CANCELLED job result:\n```json\n{\n ...,\n \"status\": \"CANCELLED\",\n ...,\n \"result\": {\n \"jobType\": \"CF_REPROCESSING\",\n \"successfulCount\": 15,\n \"failedCount\": 0,\n \"discardedCount\": 85,\n \"totalCount\": 100,\n \"results\": [],\n \"generalError\": null,\n \"cancellationTs\": 1747065908414\n }\n}\n\n```\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getJobById", "parameters": [ { - "name": "otaPackageId", + "name": "id", "in": "path", - "description": "A string value representing the ota package id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -85994,7 +86701,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OtaPackage" + "$ref": "#/components/schemas/Job" } } } @@ -86129,80 +86836,26 @@ } ] }, - "post": { + "delete": { "tags": [ - "ota-package-controller" + "job-controller" ], - "summary": "Save OTA Package data (saveOtaPackageData)", - "description": "Update the OTA Package. Adds the date to the existing OTA Package Info\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "saveOtaPackageData", + "summary": "deleteJob", + "operationId": "deleteJob", "parameters": [ { - "name": "otaPackageId", + "name": "id", "in": "path", - "description": "A string value representing the ota package id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "checksum", - "in": "query", - "description": "OTA Package checksum. For example, '0xd87f7e0c'", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "checksumAlgorithm", - "in": "query", - "description": "OTA Package checksum algorithm.", "required": true, "schema": { "type": "string", - "enum": [ - "MD5", - "SHA256", - "SHA384", - "SHA512", - "CRC32", - "MURMUR3_32", - "MURMUR3_128" - ] + "format": "uuid" } } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "file": { - "type": "string", - "format": "binary", - "description": "OTA Package data." - } - }, - "required": [ - "file" - ] - } - } - } - }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OtaPackageInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -86215,7 +86868,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -86333,22 +86986,24 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/job/{id}/cancel": { + "post": { "tags": [ - "ota-package-controller" + "job-controller" ], - "summary": "Delete OTA Package (deleteOtaPackage)", - "description": "Deletes the OTA Package. Referencing non-existing OTA Package Id will cause an error. Can't delete the OTA Package if it is referenced by existing devices or device profile.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "deleteOtaPackage", + "summary": "Cancel job (cancelJob)", + "description": "Cancels the job. The status of the job must be QUEUED, PENDING or RUNNING.\n\nFor a running job, all the tasks not yet processed will be discarded.\n\nSee the example of a cancelled job result in getJobById method description.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "cancelJob", "parameters": [ { - "name": "otaPackageId", + "name": "id", "in": "path", - "description": "A string value representing the ota package id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -86367,7 +87022,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -86487,36 +87142,28 @@ ] } }, - "/api/otaPackage/{otaPackageId}/download": { - "get": { + "/api/job/{id}/reprocess": { + "post": { "tags": [ - "ota-package-controller" + "job-controller" ], - "summary": "Download OTA Package (downloadOtaPackage)", - "description": "Download OTA Package based on the provided OTA Package Id.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "downloadOtaPackage", + "summary": "Reprocess job (reprocessJob)", + "description": "Reprocesses the job. Failures are located at job.result.results list. Platform iterates over this list and submits new tasks for them. Doesn't create new job entity but updates the existing one. Successfully reprocessed job will look the same as completed one.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "reprocessJob", "parameters": [ { - "name": "otaPackageId", + "name": "id", "in": "path", - "description": "A string value representing the ota package id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -86529,7 +87176,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -86649,14 +87296,14 @@ ] } }, - "/api/otaPackages": { + "/api/jobs": { "get": { "tags": [ - "ota-package-controller" + "job-controller" ], - "summary": "Get OTA Package Infos (getOtaPackages)", - "description": "Returns a page of OTA Package Info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. OTA Package Info is a lightweight object that includes main information about the OTA Package excluding the heavyweight data. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getOtaPackages", + "summary": "Get jobs (getJobs)", + "description": "Returns the page of jobs.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getJobs", "parameters": [ { "name": "pageSize", @@ -86681,7 +87328,7 @@ { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the ota package title.", + "description": "Case-insensitive 'substring' filter based on job's description", "required": false, "schema": { "type": "string" @@ -86693,18 +87340,7 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string", - "enum": [ - "createdTime", - "type", - "title", - "version", - "tag", - "url", - "fileName", - "dataSize", - "checksum" - ] + "type": "string" } }, { @@ -86713,11 +87349,72 @@ "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "string" + } + }, + { + "name": "types", + "in": "query", + "description": "Comma-separated list of job types to include. If empty - all job types are included.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "statuses", + "in": "query", + "description": "Comma-separated list of job statuses to include. If empty - all job statuses are included.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "entities", + "in": "query", + "description": "Comma-separated list of entity ids. If empty - jobs for all entities are included.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "startTime", + "in": "query", + "description": "To only include jobs created after this timestamp.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTime", + "in": "query", + "description": "To only include jobs created before this timestamp.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" } } ], @@ -86727,7 +87424,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataOtaPackageInfo" + "$ref": "#/components/schemas/PageDataJob" } } } @@ -86863,125 +87560,228 @@ ] } }, - "/api/otaPackages/group/{groupId}/{type}": { - "get": { + "/api/auth/login": { + "post": { "tags": [ - "ota-package-controller" + "login-endpoint" ], - "summary": "Get group OTA Package Infos (getGroupOtaPackages)", - "description": "Returns a page of OTA Package Info objects owned by tenant, and by entity group. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. OTA Package Info is a lightweight object that includes main information about the OTA Package excluding the heavyweight data. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getGroupOtaPackages", - "parameters": [ - { - "name": "groupId", - "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "type", - "in": "path", - "description": "OTA Package type.", - "required": true, - "schema": { - "type": "string", - "enum": [ - "FIRMWARE", - "SOFTWARE" - ] - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + "summary": "Login method to get user JWT token data", + "description": "Login method used to authenticate user and get JWT token data.\n\nValue of the response **token** field can be used as **X-Authorization** header value:\n\n`X-Authorization: Bearer $JWT_TOKEN_VALUE`.", + "operationId": "login", + "requestBody": { + "description": "Login request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginRequest" + } } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the ota package title.", - "required": false, - "schema": { - "type": "string" + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginResponse" + } + } } }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "type", - "title", - "version", - "tag", - "url", - "fileName", - "dataSize", - "checksum" - ] + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "bad-credentials": { + "summary": "Bad credentials", + "value": { + "message": "Invalid username or password", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + }, + "token-expired": { + "summary": "JWT token expired", + "value": { + "message": "Token has expired", + "errorCode": 11, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + }, + "account-disabled": { + "summary": "Disabled account", + "value": { + "message": "User account is not active", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + }, + "account-locked": { + "summary": "Locked account", + "value": { + "message": "User account is locked due to security policy", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + }, + "authentication-failed": { + "summary": "General authentication error", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "401 ": { + "description": "Unauthorized (**Expired credentials**)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardCredentialsExpiredResponse" + }, + "examples": { + "credentials-expired": { + "summary": "Expired credentials", + "value": { + "status": 401, + "message": "User password expired!", + "errorCode": 15, + "timestamp": 1609459200000, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "resetToken": "udgDQOpS1Q4ZFEL8qHF9s8cSKQ7d1h" + } + } + } + } } } + } + } + }, + "/api/auth/token": { + "post": { + "tags": [ + "login-endpoint" ], + "summary": "Refresh user JWT token data", + "description": "Method to refresh JWT token. Provide a valid refresh token to get a new JWT token.\n\nThe response contains a new token that can be used for authorization.\n\n`X-Authorization: Bearer $JWT_TOKEN_VALUE`", + "operationId": "refreshToken", + "requestBody": { + "description": "Refresh token request", + "content": { + "application/json": { + "schema": { + "properties": { + "refreshToken": {} + } + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataOtaPackageInfo" + "$ref": "#/components/schemas/LoginResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ThingsboardErrorResponse" }, "examples": { - "error-code-400": { - "summary": "Bad Request", + "bad-credentials": { + "summary": "Bad credentials", "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, + "message": "Invalid username or password", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + }, + "token-expired": { + "summary": "JWT token expired", + "value": { + "message": "Token has expired", + "errorCode": 11, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + }, + "account-disabled": { + "summary": "Disabled account", + "value": { + "message": "User account is not active", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + }, + "account-locked": { + "summary": "Locked account", + "value": { + "message": "User account is locked due to security policy", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + }, + "authentication-failed": { + "summary": "General authentication error", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, "subscriptionErrorCode": null, "subscriptionEntry": null, "subscriptionValue": null, @@ -86992,20 +87792,45 @@ } } }, - "401": { - "description": "Unauthorized", + "401 ": { + "description": "Unauthorized (**Expired credentials**)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" + "$ref": "#/components/schemas/ThingsboardCredentialsExpiredResponse" }, "examples": { - "error-code-401": { - "summary": "Unauthorized", + "credentials-expired": { + "summary": "Expired credentials", "value": { - "message": "Authentication failed", - "errorCode": 10, "status": 401, + "message": "User password expired!", + "errorCode": 15, + "timestamp": 1609459200000, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "resetToken": "udgDQOpS1Q4ZFEL8qHF9s8cSKQ7d1h" + } + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, "subscriptionErrorCode": null, "subscriptionEntry": null, "subscriptionValue": null, @@ -87088,118 +87913,45 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/otaPackages/{deviceProfileId}/{type}": { - "get": { + "/api/lwm2m/device-credentials": { + "post": { "tags": [ - "ota-package-controller" + "lwm-2m-controller" ], - "summary": "Get OTA Package Infos by Device Profile and Type (getOtaPackagesByDeviceProfileAndType)", - "description": "Returns a page of OTA Package Info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. OTA Package Info is a lightweight object that includes main information about the OTA Package excluding the heavyweight data. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getOtaPackagesByDeviceProfileAndType", + "summary": "Save LwM2M device with credentials (saveLwm2mDeviceWithCredentials)", + "description": "Deprecated.", + "operationId": "saveLwm2mDeviceWithCredentials", "parameters": [ { - "name": "deviceProfileId", - "in": "path", - "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "type", - "in": "path", - "description": "OTA Package type.", - "required": true, - "schema": { - "type": "string", - "enum": [ - "FIRMWARE", - "SOFTWARE" - ] - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", + "name": "entityGroupId", "in": "query", - "description": "The case insensitive 'substring' filter based on the ota package title.", "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "type", - "title", - "version", - "tag", - "url", - "fileName", - "dataSize", - "checksum" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": {} + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataOtaPackageInfo" + "$ref": "#/components/schemas/Device" } } } @@ -87215,7 +87967,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -87335,59 +88087,35 @@ ] } }, - "/api/owner/CUSTOMER/{ownerId}/{entityType}/{entityId}": { - "post": { + "/api/lwm2m/deviceProfile/bootstrap/{isBootstrapServer}": { + "get": { "tags": [ - "owner-controller" + "lwm-2m-controller" ], - "summary": "Change owner to customer (changeOwnerToCustomer)", - "description": "Tenant/Customer changes Owner to Customer or sub-Customer. Sub-Customer can`t perform this operation! \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "changeOwnerToCustomer", + "summary": "Get Lwm2m Bootstrap SecurityInfo (getLwm2mBootstrapSecurityInfo)", + "description": "Get the Lwm2m Bootstrap SecurityInfo object (of the current server) based on the provided isBootstrapServer parameter. If isBootstrapServer == true, get the parameters of the current Bootstrap Server. If isBootstrapServer == false, get the parameters of the current Lwm2m Server. Used for client settings when starting the client in Bootstrap mode. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getLwm2mBootstrapSecurityInfo", "parameters": [ { - "name": "ownerId", - "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", + "name": "isBootstrapServer", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A Boolean value representing the Server SecurityInfo for future Bootstrap client mode settings. Values: 'true' for Bootstrap Server; 'false' for Lwm2m Server. ", "required": true, "schema": { - "type": "string" + "type": "boolean" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "array", - "description": "An optional list of additional entity group ids", - "items": { - "type": "string" + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LwM2MServerSecurityConfigDefault" } } } - } - }, - "responses": { - "200": { - "description": "OK" }, "400": { "description": "Bad Request", @@ -87400,7 +88128,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -87520,59 +88248,24 @@ ] } }, - "/api/owner/TENANT/{ownerId}/{entityType}/{entityId}": { - "post": { + "/api/mail/config/template": { + "get": { "tags": [ - "owner-controller" - ], - "summary": "Change owner to tenant (changeOwnerToTenant)", - "description": "Tenant changes Owner from Customer or sub-Customer to Tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "changeOwnerToTenant", - "parameters": [ - { - "name": "ownerId", - "in": "path", - "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - } + "mail-config-template-controller" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "array", - "description": "An optional list of additional entity group ids", - "items": { - "type": "string" + "summary": "Get the list of all OAuth2 client registration templates (getMailConfigTemplates)\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "description": "Mail configuration template is set of default smtp settings for mail server that specific provider supports", + "operationId": "getMailConfigTemplates", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" } } } - } - }, - "responses": { - "200": { - "description": "OK" }, "400": { "description": "Bad Request", @@ -87585,7 +88278,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -87705,21 +88398,45 @@ ] } }, - "/api/mobile/qr/deepLink": { - "get": { + "/api/mobile/bundle": { + "post": { "tags": [ - "qr-code-settings-controller" + "mobile-app-bundle-controller" ], - "summary": "Get the deep link to the associated mobile application (getMobileAppDeepLink)", - "description": "Fetch the url that takes user to linked mobile application \n\nAvailable for any authorized user. ", - "operationId": "getMobileAppDeepLink", + "summary": "Save Or update Mobile app bundle (saveMobileAppBundle)", + "description": "Create or update the Mobile app bundle that represents tha pair of ANDROID and IOS app and mobile settings like oauth2 clients, self-registration and layout configuration.When creating mobile app bundle, platform generates Mobile App Bundle Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Mobile App Bundle Id will be present in the response. Referencing non-existing Mobile App Bundle Id will cause 'Not Found' error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "saveMobileAppBundle", + "parameters": [ + { + "name": "oauth2ClientIds", + "in": "query", + "description": "A list of oauth2 client ids, separated by comma ','", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MobileAppBundle" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/MobileAppBundle" } } } @@ -87735,7 +88452,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -87855,21 +88572,32 @@ ] } }, - "/api/mobile/qr/merged": { + "/api/mobile/bundle/info/{id}": { "get": { "tags": [ - "qr-code-settings-controller" + "mobile-app-bundle-controller" + ], + "summary": "Get mobile app bundle info by id (getMobileAppBundleInfoById)", + "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getMobileAppBundleInfoById", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Get QR code configuration for home page (getMergedMobileAppSettings)", - "description": "The response payload contains ui configuration of qr code\n\nAvailable for any authorized user. ", - "operationId": "getMergedMobileAppSettings", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/QrCodeSettings" + "$ref": "#/components/schemas/MobileAppBundleInfo" } } } @@ -88005,21 +88733,70 @@ ] } }, - "/api/mobile/qr/settings": { + "/api/mobile/bundle/infos": { "get": { "tags": [ - "qr-code-settings-controller" + "mobile-app-bundle-controller" + ], + "summary": "Get mobile app bundle infos (getTenantMobileAppBundleInfos)", + "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getTenantMobileAppBundleInfos", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Case-insensitive 'substring' filter based on app's name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string" + } + } ], - "summary": "Get Mobile application settings (getQrCodeSettings)", - "description": "The response payload contains configuration for android/iOS applications and platform qr code widget settings.\n\nAvailable for any authorized user. ", - "operationId": "getQrCodeSettings", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/QrCodeSettings" + "$ref": "#/components/schemas/PageDataMobileAppBundleInfo" } } } @@ -88153,34 +88930,30 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/mobile/bundle/{id}": { + "delete": { "tags": [ - "qr-code-settings-controller" + "mobile-app-bundle-controller" ], - "summary": "Create Or Update the Mobile application settings (saveQrCodeSettings)", - "description": "The request payload contains configuration for android/iOS applications and platform qr code widget settings.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "saveQrCodeSettings", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QrCodeSettings" - } + "summary": "Delete Mobile App Bundle by ID (deleteMobileAppBundle)", + "description": "Deletes Mobile App Bundle by ID. Referencing non-existing mobile app bundle Id will cause an error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "deleteMobileAppBundle", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QrCodeSettings" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -88193,7 +88966,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -88313,34 +89086,43 @@ ] } }, - "/api/noauth/qr": { - "get": { + "/api/mobile/bundle/{id}/oauth2Clients": { + "put": { "tags": [ - "qr-code-settings-controller" + "mobile-app-bundle-controller" ], - "summary": "getApplicationRedirect", - "operationId": "getApplicationRedirect", + "summary": "Update oauth2 clients (updateMobileAppBundleOauth2Clients)", + "description": "Update oauth2 clients of the specified mobile app bundle.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "updateMobileAppBundleOauth2Clients", "parameters": [ { - "name": "User-Agent", - "in": "header", + "name": "id", + "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object" + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" } } } }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, "400": { "description": "Bad Request", "content": { @@ -88461,26 +89243,47 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/qr/{secret}": { + "/api/mobile": { "get": { "tags": [ - "qr-code-settings-controller" + "mobile-app-controller" ], - "summary": "Get User Token (getUserTokenByMobileSecret)", - "description": "Returns the token of the User based on the provided secret key.", - "operationId": "getUserTokenByMobileSecret", + "summary": "Get user mobile app basic info (getUserMobileInfo)", + "description": "\n\nAvailable for any authorized user. ", + "operationId": "getUserMobileInfo", "parameters": [ { - "name": "secret", - "in": "path", - "description": "A string value representing short-lived secret key", + "name": "pkgName", + "in": "query", + "description": "Mobile application package name", "required": true, "schema": { "type": "string" } + }, + { + "name": "platform", + "in": "query", + "description": "Platform type", + "required": true, + "schema": { + "type": "string", + "enum": [ + "ANDROID", + "IOS" + ] + } } ], "responses": { @@ -88489,7 +89292,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JwtPair" + "$ref": "#/components/schemas/UserMobileInfo" } } } @@ -88614,31 +89417,33 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/queues": { + "/api/mobile/app": { "get": { "tags": [ - "queue-controller" + "mobile-app-controller" ], - "summary": "Get Queues (getTenantQueuesByServiceType)", - "description": "Returns a page of queues registered in the platform. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getTenantQueuesByServiceType", + "summary": "Get mobile app infos (getTenantMobileApps)", + "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getTenantMobileApps", "parameters": [ { - "name": "serviceType", + "name": "platformType", "in": "query", - "description": "Service type (implemented only for the TB-RULE-ENGINE)", - "required": true, + "description": "Platform type: ANDROID or IOS", + "required": false, "schema": { - "type": "string", - "enum": [ - "TB-RULE-ENGINE", - "TB-CORE", - "TB-TRANSPORT", - "JS-EXECUTOR" - ] + "$ref": "#/components/schemas/PlatformType" } }, { @@ -88664,7 +89469,7 @@ { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the queue name.", + "description": "Case-insensitive 'substring' filter based on app's name", "required": false, "schema": { "type": "string" @@ -88676,12 +89481,7 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "topic" - ] + "type": "string" } }, { @@ -88690,11 +89490,7 @@ "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "string" } } ], @@ -88704,7 +89500,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataQueue" + "$ref": "#/components/schemas/PageDataMobileApp" } } } @@ -88841,33 +89637,16 @@ }, "post": { "tags": [ - "queue-controller" - ], - "summary": "Create Or Update Queue (saveQueue)", - "description": "Create or update the Queue. When creating queue, platform generates Queue Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). Specify existing Queue id to update the queue. Referencing non-existing Queue Id will cause 'Not Found' error.\n\nQueue name is unique in the scope of sysadmin. Remove 'id', 'tenantId' from the request body example (below) to create new Queue entity. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "saveQueue", - "parameters": [ - { - "name": "serviceType", - "in": "query", - "description": "Service type (implemented only for the TB-RULE-ENGINE)", - "required": true, - "schema": { - "type": "string", - "enum": [ - "TB-RULE-ENGINE", - "TB-CORE", - "TB-TRANSPORT", - "JS-EXECUTOR" - ] - } - } + "mobile-app-controller" ], + "summary": "Save Or update Mobile app (saveMobileApp)", + "description": "Create or update the Mobile app. When creating mobile app, platform generates Mobile App Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Mobile App Id will be present in the response. Specify existing Mobile App Id to update the mobile app. Referencing non-existing Mobile App Id will cause 'Not Found' error.\n\nThe pair of mobile app package name and platform type is unique for entire platform setup.\n\n\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "saveMobileApp", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Queue" + "$ref": "#/components/schemas/MobileApp" } } }, @@ -88879,7 +89658,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Queue" + "$ref": "#/components/schemas/MobileApp" } } } @@ -89015,183 +89794,22 @@ ] } }, - "/api/queues/name/{queueName}": { - "get": { - "tags": [ - "queue-controller" - ], - "summary": "Get Queue (getQueueByName)", - "description": "Fetch the Queue object based on the provided Queue name. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getQueueByName", - "parameters": [ - { - "name": "queueName", - "in": "path", - "description": "A string value representing the queue id. For example, 'Main'", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Queue" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] - } - }, - "/api/queues/{queueId}": { + "/api/mobile/app/{id}": { "get": { "tags": [ - "queue-controller" + "mobile-app-controller" ], - "summary": "Get Queue (getQueueById)", - "description": "Fetch the Queue object based on the provided Queue Id. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getQueueById", + "summary": "Get mobile info by id (getMobileAppById)", + "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getMobileAppById", "parameters": [ { - "name": "queueId", + "name": "id", "in": "path", - "description": "A string value representing the queue id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -89201,7 +89819,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Queue" + "$ref": "#/components/schemas/MobileApp" } } } @@ -89338,19 +89956,19 @@ }, "delete": { "tags": [ - "queue-controller" + "mobile-app-controller" ], - "summary": "Delete Queue (deleteQueue)", - "description": "Deletes the Queue. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "deleteQueue", + "summary": "Delete Mobile App by ID (deleteMobileApp)", + "description": "Deletes Mobile App by ID. Referencing non-existing mobile app Id will cause an error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "deleteMobileApp", "parameters": [ { - "name": "queueId", + "name": "id", "in": "path", - "description": "A string value representing the queue id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -89489,66 +90107,33 @@ ] } }, - "/api/queueStats": { + "/api/noauth/mobile": { "get": { "tags": [ - "queue-stats-controller" + "mobile-app-controller" ], - "summary": "Get Queue Stats entities (getTenantQueueStats)", - "description": "Returns a page of queue stats objects that are designed to collect queue statistics for every service. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getTenantQueueStats", + "summary": "Get mobile app login info (getLoginMobileInfo)", + "operationId": "getLoginMobileInfo", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", + "name": "pkgName", "in": "query", - "description": "Sequence number of page starting from 0", + "description": "Mobile application package name", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the queue name or service id.", - "required": false, "schema": { "type": "string" } }, { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime" - ] - } - }, - { - "name": "sortOrder", + "name": "platform", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, + "description": "Platform type", + "required": true, "schema": { "type": "string", "enum": [ - "ASC", - "DESC" + "ANDROID", + "IOS" ] } } @@ -89559,7 +90144,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataQueueStats" + "$ref": "#/components/schemas/LoginMobileInfo" } } } @@ -89684,39 +90269,17 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/queueStats/list": { + "/api/notification/deliveryMethods": { "get": { "tags": [ - "queue-stats-controller" - ], - "summary": "Get QueueStats By Ids (getQueueStatsByIds)", - "description": "Fetch the Queue stats objects based on the provided ids. ", - "operationId": "getQueueStatsByIds", - "parameters": [ - { - "name": "queueStatsIds", - "in": "query", - "description": "A list of queue stats ids, separated by comma ','", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } + "notification-controller" ], + "summary": "Get available delivery methods (getAvailableDeliveryMethods)", + "description": "Returns the list of delivery methods that are properly configured and are allowed to be used for sending notifications.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getAvailableDeliveryMethods", "responses": { "200": { "description": "OK", @@ -89725,7 +90288,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/QueueStats" + "$ref": "#/components/schemas/NotificationDeliveryMethod" } } } @@ -89862,35 +90425,40 @@ ] } }, - "/api/queueStats/{queueStatsId}": { - "get": { + "/api/notification/entitiesLimitIncreaseRequest/{entityType}": { + "post": { "tags": [ - "queue-stats-controller" + "notification-controller" ], - "summary": "Get Queue stats entity by id (getQueueStatsById)", - "description": "Fetch the Queue stats object based on the provided Queue stats id. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getQueueStatsById", + "summary": "Send entity limit increase request notification to System/Tenant administrators (sendEntitiesLimitIncreaseRequest)", + "description": "Send entity limit increase request notification by Tenant Administrator or Customer User to System/Tenant administrators.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "sendEntitiesLimitIncreaseRequest", "parameters": [ { - "name": "queueStatsId", + "name": "entityType", "in": "path", - "description": "A string value representing the queue stats id. For example, '687f294c-42b6-435a-983c-b7beff2784f9'", + "description": "Entity type", "required": true, "schema": { - "type": "string" + "type": "string", + "enum": [ + "DEVICE", + "ASSET", + "CUSTOMER", + "USER", + "DASHBOARD", + "RULE_CHAIN", + "EDGE", + "INTEGRATION", + "CONVERTER", + "SCHEDULER_EVENT" + ] } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QueueStats" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -89903,7 +90471,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -90023,34 +90591,23 @@ ] } }, - "/api/v2/report": { + "/api/notification/request": { "post": { "tags": [ - "report-controller" + "notification-controller" ], - "summary": "createReport", - "operationId": "createReport", + "summary": "Create notification request (createNotificationRequest)", + "description": "Processes notification request.\nMandatory request properties are `targets` (list of targets ids to send notification to), and either `templateId` (existing notification template id) or `template` (to send notification without saving the template).\nOptionally, you can set `sendingDelayInSec` inside the `additionalConfig` field to schedule the notification.\n\nFor each enabled delivery method in the notification template, there must be a target in the `targets` list that supports this delivery method: if you chose `WEB`, `EMAIL` or `SMS` - there must be at least one target in `targets` of `PLATFORM_USERS` type.\nFor `SLACK` delivery method - you need to chose at least one `SLACK` notification target.\n\nNotification request object with `PROCESSING` status will be returned immediately, and the notification sending itself is done asynchronously. After all notifications are sent, the `status` of the request becomes `SENT`. Use `getNotificationRequestById` to see the notification request processing status and some sending stats. \n\nHere is an example of notification request to one target using saved template:\n```json\n{\n \"templateId\": {\n \"entityType\": \"NOTIFICATION_TEMPLATE\",\n \"id\": \"6dbc3670-e4dd-11ed-9401-dbcc5dff78be\"\n },\n \"targets\": [\n \"320e3ed0-d785-11ed-a06c-21dd57dd88ca\"\n ],\n \"additionalConfig\": {\n \"sendingDelayInSec\": 0\n }\n}\n```\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "createNotificationRequest", "requestBody": { "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "file": { - "type": "string", - "format": "binary" - }, - "info": { - "type": "string" - } - }, - "required": [ - "file", - "info" - ] + "$ref": "#/components/schemas/NotificationRequest" } } - } + }, + "required": true }, "responses": { "200": { @@ -90058,7 +90615,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Report" + "$ref": "#/components/schemas/NotificationRequest" } } } @@ -90194,18 +90751,32 @@ ] } }, - "/api/v2/report/request": { + "/api/notification/request/preview": { "post": { "tags": [ - "report-controller" + "notification-controller" + ], + "summary": "Get notification request preview (getNotificationRequestPreview)", + "description": "Returns preview for notification request.\n\n`processedTemplates` shows how the notifications for each delivery method will look like for the first recipient of the corresponding notification target.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getNotificationRequestPreview", + "parameters": [ + { + "name": "recipientsPreviewSize", + "in": "query", + "description": "Amount of the recipients to show in preview", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 20 + } + } ], - "summary": "requestReport", - "operationId": "requestReport", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReportRequest" + "$ref": "#/components/schemas/NotificationRequest" } } }, @@ -90217,7 +90788,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Job" + "$ref": "#/components/schemas/NotificationRequestPreview" } } } @@ -90353,32 +90924,32 @@ ] } }, - "/api/v2/report/test": { - "post": { + "/api/notification/request/{id}": { + "get": { "tags": [ - "report-controller" + "notification-controller" ], - "summary": "Download test report (testReportAndDownload)", - "description": "Generate and download test report.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "testReportAndDownload", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReportRequest" - } + "summary": "Get notification request by id (getNotificationRequestById)", + "description": "Fetches notification request info by request id.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getNotificationRequestById", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/NotificationRequestInfo" } } } @@ -90394,7 +90965,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -90512,37 +91083,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/v2/report/{reportId}": { - "get": { + }, + "delete": { "tags": [ - "report-controller" + "notification-controller" ], - "summary": "Get Report (getReportById)", - "description": "Fetch the Report object based on the provided report Id. The platform uses Report to store generated reports information.Referencing non-existing Report Id will cause 'Not Found' error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getReportById", + "summary": "Delete notification request (deleteNotificationRequest)", + "description": "Deletes notification request by its id.\n\nIf the request has status `SENT` - all sent notifications for this request will be deleted. If it is `SCHEDULED`, the request will be cancelled.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "deleteNotificationRequest", "parameters": [ { - "name": "reportId", + "name": "id", "in": "path", - "description": "A string value representing the report id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Report" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -90673,20 +91235,60 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/notification/requests": { + "get": { "tags": [ - "report-controller" + "notification-controller" ], - "summary": "Delete Report (deleteReport)", - "description": "Deletes the report. Referencing non-existing Report Id will cause 'Not Found' error.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", - "operationId": "deleteReport", + "summary": "Get notification requests (getNotificationRequests)", + "description": "Returns the page of notification requests submitted by users of this tenant or sysadmins.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getNotificationRequests", "parameters": [ { - "name": "reportId", - "in": "path", - "description": "A string value representing the report id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Case-insensitive 'substring' filed based on the used template name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, "schema": { "type": "string" } @@ -90694,7 +91296,14 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataNotificationRequestInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -90827,35 +91436,33 @@ ] } }, - "/api/v2/report/{reportId}/download": { - "get": { + "/api/notification/sendAddonAccessError/{addonType}": { + "post": { "tags": [ - "report-controller" + "notification-controller" ], - "summary": "downloadReport", - "operationId": "downloadReport", + "summary": "Send add-on access error notification to System/Tenant administrators (sendAddonAccessError)", + "description": "Send add-on access error notification by Tenant Administrator or Customer User to System/Tenant administrators.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "sendAddonAccessError", "parameters": [ { - "name": "reportId", + "name": "addonType", "in": "path", + "description": "Addon type", "required": true, "schema": { "type": "string", - "format": "uuid" + "enum": [ + "EDGE", + "TRENDZ", + "WHITE_LABELING" + ] } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string", - "format": "binary" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -90868,7 +91475,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -90988,40 +91595,33 @@ ] } }, - "/api/v2/reportInfos": { - "get": { + "/api/notification/sendAddonAccessRequest/{addonType}": { + "post": { "tags": [ - "report-controller" + "notification-controller" ], - "summary": "getReportInfosByIds", - "operationId": "getReportInfosByIds", + "summary": "Send add-on access request notification to System/Tenant administrators (sendAddonAccessRequest)", + "description": "Send add-on access request notification by Tenant Administrator or Customer User to System/Tenant administrators.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "sendAddonAccessRequest", "parameters": [ { - "name": "strReportIds", - "in": "query", - "description": "A list of report ids, separated by comma ','", + "name": "addonType", + "in": "path", + "description": "Addon type", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string", + "enum": [ + "EDGE", + "TRENDZ", + "WHITE_LABELING" + ] } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ReportInfo" - } - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -91034,7 +91634,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -91154,86 +91754,20 @@ ] } }, - "/api/v2/reportInfos/all": { - "get": { + "/api/notification/sendPlanUpgradeRequest/{planName}": { + "post": { "tags": [ - "report-controller" + "notification-controller" ], - "summary": "getReportInfos", - "operationId": "getReportInfos", + "summary": "Send plan upgrade request notification to Tenant administrators (sendPlanUpgradeRequest)", + "description": "Send plan upgrade access request notification by Tenant user to Tenant administrators.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "sendPlanUpgradeRequest", "parameters": [ { - "name": "reportTemplateId", - "in": "query", - "description": "Report template id", - "required": false, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "userId", - "in": "query", - "description": "The user used for report generation.", - "required": false, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "planName", + "in": "path", + "description": "Plan name", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "Case-insensitive 'substring' filter based on report's name or customer title", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, "schema": { "type": "string" } @@ -91241,14 +91775,7 @@ ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataReportInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -91261,7 +91788,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -91381,78 +91908,21 @@ ] } }, - "/api/v2/reports": { + "/api/notification/settings": { "get": { "tags": [ - "report-controller" - ], - "summary": "getReports", - "operationId": "getReports", - "parameters": [ - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "Case-insensitive 'substring' filter based on report's name or customer title", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - } + "notification-controller" ], + "summary": "Get notification settings (getNotificationSettings)", + "description": "Retrieves notification settings for this tenant or sysadmin.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getNotificationSettings", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataReport" + "$ref": "#/components/schemas/NotificationSettings" } } } @@ -91586,21 +92056,19 @@ "ApiKeyForm": [] } ] - } - }, - "/api/reportTemplate": { + }, "post": { "tags": [ - "report-template-controller" + "notification-controller" ], - "summary": "Save Report Template (saveReportTemplate)", - "description": "Creates or Updates report template. Report Template extends Report Template Info object and adds 'configuration' - a JSON structure of report template configuration. See the 'Model' tab of the Response Class for more details. When creating report template, platform generates report template Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created report template id will be present in the response. Specify existing report template id to update the report template. Referencing non-existing report template Id will cause 'Not Found' error. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Report Template entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "saveReportTemplate", + "summary": "Save notification settings (saveNotificationSettings)", + "description": "Saves notification settings for this tenant or sysadmin.\n`deliveryMethodsConfigs` of the settings must be specified.\n\nHere is an example of the notification settings with Slack configuration:\n```json\n{\n \"deliveryMethodsConfigs\": {\n \"SLACK\": {\n \"method\": \"SLACK\",\n \"botToken\": \"xoxb-....\"\n }\n }\n}\n```\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "saveNotificationSettings", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReportTemplate" + "$ref": "#/components/schemas/NotificationSettings" } } }, @@ -91612,7 +92080,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReportTemplate" + "$ref": "#/components/schemas/NotificationSettings" } } } @@ -91748,32 +92216,20 @@ ] } }, - "/api/reportTemplate/info/{reportTemplateId}": { + "/api/notification/settings/user": { "get": { "tags": [ - "report-template-controller" - ], - "summary": "Get Report Template Info (getReportTemplateInfoById)", - "description": "Fetch the ReportTemplateInfo object based on the provided report template Id. Report Templates allows you to create reports according to the report template configuration. Report service uses report template configuration to generate report. See the 'Model' tab of the Response Class for more details. Referencing non-existing Report Template Id will cause 'Not Found' error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getReportTemplateInfoById", - "parameters": [ - { - "name": "reportTemplateId", - "in": "path", - "description": "A string value representing the report template id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - } + "notification-controller" ], + "summary": "getUserNotificationSettings", + "operationId": "getUserNotificationSettings", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReportTemplateInfo" + "$ref": "#/components/schemas/UserNotificationSettings" } } } @@ -91907,34 +92363,30 @@ "ApiKeyForm": [] } ] - } - }, - "/api/reportTemplate/{reportTemplateId}": { - "get": { + }, + "post": { "tags": [ - "report-template-controller" + "notification-controller" ], - "summary": "Get Report Template (getReportTemplateById)", - "description": "Fetch the ReportTemplate object based on the provided report template Id. Report Template extends Report Template Info object and adds 'configuration' - a JSON structure of report template configuration. See the 'Model' tab of the Response Class for more details. Referencing non-existing Report Template Id will cause 'Not Found' error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getReportTemplateById", - "parameters": [ - { - "name": "reportTemplateId", - "in": "path", - "description": "A string value representing the report template id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "saveUserNotificationSettings", + "operationId": "saveUserNotificationSettings", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserNotificationSettings" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReportTemplate" + "$ref": "#/components/schemas/UserNotificationSettings" } } } @@ -91950,7 +92402,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -92068,22 +92520,24 @@ "ApiKeyForm": [] } ] - }, + } + }, + "/api/notification/{id}": { "delete": { "tags": [ - "report-template-controller" + "notification-controller" ], - "summary": "Delete Report Template (deleteReportTemplate)", - "description": "Deletes the report template. Referencing non-existing Report Template Id will cause 'Not Found' error.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", - "operationId": "deleteReportTemplate", + "summary": "Delete notification (deleteNotification)", + "description": "Deletes notification by its id.\n\nAvailable for any authorized user. ", + "operationId": "deleteNotification", "parameters": [ { - "name": "reportTemplateId", + "name": "id", "in": "path", - "description": "A string value representing the report template id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -92222,56 +92676,169 @@ ] } }, - "/api/reportTemplateInfos/all": { - "get": { + "/api/notification/{id}/read": { + "put": { "tags": [ - "report-template-controller" + "notification-controller" ], - "summary": "Get All Report Templates for current user (getAllReportTemplateInfos)", - "description": "Returns a page of report template info objects owned by the tenant or the customer of a current user. Report Templates allows you to create reports according to the report template configuration. Report service uses report template configuration to generate report. See the 'Model' tab of the Response Class for more details. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAllReportTemplateInfos", + "summary": "Mark notification as read (markNotificationAsRead)", + "description": "Marks notification as read by its id.\n\nAvailable for any authorized user. ", + "operationId": "markNotificationAsRead", "parameters": [ { - "name": "typeList", - "in": "query", - "description": "A list of string values separated by comma ',' representing one of the ReportTemplateType enumeration value.", - "required": false, + "name": "id", + "in": "path", + "required": true, "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "REPORT", - "SUB_REPORT" - ] + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } } } }, - { - "name": "formatList", - "in": "query", - "description": "A list of string values separated by comma ',' representing one of the TbReportFormat enumeration value.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "PDF", - "CSV" - ] + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } } } }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/notifications": { + "get": { + "tags": [ + "notification-controller" + ], + "summary": "Get notifications (getNotifications)", + "description": "Returns the page of notifications for current user.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for any authorized user. \n\n**WebSocket API**:\n\nThere are 2 types of subscriptions: one for unread notifications count, another for unread notifications themselves.\n\nThe URI for opening WS session for notifications: `/api/ws/plugins/notifications`.\n\nSubscription command for unread notifications count:\n```\n{\n \"unreadCountSubCmd\": {\n \"cmdId\": 1234\n }\n}\n```\nTo subscribe for latest unread notifications:\n```\n{\n \"unreadSubCmd\": {\n \"cmdId\": 1234,\n \"limit\": 10\n }\n}\n```\nTo unsubscribe from any subscription:\n```\n{\n \"unsubCmd\": {\n \"cmdId\": 1234\n }\n}\n```\nTo mark certain notifications as read, use following command:\n```\n{\n \"markAsReadCmd\": {\n \"cmdId\": 1234,\n \"notifications\": [\n \"6f860330-7fc2-11ed-b855-7dd3b7d2faa9\",\n \"5b6dfee0-8d0d-11ed-b61f-35a57b03dade\"\n ]\n }\n}\n\n```\nTo mark all notifications as read:\n```\n{\n \"markAllAsReadCmd\": {\n \"cmdId\": 1234\n }\n}\n```\n\n\nUpdate structure for unread **notifications count subscription**:\n```\n{\n \"cmdId\": 1234,\n \"totalUnreadCount\": 55\n}\n```\nFor **notifications subscription**:\n- full update of latest unread notifications:\n```\n{\n \"cmdId\": 1234,\n \"notifications\": [\n {\n \"id\": {\n \"entityType\": \"NOTIFICATION\",\n \"id\": \"6f860330-7fc2-11ed-b855-7dd3b7d2faa9\"\n },\n ...\n }\n ],\n \"totalUnreadCount\": 1\n}\n```\n- when new notification arrives or shown notification is updated:\n```\n{\n \"cmdId\": 1234,\n \"update\": {\n \"id\": {\n \"entityType\": \"NOTIFICATION\",\n \"id\": \"6f860330-7fc2-11ed-b855-7dd3b7d2faa9\"\n },\n # updated notification info, text, subject etc.\n ...\n },\n \"totalUnreadCount\": 2\n}\n```\n- when unread notifications count changes:\n```\n{\n \"cmdId\": 1234,\n \"totalUnreadCount\": 5\n}\n```", + "operationId": "getNotifications", + "parameters": [ { "name": "pageSize", "in": "query", @@ -92295,7 +92862,7 @@ { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the report template name or customer title.", + "description": "Case-insensitive 'substring' filter based on notification subject or text", "required": false, "schema": { "type": "string" @@ -92307,12 +92874,7 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "ownerName" - ] + "type": "string" } }, { @@ -92320,11 +92882,30 @@ "in": "query", "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "unreadOnly", + "in": "query", + "description": "To search for unread notifications only", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "deliveryMethod", + "in": "query", + "description": "Delivery method", + "required": false, "schema": { "type": "string", "enum": [ - "ASC", - "DESC" + "WEB", + "MOBILE_APP" ] } } @@ -92335,7 +92916,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataReportTemplateInfo" + "$ref": "#/components/schemas/PageDataNotification" } } } @@ -92471,27 +93052,186 @@ ] } }, - "/api/reportTemplates": { - "get": { + "/api/notifications/read": { + "put": { "tags": [ - "report-template-controller" + "notification-controller" ], - "summary": "Get report templates by Report Template Ids (getReportTemplatesByIds)", - "description": "Returns a list of ReportTemplateInfo objects based on the provided ids. Filters the list based on the user permissions. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getReportTemplatesByIds", + "summary": "Mark all notifications as read (markAllNotificationsAsRead)", + "description": "Marks all unread notifications as read.\n\nAvailable for any authorized user. ", + "operationId": "markAllNotificationsAsRead", "parameters": [ { - "name": "reportTemplateIds", + "name": "deliveryMethod", "in": "query", - "description": "A list of report template ids, separated by comma ','", - "required": true, + "description": "Delivery method", + "required": false, "schema": { - "type": "array", - "items": { - "type": "string" + "type": "string", + "enum": [ + "WEB", + "MOBILE_APP" + ] + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } } } } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/notifications/unread/count": { + "get": { + "tags": [ + "notification-controller" + ], + "summary": "Get unread notifications count (getUnreadNotificationsCount)", + "description": "Returns unread notifications count for chosen delivery method.\n\nAvailable for any authorized user. ", + "operationId": "getUnreadNotificationsCount", + "parameters": [ + { + "name": "deliveryMethod", + "in": "query", + "description": "Delivery method", + "required": false, + "schema": { + "type": "string", + "enum": [ + "WEB", + "MOBILE_APP" + ] + } + } ], "responses": { "200": { @@ -92499,10 +93239,8 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ReportTemplateInfo" - } + "type": "integer", + "format": "int32" } } } @@ -92638,19 +93376,19 @@ ] } }, - "/api/role": { + "/api/notification/rule": { "post": { "tags": [ - "role-controller" + "notification-rule-controller" ], - "summary": "Create Or Update Role (saveRole)", - "description": "Creates or Updates the Role. When creating Role, platform generates Role Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Role id will be present in the response. Specify existing Role id to update the permission. Referencing non-existing Group Permission Id will cause 'Not Found' error.\n\nRole Contains a set of permissions. Role has two types. Generic Role may be assigned to the user group and will provide permissions for all entities of a certain type. Group Role may be assigned to both user and entity group and will provides permissions only for the entities that belong to specified entity group. The assignment of the Role to the User Group is done using [Group Permission Controller](/swagger-ui.html#/group-permission-controller).\n\nExample of Generic Role with read-only permissions for any resource and all permissions for the 'DEVICE' and 'PROFILE' resources is listed below: \n\n```json\n{\n \"name\": \"Read-Only User\",\n \"type\": \"GENERIC\",\n \"permissions\": {\n \"ALL\": [\n \"READ\",\n \"RPC_CALL\",\n \"READ_CREDENTIALS\",\n \"READ_ATTRIBUTES\",\n \"READ_TELEMETRY\"\n ],\n \"DEVICE\": [\n \"ALL\"\n ]\n \"PROFILE\": [\n \"ALL\"\n ]\n },\n \"additionalInfo\": {\n \"description\": \"Read-only permissions for everything, Write permissions for devices and own profile.\"\n }\n}\n```\n\nExample of Group Role with read-only permissions. Note that the group role has no association with the resources. The type of the resource is taken from the entity group that this role is assigned to: \n\n```json\n{\n \"name\": \"Entity Group Read-only User\",\n \"type\": \"GROUP\",\n \"permissions\": [\n \"READ\",\n \"RPC_CALL\",\n \"READ_CREDENTIALS\",\n \"READ_ATTRIBUTES\",\n \"READ_TELEMETRY\"\n ],\n \"additionalInfo\": {\n \"description\": \"Read-only permissions.\"\n }\n}\n```\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "saveRole", + "summary": "Save notification rule (saveNotificationRule)", + "description": "Creates or updates notification rule. \n\nMandatory properties are `name`, `templateId` (of a template with `notificationType` matching to rule's `triggerType`), `triggerType`, `triggerConfig` and `recipientConfig`. Additionally, you may specify rule `description` inside of `additionalConfig`.\n\nTrigger type of the rule cannot be changed. Available trigger types for tenant: `ENTITY_ACTION`, `ALARM`, `ALARM_COMMENT`, `ALARM_ASSIGNMENT`, `DEVICE_ACTIVITY`, `RULE_ENGINE_COMPONENT_LIFECYCLE_EVENT`.\nFor sysadmin, there are following trigger types available: `ENTITIES_LIMIT`, `API_USAGE_LIMIT`, `NEW_PLATFORM_VERSION`.\n\nHere is an example of notification rule to send notification when a device, asset or customer is created or deleted:\n```json\n{\n \"name\": \"Entity action\",\n \"templateId\": {\n \"entityType\": \"NOTIFICATION_TEMPLATE\",\n \"id\": \"32117320-d785-11ed-a06c-21dd57dd88ca\"\n },\n \"triggerType\": \"ENTITY_ACTION\",\n \"triggerConfig\": {\n \"entityTypes\": [\n \"CUSTOMER\",\n \"DEVICE\",\n \"ASSET\"\n ],\n \"created\": true,\n \"updated\": false,\n \"deleted\": true,\n \"triggerType\": \"ENTITY_ACTION\"\n },\n \"recipientsConfig\": {\n \"targets\": [\n \"320f2930-d785-11ed-a06c-21dd57dd88ca\"\n ],\n \"triggerType\": \"ENTITY_ACTION\"\n },\n \"additionalConfig\": {\n \"description\": \"Send notification to tenant admins or customer users when a device, asset or customer is created\"\n },\n \"templateName\": \"Entity action notification\",\n \"deliveryMethods\": [\n \"WEB\"\n ]\n}\n```\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "saveNotificationRule", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/NotificationRule" } } }, @@ -92662,7 +93400,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/NotificationRule" } } } @@ -92798,22 +93536,22 @@ ] } }, - "/api/role/{roleId}": { + "/api/notification/rule/{id}": { "get": { "tags": [ - "role-controller" + "notification-rule-controller" ], - "summary": "Get Role by Id (getRoleById)", - "description": "Fetch the Role object based on the provided Role Id. Role Contains a set of permissions. Role has two types. Generic Role may be assigned to the user group and will provide permissions for all entities of a certain type. Group Role may be assigned to both user and entity group and will provides permissions only for the entities that belong to specified entity group. The assignment of the Role to the User Group is done using [Group Permission Controller](/swagger-ui.html#/group-permission-controller). Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getRoleById", + "summary": "Get notification rule by id (getNotificationRuleById)", + "description": "Fetches notification rule info by rule's id.\nIn addition to regular notification rule fields, there are `templateName` and `deliveryMethods` in the response.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getNotificationRuleById", "parameters": [ { - "name": "roleId", + "name": "id", "in": "path", - "description": "A string value representing the role id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -92823,7 +93561,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/NotificationRuleInfo" } } } @@ -92960,19 +93698,19 @@ }, "delete": { "tags": [ - "role-controller" + "notification-rule-controller" ], - "summary": "Delete role (deleteRole)", - "description": "Deletes the role. Referencing non-existing role Id will cause an error.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", - "operationId": "deleteRole", + "summary": "Delete notification rule (deleteNotificationRule)", + "description": "Deletes notification rule by id.\nCancels all related scheduled notification requests (e.g. due to escalation table)\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "deleteNotificationRule", "parameters": [ { - "name": "roleId", + "name": "id", "in": "path", - "description": "A string value representing the role id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -93111,14 +93849,14 @@ ] } }, - "/api/roles": { + "/api/notification/rules": { "get": { "tags": [ - "role-controller" + "notification-rule-controller" ], - "summary": "Get Roles (getRoles)", - "description": "Returns a page of roles that are available for the current user. Role Contains a set of permissions. Role has two types. Generic Role may be assigned to the user group and will provide permissions for all entities of a certain type. Group Role may be assigned to both user and entity group and will provides permissions only for the entities that belong to specified entity group. The assignment of the Role to the User Group is done using [Group Permission Controller](/swagger-ui.html#/group-permission-controller).You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getRoles", + "summary": "Get notification rules (getNotificationRules)", + "description": "Returns the page of notification rules.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getNotificationRules", "parameters": [ { "name": "pageSize", @@ -93126,8 +93864,8 @@ "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string", - "minimum": 1 + "type": "integer", + "format": "int32" } }, { @@ -93136,27 +93874,14 @@ "description": "Sequence number of page starting from 0", "required": true, "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "type", - "in": "query", - "description": "Type of the role", - "required": false, - "schema": { - "type": "string", - "enum": [ - "GENERIC", - "GROUP" - ] + "type": "integer", + "format": "int32" } }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the role name.", + "description": "Case-insensitive 'substring' filter based on rule's name", "required": false, "schema": { "type": "string" @@ -93168,13 +93893,7 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "type", - "description" - ] + "type": "string" } }, { @@ -93183,11 +93902,7 @@ "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "string" } } ], @@ -93197,7 +93912,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataRole" + "$ref": "#/components/schemas/PageDataNotificationRuleInfo" } } } @@ -93333,38 +94048,31 @@ ] } }, - "/api/roles/list": { - "get": { + "/api/notification/target": { + "post": { "tags": [ - "role-controller" + "notification-target-controller" ], - "summary": "Get Roles By Ids (getRolesByIds)", - "description": "Returns the list of rows based on their ids. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getRolesByIds", - "parameters": [ - { - "name": "roleIds", - "in": "query", - "description": "A list of role ids, separated by comma ','", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string" + "summary": "Save notification target (saveNotificationTarget)", + "description": "Creates or updates notification target.\n\nAvailable `configuration` types are `PLATFORM_USERS` and `SLACK`.\nFor `PLATFORM_USERS` the `usersFilter` must be specified. For tenant, there are following users filter types available: `USER_LIST`, `CUSTOMER_USERS`, `USER_GROUP_LIST`, `TENANT_ADMINISTRATORS`, `USER_ROLE`, `ALL_USERS`, `ORIGINATOR_ENTITY_OWNER_USERS`, `AFFECTED_USER`.\nFor sysadmin: `TENANT_ADMINISTRATORS`, `AFFECTED_TENANT_ADMINISTRATORS`, `SYSTEM_ADMINISTRATORS`, `ALL_USERS`.\n\nHere is an example of tenant-level notification target to send notification to customer's users:\n```json\n{\n \"name\": \"Users of Customer A\",\n \"configuration\": {\n \"type\": \"PLATFORM_USERS\",\n \"usersFilter\": {\n \"type\": \"CUSTOMER_USERS\",\n \"customerId\": \"32499a20-d785-11ed-a06c-21dd57dd88ca\"\n },\n \"description\": \"Users of Customer A\"\n }\n}\n```\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "saveNotificationTarget", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationTarget" } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Role" - } + "$ref": "#/components/schemas/NotificationTarget" } } } @@ -93380,7 +94088,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -93500,31 +94208,41 @@ ] } }, - "/api/plugins/rpc/oneway/{deviceId}": { + "/api/notification/target/recipients": { "post": { "tags": [ - "rpc-v-1-controller" + "notification-target-controller" ], - "summary": "Send one-way RPC request (handleOneWayDeviceRPCRequestV1)", - "description": "Deprecated. See 'Rpc V 2 Controller' instead.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "handleOneWayDeviceRPCRequestV1", + "summary": "Get recipients for notification target config (getRecipientsForNotificationTargetConfig)", + "description": "Returns the page of recipients for such notification target configuration.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getRecipientsForNotificationTargetConfig", "parameters": [ { - "name": "deviceId", - "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } } ], "requestBody": { - "description": "A JSON object representing the RPC request.", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/NotificationTarget" } } }, @@ -93536,7 +94254,7 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/PageDataUser" } } } @@ -93672,43 +94390,32 @@ ] } }, - "/api/plugins/rpc/twoway/{deviceId}": { - "post": { + "/api/notification/target/{id}": { + "get": { "tags": [ - "rpc-v-1-controller" + "notification-target-controller" ], - "summary": "Send two-way RPC request (handleTwoWayDeviceRPCRequestV1)", - "description": "Deprecated. See 'Rpc V 2 Controller' instead.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "handleTwoWayDeviceRPCRequestV1", + "summary": "Get notification target by id (getNotificationTargetById)", + "description": "Fetches notification target by id.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getNotificationTargetById", "parameters": [ { - "name": "deviceId", + "name": "id", "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], - "requestBody": { - "description": "A JSON object representing the RPC request.", - "content": { - "text/plain": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/NotificationTarget" } } } @@ -93724,7 +94431,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -93842,85 +94549,73 @@ "ApiKeyForm": [] } ] - } - }, - "/api/rpc/oneway/{deviceId}": { - "post": { + }, + "delete": { "tags": [ - "rpc-v-2-controller" + "notification-target-controller" ], - "summary": "Send one-way RPC request (handleOneWayDeviceRPCRequestV2)", - "description": "Sends the one-way remote-procedure call (RPC) request to device. Sends the one-way remote-procedure call (RPC) request to device. The RPC call is A JSON that contains the method name ('method'), parameters ('params') and multiple optional fields. See example below. We will review the properties of the RPC call one-by-one below. \n\n```json\n{\n \"method\": \"setGpio\",\n \"params\": {\n \"pin\": 7,\n \"value\": 1\n },\n \"persistent\": false,\n \"timeout\": 5000\n}\n```\n\n### Server-side RPC structure\n\nThe body of server-side RPC request consists of multiple fields:\n\n* **method** - mandatory, name of the method to distinct the RPC calls.\n For example, \"getCurrentTime\" or \"getWeatherForecast\". The value of the parameter is a string.\n* **params** - mandatory, parameters used for processing of the request. The value is a JSON. Leave empty JSON \"{}\" if no parameters needed.\n* **timeout** - optional, value of the processing timeout in milliseconds. The default value is 10000 (10 seconds). The minimum value is 5000 (5 seconds).\n* **expirationTime** - optional, value of the epoch time (in milliseconds, UTC timezone). Overrides **timeout** if present.\n* **persistent** - optional, indicates persistent RPC. The default value is \"false\".\n* **retries** - optional, defines how many times persistent RPC will be re-sent in case of failures on the network and/or device side.\n* **additionalInfo** - optional, defines metadata for the persistent RPC that will be added to the persistent RPC events.\n\n### RPC Result\nIn case of persistent RPC, the result of this call is 'rpcId' UUID. In case of lightweight RPC, the result of this call is either 200 OK if the message was sent to device, or 504 Gateway Timeout if device is offline.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "handleOneWayDeviceRPCRequestV2", + "summary": "Delete notification target by id (deleteNotificationTargetById)", + "description": "Deletes notification target by its id.\n\nThis target cannot be referenced by existing scheduled notification requests or any notification rules.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "deleteNotificationTargetById", "parameters": [ { - "name": "deviceId", + "name": "id", "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], - "requestBody": { - "description": "A JSON object representing the RPC request.", - "content": { - "text/plain": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "Persistent RPC request was saved to the database or lightweight RPC request was sent to the device.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } + "description": "OK" }, "400": { - "description": "Invalid structure of the request.", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } }, "401": { - "description": "User is not authorized to send the RPC request. Most likely, User belongs to different Customer or Tenant.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "413": { - "description": "Request payload is too large", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "504": { - "description": "Timeout to process the RPC call. Most likely, device is offline.", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } @@ -94008,24 +94703,15 @@ ] } }, - "/api/rpc/persistent/device/{deviceId}": { + "/api/notification/targets": { "get": { "tags": [ - "rpc-v-2-controller" + "notification-target-controller" ], - "summary": "Get persistent RPC requests", - "description": "Allows to query RPC calls for specific device using pagination.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getPersistedRpcByDevice", + "summary": "Get notification targets (getNotificationTargets)", + "description": "Returns the page of notification targets owned by sysadmin or tenant.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getNotificationTargets", "parameters": [ - { - "name": "deviceId", - "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "pageSize", "in": "query", @@ -94046,28 +94732,10 @@ "format": "int32" } }, - { - "name": "rpcStatus", - "in": "query", - "description": "Status of the RPC", - "required": false, - "schema": { - "type": "string", - "enum": [ - "QUEUED", - "SENT", - "DELIVERED", - "SUCCESSFUL", - "TIMEOUT", - "EXPIRED", - "FAILED" - ] - } - }, { "name": "textSearch", "in": "query", - "description": "Not implemented. Leave empty.", + "description": "Case-insensitive 'substring' filed based on the target's name", "required": false, "schema": { "type": "string" @@ -94079,13 +94747,7 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string", - "enum": [ - "createdTime", - "expirationTime", - "request", - "response" - ] + "type": "string" } }, { @@ -94094,11 +94756,7 @@ "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "string" } } ], @@ -94108,7 +94766,7 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/PageDataNotificationTarget" } } } @@ -94244,22 +94902,25 @@ ] } }, - "/api/rpc/persistent/{rpcId}": { + "/api/notification/targets/list": { "get": { "tags": [ - "rpc-v-2-controller" + "notification-target-controller" ], - "summary": "Get persistent RPC request", - "description": "Get information about the status of the RPC call.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getPersistedRpc", + "summary": "Get notification targets by ids (getNotificationTargetsByIds)", + "description": "Returns the list of notification targets found by provided ids.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getNotificationTargetsByIds", "parameters": [ { - "name": "rpcId", - "in": "path", - "description": "A string value representing the rpc id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "ids", + "in": "query", + "description": "Comma-separated list of uuids representing targets ids", "required": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], @@ -94269,7 +94930,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Rpc" + "type": "array", + "items": { + "$ref": "#/components/schemas/NotificationTarget" + } } } } @@ -94403,20 +95067,69 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/notification/targets/notificationType/{notificationType}": { + "get": { "tags": [ - "rpc-v-2-controller" + "notification-target-controller" ], - "summary": "Delete persistent RPC", - "description": "Deletes the persistent RPC request.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "deleteRpc", + "summary": "Get notification targets by supported notification type (getNotificationTargetsBySupportedNotificationType)", + "description": "Returns the page of notification targets filtered by notification type that they can be used for.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getNotificationTargetsBySupportedNotificationType", "parameters": [ { - "name": "rpcId", + "name": "notificationType", "in": "path", - "description": "A string value representing the rpc id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "Notification type to filter targets by", "required": true, + "schema": { + "$ref": "#/components/schemas/NotificationType" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Case-insensitive 'substring' filed based on the target's name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, "schema": { "type": "string" } @@ -94424,7 +95137,14 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataNotificationTarget" + } + } + } }, "400": { "description": "Bad Request", @@ -94557,83 +95277,91 @@ ] } }, - "/api/rpc/twoway/{deviceId}": { - "post": { + "/api/notification/slack/conversations": { + "get": { "tags": [ - "rpc-v-2-controller" + "notification-template-controller" ], - "summary": "Send two-way RPC request (handleTwoWayDeviceRPCRequestV2)", - "description": "Sends the two-way remote-procedure call (RPC) request to device. Sends the one-way remote-procedure call (RPC) request to device. The RPC call is A JSON that contains the method name ('method'), parameters ('params') and multiple optional fields. See example below. We will review the properties of the RPC call one-by-one below. \n\n```json\n{\n \"method\": \"setGpio\",\n \"params\": {\n \"pin\": 7,\n \"value\": 1\n },\n \"persistent\": false,\n \"timeout\": 5000\n}\n```\n\n### Server-side RPC structure\n\nThe body of server-side RPC request consists of multiple fields:\n\n* **method** - mandatory, name of the method to distinct the RPC calls.\n For example, \"getCurrentTime\" or \"getWeatherForecast\". The value of the parameter is a string.\n* **params** - mandatory, parameters used for processing of the request. The value is a JSON. Leave empty JSON \"{}\" if no parameters needed.\n* **timeout** - optional, value of the processing timeout in milliseconds. The default value is 10000 (10 seconds). The minimum value is 5000 (5 seconds).\n* **expirationTime** - optional, value of the epoch time (in milliseconds, UTC timezone). Overrides **timeout** if present.\n* **persistent** - optional, indicates persistent RPC. The default value is \"false\".\n* **retries** - optional, defines how many times persistent RPC will be re-sent in case of failures on the network and/or device side.\n* **additionalInfo** - optional, defines metadata for the persistent RPC that will be added to the persistent RPC events.\n\n### RPC Result\nIn case of persistent RPC, the result of this call is 'rpcId' UUID. In case of lightweight RPC, the result of this call is the response from device, or 504 Gateway Timeout if device is offline.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "handleTwoWayDeviceRPCRequestV2", + "summary": "List Slack conversations (listSlackConversations)", + "description": "List available Slack conversations by type.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "listSlackConversations", "parameters": [ { - "name": "deviceId", - "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "type", + "in": "query", "required": true, + "schema": { + "$ref": "#/components/schemas/SlackConversationType" + } + }, + { + "name": "token", + "in": "query", + "description": "Slack bot token. If absent - system Slack settings will be used", + "required": false, "schema": { "type": "string" } } ], - "requestBody": { - "description": "A JSON object representing the RPC request.", - "content": { - "text/plain": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "Persistent RPC request was saved to the database or lightweight RPC response received.", + "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/SlackConversation" + } } } } }, "400": { - "description": "Invalid structure of the request.", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } }, "401": { - "description": "User is not authorized to send the RPC request. Most likely, User belongs to different Customer or Tenant.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "413": { - "description": "Request payload is too large", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "504": { - "description": "Timeout to process the RPC call. Most likely, device is offline.", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } @@ -94721,39 +95449,31 @@ ] } }, - "/api/edge/{edgeId}/ruleChain/{ruleChainId}": { + "/api/notification/template": { "post": { "tags": [ - "rule-chain-controller" + "notification-template-controller" ], - "summary": "Assign rule chain to edge (assignRuleChainToEdge)", - "description": "Creates assignment of an existing rule chain to an instance of The Edge. Assignment works in async way - first, notification event pushed to edge service queue on platform. Second, remote edge service will receive a copy of assignment rule chain (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once rule chain will be delivered to edge service, it's going to start processing messages locally. \n\nOnly rule chain with type 'EDGE' can be assigned to edge.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "assignRuleChainToEdge", - "parameters": [ - { - "name": "edgeId", - "in": "path", - "required": true, - "schema": { - "type": "string" + "summary": "Save notification template (saveNotificationTemplate)", + "description": "Creates or updates notification template.\n\nHere is an example of template to send notification via Web, SMS and Slack:\n```json\n{\n \"name\": \"Greetings\",\n \"notificationType\": \"GENERAL\",\n \"configuration\": {\n \"deliveryMethodsTemplates\": {\n \"WEB\": {\n \"enabled\": true,\n \"subject\": \"Greetings\",\n \"body\": \"Hi there, ${recipientTitle}\",\n \"additionalConfig\": {\n \"icon\": {\n \"enabled\": true,\n \"icon\": \"back_hand\",\n \"color\": \"#757575\"\n },\n \"actionButtonConfig\": {\n \"enabled\": false\n }\n },\n \"method\": \"WEB\"\n },\n \"SMS\": {\n \"enabled\": true,\n \"body\": \"Hi there, ${recipientTitle}\",\n \"method\": \"SMS\"\n },\n \"SLACK\": {\n \"enabled\": true,\n \"body\": \"Hi there, @${recipientTitle}\",\n \"method\": \"SLACK\"\n }\n }\n }\n}\n```\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "saveNotificationTemplate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationTemplate" + } } }, - { - "name": "ruleChainId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RuleChain" + "$ref": "#/components/schemas/NotificationTemplate" } } } @@ -94887,29 +95607,24 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/notification/template/{id}": { + "get": { "tags": [ - "rule-chain-controller" + "notification-template-controller" ], - "summary": "Unassign rule chain from edge (unassignRuleChainFromEdge)", - "description": "Clears assignment of the rule chain to the edge. Unassignment works in async way - first, 'unassign' notification event pushed to edge queue on platform. Second, remote edge service will receive an 'unassign' command to remove rule chain (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once 'unassign' command will be delivered to edge service, it's going to remove rule chain locally.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "unassignRuleChainFromEdge", + "summary": "Get notification template by id (getNotificationTemplateById)", + "description": "Fetches notification template by id.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getNotificationTemplateById", "parameters": [ { - "name": "edgeId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "ruleChainId", + "name": "id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -94919,7 +95634,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RuleChain" + "$ref": "#/components/schemas/NotificationTemplate" } } } @@ -95053,93 +95768,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/edge/{edgeId}/ruleChains": { - "get": { + }, + "delete": { "tags": [ - "rule-chain-controller" + "notification-template-controller" ], - "summary": "Get Edge Rule Chains (getEdgeRuleChains)", - "description": "Returns a page of Rule Chains assigned to the specified edge. The rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getEdgeRuleChains", + "summary": "Delete notification template by id (deleteNotificationTemplateById", + "description": "Deletes notification template by its id.\n\nThis template cannot be referenced by existing scheduled notification requests or any notification rules.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "deleteNotificationTemplateById", "parameters": [ { - "name": "edgeId", + "name": "id", "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the rule chain name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "root" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, "schema": { "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "format": "uuid" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataRuleChain" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -95272,31 +95922,82 @@ ] } }, - "/api/ruleChain": { - "post": { + "/api/notification/templates": { + "get": { "tags": [ - "rule-chain-controller" + "notification-template-controller" ], - "summary": "Create Or Update Rule Chain (saveRuleChain)", - "description": "Create or update the Rule Chain. When creating Rule Chain, platform generates Rule Chain Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Rule Chain Id will be present in the response. Specify existing Rule Chain id to update the rule chain. Referencing non-existing rule chain Id will cause 'Not Found' error.\n\nThe rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.Remove 'id', 'tenantId' from the request body example (below) to create new Rule Chain entity.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "saveRuleChain", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleChain" - } + "summary": "Get notification templates (getNotificationTemplates)", + "description": "Returns the page of notification templates owned by sysadmin or tenant.\n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getNotificationTemplates", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "required": true - }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Case-insensitive 'substring' filter based on template's name and notification type", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "notificationTypes", + "in": "query", + "description": "Comma-separated list of notification types to filter the templates", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RuleChain" + "$ref": "#/components/schemas/PageDataNotificationTemplate" } } } @@ -95312,7 +96013,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -95432,14 +96133,14 @@ ] } }, - "/api/ruleChain/autoAssignToEdgeRuleChains": { + "/api/oauth2/config/template": { "get": { "tags": [ - "rule-chain-controller" + "o-auth-2-config-template-controller" ], - "summary": "Get Auto Assign To Edge Rule Chains (getAutoAssignToEdgeRuleChains)", - "description": "Returns a list of Rule Chains that will be assigned to a newly created edge. The rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getAutoAssignToEdgeRuleChains", + "summary": "Get the list of all OAuth2 client registration templates (getOAuth2ClientRegistrationTemplates)\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "description": "Client registration template is OAuth2 provider configuration template with default settings for registering new OAuth2 clients", + "operationId": "getOAuth2ClientRegistrationTemplates", "responses": { "200": { "description": "OK", @@ -95448,7 +96149,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/RuleChain" + "$ref": "#/components/schemas/OAuth2ClientRegistrationTemplate" } } } @@ -95583,21 +96284,19 @@ "ApiKeyForm": [] } ] - } - }, - "/api/ruleChain/device/default": { + }, "post": { "tags": [ - "rule-chain-controller" + "o-auth-2-config-template-controller" ], - "summary": "Create Default Rule Chain (setDeviceDefaultRuleChain)", - "description": "Create rule chain from template, based on the specified name in the request. Creates the rule chain based on the template that is used to create root rule chain. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "setDeviceDefaultRuleChain", + "summary": "Create or update OAuth2 client registration template (saveClientRegistrationTemplate)\n\nAvailable for users with 'SYS_ADMIN' authority.", + "description": "Client registration template is OAuth2 provider configuration template with default settings for registering new OAuth2 clients", + "operationId": "saveClientRegistrationTemplate", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DefaultRuleChainCreateRequest" + "$ref": "#/components/schemas/OAuth2ClientRegistrationTemplate" } } }, @@ -95609,7 +96308,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RuleChain" + "$ref": "#/components/schemas/OAuth2ClientRegistrationTemplate" } } } @@ -95745,46 +96444,29 @@ ] } }, - "/api/ruleChain/metadata": { - "post": { + "/api/oauth2/config/template/{clientRegistrationTemplateId}": { + "delete": { "tags": [ - "rule-chain-controller" + "o-auth-2-config-template-controller" ], - "summary": "Update Rule Chain Metadata", - "description": "Updates the rule chain metadata. The metadata object contains information about the rule nodes and their connections.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "saveRuleChainMetaData", + "summary": "Delete OAuth2 client registration template by id (deleteClientRegistrationTemplate)\n\nAvailable for users with 'SYS_ADMIN' authority.", + "description": "Client registration template is OAuth2 provider configuration template with default settings for registering new OAuth2 clients", + "operationId": "deleteClientRegistrationTemplate", "parameters": [ { - "name": "updateRelated", - "in": "query", - "description": "Update related rule nodes.", - "required": false, + "name": "clientRegistrationTemplateId", + "in": "path", + "description": "String representation of client registration template id to delete", + "required": true, "schema": { - "type": "boolean", - "default": true - } + "type": "string" + }, + "example": "139b1f81-2f5d-11ec-9dbe-9b627e1a88f4" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleChainMetaData" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleChainMetaData" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -95797,7 +96479,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -95917,21 +96599,49 @@ ] } }, - "/api/ruleChain/tbelEnabled": { - "get": { + "/api/noauth/oauth2Clients": { + "post": { "tags": [ - "rule-chain-controller" + "o-auth-2-controller" + ], + "summary": "Get OAuth2 clients (getOAuth2Clients)", + "description": "Get the list of OAuth2 clients to log in with, available for such domain scheme (HTTP or HTTPS) (if x-forwarded-proto request header is present - the scheme is known from it) and domain name and port (port may be known from x-forwarded-port header)", + "operationId": "getOAuth2Clients", + "parameters": [ + { + "name": "pkgName", + "in": "query", + "description": "Mobile application package name, to find OAuth2 clients where there is configured mobile application with such package name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform type to search OAuth2 clients for which the usage with this platform type is allowed in the settings. If platform type is not one of allowable values - it will just be ignored", + "required": false, + "schema": { + "type": "string", + "enum": [ + "WEB", + "ANDROID", + "IOS" + ] + } + } ], - "summary": "Is TBEL script executor enabled", - "description": "Returns 'True' if the TBEL script execution is enabled\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "isTbelEnabled", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "boolean" + "type": "array", + "items": { + "$ref": "#/components/schemas/OAuth2ClientLoginInfo" + } } } } @@ -95947,7 +96657,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -96056,42 +96766,22 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/ruleChain/testScript": { + "/api/oauth2/client": { "post": { "tags": [ - "rule-chain-controller" - ], - "summary": "Test Script function", - "description": "Execute the Script function and return the result. The format of request: \n\n```json\n{\n \"script\": \"Your Function as String\",\n \"scriptType\": \"One of: update, generate, filter, switch, json, string\",\n \"argNames\": [\"msg\", \"metadata\", \"type\"],\n \"msg\": \"{\\\"temperature\\\": 42}\", \n \"metadata\": {\n \"deviceName\": \"Device A\",\n \"deviceType\": \"Thermometer\"\n },\n \"msgType\": \"POST_TELEMETRY_REQUEST\"\n}\n```\n\n Expected result JSON contains \"output\" and \"error\".\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "testRuleChainScript", - "parameters": [ - { - "name": "scriptLang", - "in": "query", - "description": "Script language: JS or TBEL", - "required": false, - "schema": { - "$ref": "#/components/schemas/ScriptLanguage" - } - } + "o-auth-2-controller" ], + "summary": "Save OAuth2 Client (saveOAuth2Client)", + "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "saveOAuth2Client", "requestBody": { - "description": "Test JS request. See API call description above.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/OAuth2Client" } } }, @@ -96103,7 +96793,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/OAuth2Client" } } } @@ -96239,20 +96929,58 @@ ] } }, - "/api/ruleChain/{ruleChainId}": { + "/api/oauth2/client/infos": { "get": { "tags": [ - "rule-chain-controller" + "o-auth-2-controller" ], - "summary": "Get Rule Chain (getRuleChainById)", - "description": "Fetch the Rule Chain object based on the provided Rule Chain Id. The rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getRuleChainById", + "summary": "Get OAuth2 Client infos (findOAuth2ClientInfos)", + "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "findOAuth2ClientInfos", "parameters": [ { - "name": "ruleChainId", - "in": "path", - "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Case-insensitive 'substring' filter based on client's title", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, "schema": { "type": "string" } @@ -96264,7 +96992,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RuleChain" + "$ref": "#/components/schemas/PageDataOAuth2ClientInfo" } } } @@ -96398,28 +97126,43 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/oauth2/client/list": { + "get": { "tags": [ - "rule-chain-controller" + "o-auth-2-controller" ], - "summary": "Delete rule chain (deleteRuleChain)", - "description": "Deletes the rule chain. Referencing non-existing rule chain Id will cause an error. Referencing rule chain that is used in the device profiles will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "deleteRuleChain", + "summary": "Get OAuth2 Client infos By Ids (findTenantOAuth2ClientInfosByIds)", + "description": "Fetch OAuth2 Client info objects based on the provided ids. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "findTenantOAuth2ClientInfosByIds", "parameters": [ { - "name": "ruleChainId", - "in": "path", - "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "clientIds", + "in": "query", + "description": "A list of oauth2 ids, separated by comma ','", "required": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OAuth2ClientInfo" + } + } + } + } }, "400": { "description": "Bad Request", @@ -96552,22 +97295,22 @@ ] } }, - "/api/ruleChain/{ruleChainId}/autoAssignToEdge": { - "post": { + "/api/oauth2/client/{id}": { + "get": { "tags": [ - "rule-chain-controller" + "o-auth-2-controller" ], - "summary": "Set Auto Assign To Edge Rule Chain (setAutoAssignToEdgeRuleChain)", - "description": "Makes the rule chain to be automatically assigned for any new edge that will be created. Does not assign this rule chain for already created edges. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "setAutoAssignToEdgeRuleChain", + "summary": "Get OAuth2 Client by id (getOAuth2ClientById)", + "description": "\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getOAuth2ClientById", "parameters": [ { - "name": "ruleChainId", + "name": "id", "in": "path", - "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -96577,7 +97320,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RuleChain" + "$ref": "#/components/schemas/OAuth2Client" } } } @@ -96593,7 +97336,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -96714,32 +97457,25 @@ }, "delete": { "tags": [ - "rule-chain-controller" + "o-auth-2-controller" ], - "summary": "Unset Auto Assign To Edge Rule Chain (unsetAutoAssignToEdgeRuleChain)", - "description": "Removes the rule chain from the list of rule chains that are going to be automatically assigned for any new edge that will be created. Does not unassign this rule chain for already assigned edges. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "unsetAutoAssignToEdgeRuleChain", + "summary": "Delete oauth2 client (deleteOauth2Client)", + "description": "Deletes the oauth2 client. Referencing non-existing oauth2 client Id will cause an error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "deleteOauth2Client", "parameters": [ { - "name": "ruleChainId", + "name": "id", "in": "path", - "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleChain" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -96872,32 +97608,21 @@ ] } }, - "/api/ruleChain/{ruleChainId}/edgeTemplateRoot": { - "post": { + "/api/oauth2/loginProcessingUrl": { + "get": { "tags": [ - "rule-chain-controller" - ], - "summary": "Set Edge Template Root Rule Chain (setEdgeTemplateRootRuleChain)", - "description": "Makes the rule chain to be root rule chain for any new edge that will be created. Does not update root rule chain for already created edges. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "setEdgeTemplateRootRuleChain", - "parameters": [ - { - "name": "ruleChainId", - "in": "path", - "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - } + "o-auth-2-controller" ], + "summary": "Get OAuth2 log in processing URL (getLoginProcessingUrl)", + "description": "Returns the URL enclosed in double quotes. After successful authentication with OAuth2 provider, it makes a redirect to this path so that the platform can do further log in processing. This URL may be configured as 'security.oauth2.loginProcessingUrl' property in yml configuration file, or as 'SECURITY_OAUTH2_LOGIN_PROCESSING_URL' env variable. By default it is '/login/oauth2/code/'\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getLoginProcessingUrl", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RuleChain" + "type": "string" } } } @@ -96913,7 +97638,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -97033,32 +97758,31 @@ ] } }, - "/api/ruleChain/{ruleChainId}/metadata": { - "get": { + "/api/otaPackage": { + "post": { "tags": [ - "rule-chain-controller" + "ota-package-controller" ], - "summary": "Get Rule Chain (getRuleChainById)", - "description": "Fetch the Rule Chain Metadata object based on the provided Rule Chain Id. The metadata object contains information about the rule nodes and their connections.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getRuleChainMetaData", - "parameters": [ - { - "name": "ruleChainId", - "in": "path", - "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "Create Or Update OTA Package Info (saveOtaPackageInfo)", + "description": "Create or update the OTA Package Info. When creating OTA Package Info, platform generates OTA Package id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created OTA Package id will be present in the response. Specify existing OTA Package id to update the OTA Package Info. Referencing non-existing OTA Package Id will cause 'Not Found' error. \n\nOTA Package combination of the title with the version is unique in the scope of tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveOtaPackageInfo", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SaveOtaPackageInfoRequest" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RuleChainMetaData" + "$ref": "#/components/schemas/OtaPackageInfo" } } } @@ -97074,7 +97798,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -97194,19 +97918,19 @@ ] } }, - "/api/ruleChain/{ruleChainId}/output/labels": { + "/api/otaPackage/info/{otaPackageId}": { "get": { "tags": [ - "rule-chain-controller" + "ota-package-controller" ], - "summary": "Get Rule Chain output labels (getRuleChainOutputLabels)", - "description": "Fetch the unique labels for the \"output\" Rule Nodes that belong to the Rule Chain based on the provided Rule Chain Id. The rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getRuleChainOutputLabels", + "summary": "Get OTA Package Info (getOtaPackageInfoById)", + "description": "Fetch the OTA Package Info object based on the provided OTA Package Id. OTA Package Info is a lightweight object that includes main information about the OTA Package excluding the heavyweight data. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getOtaPackageInfoById", "parameters": [ { - "name": "ruleChainId", + "name": "otaPackageId", "in": "path", - "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the ota package id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -97219,11 +97943,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true + "$ref": "#/components/schemas/OtaPackageInfo" } } } @@ -97359,19 +98079,19 @@ ] } }, - "/api/ruleChain/{ruleChainId}/output/labels/usage": { + "/api/otaPackage/{otaPackageId}": { "get": { "tags": [ - "rule-chain-controller" + "ota-package-controller" ], - "summary": "Get output labels usage (getRuleChainOutputLabelsUsage)", - "description": "Fetch the list of rule chains and the relation types (labels) they use to process output of the current rule chain based on the provided Rule Chain Id. The rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getRuleChainOutputLabelsUsage", + "summary": "Get OTA Package (getOtaPackageById)", + "description": "Fetch the OTA Package object based on the provided OTA Package Id. The server checks that the OTA Package is owned by the same tenant. OTA Package is a heavyweight object that includes main information about the OTA Package and also data. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getOtaPackageById", "parameters": [ { - "name": "ruleChainId", + "name": "otaPackageId", "in": "path", - "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the ota package id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -97384,10 +98104,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RuleChainOutputLabelsUsage" - } + "$ref": "#/components/schemas/OtaPackage" } } } @@ -97521,34 +98238,78 @@ "ApiKeyForm": [] } ] - } - }, - "/api/ruleChain/{ruleChainId}/root": { + }, "post": { "tags": [ - "rule-chain-controller" + "ota-package-controller" ], - "summary": "Set Root Rule Chain (setRootRuleChain)", - "description": "Makes the rule chain to be root rule chain. Updates previous root rule chain as well. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "setRootRuleChain", + "summary": "Save OTA Package data (saveOtaPackageData)", + "description": "Update the OTA Package. Adds the date to the existing OTA Package Info\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveOtaPackageData", "parameters": [ { - "name": "ruleChainId", + "name": "otaPackageId", "in": "path", - "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the ota package id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } + }, + { + "name": "checksum", + "in": "query", + "description": "OTA Package checksum. For example, '0xd87f7e0c'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "checksumAlgorithm", + "in": "query", + "description": "OTA Package checksum algorithm.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "MD5", + "SHA256", + "SHA384", + "SHA512", + "CRC32", + "MURMUR3_32", + "MURMUR3_128" + ] + } } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary", + "description": "OTA Package data." + } + }, + "required": [ + "file" + ] + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RuleChain" + "$ref": "#/components/schemas/OtaPackageInfo" } } } @@ -97682,97 +98443,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/ruleChains": { - "get": { + }, + "delete": { "tags": [ - "rule-chain-controller" + "ota-package-controller" ], - "summary": "Get Rule Chains (getRuleChains)", - "description": "Returns a page of Rule Chains owned by tenant. The rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getRuleChains", + "summary": "Delete OTA Package (deleteOtaPackage)", + "description": "Deletes the OTA Package. Referencing non-existing OTA Package Id will cause an error. Can't delete the OTA Package if it is referenced by existing devices or device profile.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "deleteOtaPackage", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "otaPackageId", + "in": "path", + "description": "A string value representing the ota package id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "type", - "in": "query", - "description": "Rule chain type (CORE or EDGE)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "CORE", - "EDGE" - ] - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the rule chain name.", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "root" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataRuleChain" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -97905,23 +98597,22 @@ ] } }, - "/api/ruleChains/export": { + "/api/otaPackage/{otaPackageId}/download": { "get": { "tags": [ - "rule-chain-controller" + "ota-package-controller" ], - "summary": "Export Rule Chains", - "description": "Exports all tenant rule chains as one JSON.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "exportRuleChains", + "summary": "Download OTA Package (downloadOtaPackage)", + "description": "Download OTA Package based on the provided OTA Package Id.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "downloadOtaPackage", "parameters": [ { - "name": "limit", - "in": "query", - "description": "A limit of rule chains to export.", + "name": "otaPackageId", + "in": "path", + "description": "A string value representing the ota package id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string" } } ], @@ -97931,7 +98622,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RuleChainData" + "type": "string", + "format": "binary" } } } @@ -98067,46 +98759,85 @@ ] } }, - "/api/ruleChains/import": { - "post": { + "/api/otaPackages": { + "get": { "tags": [ - "rule-chain-controller" + "ota-package-controller" ], - "summary": "Import Rule Chains", - "description": "Imports all tenant rule chains as one JSON.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "importRuleChains", + "summary": "Get OTA Package Infos (getOtaPackages)", + "description": "Returns a page of OTA Package Info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. OTA Package Info is a lightweight object that includes main information about the OTA Package excluding the heavyweight data. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getOtaPackages", "parameters": [ { - "name": "overwrite", + "name": "pageSize", "in": "query", - "description": "Enables overwrite for existing rule chains with the same name.", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the ota package title.", "required": false, "schema": { - "type": "boolean", - "default": false + "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RuleChainData" - } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "type", + "title", + "version", + "tag", + "url", + "fileName", + "dataSize", + "checksum" + ] } }, - "required": true - }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RuleChainImportResult" - } + "$ref": "#/components/schemas/PageDataOtaPackageInfo" } } } @@ -98122,7 +98853,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -98242,25 +98973,97 @@ ] } }, - "/api/ruleChains/list": { + "/api/otaPackages/group/{groupId}/{type}": { "get": { "tags": [ - "rule-chain-controller" + "ota-package-controller" ], - "summary": "Get Rule Chains By Ids (getRuleChainsByIds)", - "description": "Requested rule chains must be owned by tenant which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getRuleChainsByIds", + "summary": "Get group OTA Package Infos (getGroupOtaPackages)", + "description": "Returns a page of OTA Package Info objects owned by tenant, and by entity group. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. OTA Package Info is a lightweight object that includes main information about the OTA Package excluding the heavyweight data. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getGroupOtaPackages", "parameters": [ { - "name": "ruleChainIds", + "name": "groupId", + "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "path", + "description": "OTA Package type.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "FIRMWARE", + "SOFTWARE" + ] + } + }, + { + "name": "pageSize", "in": "query", - "description": "A list of rule chain ids, separated by comma ','", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the ota package title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "type", + "title", + "version", + "tag", + "url", + "fileName", + "dataSize", + "checksum" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -98270,10 +99073,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RuleChain" - } + "$ref": "#/components/schemas/PageDataOtaPackageInfo" } } } @@ -98409,23 +99209,98 @@ ] } }, - "/api/ruleNode/{ruleNodeId}/debugIn": { + "/api/otaPackages/{deviceProfileId}/{type}": { "get": { "tags": [ - "rule-chain-controller" + "ota-package-controller" ], - "summary": "Get latest input message (getLatestRuleNodeDebugInput)", - "description": "Gets the input message from the debug events for specified Rule Chain Id. Referencing non-existing rule chain Id will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getLatestRuleNodeDebugInput", + "summary": "Get OTA Package Infos by Device Profile and Type (getOtaPackagesByDeviceProfileAndType)", + "description": "Returns a page of OTA Package Info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. OTA Package Info is a lightweight object that includes main information about the OTA Package excluding the heavyweight data. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getOtaPackagesByDeviceProfileAndType", "parameters": [ { - "name": "ruleNodeId", + "name": "deviceProfileId", "in": "path", - "description": "A string value representing the rule node id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "path", + "description": "OTA Package type.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "FIRMWARE", + "SOFTWARE" + ] + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the ota package title.", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "type", + "title", + "version", + "tag", + "url", + "fileName", + "dataSize", + "checksum" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -98434,7 +99309,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/PageDataOtaPackageInfo" } } } @@ -98570,35 +99445,59 @@ ] } }, - "/api/rule-engine/": { + "/api/owner/CUSTOMER/{ownerId}/{entityType}/{entityId}": { "post": { "tags": [ - "rule-engine-controller" + "owner-controller" + ], + "summary": "Change owner to customer (changeOwnerToCustomer)", + "description": "Tenant/Customer changes Owner to Customer or sub-Customer. Sub-Customer can`t perform this operation! \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "changeOwnerToCustomer", + "parameters": [ + { + "name": "ownerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Push user message to the rule engine (handleRuleEngineRequestForUser)", - "description": "Creates the Message with type 'REST_API_REQUEST' and payload taken from the request body. Uses current User Id ( the one which credentials is used to perform the request) as the Rule Engine message originator. This method allows you to extend the regular platform API with the power of Rule Engine. You may use default and custom rule nodes to handle the message. The generated message contains two important metadata fields:\n\n * **'serviceId'** to identify the platform server that received the request;\n * **'requestUUID'** to identify the request and route possible response from the Rule Engine;\n\nUse **'rest call reply'** rule node to push the reply from rule engine back as a REST API call response. The default timeout of the request processing is 10 seconds.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "handleRuleEngineRequestForUser", "requestBody": { - "description": "A JSON object representing the message.", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "type": "array", + "description": "An optional list of additional entity group ids", + "items": { + "type": "string" + } } } - }, - "required": true + } }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -98731,15 +99630,24 @@ ] } }, - "/api/rule-engine/{entityType}/{entityId}": { + "/api/owner/TENANT/{ownerId}/{entityType}/{entityId}": { "post": { "tags": [ - "rule-engine-controller" + "owner-controller" ], - "summary": "Push entity message to the rule engine (handleRuleEngineRequestForEntity)", - "description": "Creates the Message with type 'REST_API_REQUEST' and payload taken from the request body. Uses specified Entity Id as the Rule Engine message originator. This method allows you to extend the regular platform API with the power of Rule Engine. You may use default and custom rule nodes to handle the message. The generated message contains two important metadata fields:\n\n * **'serviceId'** to identify the platform server that received the request;\n * **'requestUUID'** to identify the request and route possible response from the Rule Engine;\n\nUse **'rest call reply'** rule node to push the reply from rule engine back as a REST API call response. The default timeout of the request processing is 10 seconds.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "handleRuleEngineRequestForEntity", + "summary": "Change owner to tenant (changeOwnerToTenant)", + "description": "Tenant changes Owner from Customer or sub-Customer to Tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "changeOwnerToTenant", "parameters": [ + { + "name": "ownerId", + "in": "path", + "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "entityType", "in": "path", @@ -98760,26 +99668,21 @@ } ], "requestBody": { - "description": "A JSON object representing the message.", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "type": "array", + "description": "An optional list of additional entity group ids", + "items": { + "type": "string" + } } } - }, - "required": true + } }, "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -98912,69 +99815,19 @@ ] } }, - "/api/rule-engine/{entityType}/{entityId}/{queueName}/{timeout}": { - "post": { + "/api/mobile/qr/deepLink": { + "get": { "tags": [ - "rule-engine-controller" - ], - "summary": "Push entity message with timeout and specified queue to the rule engine (handleRuleEngineRequestForEntityWithQueueAndTimeout)", - "description": "Creates the Message with type 'REST_API_REQUEST' and payload taken from the request body. Uses specified Entity Id as the Rule Engine message originator. This method allows you to extend the regular platform API with the power of Rule Engine. You may use default and custom rule nodes to handle the message. The generated message contains two important metadata fields:\n\n * **'serviceId'** to identify the platform server that received the request;\n * **'requestUUID'** to identify the request and route possible response from the Rule Engine;\n\nUse **'rest call reply'** rule node to push the reply from rule engine back as a REST API call response. If request sent for Device/Device Profile or Asset/Asset Profile entity, specified queue will be used instead of the queue selected in the device or asset profile. The platform expects the timeout value in milliseconds.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "handleRuleEngineRequestForEntityWithQueueAndTimeout", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "queueName", - "in": "path", - "description": "Queue name to process the request in the rule engine", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "timeout", - "in": "path", - "description": "Timeout to process the request in milliseconds", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - } + "qr-code-settings-controller" ], - "requestBody": { - "description": "A JSON object representing the message.", - "content": { - "text/plain": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, + "summary": "Get the deep link to the associated mobile application (getMobileAppDeepLink)", + "description": "Fetch the url that takes user to linked mobile application \n\nAvailable for any authorized user. ", + "operationId": "getMobileAppDeepLink", "responses": { "200": { "description": "OK", "content": { - "application/json": { + "text/plain": { "schema": { "type": "string" } @@ -98992,7 +99845,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -99112,62 +99965,21 @@ ] } }, - "/api/rule-engine/{entityType}/{entityId}/{timeout}": { - "post": { + "/api/mobile/qr/merged": { + "get": { "tags": [ - "rule-engine-controller" - ], - "summary": "Push entity message with timeout to the rule engine (handleRuleEngineRequestForEntityWithTimeout)", - "description": "Creates the Message with type 'REST_API_REQUEST' and payload taken from the request body. Uses specified Entity Id as the Rule Engine message originator. This method allows you to extend the regular platform API with the power of Rule Engine. You may use default and custom rule nodes to handle the message. The generated message contains two important metadata fields:\n\n * **'serviceId'** to identify the platform server that received the request;\n * **'requestUUID'** to identify the request and route possible response from the Rule Engine;\n\nUse **'rest call reply'** rule node to push the reply from rule engine back as a REST API call response. The platform expects the timeout value in milliseconds.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "handleRuleEngineRequestForEntityWithTimeout", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "timeout", - "in": "path", - "description": "Timeout to process the request in milliseconds", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - } + "qr-code-settings-controller" ], - "requestBody": { - "description": "A JSON object representing the message.", - "content": { - "text/plain": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, + "summary": "Get QR code configuration for home page (getMergedMobileAppSettings)", + "description": "The response payload contains ui configuration of qr code\n\nAvailable for any authorized user. ", + "operationId": "getMergedMobileAppSettings", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/QrCodeSettings" } } } @@ -99183,7 +99995,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -99303,35 +100115,21 @@ ] } }, - "/api/edge/{edgeId}/allSchedulerEvents": { + "/api/mobile/qr/settings": { "get": { "tags": [ - "scheduler-event-controller" - ], - "summary": "Get All Edge Scheduler Events (getAllEdgeSchedulerEvents)", - "description": "Fetch the list of Scheduler Event Info objects based on the provided Edge entity. Scheduler Event extends Scheduler Event Info object and adds 'configuration' - a JSON structure of scheduler event configuration. See the 'Model' tab of the Response Class for more details. Scheduler Events allows you to schedule various types of events with flexible schedule configuration. Scheduler fires configured scheduler events according to their schedule. See the 'Model' tab of the Response Class for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAllEdgeSchedulerEvents", - "parameters": [ - { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - } + "qr-code-settings-controller" ], + "summary": "Get Mobile application settings (getQrCodeSettings)", + "description": "The response payload contains configuration for android/iOS applications and platform qr code widget settings.\n\nAvailable for any authorized user. ", + "operationId": "getQrCodeSettings", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SchedulerEventInfo" - } + "$ref": "#/components/schemas/QrCodeSettings" } } } @@ -99465,43 +100263,31 @@ "ApiKeyForm": [] } ] - } - }, - "/api/edge/{edgeId}/schedulerEvent/{schedulerEventId}": { + }, "post": { "tags": [ - "scheduler-event-controller" + "qr-code-settings-controller" ], - "summary": "Assign scheduler event to edge (assignSchedulerEventToEdge)", - "description": "Creates assignment of an existing scheduler event to an instance of The Edge. Assignment works in async way - first, notification event pushed to edge service queue on platform. Second, remote edge service will receive a copy of assignment scheduler event (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once scheduler event will be delivered to edge service, it is going to be available for usage on remote edge instance. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "assignSchedulerEventToEdge", - "parameters": [ - { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" + "summary": "Create Or Update the Mobile application settings (saveQrCodeSettings)", + "description": "The request payload contains configuration for android/iOS applications and platform qr code widget settings.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "saveQrCodeSettings", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QrCodeSettings" + } } }, - { - "name": "schedulerEventId", - "in": "path", - "description": "A string value representing the scheduler id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SchedulerEventInfo" + "$ref": "#/components/schemas/QrCodeSettings" } } } @@ -99635,28 +100421,19 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/noauth/qr": { + "get": { "tags": [ - "scheduler-event-controller" + "qr-code-settings-controller" ], - "summary": "Unassign scheduler event from edge (unassignSchedulerEventFromEdge)", - "description": "Clears assignment of the scheduler event to the edge. Unassignment works in async way - first, 'unassign' notification event pushed to edge queue on platform. Second, remote edge service will receive an 'unassign' command to remove entity group (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once 'unassign' command will be delivered to edge service, it's going to remove entity group and entities inside this group locally.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "unassignSchedulerEventFromEdge", + "summary": "getApplicationRedirect", + "operationId": "getApplicationRedirect", "parameters": [ { - "name": "edgeId", - "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "schedulerEventId", - "in": "path", - "description": "A string value representing the scheduler id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "User-Agent", + "in": "header", "required": true, "schema": { "type": "string" @@ -99669,7 +100446,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SchedulerEventInfo" + "type": "object" } } } @@ -99794,85 +100571,26 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/edge/{edgeId}/schedulerEvents": { + "/api/noauth/qr/{secret}": { "get": { "tags": [ - "scheduler-event-controller" + "qr-code-settings-controller" ], - "summary": "Get Edge Scheduler Events (getEdgeSchedulerEvents)", - "description": "Returns a page of Scheduler Events Info objects based on the provided Edge entity. Scheduler Event extends Scheduler Event Info object and adds 'configuration' - a JSON structure of scheduler event configuration. See the 'Model' tab of the Response Class for more details. Scheduler Events allows you to schedule various types of events with flexible schedule configuration. Scheduler fires configured scheduler events according to their schedule. See the 'Model' tab of the Response Class for more details. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getEdgeSchedulerEvents", + "summary": "Get User Token (getUserTokenByMobileSecret)", + "description": "Returns the token of the User based on the provided secret key.", + "operationId": "getUserTokenByMobileSecret", "parameters": [ { - "name": "edgeId", + "name": "secret", "in": "path", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "string", - "minimum": 1 - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "description": "A string value representing short-lived secret key", "required": true, - "schema": { - "type": "string", - "minimum": 0 - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'startsWith' filter based on the scheduler event name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -99881,7 +100599,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataSchedulerEventInfo" + "$ref": "#/components/schemas/JwtPair" } } } @@ -100006,53 +100724,31 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/scheduledReports": { + "/api/queues": { "get": { "tags": [ - "scheduler-event-controller" + "queue-controller" ], - "summary": "Get Scheduled Report Events (getScheduledReportEvents)", - "description": "\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getScheduledReportEvents", + "summary": "Get Queues (getTenantQueuesByServiceType)", + "description": "Returns a page of queues registered in the platform. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getTenantQueuesByServiceType", "parameters": [ { - "name": "reportTemplateId", - "in": "query", - "description": "Report template id", - "required": false, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "userId", + "name": "serviceType", "in": "query", - "description": "The user used for report generation.", - "required": false, + "description": "Service type (implemented only for the TB-RULE-ENGINE)", + "required": true, "schema": { "type": "string", - "format": "uuid" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" + "enum": [ + "TB-RULE-ENGINE", + "TB-CORE", + "TB-TRANSPORT", + "JS-EXECUTOR" + ] } }, { @@ -100061,8 +100757,8 @@ "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string", - "minimum": 1 + "type": "integer", + "format": "int32" } }, { @@ -100071,14 +100767,14 @@ "description": "Sequence number of page starting from 0", "required": true, "schema": { - "type": "string", - "minimum": 0 + "type": "integer", + "format": "int32" } }, { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the scheduler event name or customer title.", + "description": "The case insensitive 'substring' filter based on the queue name.", "required": false, "schema": { "type": "string" @@ -100090,7 +100786,12 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string" + "type": "string", + "enum": [ + "createdTime", + "name", + "topic" + ] } }, { @@ -100113,7 +100814,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataScheduledReportInfo" + "$ref": "#/components/schemas/PageDataQueue" } } } @@ -100247,21 +100948,36 @@ "ApiKeyForm": [] } ] - } - }, - "/api/schedulerEvent": { + }, "post": { "tags": [ - "scheduler-event-controller" + "queue-controller" + ], + "summary": "Create Or Update Queue (saveQueue)", + "description": "Create or update the Queue. When creating queue, platform generates Queue Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). Specify existing Queue id to update the queue. Referencing non-existing Queue Id will cause 'Not Found' error.\n\nQueue name is unique in the scope of sysadmin. Remove 'id', 'tenantId' from the request body example (below) to create new Queue entity. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "saveQueue", + "parameters": [ + { + "name": "serviceType", + "in": "query", + "description": "Service type (implemented only for the TB-RULE-ENGINE)", + "required": true, + "schema": { + "type": "string", + "enum": [ + "TB-RULE-ENGINE", + "TB-CORE", + "TB-TRANSPORT", + "JS-EXECUTOR" + ] + } + } ], - "summary": "Save Scheduler Event (saveSchedulerEvent)", - "description": "Creates or Updates scheduler event. Scheduler Event extends Scheduler Event Info object and adds 'configuration' - a JSON structure of scheduler event configuration. See the 'Model' tab of the Response Class for more details. When creating scheduler event, platform generates scheduler event Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created scheduler event id will be present in the response. Specify existing scheduler event id to update the scheduler event. Referencing non-existing scheduler event Id will cause 'Not Found' error. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Scheduler Event entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "saveSchedulerEvent", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SchedulerEvent" + "$ref": "#/components/schemas/Queue" } } }, @@ -100273,7 +100989,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SchedulerEvent" + "$ref": "#/components/schemas/Queue" } } } @@ -100409,19 +101125,19 @@ ] } }, - "/api/schedulerEvent/info/{schedulerEventId}": { + "/api/queues/name/{queueName}": { "get": { "tags": [ - "scheduler-event-controller" + "queue-controller" ], - "summary": "Get Scheduler Event With Customer Info (getSchedulerEventInfoById)", - "description": "Fetch the SchedulerEventWithCustomerInfo object based on the provided scheduler event Id. Scheduler Event With Customer Info extends Scheduler Event Info object and adds 'customerTitle' - a String value representing the title of the customer which user created a Scheduler Event and 'customerIsPublic' - a boolean parameter that specifies if customer is public. See the 'Model' tab of the Response Class for more details. Referencing non-existing Scheduler Event Id will cause 'Not Found' error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getSchedulerEventInfoById", + "summary": "Get Queue (getQueueByName)", + "description": "Fetch the Queue object based on the provided Queue name. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getQueueByName", "parameters": [ { - "name": "schedulerEventId", + "name": "queueName", "in": "path", - "description": "A string value representing the scheduler id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the queue id. For example, 'Main'", "required": true, "schema": { "type": "string" @@ -100434,7 +101150,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SchedulerEventWithCustomerInfo" + "$ref": "#/components/schemas/Queue" } } } @@ -100570,19 +101286,19 @@ ] } }, - "/api/schedulerEvent/{schedulerEventId}": { + "/api/queues/{queueId}": { "get": { "tags": [ - "scheduler-event-controller" + "queue-controller" ], - "summary": "Get Scheduler Event (getSchedulerEventById)", - "description": "Fetch the SchedulerEvent object based on the provided scheduler event Id. Scheduler Event extends Scheduler Event Info object and adds 'configuration' - a JSON structure of scheduler event configuration. See the 'Model' tab of the Response Class for more details. Referencing non-existing Scheduler Event Id will cause 'Not Found' error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getSchedulerEventById", + "summary": "Get Queue (getQueueById)", + "description": "Fetch the Queue object based on the provided Queue Id. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getQueueById", "parameters": [ { - "name": "schedulerEventId", + "name": "queueId", "in": "path", - "description": "A string value representing the scheduler id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the queue id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -100595,7 +101311,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SchedulerEvent" + "$ref": "#/components/schemas/Queue" } } } @@ -100732,16 +101448,16 @@ }, "delete": { "tags": [ - "scheduler-event-controller" + "queue-controller" ], - "summary": "Delete Scheduler Event (deleteSchedulerEvent)", - "description": "Deletes the scheduler event. Referencing non-existing Scheduler Event Id will cause 'Not Found' error.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", - "operationId": "deleteSchedulerEvent", + "summary": "Delete Queue (deleteQueue)", + "description": "Deletes the Queue. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "deleteQueue", "parameters": [ { - "name": "schedulerEventId", + "name": "queueId", "in": "path", - "description": "A string value representing the scheduler id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the queue id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -100883,31 +101599,67 @@ ] } }, - "/api/schedulerEvent/{schedulerEventId}/enabled/{enabledValue}": { - "put": { + "/api/queueStats": { + "get": { "tags": [ - "scheduler-event-controller" + "queue-stats-controller" ], - "summary": "Enable or disable Scheduler Event (enableSchedulerEvent)", - "description": "Updates scheduler event with enabled = true/false. Scheduler Event extends Scheduler Event Info object and adds 'configuration' - a JSON structure of scheduler event configuration. See the 'Model' tab of the Response Class for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "enableSchedulerEvent", + "summary": "Get Queue Stats entities (getTenantQueueStats)", + "description": "Returns a page of queue stats objects that are designed to collect queue statistics for every service. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getTenantQueueStats", "parameters": [ { - "name": "schedulerEventId", - "in": "path", - "description": "A string value representing the scheduler id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int32" } }, { - "name": "enabledValue", - "in": "path", - "description": "Enabled or disabled scheduler", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, "schema": { - "type": "boolean" + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the queue name or service id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -100917,7 +101669,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SchedulerEvent" + "$ref": "#/components/schemas/PageDataQueueStats" } } } @@ -101053,79 +101805,25 @@ ] } }, - "/api/schedulerEvents": { + "/api/queueStats/list": { "get": { "tags": [ - "scheduler-event-controller" + "queue-stats-controller" ], - "summary": "Get scheduler events (getSchedulerEvents)", - "description": "Requested scheduler events must be owned by tenant or assigned to customer which user is performing the request. Scheduler Event With Customer Info extends Scheduler Event Info object and adds 'customerTitle' - a String value representing the title of the customer which user created a Scheduler Event and 'customerIsPublic' - a boolean parameter that specifies if customer is public. See the 'Model' tab of the Response Class for more details. \n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getSchedulerEvents", + "summary": "Get QueueStats By Ids (getQueueStatsByIds)", + "description": "Fetch the Queue stats objects based on the provided ids. ", + "operationId": "getQueueStatsByIds", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", + "name": "queueStatsIds", "in": "query", - "description": "Sequence number of page starting from 0", + "description": "A list of queue stats ids, separated by comma ','", "required": true, "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "Case-insensitive 'substring' filter based on event's name, type, or customer's name", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "type", - "in": "query", - "description": "A string value representing the scheduler type. For example, 'generateReport'", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "edgeId", - "in": "query", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, - "schema": { - "type": "string", - "format": "uuid" + "type": "array", + "items": { + "type": "string" + } } } ], @@ -101135,7 +101833,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataSchedulerEventWithCustomerInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/QueueStats" + } } } } @@ -101271,20 +101972,20 @@ ] } }, - "/api/schedulerEvents/all": { + "/api/queueStats/{queueStatsId}": { "get": { "tags": [ - "scheduler-event-controller" + "queue-stats-controller" ], - "summary": "Get all scheduler events (getAllSchedulerEvents)", - "description": "Requested scheduler events must be owned by tenant or assigned to customer which user is performing the request. Scheduler Event With Customer Info extends Scheduler Event Info object and adds 'customerTitle' - a String value representing the title of the customer which user created a Scheduler Event and 'customerIsPublic' - a boolean parameter that specifies if customer is public. See the 'Model' tab of the Response Class for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAllSchedulerEvents", + "summary": "Get Queue stats entity by id (getQueueStatsById)", + "description": "Fetch the Queue stats object based on the provided Queue stats id. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getQueueStatsById", "parameters": [ { - "name": "type", - "in": "query", - "description": "A string value representing the scheduler type. For example, 'generateReport'", - "required": false, + "name": "queueStatsId", + "in": "path", + "description": "A string value representing the queue stats id. For example, '687f294c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { "type": "string" } @@ -101296,10 +101997,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SchedulerEventWithCustomerInfo" - } + "$ref": "#/components/schemas/QueueStats" } } } @@ -101435,38 +102133,42 @@ ] } }, - "/api/schedulerEvents/list": { - "get": { + "/api/v2/report": { + "post": { "tags": [ - "scheduler-event-controller" + "report-controller" ], - "summary": "Get Scheduler Events By Ids (getSchedulerEventsByIds)", - "description": "Requested scheduler events must be owned by tenant or assigned to customer which user is performing the request. Scheduler Events allows you to schedule various types of events with flexible schedule configuration. Scheduler fires configured scheduler events according to their schedule. See the 'Model' tab of the Response Class for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getSchedulerEventsByIds", - "parameters": [ - { - "name": "schedulerEventIds", - "in": "query", - "description": "A list of scheduler event ids, separated by comma ','", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string" + "summary": "createReport", + "operationId": "createReport", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + }, + "info": { + "type": "string" + } + }, + "required": [ + "file", + "info" + ] } } } - ], + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SchedulerEventInfo" - } + "$ref": "#/components/schemas/Report" } } } @@ -101482,7 +102184,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -101602,59 +102304,20 @@ ] } }, - "/api/schedulerEvents/startTime/{startTime}/endTime/{endTime}": { + "/api/v2/report/public/{publicKey}/download": { "get": { "tags": [ - "scheduler-event-controller" + "report-controller" ], - "summary": "Get scheduler events (getSchedulerEventsByRange)", - "description": "Retrieves scheduler events filtering by event run time. Requested scheduler events must be owned by tenant or assigned to customer which user is performing the request. Scheduler Event With Customer Info extends Scheduler Event Info object and adds 'customerTitle' - a String value representing the title of the customer which user created a Scheduler Event and 'customerIsPublic' - a boolean parameter that specifies if customer is public. See the 'Model' tab of the Response Class for more details. \n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getSchedulerEventsByRange", + "summary": "Download report by public key (downloadReportByPublicKey)", + "description": "Downloads the report identified by its public key. This endpoint is intentionally public: it requires no authentication and is accessible to anyone in possession of the report's random public key. It only returns data for reports that have been explicitly made public (see updateReportPublicStatus).", + "operationId": "downloadReportByPublicKey", "parameters": [ { - "name": "startTime", + "name": "publicKey", "in": "path", - "description": "Start time filter in milliseconds for scheduler event run time", + "description": "The random public key of the report", "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTime", - "in": "path", - "description": "End time filter in milliseconds for scheduler event run time", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "type", - "in": "query", - "description": "A string value representing the scheduler type. For example, 'generateReport'", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "edgeId", - "in": "query", - "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": false, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "Case-insensitive 'substring' filter based on event's name, type, or customer's name", - "required": false, "schema": { "type": "string" } @@ -101666,10 +102329,8 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SchedulerEventWithCustomerInfo" - } + "type": "string", + "format": "binary" } } } @@ -101805,31 +102466,30 @@ ] } }, - "/api/secret": { - "get": { + "/api/v2/report/request": { + "post": { "tags": [ - "secret-controller" + "report-controller" ], - "summary": "Get Secret info by name (getSecretInfoByName)", - "description": "\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getSecretInfoByName", - "parameters": [ - { - "name": "name", - "in": "query", - "required": true, - "schema": { - "type": "string" + "summary": "requestReport", + "operationId": "requestReport", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportRequest" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SecretInfo" + "$ref": "#/components/schemas/Job" } } } @@ -101845,7 +102505,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -101963,19 +102623,21 @@ "ApiKeyForm": [] } ] - }, + } + }, + "/api/v2/report/test": { "post": { "tags": [ - "secret-controller" + "report-controller" ], - "summary": "Save or Update Secret (saveSecret)", - "description": "Create or update the Secret. When creating secret, platform generates Secret Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Secret Id will be present in the response. Specify existing Secret Id to update the secret. Secret name is not updatable, only value could be changed. Referencing non-existing Secret Id will cause 'Not Found' error.\n\nSecret name is unique in the scope of tenant.", - "operationId": "saveSecret", + "summary": "Download test report (testReportAndDownload)", + "description": "Generate and download test report.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "testReportAndDownload", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Secret" + "$ref": "#/components/schemas/ReportRequest" } } }, @@ -101987,7 +102649,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SecretInfo" + "type": "string", + "format": "binary" } } } @@ -102123,24 +102786,32 @@ ] } }, - "/api/secret/names": { + "/api/v2/report/{reportId}": { "get": { "tags": [ - "secret-controller" + "report-controller" + ], + "summary": "Get Report (getReportById)", + "description": "Fetch the Report object based on the provided report Id. The platform uses Report to store generated reports information.Referencing non-existing Report Id will cause 'Not Found' error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getReportById", + "parameters": [ + { + "name": "reportId", + "in": "path", + "description": "A string value representing the report id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Get Tenant Secret names (getSecretNames)", - "description": "Returns a page of secret names owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getSecretNames", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/Report" } } } @@ -102274,37 +102945,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/secret/{id}": { + }, "delete": { "tags": [ - "secret-controller" + "report-controller" ], - "summary": "Delete secret by ID (deleteSecret)", - "description": "Deletes the secret. Referencing non-existing Secret Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "deleteSecret", + "summary": "Delete Report (deleteReport)", + "description": "Deletes the report. Referencing non-existing Report Id will cause 'Not Found' error.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", + "operationId": "deleteReport", "parameters": [ { - "name": "id", + "name": "reportId", "in": "path", + "description": "A string value representing the report id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TbSecretDeleteResult" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -102437,19 +103099,17 @@ ] } }, - "/api/secret/{id}/description": { - "put": { + "/api/v2/report/{reportId}/download": { + "get": { "tags": [ - "secret-controller" + "report-controller" ], - "summary": "Update Secret Description", - "description": "Updates the description of the existing Secret by secretId. Only the description can be updated. Referencing a non-existing Secret Id will cause a 'Not Found' error.", - "operationId": "updateSecretDescription", + "summary": "downloadReport", + "operationId": "downloadReport", "parameters": [ { - "name": "id", + "name": "reportId", "in": "path", - "description": "Unique identifier of the Secret to update", "required": true, "schema": { "type": "string", @@ -102457,23 +103117,14 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "New description for the Secret" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SecretInfo" + "type": "string", + "format": "binary" } } } @@ -102609,23 +103260,33 @@ ] } }, - "/api/secret/{id}/info": { - "get": { + "/api/v2/report/{reportId}/public/{isPublic}": { + "put": { "tags": [ - "secret-controller" + "report-controller" ], - "summary": "Get Secret info by Id (getSecretInfoById)", - "description": "\n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getSecretInfoById", + "summary": "Update Report public status (updateReportPublicStatus)", + "description": "Updates the public status of the report. When public, the report can be downloaded without authentication via the public link. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "updateReportPublicStatus", "parameters": [ { - "name": "id", + "name": "reportId", "in": "path", + "description": "A string value representing the report id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "isPublic", + "in": "path", + "description": "Whether the report should be publicly downloadable without authentication", + "required": true, + "schema": { + "type": "boolean" + } } ], "responses": { @@ -102634,7 +103295,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SecretInfo" + "$ref": "#/components/schemas/Report" } } } @@ -102770,44 +103431,37 @@ ] } }, - "/api/secret/{id}/value": { - "put": { + "/api/v2/reportInfos": { + "get": { "tags": [ - "secret-controller" + "report-controller" ], - "summary": "Update Secret value", - "description": "Updates the value of the existing Secret by secretId. Referencing a non-existing Secret Id will cause a 'Not Found' error.", - "operationId": "updateSecretValue", + "summary": "getReportInfosByIds", + "operationId": "getReportInfosByIds", "parameters": [ { - "name": "id", - "in": "path", - "description": "Unique identifier of the Secret to update", + "name": "strReportIds", + "in": "query", + "description": "A list of report ids, separated by comma ','", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "array", + "items": { + "type": "string" + } } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "New value for the Secret" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SecretInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportInfo" + } } } } @@ -102943,15 +103597,43 @@ ] } }, - "/api/secrets": { + "/api/v2/reportInfos/all": { "get": { "tags": [ - "secret-controller" + "report-controller" ], - "summary": "Get Tenant Secret infos (getSecretInfos)", - "description": "Returns a page of secret infos owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getSecretInfos", + "summary": "getReportInfos", + "operationId": "getReportInfos", "parameters": [ + { + "name": "reportTemplateId", + "in": "query", + "description": "Report template id", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "The user used for report generation.", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, { "name": "pageSize", "in": "query", @@ -102975,7 +103657,7 @@ { "name": "textSearch", "in": "query", - "description": "The case insensitive 'substring' filter based on the secret name and description.", + "description": "Case-insensitive 'substring' filter based on report's name or customer title", "required": false, "schema": { "type": "string" @@ -102987,10 +103669,7 @@ "description": "Property of entity to sort by", "required": false, "schema": { - "type": "string", - "enum": [ - "name" - ] + "type": "string" } }, { @@ -102999,11 +103678,7 @@ "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "string" } } ], @@ -103013,7 +103688,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataSecretInfo" + "$ref": "#/components/schemas/PageDataReportInfo" } } } @@ -103149,29 +103824,68 @@ ] } }, - "/api/noauth/selfRegistration/privacyPolicy": { + "/api/v2/reports": { "get": { "tags": [ - "self-registration-controller" + "report-controller" ], - "summary": "Get Privacy Policy for Self Registration form (getPrivacyPolicy)", - "description": "Fetch the Privacy Policy based on the domain name from the request. Available for non-authorized users. ", - "operationId": "getPrivacyPolicy", + "summary": "getReports", + "operationId": "getReports", "parameters": [ { - "name": "pkgName", + "name": "pageSize", "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Case-insensitive 'substring' filter based on report's name or customer title", "required": false, "schema": { "type": "string" } }, { - "name": "platform", + "name": "sortProperty", "in": "query", + "description": "Property of entity to sort by", "required": false, "schema": { - "$ref": "#/components/schemas/PlatformType" + "type": "string" + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" } } ], @@ -103181,7 +103895,7 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/PageDataReport" } } } @@ -103306,47 +104020,42 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/selfRegistration/signUpSelfRegistrationParams": { - "get": { + "/api/reportTemplate": { + "post": { "tags": [ - "self-registration-controller" + "report-template-controller" ], - "summary": "Get Self Registration form parameters without authentication (getSignUpSelfRegistrationParams)", - "description": "Fetch the Self Registration parameters based on the domain name from the request. Available for non-authorized users. Contains the information to customize the sign-up form.", - "operationId": "getSignUpSelfRegistrationParams", - "parameters": [ - { - "name": "pkgName", - "in": "query", - "required": false, - "schema": { - "type": "string" + "summary": "Save Report Template (saveReportTemplate)", + "description": "Creates or Updates report template. Report Template extends Report Template Info object and adds 'configuration' - a JSON structure of report template configuration. See the 'Model' tab of the Response Class for more details. When creating report template, platform generates report template Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created report template id will be present in the response. Specify existing report template id to update the report template. Referencing non-existing report template Id will cause 'Not Found' error. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Report Template entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "saveReportTemplate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportTemplate" + } } }, - { - "name": "platformType", - "in": "query", - "description": "Platform type", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ANDROID", - "IOS" - ] - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SignUpSelfRegistrationParams" + "$ref": "#/components/schemas/ReportTemplate" } } } @@ -103362,7 +104071,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -103471,33 +104180,34 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/selfRegistration/termsOfUse": { + "/api/reportTemplate/info/{reportTemplateId}": { "get": { "tags": [ - "self-registration-controller" + "report-template-controller" ], - "summary": "Get Terms of Use for Self Registration form (getTermsOfUse)", - "description": "Fetch the Terms of Use based on the domain name from the request. Available for non-authorized users. ", - "operationId": "getTermsOfUse", + "summary": "Get Report Template Info (getReportTemplateInfoById)", + "description": "Fetch the ReportTemplateInfo object based on the provided report template Id. Report Templates allows you to create reports according to the report template configuration. Report service uses report template configuration to generate report. See the 'Model' tab of the Response Class for more details. Referencing non-existing Report Template Id will cause 'Not Found' error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getReportTemplateInfoById", "parameters": [ { - "name": "pkgName", - "in": "query", - "required": false, + "name": "reportTemplateId", + "in": "path", + "description": "A string value representing the report template id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { "type": "string" } - }, - { - "name": "platform", - "in": "query", - "required": false, - "schema": { - "$ref": "#/components/schemas/PlatformType" - } } ], "responses": { @@ -103506,7 +104216,7 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ReportTemplateInfo" } } } @@ -103631,24 +104341,43 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/selfRegistration/selfRegistrationParams": { + "/api/reportTemplate/{reportTemplateId}": { "get": { "tags": [ - "self-registration-controller" + "report-template-controller" + ], + "summary": "Get Report Template (getReportTemplateById)", + "description": "Fetch the ReportTemplate object based on the provided report template Id. Report Template extends Report Template Info object and adds 'configuration' - a JSON structure of report template configuration. See the 'Model' tab of the Response Class for more details. Referencing non-existing Report Template Id will cause 'Not Found' error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getReportTemplateById", + "parameters": [ + { + "name": "reportTemplateId", + "in": "path", + "description": "A string value representing the report template id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Get Self Registration parameters (getSelfRegistrationParams)", - "description": "Fetch the Self Registration parameters object for the tenant of the current user. \n\nAvailable for users with 'TENANT_ADMIN' authority.\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", - "operationId": "getWebSelfRegistrationParams", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SelfRegistrationParams" + "$ref": "#/components/schemas/ReportTemplate" } } } @@ -103783,33 +104512,27 @@ } ] }, - "post": { + "delete": { "tags": [ - "self-registration-controller" + "report-template-controller" ], - "summary": "Create Or Update Self Registration parameters (saveSelfRegistrationParams)", - "description": "Creates or Updates the Self Registration parameters. When creating, platform generates Admin Settings Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Admin Settings Id will be present in the response. Specify existing Admin Settings Id to update the Self Registration parameters. Referencing non-existing Admin Settings Id will cause 'Not Found' error.\n\nSelf Registration allows users to signup for using the platform and automatically create a Customer account for them. You may configure default dashboard and user roles that will be assigned for this Customer. This allows you to build out-of-the-box solutions for customers. Ability to white-label the login and main pages helps to brand the platform.\n\nAvailable for users with 'TENANT_ADMIN' authority.\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", - "operationId": "saveWebSelfRegistrationParams", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebSelfRegistrationParams" - } + "summary": "Delete Report Template (deleteReportTemplate)", + "description": "Deletes the report template. Referencing non-existing Report Template Id will cause 'Not Found' error.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", + "operationId": "deleteReportTemplate", + "parameters": [ + { + "name": "reportTemplateId", + "in": "path", + "description": "A string value representing the report template id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebSelfRegistrationParams" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -103822,7 +104545,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -103940,16 +104663,125 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/reportTemplateInfos/all": { + "get": { "tags": [ - "self-registration-controller" + "report-template-controller" + ], + "summary": "Get All Report Templates for current user (getAllReportTemplateInfos)", + "description": "Returns a page of report template info objects owned by the tenant or the customer of a current user. Report Templates allows you to create reports according to the report template configuration. Report service uses report template configuration to generate report. See the 'Model' tab of the Response Class for more details. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAllReportTemplateInfos", + "parameters": [ + { + "name": "typeList", + "in": "query", + "description": "A list of string values separated by comma ',' representing one of the ReportTemplateType enumeration value.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "REPORT", + "SUB_REPORT" + ] + } + } + }, + { + "name": "formatList", + "in": "query", + "description": "A list of string values separated by comma ',' representing one of the TbReportFormat enumeration value.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "PDF", + "CSV" + ] + } + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the report template name or customer title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "ownerName" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } ], - "summary": "deleteWebSelfRegistrationParams", - "operationId": "deleteWebSelfRegistrationParams", "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataReportTemplateInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -104082,44 +104914,25 @@ ] } }, - "/api/noauth/activateByEmailCode": { - "post": { + "/api/reportTemplates": { + "get": { "tags": [ - "sign-up-controller" + "report-template-controller" ], - "summary": "Activate and login using code from Email (activateUserByEmailCode)", - "description": "Activate the user using code(link) from the activation email and return the JWT Token. Sends the notification and email about user activation. Checks that user was not activated yet.", - "operationId": "activateUserByEmailCode", + "summary": "Get report templates by Report Template Ids (getReportTemplatesByIds)", + "description": "Returns a list of ReportTemplateInfo objects based on the provided ids. Filters the list based on the user permissions. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getReportTemplatesByIds", "parameters": [ { - "name": "emailCode", + "name": "reportTemplateIds", "in": "query", - "description": "Activation token.", + "description": "A list of report template ids, separated by comma ','", "required": true, "schema": { - "type": "string" - } - }, - { - "name": "pkgName", - "in": "query", - "description": "Optional package name of the mobile application.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "platform", - "in": "query", - "description": "Platform type", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ANDROID", - "IOS" - ] + "type": "array", + "items": { + "type": "string" + } } } ], @@ -104129,7 +104942,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JwtPair" + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportTemplateInfo" + } } } } @@ -104145,7 +104961,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -104254,57 +105070,42 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/activateEmail": { - "get": { + "/api/role": { + "post": { "tags": [ - "sign-up-controller" + "role-controller" ], - "summary": "Activate User using code from Email (activateEmail)", - "description": "Activate the user using code(link) from the activation email. Validates the code an redirects according to the signup flow. Checks that user was not activated yet.", - "operationId": "activateEmail", - "parameters": [ - { - "name": "emailCode", - "in": "query", - "description": "Activation token.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pkgName", - "in": "query", - "description": "Optional package name of the mobile application.", - "required": false, - "schema": { - "type": "string" + "summary": "Create Or Update Role (saveRole)", + "description": "Creates or Updates the Role. When creating Role, platform generates Role Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Role id will be present in the response. Specify existing Role id to update the permission. Referencing non-existing Group Permission Id will cause 'Not Found' error.\n\nRole Contains a set of permissions. Role has two types. Generic Role may be assigned to the user group and will provide permissions for all entities of a certain type. Group Role may be assigned to both user and entity group and will provides permissions only for the entities that belong to specified entity group. The assignment of the Role to the User Group is done using [Group Permission Controller](/swagger-ui.html#/group-permission-controller).\n\nExample of Generic Role with read-only permissions for any resource and all permissions for the 'DEVICE' and 'PROFILE' resources is listed below: \n\n```json\n{\n \"name\": \"Read-Only User\",\n \"type\": \"GENERIC\",\n \"permissions\": {\n \"ALL\": [\n \"READ\",\n \"RPC_CALL\",\n \"READ_CREDENTIALS\",\n \"READ_ATTRIBUTES\",\n \"READ_TELEMETRY\"\n ],\n \"DEVICE\": [\n \"ALL\"\n ]\n \"PROFILE\": [\n \"ALL\"\n ]\n },\n \"additionalInfo\": {\n \"description\": \"Read-only permissions for everything, Write permissions for devices and own profile.\"\n }\n}\n```\n\nExample of Group Role with read-only permissions. Note that the group role has no association with the resources. The type of the resource is taken from the entity group that this role is assigned to: \n\n```json\n{\n \"name\": \"Entity Group Read-only User\",\n \"type\": \"GROUP\",\n \"permissions\": [\n \"READ\",\n \"RPC_CALL\",\n \"READ_CREDENTIALS\",\n \"READ_ATTRIBUTES\",\n \"READ_TELEMETRY\"\n ],\n \"additionalInfo\": {\n \"description\": \"Read-only permissions.\"\n }\n}\n```\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "saveRole", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } } }, - { - "name": "platform", - "in": "query", - "description": "Platform type", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ANDROID", - "IOS" - ] - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/Role" } } } @@ -104320,7 +105121,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -104429,46 +105230,34 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/cloud/activateByEmailCode": { - "post": { + "/api/role/{roleId}": { + "get": { "tags": [ - "sign-up-controller" + "role-controller" ], - "summary": "activateCloudUserByEmailCode", - "operationId": "activateCloudUserByEmailCode", + "summary": "Get Role by Id (getRoleById)", + "description": "Fetch the Role object based on the provided Role Id. Role Contains a set of permissions. Role has two types. Generic Role may be assigned to the user group and will provide permissions for all entities of a certain type. Group Role may be assigned to both user and entity group and will provides permissions only for the entities that belong to specified entity group. The assignment of the Role to the User Group is done using [Group Permission Controller](/swagger-ui.html#/group-permission-controller). Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getRoleById", "parameters": [ { - "name": "emailCode", - "in": "query", + "name": "roleId", + "in": "path", + "description": "A string value representing the role id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - }, - { - "name": "pkgName", - "in": "query", - "description": "Optional package name of the mobile application.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "platform", - "in": "query", - "description": "Platform type", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ANDROID", - "IOS" - ] - } } ], "responses": { @@ -104477,7 +105266,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JwtPair" + "$ref": "#/components/schemas/Role" } } } @@ -104493,7 +105282,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -104602,58 +105391,37 @@ } } } - } - } - }, - "/api/noauth/cloud/activateEmail": { - "get": { + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + }, + "delete": { "tags": [ - "sign-up-controller" + "role-controller" ], - "summary": "activateCloudEmail", - "operationId": "activateCloudEmail", + "summary": "Delete role (deleteRole)", + "description": "Deletes the role. Referencing non-existing role Id will cause an error.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", + "operationId": "deleteRole", "parameters": [ { - "name": "emailCode", - "in": "query", + "name": "roleId", + "in": "path", + "description": "A string value representing the role id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - }, - { - "name": "pkgName", - "in": "query", - "description": "Optional package name of the mobile application.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "platform", - "in": "query", - "description": "Platform type", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ANDROID", - "IOS" - ] - } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -104775,37 +105543,93 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/cloud/login": { + "/api/roles": { "get": { "tags": [ - "sign-up-controller" + "role-controller" ], - "summary": "Cloud mobile Login redirect (cloudMobileLogin)", - "description": "This method generates redirect to the special link that is handled by mobile application. Useful for email verification flow on cloud mobile app.", - "operationId": "cloudMobileLogin", + "summary": "Get Roles (getRoles)", + "description": "Returns a page of roles that are available for the current user. Role Contains a set of permissions. Role has two types. Generic Role may be assigned to the user group and will provide permissions for all entities of a certain type. Group Role may be assigned to both user and entity group and will provides permissions only for the entities that belong to specified entity group. The assignment of the Role to the User Group is done using [Group Permission Controller](/swagger-ui.html#/group-permission-controller).You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getRoles", "parameters": [ { - "name": "pkgName", + "name": "pageSize", "in": "query", - "description": "Mobile app package name. Used to identify the application and build the redirect link.", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "type", + "in": "query", + "description": "Type of the role", + "required": false, + "schema": { + "type": "string", + "enum": [ + "GENERIC", + "GROUP" + ] + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the role name.", + "required": false, "schema": { "type": "string" } }, { - "name": "platform", + "name": "sortProperty", "in": "query", - "description": "Platform type", + "description": "Property of entity to sort by", "required": false, "schema": { "type": "string", "enum": [ - "ANDROID", - "IOS" + "createdTime", + "name", + "type", + "description" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" ] } } @@ -104816,7 +105640,7 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/PageDataRole" } } } @@ -104941,50 +105765,52 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/cloud/resendEmailActivation": { - "post": { + "/api/roles/list": { + "get": { "tags": [ - "sign-up-controller" + "role-controller" ], - "summary": "resendCloudEmailActivation", - "operationId": "resendCloudEmailActivation", + "summary": "Get Roles By Ids (getRolesByIds)", + "description": "Returns the list of rows based on their ids. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getRolesByIds", "parameters": [ { - "name": "email", + "name": "roleIds", "in": "query", + "description": "A list of role ids, separated by comma ','", "required": true, "schema": { - "type": "string" - } - }, - { - "name": "pkgName", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "platform", - "in": "query", - "description": "Platform type", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ANDROID", - "IOS" - ] + "type": "array", + "items": { + "type": "string" + } } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + } + } + } + } }, "400": { "description": "Bad Request", @@ -104997,7 +105823,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -105106,41 +105932,47 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/login": { - "get": { + "/api/plugins/rpc/oneway/{deviceId}": { + "post": { "tags": [ - "sign-up-controller" + "rpc-v-1-controller" ], - "summary": "Mobile Login redirect (mobileLogin)", - "description": "This method generates redirect to the special link that is handled by mobile application. Useful for email verification flow on mobile app.", - "operationId": "mobileLogin", + "summary": "Send one-way RPC request (handleOneWayDeviceRPCRequestV1)", + "description": "Deprecated. See 'Rpc V 2 Controller' instead.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "handleOneWayDeviceRPCRequestV1", "parameters": [ { - "name": "pkgName", - "in": "query", - "description": "Mobile app package name. Used to identify the application and build the redirect link.", + "name": "deviceId", + "in": "path", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - }, - { - "name": "platform", - "in": "query", - "description": "Platform type", - "required": true, - "schema": { - "type": "string", - "enum": [ - "ANDROID", - "IOS" - ] - } } ], + "requestBody": { + "description": "A JSON object representing the RPC request.", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -105163,7 +105995,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -105272,54 +106104,57 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/resendEmailActivation": { + "/api/plugins/rpc/twoway/{deviceId}": { "post": { "tags": [ - "sign-up-controller" + "rpc-v-1-controller" ], - "summary": "Resend Activation Email (resendEmailActivation)", - "description": "Request to resend the activation email for the user. Checks that user was not activated yet.", - "operationId": "resendEmailActivation", + "summary": "Send two-way RPC request (handleTwoWayDeviceRPCRequestV1)", + "description": "Deprecated. See 'Rpc V 2 Controller' instead.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "handleTwoWayDeviceRPCRequestV1", "parameters": [ { - "name": "email", - "in": "query", - "description": "Email of the user.", + "name": "deviceId", + "in": "path", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" - }, - "example": "john.doe@company.com" - }, - { - "name": "pkgName", - "in": "query", - "description": "Optional package name of the mobile application.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "platform", - "in": "query", - "description": "Platform type", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ANDROID", - "IOS" - ] } } ], + "requestBody": { + "description": "A JSON object representing the RPC request.", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } }, "400": { "description": "Bad Request", @@ -105441,22 +106276,42 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/signup": { + "/api/rpc/oneway/{deviceId}": { "post": { "tags": [ - "sign-up-controller" + "rpc-v-2-controller" + ], + "summary": "Send one-way RPC request (handleOneWayDeviceRPCRequestV2)", + "description": "Sends the one-way remote-procedure call (RPC) request to device. Sends the one-way remote-procedure call (RPC) request to device. The RPC call is A JSON that contains the method name ('method'), parameters ('params') and multiple optional fields. See example below. We will review the properties of the RPC call one-by-one below. \n\n```json\n{\n \"method\": \"setGpio\",\n \"params\": {\n \"pin\": 7,\n \"value\": 1\n },\n \"persistent\": false,\n \"timeout\": 5000\n}\n```\n\n### Server-side RPC structure\n\nThe body of server-side RPC request consists of multiple fields:\n\n* **method** - mandatory, name of the method to distinct the RPC calls.\n For example, \"getCurrentTime\" or \"getWeatherForecast\". The value of the parameter is a string.\n* **params** - mandatory, parameters used for processing of the request. The value is a JSON. Leave empty JSON \"{}\" if no parameters needed.\n* **timeout** - optional, value of the processing timeout in milliseconds. The default value is 10000 (10 seconds). The minimum value is 5000 (5 seconds).\n* **expirationTime** - optional, value of the epoch time (in milliseconds, UTC timezone). Overrides **timeout** if present.\n* **persistent** - optional, indicates persistent RPC. The default value is \"false\".\n* **retries** - optional, defines how many times persistent RPC will be re-sent in case of failures on the network and/or device side.\n* **additionalInfo** - optional, defines metadata for the persistent RPC that will be added to the persistent RPC events.\n\n### RPC Result\nIn case of persistent RPC, the result of this call is 'rpcId' UUID. In case of lightweight RPC, the result of this call is either 200 OK if the message was sent to device, or 504 Gateway Timeout if device is offline.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "handleOneWayDeviceRPCRequestV2", + "parameters": [ + { + "name": "deviceId", + "in": "path", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "User Sign Up (signUp)", - "description": "Process user sign up request. Creates the Customer and corresponding User based on self Registration parameters for the domain. See [Self Registration Controller](/swagger-ui.html#/self-registration-controller) for more details. The result is either 'SUCCESS' or 'INACTIVE_USER_EXISTS'. If Success, the user will receive an email with instruction to activate the account. The content of the email is customizable via the mail templates.", - "operationId": "signUp", "requestBody": { + "description": "A JSON object representing the RPC request.", "content": { - "application/json": { + "text/plain": { "schema": { - "$ref": "#/components/schemas/SignUpRequest" + "type": "string" } } }, @@ -105464,59 +106319,51 @@ }, "responses": { "200": { - "description": "OK", + "description": "Persistent RPC request was saved to the database or lightweight RPC request was sent to the device.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SignUpResult" + "type": "string" } } } }, "400": { - "description": "Bad Request", + "description": "Invalid structure of the request.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid request body", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + "type": "string" } } } }, "401": { - "description": "Unauthorized", + "description": "User is not authorized to send the RPC request. Most likely, User belongs to different Customer or Tenant.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + "type": "string" + } + } + } + }, + "413": { + "description": "Request payload is too large", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "504": { + "description": "Timeout to process the RPC call. Most likely, device is offline.", + "content": { + "application/json": { + "schema": { + "type": "string" } } } @@ -105593,23 +106440,118 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/noauth/signup/recaptchaParams": { + "/api/rpc/persistent/device/{deviceId}": { "get": { "tags": [ - "sign-up-controller" + "rpc-v-2-controller" + ], + "summary": "Get persistent RPC requests", + "description": "Allows to query RPC calls for specific device using pagination.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getPersistedRpcByDevice", + "parameters": [ + { + "name": "deviceId", + "in": "path", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "rpcStatus", + "in": "query", + "description": "Status of the RPC", + "required": false, + "schema": { + "type": "string", + "enum": [ + "QUEUED", + "SENT", + "DELIVERED", + "SUCCESSFUL", + "TIMEOUT", + "EXPIRED", + "FAILED" + ] + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Not implemented. Leave empty.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "expirationTime", + "request", + "response" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } ], - "summary": "getRecaptchaParams", - "operationId": "getRecaptchaParams", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CaptchaClientParams" + "type": "string" } } } @@ -105734,24 +106676,43 @@ } } } - } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] } }, - "/api/signup/acceptPrivacyPolicy": { - "post": { + "/api/rpc/persistent/{rpcId}": { + "get": { "tags": [ - "sign-up-controller" + "rpc-v-2-controller" + ], + "summary": "Get persistent RPC request", + "description": "Get information about the status of the RPC call.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getPersistedRpc", + "parameters": [ + { + "name": "rpcId", + "in": "path", + "description": "A string value representing the rpc id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Accept privacy policy (acceptPrivacyPolicy)", - "description": "Accept privacy policy by the current user.", - "operationId": "acceptPrivacyPolicy", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JwtPair" + "$ref": "#/components/schemas/Rpc" } } } @@ -105767,7 +106728,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -105885,25 +106846,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/signup/acceptPrivacyPolicyAndTermsOfUse": { - "post": { + }, + "delete": { "tags": [ - "sign-up-controller" + "rpc-v-2-controller" + ], + "summary": "Delete persistent RPC", + "description": "Deletes the persistent RPC request.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "deleteRpc", + "parameters": [ + { + "name": "rpcId", + "in": "path", + "description": "A string value representing the rpc id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "acceptPrivacyPolicyAndTermsOfUse", - "operationId": "acceptPrivacyPolicyAndTermsOfUse", "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JwtPair" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -105916,7 +106880,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -106036,69 +107000,83 @@ ] } }, - "/api/signup/acceptTermsOfUse": { + "/api/rpc/twoway/{deviceId}": { "post": { "tags": [ - "sign-up-controller" + "rpc-v-2-controller" ], - "summary": "Accept Terms of Use (acceptTermsOfUse)", - "description": "Accept Terms of Use by the current user.", - "operationId": "acceptTermsOfUse", + "summary": "Send two-way RPC request (handleTwoWayDeviceRPCRequestV2)", + "description": "Sends the two-way remote-procedure call (RPC) request to device. Sends the one-way remote-procedure call (RPC) request to device. The RPC call is A JSON that contains the method name ('method'), parameters ('params') and multiple optional fields. See example below. We will review the properties of the RPC call one-by-one below. \n\n```json\n{\n \"method\": \"setGpio\",\n \"params\": {\n \"pin\": 7,\n \"value\": 1\n },\n \"persistent\": false,\n \"timeout\": 5000\n}\n```\n\n### Server-side RPC structure\n\nThe body of server-side RPC request consists of multiple fields:\n\n* **method** - mandatory, name of the method to distinct the RPC calls.\n For example, \"getCurrentTime\" or \"getWeatherForecast\". The value of the parameter is a string.\n* **params** - mandatory, parameters used for processing of the request. The value is a JSON. Leave empty JSON \"{}\" if no parameters needed.\n* **timeout** - optional, value of the processing timeout in milliseconds. The default value is 10000 (10 seconds). The minimum value is 5000 (5 seconds).\n* **expirationTime** - optional, value of the epoch time (in milliseconds, UTC timezone). Overrides **timeout** if present.\n* **persistent** - optional, indicates persistent RPC. The default value is \"false\".\n* **retries** - optional, defines how many times persistent RPC will be re-sent in case of failures on the network and/or device side.\n* **additionalInfo** - optional, defines metadata for the persistent RPC that will be added to the persistent RPC events.\n\n### RPC Result\nIn case of persistent RPC, the result of this call is 'rpcId' UUID. In case of lightweight RPC, the result of this call is the response from device, or 504 Gateway Timeout if device is offline.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "handleTwoWayDeviceRPCRequestV2", + "parameters": [ + { + "name": "deviceId", + "in": "path", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "A JSON object representing the RPC request.", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "OK", + "description": "Persistent RPC request was saved to the database or lightweight RPC response received.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JwtPair" + "type": "string" } } } }, "400": { - "description": "Bad Request", + "description": "Invalid structure of the request.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid request body", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + "type": "string" } } } }, "401": { - "description": "Unauthorized", + "description": "User is not authorized to send the RPC request. Most likely, User belongs to different Customer or Tenant.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + "type": "string" + } + } + } + }, + "413": { + "description": "Request payload is too large", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "504": { + "description": "Timeout to process the RPC call. Most likely, device is offline.", + "content": { + "application/json": { + "schema": { + "type": "string" } } } @@ -106186,20 +107164,39 @@ ] } }, - "/api/signup/displayWelcome": { - "get": { + "/api/edge/{edgeId}/ruleChain/{ruleChainId}": { + "post": { "tags": [ - "sign-up-controller" + "rule-chain-controller" + ], + "summary": "Assign rule chain to edge (assignRuleChainToEdge)", + "description": "Creates assignment of an existing rule chain to an instance of The Edge. Assignment works in async way - first, notification event pushed to edge service queue on platform. Second, remote edge service will receive a copy of assignment rule chain (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once rule chain will be delivered to edge service, it's going to start processing messages locally. \n\nOnly rule chain with type 'EDGE' can be assigned to edge.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "assignRuleChainToEdge", + "parameters": [ + { + "name": "edgeId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ruleChainId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "isDisplayWelcome", - "operationId": "isDisplayWelcome", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "boolean" + "$ref": "#/components/schemas/RuleChain" } } } @@ -106215,7 +107212,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -106333,18 +107330,42 @@ "ApiKeyForm": [] } ] - } - }, - "/api/signup/notDisplayWelcome": { - "post": { + }, + "delete": { "tags": [ - "sign-up-controller" + "rule-chain-controller" + ], + "summary": "Unassign rule chain from edge (unassignRuleChainFromEdge)", + "description": "Clears assignment of the rule chain to the edge. Unassignment works in async way - first, 'unassign' notification event pushed to edge queue on platform. Second, remote edge service will receive an 'unassign' command to remove rule chain (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once 'unassign' command will be delivered to edge service, it's going to remove rule chain locally.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "unassignRuleChainFromEdge", + "parameters": [ + { + "name": "edgeId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ruleChainId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "setNotDisplayWelcome", - "operationId": "setNotDisplayWelcome", "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RuleChain" + } + } + } }, "400": { "description": "Bad Request", @@ -106357,7 +107378,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -106477,21 +107498,88 @@ ] } }, - "/api/signup/privacyPolicyAccepted": { + "/api/edge/{edgeId}/ruleChains": { "get": { "tags": [ - "sign-up-controller" + "rule-chain-controller" + ], + "summary": "Get Edge Rule Chains (getEdgeRuleChains)", + "description": "Returns a page of Rule Chains assigned to the specified edge. The rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getEdgeRuleChains", + "parameters": [ + { + "name": "edgeId", + "in": "path", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the rule chain name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "root" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } ], - "summary": "Check privacy policy (privacyPolicyAccepted)", - "description": "Checks that current user accepted the privacy policy.", - "operationId": "privacyPolicyAccepted", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "boolean" + "$ref": "#/components/schemas/PageDataRuleChain" } } } @@ -106627,25 +107715,34 @@ ] } }, - "/api/signup/tenantAccount": { + "/api/ruleChain": { "post": { "tags": [ - "sign-up-controller" + "rule-chain-controller" ], - "summary": "deleteTenantAccount", - "operationId": "deleteTenantAccount", + "summary": "Create Or Update Rule Chain (saveRuleChain)", + "description": "Create or update the Rule Chain. When creating Rule Chain, platform generates Rule Chain Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Rule Chain Id will be present in the response. Specify existing Rule Chain id to update the rule chain. Referencing non-existing rule chain Id will cause 'Not Found' error.\n\nThe rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.Remove 'id', 'tenantId' from the request body example (below) to create new Rule Chain entity.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveRuleChain", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteTenantRequest" + "$ref": "#/components/schemas/RuleChain" } } - } + }, + "required": true }, "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RuleChain" + } + } + } }, "400": { "description": "Bad Request", @@ -106778,21 +107875,24 @@ ] } }, - "/api/signup/termsOfUseAccepted": { + "/api/ruleChain/autoAssignToEdgeRuleChains": { "get": { "tags": [ - "sign-up-controller" + "rule-chain-controller" ], - "summary": "Check Terms Of User (termsOfUseAccepted)", - "description": "Checks that current user accepted the privacy policy.", - "operationId": "termsOfUseAccepted", + "summary": "Get Auto Assign To Edge Rule Chains (getAutoAssignToEdgeRuleChains)", + "description": "Returns a list of Rule Chains that will be assigned to a newly created edge. The rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getAutoAssignToEdgeRuleChains", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "boolean" + "type": "array", + "items": { + "$ref": "#/components/schemas/RuleChain" + } } } } @@ -106928,20 +108028,19 @@ ] } }, - "/api/solution/export": { + "/api/ruleChain/device/default": { "post": { "tags": [ - "solution-export-import-controller" + "rule-chain-controller" ], - "summary": "Export Solution (exportSolution)", - "description": "Exports a set of entities as a portable solution package. The request specifies entities to include via 'internalIds' (server-internal UUIDs) and/or 'externalIds' (looked up by the entity's stored externalId within the current tenant); at least one of the two collections must be non-empty, and entities reached via both sides are deduplicated. Optional export settings control inclusion of relations, attributes, and credentials. All resolved entities must belong to the current tenant. The response contains the solution data (entities grouped by type) and any dependency warnings (e.g. when an exported device profile references a rule chain that was not included in the export). The solution data can later be imported into the same or a different tenant via the import endpoint.\n\nAvailable for users with 'TENANT_ADMIN' authority. Requires VERSION_CONTROL WRITE permission.", - "operationId": "exportSolution", + "summary": "Create Default Rule Chain (setDeviceDefaultRuleChain)", + "description": "Create rule chain from template, based on the specified name in the request. Creates the rule chain based on the template that is used to create root rule chain. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "setDeviceDefaultRuleChain", "requestBody": { - "description": "Export request with internal and/or external entity IDs and optional settings.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SolutionExportRequest" + "$ref": "#/components/schemas/DefaultRuleChainCreateRequest" } } }, @@ -106953,7 +108052,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SolutionExportResponse" + "$ref": "#/components/schemas/RuleChain" } } } @@ -107089,20 +108188,31 @@ ] } }, - "/api/solution/import": { + "/api/ruleChain/metadata": { "post": { "tags": [ - "solution-export-import-controller" + "rule-chain-controller" + ], + "summary": "Update Rule Chain Metadata", + "description": "Updates the rule chain metadata. The metadata object contains information about the rule nodes and their connections.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "saveRuleChainMetaData", + "parameters": [ + { + "name": "updateRelated", + "in": "query", + "description": "Update related rule nodes.", + "required": false, + "schema": { + "type": "boolean", + "default": true + } + } ], - "summary": "Import Solution (importSolution)", - "description": "Imports a solution package into the current tenant. Before importing, the endpoint checks for name conflicts with existing entities in the tenant. If name conflicts are detected, the import is rejected with HTTP 409 (Conflict). The import is transactional — if any entity fails to import, all changes are rolled back (all-or-nothing). Entities are imported in dependency order with a two-pass resolution for circular references (e.g. rule chains referencing each other).\n\nAvailable for users with 'TENANT_ADMIN' authority. Requires VERSION_CONTROL WRITE permission.", - "operationId": "importSolution", "requestBody": { - "description": "Solution data exported via the export endpoint.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SolutionData" + "$ref": "#/components/schemas/RuleChainMetaData" } } }, @@ -107114,7 +108224,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SolutionImportResult" + "$ref": "#/components/schemas/RuleChainMetaData" } } } @@ -107250,20 +108360,181 @@ ] } }, - "/api/solution/validate": { + "/api/ruleChain/tbelEnabled": { + "get": { + "tags": [ + "rule-chain-controller" + ], + "summary": "Is TBEL script executor enabled", + "description": "Returns 'True' if the TBEL script execution is enabled\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "isTbelEnabled", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/ruleChain/testScript": { "post": { "tags": [ - "solution-export-import-controller" + "rule-chain-controller" + ], + "summary": "Test Script function", + "description": "Execute the Script function and return the result. The format of request: \n\n```json\n{\n \"script\": \"Your Function as String\",\n \"scriptType\": \"One of: update, generate, filter, switch, json, string\",\n \"argNames\": [\"msg\", \"metadata\", \"type\"],\n \"msg\": \"{\\\"temperature\\\": 42}\", \n \"metadata\": {\n \"deviceName\": \"Device A\",\n \"deviceType\": \"Thermometer\"\n },\n \"msgType\": \"POST_TELEMETRY_REQUEST\"\n}\n```\n\n Expected result JSON contains \"output\" and \"error\".\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "testRuleChainScript", + "parameters": [ + { + "name": "scriptLang", + "in": "query", + "description": "Script language: JS or TBEL", + "required": false, + "schema": { + "$ref": "#/components/schemas/ScriptLanguage" + } + } ], - "summary": "Validate Solution (validateSolution)", - "description": "Performs a dry-run validation of a solution without modifying any data. Detects duplicate entities within the solution, identifies name conflicts with existing entities in the current tenant, and reports missing dependency references (e.g. a device profile referencing an absent rule chain). The result indicates whether the solution is safe to import (valid=true) and lists any conflicts or warnings.\n\nAvailable for users with 'TENANT_ADMIN' authority. Requires VERSION_CONTROL WRITE permission.", - "operationId": "validateSolution", "requestBody": { - "description": "Solution data to validate.", + "description": "Test JS request. See API call description above.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SolutionData" + "$ref": "#/components/schemas/JsonNode" } } }, @@ -107275,7 +108546,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SolutionValidationResult" + "$ref": "#/components/schemas/JsonNode" } } } @@ -107411,20 +108682,32 @@ ] } }, - "/api/tenant/subscription": { + "/api/ruleChain/{ruleChainId}": { "get": { "tags": [ - "subscription-controller" + "rule-chain-controller" + ], + "summary": "Get Rule Chain (getRuleChainById)", + "description": "Fetch the Rule Chain object based on the provided Rule Chain Id. The rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getRuleChainById", + "parameters": [ + { + "name": "ruleChainId", + "in": "path", + "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "getTenantSubscription", - "operationId": "getTenantSubscription", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SubscriptionDetails" + "$ref": "#/components/schemas/RuleChain" } } } @@ -107558,25 +108841,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/tenant/subscription/mergedProfileConfig": { - "get": { + }, + "delete": { "tags": [ - "subscription-controller" + "rule-chain-controller" + ], + "summary": "Delete rule chain (deleteRuleChain)", + "description": "Deletes the rule chain. Referencing non-existing rule chain Id will cause an error. Referencing rule chain that is used in the device profiles will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "deleteRuleChain", + "parameters": [ + { + "name": "ruleChainId", + "in": "path", + "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "getMergedTenantProfileConfiguration", - "operationId": "getMergedTenantProfileConfiguration", "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DefaultTenantProfileConfiguration" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -107709,20 +108995,32 @@ ] } }, - "/api/tenant/subscription/trendzUsed": { - "get": { + "/api/ruleChain/{ruleChainId}/autoAssignToEdge": { + "post": { "tags": [ - "subscription-controller" + "rule-chain-controller" + ], + "summary": "Set Auto Assign To Edge Rule Chain (setAutoAssignToEdgeRuleChain)", + "description": "Makes the rule chain to be automatically assigned for any new edge that will be created. Does not assign this rule chain for already created edges. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "setAutoAssignToEdgeRuleChain", + "parameters": [ + { + "name": "ruleChainId", + "in": "path", + "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "trendzUsed", - "operationId": "trendzUsed", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "boolean" + "$ref": "#/components/schemas/RuleChain" } } } @@ -107738,7 +109036,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -107856,22 +109154,32 @@ "ApiKeyForm": [] } ] - } - }, - "/api/tenant/subscription/usage": { - "get": { + }, + "delete": { "tags": [ - "subscription-controller" + "rule-chain-controller" + ], + "summary": "Unset Auto Assign To Edge Rule Chain (unsetAutoAssignToEdgeRuleChain)", + "description": "Removes the rule chain from the list of rule chains that are going to be automatically assigned for any new edge that will be created. Does not unassign this rule chain for already assigned edges. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "unsetAutoAssignToEdgeRuleChain", + "parameters": [ + { + "name": "ruleChainId", + "in": "path", + "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "getTenantSubscriptionUsage", - "operationId": "getTenantSubscriptionUsage", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SubscriptionUsage" + "$ref": "#/components/schemas/RuleChain" } } } @@ -108007,17 +109315,19 @@ ] } }, - "/api/tenantProfile/{tenantProfileId}/profileConfig": { - "get": { + "/api/ruleChain/{ruleChainId}/edgeTemplateRoot": { + "post": { "tags": [ - "subscription-controller" + "rule-chain-controller" ], - "summary": "getTenantProfileConfigurationById", - "operationId": "getTenantProfileConfigurationById", + "summary": "Set Edge Template Root Rule Chain (setEdgeTemplateRootRuleChain)", + "description": "Makes the rule chain to be root rule chain for any new edge that will be created. Does not update root rule chain for already created edges. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "setEdgeTemplateRootRuleChain", "parameters": [ { - "name": "tenantProfileId", + "name": "ruleChainId", "in": "path", + "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -108030,7 +109340,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DefaultTenantProfileConfiguration" + "$ref": "#/components/schemas/RuleChain" } } } @@ -108046,7 +109356,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -108166,99 +109476,23 @@ ] } }, - "/api/resource": { + "/api/ruleChain/{ruleChainId}/metadata": { "get": { "tags": [ - "tb-resource-controller" + "rule-chain-controller" ], - "summary": "Get Resource Infos (getResources)", - "description": "Returns a page of Resource Info objects owned by tenant or sysadmin. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Resource Info is a lightweight object that includes main information about the Resource excluding the heavyweight data. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getResources", + "summary": "Get Rule Chain (getRuleChainById)", + "description": "Fetch the Rule Chain Metadata object based on the provided Rule Chain Id. The metadata object contains information about the rule nodes and their connections.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getRuleChainMetaData", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "ruleChainId", + "in": "path", + "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "resourceType", - "in": "query", - "description": "A string value representing the resource type.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "LWM2M_MODEL", - "JKS", - "PKCS_12", - "JS_MODULE" - ] - } - }, - { - "name": "resourceSubType", - "in": "query", - "description": "A string value representing the resource sub-type.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "EXTENSION", - "MODULE" - ] - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the resource title.", - "required": false, "schema": { "type": "string" } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title", - "resourceType", - "tenantId" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } } ], "responses": { @@ -108267,7 +109501,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataTbResourceInfo" + "$ref": "#/components/schemas/RuleChainMetaData" } } } @@ -108401,31 +109635,38 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/ruleChain/{ruleChainId}/output/labels": { + "get": { "tags": [ - "tb-resource-controller" + "rule-chain-controller" ], - "summary": "Create Or Update Resource (saveResource)", - "description": "Create or update the Resource. When creating the Resource, platform generates Resource id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Resource id will be present in the response. Specify existing Resource id to update the Resource. Referencing non-existing Resource Id will cause 'Not Found' error. \n\nResource combination of the title with the key is unique in the scope of tenant. Remove 'id', 'tenantId' from the request body example (below) to create new Resource entity.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "saveResource", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TbResource" - } + "summary": "Get Rule Chain output labels (getRuleChainOutputLabels)", + "description": "Fetch the unique labels for the \"output\" Rule Nodes that belong to the Rule Chain based on the provided Rule Chain Id. The rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getRuleChainOutputLabels", + "parameters": [ + { + "name": "ruleChainId", + "in": "path", + "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true } } } @@ -108441,7 +109682,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -108551,7 +109792,6 @@ } } }, - "deprecated": true, "security": [ { "HttpLoginForm": [] @@ -108562,19 +109802,19 @@ ] } }, - "/api/resource/info/{resourceId}": { + "/api/ruleChain/{ruleChainId}/output/labels/usage": { "get": { "tags": [ - "tb-resource-controller" + "rule-chain-controller" ], - "summary": "Get Resource Info (getResourceInfoById)", - "description": "Fetch the Resource Info object based on the provided Resource Id. Resource Info is a lightweight object that includes main information about the Resource excluding the heavyweight data. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getResourceInfoById", + "summary": "Get output labels usage (getRuleChainOutputLabelsUsage)", + "description": "Fetch the list of rule chains and the relation types (labels) they use to process output of the current rule chain based on the provided Rule Chain Id. The rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getRuleChainOutputLabelsUsage", "parameters": [ { - "name": "resourceId", + "name": "ruleChainId", "in": "path", - "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -108587,7 +109827,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/RuleChainOutputLabelsUsage" + } } } } @@ -108723,41 +109966,32 @@ ] } }, - "/api/resource/jks/{resourceId}/download": { - "get": { + "/api/ruleChain/{ruleChainId}/root": { + "post": { "tags": [ - "tb-resource-controller" + "rule-chain-controller" ], - "summary": "Download JKS Resource (downloadJksResourceIfChanged)", - "description": "Download Resource based on the provided Resource Id or return 304 status code if resource was not changed.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "downloadJksResourceIfChanged", + "summary": "Set Root Rule Chain (setRootRuleChain)", + "description": "Makes the rule chain to be root rule chain. Updates previous root rule chain as well. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "setRootRuleChain", "parameters": [ { - "name": "resourceId", + "name": "ruleChainId", "in": "path", - "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - }, - { - "name": "If-None-Match", - "in": "header", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { "description": "OK", "content": { - "application/x-java-keystore": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/RuleChain" } } } @@ -108773,7 +110007,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -108893,194 +110127,82 @@ ] } }, - "/api/resource/js/{resourceId}/download": { + "/api/ruleChains": { "get": { "tags": [ - "tb-resource-controller" + "rule-chain-controller" ], - "summary": "Download JS Resource (downloadJsResourceIfChanged)", - "description": "Download Resource based on the provided Resource Id or return 304 status code if resource was not changed.\n\nAvailable for any authorized user. ", - "operationId": "downloadJsResourceIfChanged", + "summary": "Get Rule Chains (getRuleChains)", + "description": "Returns a page of Rule Chains owned by tenant. The rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getRuleChains", "parameters": [ { - "name": "resourceId", - "in": "path", - "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int32" } }, { - "name": "If-None-Match", - "in": "header", - "required": false, + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/javascript": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } + "type": "integer", + "format": "int32" } }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } + { + "name": "type", + "in": "query", + "description": "Rule chain type (CORE or EDGE)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "CORE", + "EDGE" + ] } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the rule chain name.", + "required": false, + "schema": { + "type": "string" } }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } - } - }, - "security": [ { - "HttpLoginForm": [] + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "root" + ] + } }, { - "ApiKeyForm": [] - } - ] - } - }, - "/api/resource/list": { - "get": { - "tags": [ - "tb-resource-controller" - ], - "summary": "Get Resource Infos by ids (getSystemOrTenantResourcesByIds)", - "operationId": "getSystemOrTenantResourcesByIds", - "parameters": [ - { - "name": "resourceIds", + "name": "sortOrder", "in": "query", - "description": "A list of resource ids, separated by comma ','", - "required": true, + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } } ], @@ -109090,10 +110212,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TbResourceInfo" - } + "$ref": "#/components/schemas/PageDataRuleChain" } } } @@ -109229,51 +110348,23 @@ ] } }, - "/api/resource/lwm2m": { + "/api/ruleChains/export": { "get": { "tags": [ - "tb-resource-controller" + "rule-chain-controller" ], - "summary": "Get LwM2M Objects (getLwm2mListObjects)", - "description": "Returns a page of LwM2M objects parsed from Resources with type 'LWM2M_MODEL' owned by tenant or sysadmin. You can specify parameters to filter the results. LwM2M Object is a object that includes information about the LwM2M model which can be used in transport configuration for the LwM2M device profile. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getLwm2mListObjects", + "summary": "Export Rule Chains", + "description": "Exports all tenant rule chains as one JSON.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "exportRuleChains", "parameters": [ { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": true, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": true, - "schema": { - "type": "string", - "enum": [ - "id", - "name" - ] - } - }, - { - "name": "objectIds", + "name": "limit", "in": "query", - "description": "LwM2M Object ids.", + "description": "A limit of rule chains to export.", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "integer", + "format": "int32" } } ], @@ -109283,10 +110374,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/LwM2mObject" - } + "$ref": "#/components/schemas/RuleChainData" } } } @@ -109422,71 +110510,36 @@ ] } }, - "/api/resource/lwm2m/page": { - "get": { + "/api/ruleChains/import": { + "post": { "tags": [ - "tb-resource-controller" + "rule-chain-controller" ], - "summary": "Get LwM2M Objects (getLwm2mListObjectsPage)", - "description": "Returns a page of LwM2M objects parsed from Resources with type 'LWM2M_MODEL' owned by tenant or sysadmin. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. LwM2M Object is a object that includes information about the LwM2M model which can be used in transport configuration for the LwM2M device profile. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getLwm2mListObjectsPage", + "summary": "Import Rule Chains", + "description": "Imports all tenant rule chains as one JSON.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "importRuleChains", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the resource title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "id", - "name" - ] - } - }, - { - "name": "sortOrder", + "name": "overwrite", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "Enables overwrite for existing rule chains with the same name.", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "boolean", + "default": false } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RuleChainData" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -109495,7 +110548,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/LwM2mObject" + "$ref": "#/components/schemas/RuleChainImportResult" } } } @@ -109512,7 +110565,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -109632,30 +110685,25 @@ ] } }, - "/api/resource/lwm2m/{resourceId}/download": { + "/api/ruleChains/list": { "get": { "tags": [ - "tb-resource-controller" + "rule-chain-controller" ], - "summary": "Download LWM2M Resource (downloadLwm2mResourceIfChanged)", - "description": "Download Resource based on the provided Resource Id or return 304 status code if resource was not changed.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "downloadLwm2mResourceIfChanged", + "summary": "Get Rule Chains By Ids (getRuleChainsByIds)", + "description": "Requested rule chains must be owned by tenant which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getRuleChainsByIds", "parameters": [ { - "name": "resourceId", - "in": "path", - "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "ruleChainIds", + "in": "query", + "description": "A list of rule chain ids, separated by comma ','", "required": true, "schema": { - "type": "string" - } - }, - { - "name": "If-None-Match", - "in": "header", - "required": false, - "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], @@ -109663,10 +110711,12 @@ "200": { "description": "OK", "content": { - "application/xml": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "type": "array", + "items": { + "$ref": "#/components/schemas/RuleChain" + } } } } @@ -109802,41 +110852,32 @@ ] } }, - "/api/resource/pkcs12/{resourceId}/download": { + "/api/ruleNode/{ruleNodeId}/debugIn": { "get": { "tags": [ - "tb-resource-controller" + "rule-chain-controller" ], - "summary": "Download PKCS_12 Resource (downloadPkcs12ResourceIfChanged)", - "description": "Download Resource based on the provided Resource Id or return 304 status code if resource was not changed.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "downloadPkcs12ResourceIfChanged", + "summary": "Get latest input message (getLatestRuleNodeDebugInput)", + "description": "Gets the input message from the debug events for specified Rule Chain Id. Referencing non-existing rule chain Id will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getLatestRuleNodeDebugInput", "parameters": [ { - "name": "resourceId", + "name": "ruleNodeId", "in": "path", - "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the rule node id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - }, - { - "name": "If-None-Match", - "in": "header", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { "description": "OK", "content": { - "application/x-pkcs12": { + "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/JsonNode" } } } @@ -109972,80 +111013,32 @@ ] } }, - "/api/resource/tenant": { - "get": { + "/api/rule-engine/": { + "post": { "tags": [ - "tb-resource-controller" + "rule-engine-controller" ], - "summary": "Get All Resource Infos (getTenantResources)", - "description": "Returns a page of Resource Info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Resource Info is a lightweight object that includes main information about the Resource excluding the heavyweight data. \n\nAvailable for users with 'TENANT_ADMIN' authority.", - "operationId": "getTenantResources", - "parameters": [ - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the resource title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title", - "resourceType", - "tenantId" - ] + "summary": "Push user message to the rule engine (handleRuleEngineRequestForUser)", + "description": "Creates the Message with type 'REST_API_REQUEST' and payload taken from the request body. Uses current User Id ( the one which credentials is used to perform the request) as the Rule Engine message originator. This method allows you to extend the regular platform API with the power of Rule Engine. You may use default and custom rule nodes to handle the message. The generated message contains two important metadata fields:\n\n * **'serviceId'** to identify the platform server that received the request;\n * **'requestUUID'** to identify the request and route possible response from the Rule Engine;\n\nUse **'rest call reply'** rule node to push the reply from rule engine back as a REST API call response. The default timeout of the request processing is 10 seconds.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "handleRuleEngineRequestForUser", + "requestBody": { + "description": "A JSON object representing the message.", + "content": { + "text/plain": { + "schema": { + "type": "string" + } } }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataTbResourceInfo" + "type": "string" } } } @@ -110061,7 +111054,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -110181,49 +111174,44 @@ ] } }, - "/api/resource/upload": { + "/api/rule-engine/{entityType}/{entityId}": { "post": { "tags": [ - "tb-resource-controller" + "rule-engine-controller" + ], + "summary": "Push entity message to the rule engine (handleRuleEngineRequestForEntity)", + "description": "Creates the Message with type 'REST_API_REQUEST' and payload taken from the request body. Uses specified Entity Id as the Rule Engine message originator. This method allows you to extend the regular platform API with the power of Rule Engine. You may use default and custom rule nodes to handle the message. The generated message contains two important metadata fields:\n\n * **'serviceId'** to identify the platform server that received the request;\n * **'requestUUID'** to identify the request and route possible response from the Rule Engine;\n\nUse **'rest call reply'** rule node to push the reply from rule engine back as a REST API call response. The default timeout of the request processing is 10 seconds.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "handleRuleEngineRequestForEntity", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Upload Resource via Multipart File (uploadResource)", - "description": "Create the Resource using multipart file upload. \n\nResource combination of the title with the key is unique in the scope of tenant. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "uploadResource", "requestBody": { + "description": "A JSON object representing the message.", "content": { - "multipart/form-data": { + "text/plain": { "schema": { - "type": "object", - "properties": { - "title": { - "type": "string", - "description": "Resource title." - }, - "resourceType": { - "type": "string", - "description": "Resource type." - }, - "descriptor": { - "type": "string", - "description": "Resource descriptor (JSON)." - }, - "resourceSubType": { - "type": "string", - "description": "Resource sub type." - }, - "file": { - "type": "string", - "format": "binary", - "description": "Resource file." - } - }, - "required": [ - "file", - "resourceType" - ] + "type": "string" } } - } + }, + "required": true }, "responses": { "200": { @@ -110231,7 +111219,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "type": "string" } } } @@ -110367,43 +111355,63 @@ ] } }, - "/api/resource/{id}/data": { - "put": { + "/api/rule-engine/{entityType}/{entityId}/{queueName}/{timeout}": { + "post": { "tags": [ - "tb-resource-controller" + "rule-engine-controller" ], - "summary": "updateResourceData", - "operationId": "updateResourceData", + "summary": "Push entity message with timeout and specified queue to the rule engine (handleRuleEngineRequestForEntityWithQueueAndTimeout)", + "description": "Creates the Message with type 'REST_API_REQUEST' and payload taken from the request body. Uses specified Entity Id as the Rule Engine message originator. This method allows you to extend the regular platform API with the power of Rule Engine. You may use default and custom rule nodes to handle the message. The generated message contains two important metadata fields:\n\n * **'serviceId'** to identify the platform server that received the request;\n * **'requestUUID'** to identify the request and route possible response from the Rule Engine;\n\nUse **'rest call reply'** rule node to push the reply from rule engine back as a REST API call response. If request sent for Device/Device Profile or Asset/Asset Profile entity, specified queue will be used instead of the queue selected in the device or asset profile. The platform expects the timeout value in milliseconds.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "handleRuleEngineRequestForEntityWithQueueAndTimeout", "parameters": [ { - "name": "id", + "name": "entityType", "in": "path", - "description": "Unique identifier of the Resource to update", + "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "queueName", + "in": "path", + "description": "Queue name to process the request in the rule engine", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeout", + "in": "path", + "description": "Timeout to process the request in milliseconds", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } } ], "requestBody": { + "description": "A JSON object representing the message.", "content": { - "multipart/form-data": { + "text/plain": { "schema": { - "type": "object", - "properties": { - "file": { - "type": "string", - "format": "binary", - "description": "Resource file." - } - }, - "required": [ - "file" - ] + "type": "string" } } - } + }, + "required": true }, "responses": { "200": { @@ -110411,7 +111419,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "type": "string" } } } @@ -110427,7 +111435,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -110547,30 +111555,50 @@ ] } }, - "/api/resource/{id}/info": { - "put": { + "/api/rule-engine/{entityType}/{entityId}/{timeout}": { + "post": { "tags": [ - "tb-resource-controller" + "rule-engine-controller" ], - "summary": "updateResourceInfo", - "operationId": "updateResourceInfo", + "summary": "Push entity message with timeout to the rule engine (handleRuleEngineRequestForEntityWithTimeout)", + "description": "Creates the Message with type 'REST_API_REQUEST' and payload taken from the request body. Uses specified Entity Id as the Rule Engine message originator. This method allows you to extend the regular platform API with the power of Rule Engine. You may use default and custom rule nodes to handle the message. The generated message contains two important metadata fields:\n\n * **'serviceId'** to identify the platform server that received the request;\n * **'requestUUID'** to identify the request and route possible response from the Rule Engine;\n\nUse **'rest call reply'** rule node to push the reply from rule engine back as a REST API call response. The platform expects the timeout value in milliseconds.\n\n Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "handleRuleEngineRequestForEntityWithTimeout", "parameters": [ { - "name": "id", + "name": "entityType", "in": "path", - "description": "Unique identifier of the Resource to update", + "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeout", + "in": "path", + "description": "Timeout to process the request in milliseconds", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } } ], "requestBody": { + "description": "A JSON object representing the message.", "content": { - "application/json": { + "text/plain": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "type": "string" } } }, @@ -110582,7 +111610,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "type": "string" } } } @@ -110598,7 +111626,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -110718,19 +111746,19 @@ ] } }, - "/api/resource/{resourceId}": { + "/api/edge/{edgeId}/allSchedulerEvents": { "get": { "tags": [ - "tb-resource-controller" + "scheduler-event-controller" ], - "summary": "Get Resource (getResourceById)", - "description": "Fetch the Resource object based on the provided Resource Id. Resource is a heavyweight object that includes main information about the Resource and also data. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getResourceById", + "summary": "Get All Edge Scheduler Events (getAllEdgeSchedulerEvents)", + "description": "Fetch the list of Scheduler Event Info objects based on the provided Edge entity. Scheduler Event extends Scheduler Event Info object and adds 'configuration' - a JSON structure of scheduler event configuration. See the 'Model' tab of the Response Class for more details. Scheduler Events allows you to schedule various types of events with flexible schedule configuration. Scheduler fires configured scheduler events according to their schedule. See the 'Model' tab of the Response Class for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAllEdgeSchedulerEvents", "parameters": [ { - "name": "resourceId", + "name": "edgeId", "in": "path", - "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -110743,7 +111771,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResource" + "type": "array", + "items": { + "$ref": "#/components/schemas/SchedulerEventInfo" + } } } } @@ -110869,7 +111900,6 @@ } } }, - "deprecated": true, "security": [ { "HttpLoginForm": [] @@ -110878,30 +111908,33 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/edge/{edgeId}/schedulerEvent/{schedulerEventId}": { + "post": { "tags": [ - "tb-resource-controller" + "scheduler-event-controller" ], - "summary": "Delete Resource (deleteResource)", - "description": "Deletes the Resource. Referencing non-existing Resource Id will cause an error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "deleteResource", + "summary": "Assign scheduler event to edge (assignSchedulerEventToEdge)", + "description": "Creates assignment of an existing scheduler event to an instance of The Edge. Assignment works in async way - first, notification event pushed to edge service queue on platform. Second, remote edge service will receive a copy of assignment scheduler event (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once scheduler event will be delivered to edge service, it is going to be available for usage on remote edge instance. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "assignSchedulerEventToEdge", "parameters": [ { - "name": "resourceId", + "name": "edgeId", "in": "path", - "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "force", - "in": "query", - "required": false, + "name": "schedulerEventId", + "in": "path", + "description": "A string value representing the scheduler id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { - "type": "boolean" + "type": "string" } } ], @@ -110911,7 +111944,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceDeleteResult" + "$ref": "#/components/schemas/SchedulerEventInfo" } } } @@ -110927,7 +111960,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -111045,21 +112078,28 @@ "ApiKeyForm": [] } ] - } - }, - "/api/resource/{resourceId}/download": { - "get": { + }, + "delete": { "tags": [ - "tb-resource-controller" + "scheduler-event-controller" ], - "summary": "Download Resource (downloadResource)", - "description": "Download Resource based on the provided Resource Id.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "downloadResource", + "summary": "Unassign scheduler event from edge (unassignSchedulerEventFromEdge)", + "description": "Clears assignment of the scheduler event to the edge. Unassignment works in async way - first, 'unassign' notification event pushed to edge queue on platform. Second, remote edge service will receive an 'unassign' command to remove entity group (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once 'unassign' command will be delivered to edge service, it's going to remove entity group and entities inside this group locally.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "unassignSchedulerEventFromEdge", "parameters": [ { - "name": "resourceId", + "name": "edgeId", "in": "path", - "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "schedulerEventId", + "in": "path", + "description": "A string value representing the scheduler id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -111072,8 +112112,7 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/SchedulerEventInfo" } } } @@ -111209,60 +112248,74 @@ ] } }, - "/api/resource/{resourceType}/{scope}/{key}": { + "/api/edge/{edgeId}/schedulerEvents": { "get": { "tags": [ - "tb-resource-controller" + "scheduler-event-controller" ], - "summary": "Download resource (downloadResourceIfChanged)", - "description": "Download resource with a given type and key for the given scope\n\nAvailable for any authorized user. ", - "operationId": "downloadResourceIfChanged", + "summary": "Get Edge Scheduler Events (getEdgeSchedulerEvents)", + "description": "Returns a page of Scheduler Events Info objects based on the provided Edge entity. Scheduler Event extends Scheduler Event Info object and adds 'configuration' - a JSON structure of scheduler event configuration. See the 'Model' tab of the Response Class for more details. Scheduler Events allows you to schedule various types of events with flexible schedule configuration. Scheduler fires configured scheduler events according to their schedule. See the 'Model' tab of the Response Class for more details. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getEdgeSchedulerEvents", "parameters": [ { - "name": "resourceType", + "name": "edgeId", "in": "path", - "description": "Type of the resource", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string", - "enum": [ - "lwm2m_model", - "jks", - "pkcs_12", - "js_module", - "dashboard" - ] + "type": "string" } }, { - "name": "scope", - "in": "path", - "description": "Scope of the resource", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { "type": "string", - "enum": [ - "system", - "tenant" - ] + "minimum": 1 } }, { - "name": "key", - "in": "path", - "description": "Key of the resource, e.g. 'extension.js'", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'startsWith' filter based on the scheduler event name.", + "required": false, "schema": { "type": "string" } }, { - "name": "If-None-Match", - "in": "header", + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", "required": false, "schema": { "type": "string" } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -111271,8 +112324,7 @@ "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/PageDataSchedulerEventInfo" } } } @@ -111408,52 +112460,94 @@ ] } }, - "/api/resource/{resourceType}/{scope}/{key}/info": { + "/api/scheduledReports": { "get": { "tags": [ - "tb-resource-controller" + "scheduler-event-controller" ], - "summary": "Get resource info (getResourceInfo)", - "description": "Get info for the resource with the given type, scope and key. Resource Info is a lightweight object that includes main information about the Resource excluding the heavyweight data. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getResourceInfo", + "summary": "Get Scheduled Report Events (getScheduledReportEvents)", + "description": "\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getScheduledReportEvents", "parameters": [ { - "name": "resourceType", - "in": "path", - "description": "Type of the resource", - "required": true, + "name": "reportTemplateId", + "in": "query", + "description": "Report template id", + "required": false, "schema": { "type": "string", - "enum": [ - "lwm2m_model", - "jks", - "pkcs_12", - "js_module", - "dashboard" - ] + "format": "uuid" } }, { - "name": "scope", - "in": "path", - "description": "Scope of the resource", + "name": "userId", + "in": "query", + "description": "The user used for report generation.", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { "type": "string", - "enum": [ - "system", - "tenant" - ] + "minimum": 1 } }, { - "name": "key", - "in": "path", - "description": "Key of the resource, e.g. 'extension.js'", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "string", + "minimum": 0 + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the scheduler event name or customer title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } } ], "responses": { @@ -111462,7 +112556,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TbResourceInfo" + "$ref": "#/components/schemas/PageDataScheduledReportInfo" } } } @@ -111598,44 +112692,19 @@ ] } }, - "/api/plugins/telemetry/{deviceId}/{scope}": { + "/api/schedulerEvent": { "post": { "tags": [ - "telemetry-controller" - ], - "summary": "Save device attributes (saveDeviceAttributes)", - "description": "Creates or updates the device attributes based on device id and specified attribute scope. The request payload is a JSON object with key-value format of attributes to create or update. For example:\n\n```json\n{\n \"stringKey\":\"value1\", \n \"booleanKey\":true, \n \"doubleKey\":42.0, \n \"longKey\":73, \n \"jsonKey\": {\n \"someNumber\": 42,\n \"someArray\": [1,2,3],\n \"someNestedObject\": {\"key\": \"value\"}\n }\n}\n```\n\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "saveDeviceAttributes", - "parameters": [ - { - "name": "deviceId", - "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "scope", - "in": "path", - "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", - "required": true, - "schema": { - "type": "string", - "enum": [ - "SERVER_SCOPE", - "SHARED_SCOPE" - ] - } - } + "scheduler-event-controller" ], + "summary": "Save Scheduler Event (saveSchedulerEvent)", + "description": "Creates or Updates scheduler event. Scheduler Event extends Scheduler Event Info object and adds 'configuration' - a JSON structure of scheduler event configuration. See the 'Model' tab of the Response Class for more details. When creating scheduler event, platform generates scheduler event Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created scheduler event id will be present in the response. Specify existing scheduler event id to update the scheduler event. Referencing non-existing scheduler event Id will cause 'Not Found' error. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Scheduler Event entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "saveSchedulerEvent", "requestBody": { - "description": "A string value representing the json object. For example, '{\"key\":\"value\"}'. See API call description for more details.", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/SchedulerEvent" } } }, @@ -111643,41 +112712,59 @@ }, "responses": { "200": { - "description": "Attribute from the request was created or updated. Platform creates an audit log event about device attributes updates with action type 'ATTRIBUTES_UPDATED', and also sends event msg to the rule engine with msg type 'ATTRIBUTES_UPDATED'.", + "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/SchedulerEvent" } } } }, "400": { - "description": "Invalid structure of the request or invalid attributes scope provided.", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } }, "401": { - "description": "User is not authorized to save device attributes for selected device. Most likely, User belongs to different Customer or Tenant.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "The exception was thrown during processing the request. Platform creates an audit log event about device attributes updates with action type 'ATTRIBUTES_UPDATED' that includes an error stacktrace.", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } @@ -111763,96 +112850,82 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/schedulerEvent/info/{schedulerEventId}": { + "get": { "tags": [ - "telemetry-controller" + "scheduler-event-controller" ], - "summary": "Delete device attributes (deleteDeviceAttributes)", - "description": "Delete device attributes using provided Device Id, scope and a list of keys. Referencing a non-existing Device Id will cause an error\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "deleteDeviceAttributes", + "summary": "Get Scheduler Event With Customer Info (getSchedulerEventInfoById)", + "description": "Fetch the SchedulerEventWithCustomerInfo object based on the provided scheduler event Id. Scheduler Event With Customer Info extends Scheduler Event Info object and adds 'customerTitle' - a String value representing the title of the customer which user created a Scheduler Event and 'customerIsPublic' - a boolean parameter that specifies if customer is public. See the 'Model' tab of the Response Class for more details. Referencing non-existing Scheduler Event Id will cause 'Not Found' error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getSchedulerEventInfoById", "parameters": [ { - "name": "deviceId", + "name": "schedulerEventId", "in": "path", - "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the scheduler id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - }, - { - "name": "scope", - "in": "path", - "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", - "required": true, - "schema": { - "type": "string", - "enum": [ - "SERVER_SCOPE", - "SHARED_SCOPE", - "CLIENT_SCOPE" - ] - } - }, - { - "name": "keys", - "in": "query", - "description": "A string value representing the comma-separated list of attributes keys. For example, 'active,inactivityAlarmTime'. If attribute keys contain comma, duplicate 'key' parameter for each key, for example '?key=my,key&key=my,second,key", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "key", - "in": "query", - "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } } ], "responses": { "200": { - "description": "Device attributes was removed for the selected keys in the request. Platform creates an audit log event about device attributes removal with action type 'ATTRIBUTES_DELETED'.", + "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/SchedulerEventWithCustomerInfo" } } } }, "400": { - "description": "Platform returns a bad request in case if keys or scope are not specified.", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } }, "401": { - "description": "User is not authorized to delete device attributes for selected entity. Most likely, User belongs to different Customer or Tenant.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "The exception was thrown during processing the request. Platform creates an audit log event about device attributes removal with action type 'ATTRIBUTES_DELETED' that includes an error stacktrace.", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } @@ -111940,95 +113013,80 @@ ] } }, - "/api/plugins/telemetry/{entityType}/{entityId}/attributes/{scope}": { - "post": { + "/api/schedulerEvent/{schedulerEventId}": { + "get": { "tags": [ - "telemetry-controller" + "scheduler-event-controller" ], - "summary": "Save entity attributes (saveEntityAttributesV2)", - "description": "Creates or updates the entity attributes based on Entity Id and the specified attribute scope. List of possible attribute scopes depends on the entity type: \n\n * SERVER_SCOPE - supported for all entity types;\n * SHARED_SCOPE - supported for devices.\n\nThe request payload is a JSON object with key-value format of attributes to create or update. For example:\n\n```json\n{\n \"stringKey\":\"value1\", \n \"booleanKey\":true, \n \"doubleKey\":42.0, \n \"longKey\":73, \n \"jsonKey\": {\n \"someNumber\": 42,\n \"someArray\": [1,2,3],\n \"someNestedObject\": {\"key\": \"value\"}\n }\n}\n```\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "saveEntityAttributesV2", + "summary": "Get Scheduler Event (getSchedulerEventById)", + "description": "Fetch the SchedulerEvent object based on the provided scheduler event Id. Scheduler Event extends Scheduler Event Info object and adds 'configuration' - a JSON structure of scheduler event configuration. See the 'Model' tab of the Response Class for more details. Referencing non-existing Scheduler Event Id will cause 'Not Found' error.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getSchedulerEventById", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", + "name": "schedulerEventId", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the scheduler id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } - }, - { - "name": "scope", - "in": "path", - "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", - "required": true, - "schema": { - "type": "string", - "enum": [ - "SERVER_SCOPE", - "SHARED_SCOPE" - ] - } } ], - "requestBody": { - "description": "A string value representing the json object. For example, '{\"key\":\"value\"}'. See API call description for more details.", - "content": { - "text/plain": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "Attribute from the request was created or updated. Platform creates an audit log event about entity attributes updates with action type 'ATTRIBUTES_UPDATED', and also sends event msg to the rule engine with msg type 'ATTRIBUTES_UPDATED'.", + "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/SchedulerEvent" } } } }, "400": { - "description": "Invalid structure of the request or invalid attributes scope provided.", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } }, "401": { - "description": "User is not authorized to save entity attributes for selected entity. Most likely, User belongs to different Customer or Tenant.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "The exception was thrown during processing the request. Platform creates an audit log event about entity attributes updates with action type 'ATTRIBUTES_UPDATED' that includes an error stacktrace.", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } @@ -112114,30 +113172,19 @@ "ApiKeyForm": [] } ] - } - }, - "/api/plugins/telemetry/{entityType}/{entityId}/keys/attributes": { - "get": { + }, + "delete": { "tags": [ - "telemetry-controller" + "scheduler-event-controller" ], - "summary": "Get all attribute keys (getAttributeKeys)", - "description": "Returns a set of unique attribute key names for the selected entity. The response will include merged key names set for all attribute scopes:\n\n * SERVER_SCOPE - supported for all entity types;\n * CLIENT_SCOPE - supported for devices;\n * SHARED_SCOPE - supported for devices. \n\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getAttributeKeys", + "summary": "Delete Scheduler Event (deleteSchedulerEvent)", + "description": "Deletes the scheduler event. Referencing non-existing Scheduler Event Id will cause 'Not Found' error.\n\n Security check is performed to verify that the user has 'DELETE' permission for the entity (entities).", + "operationId": "deleteSchedulerEvent", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", + "name": "schedulerEventId", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the scheduler id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" @@ -112146,17 +113193,7 @@ ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -112289,45 +113326,31 @@ ] } }, - "/api/plugins/telemetry/{entityType}/{entityId}/keys/attributes/{scope}": { - "get": { + "/api/schedulerEvent/{schedulerEventId}/enabled/{enabledValue}": { + "put": { "tags": [ - "telemetry-controller" + "scheduler-event-controller" ], - "summary": "Get all attribute keys by scope (getAttributeKeysByScope)", - "description": "Returns a set of unique attribute key names for the selected entity and attributes scope: \n\n * SERVER_SCOPE - supported for all entity types;\n * CLIENT_SCOPE - supported for devices;\n * SHARED_SCOPE - supported for devices. \n\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getAttributeKeysByScope", + "summary": "Enable or disable Scheduler Event (enableSchedulerEvent)", + "description": "Updates scheduler event with enabled = true/false. Scheduler Event extends Scheduler Event Info object and adds 'configuration' - a JSON structure of scheduler event configuration. See the 'Model' tab of the Response Class for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "enableSchedulerEvent", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", + "name": "schedulerEventId", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the scheduler id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "scope", + "name": "enabledValue", "in": "path", - "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", + "description": "Enabled or disabled scheduler", "required": true, "schema": { - "type": "string", - "enum": [ - "SERVER_SCOPE", - "SHARED_SCOPE", - "CLIENT_SCOPE" - ] + "type": "boolean" } } ], @@ -112337,10 +113360,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/SchedulerEvent" } } } @@ -112476,32 +113496,80 @@ ] } }, - "/api/plugins/telemetry/{entityType}/{entityId}/keys/timeseries": { + "/api/schedulerEvents": { "get": { "tags": [ - "telemetry-controller" + "scheduler-event-controller" ], - "summary": "Get time series keys (getTimeseriesKeys)", - "description": "Returns a set of unique time series key names for the selected entity. \n\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getTimeseriesKeys", + "summary": "Get scheduler events (getSchedulerEvents)", + "description": "Requested scheduler events must be owned by tenant or assigned to customer which user is performing the request. Scheduler Event With Customer Info extends Scheduler Event Info object and adds 'customerTitle' - a String value representing the title of the customer which user created a Scheduler Event and 'customerIsPublic' - a boolean parameter that specifies if customer is public. See the 'Model' tab of the Response Class for more details. \n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getSchedulerEvents", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int32" } }, { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "Case-insensitive 'substring' filter based on event's name, type, or customer's name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, "schema": { "type": "string" } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "query", + "description": "A string value representing the scheduler type. For example, 'generateReport'", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "edgeId", + "in": "query", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } } ], "responses": { @@ -112510,10 +113578,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/PageDataSchedulerEventWithCustomerInfo" } } } @@ -112649,141 +113714,83 @@ ] } }, - "/api/plugins/telemetry/{entityType}/{entityId}/timeseries/delete": { - "delete": { + "/api/schedulerEvents/all": { + "get": { "tags": [ - "telemetry-controller" + "scheduler-event-controller" ], - "summary": "Delete entity time series data (deleteEntityTimeseries)", - "description": "Delete time series for selected entity based on entity id, entity type and keys. Use 'deleteAllDataForKeys' to delete all time series data. Use 'startTs' and 'endTs' to specify time-range instead. Use 'deleteLatest' to delete latest value (stored in separate table for performance) if the value's timestamp matches the time-range. Use 'rewriteLatestIfDeleted' to rewrite latest value (stored in separate table for performance) if the value's timestamp matches the time-range and 'deleteLatest' param is true. The replacement value will be fetched from the 'time series' table, and its timestamp will be the most recent one before the defined time-range. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "deleteEntityTimeseries", + "summary": "Get all scheduler events (getAllSchedulerEvents)", + "description": "Requested scheduler events must be owned by tenant or assigned to customer which user is performing the request. Scheduler Event With Customer Info extends Scheduler Event Info object and adds 'customerTitle' - a String value representing the title of the customer which user created a Scheduler Event and 'customerIsPublic' - a boolean parameter that specifies if customer is public. See the 'Model' tab of the Response Class for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAllSchedulerEvents", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "keys", + "name": "type", "in": "query", - "description": "A string value representing the comma-separated list of telemetry keys. If keys are not selected, the result will return all latest time series. For example, 'temperature,humidity'. If telemetry keys contain comma, duplicate 'key' parameter for each key, for example '?key=my,key&key=my,second,key", + "description": "A string value representing the scheduler type. For example, 'generateReport'", "required": false, "schema": { "type": "string" } - }, - { - "name": "deleteAllDataForKeys", - "in": "query", - "description": "A boolean value to specify if should be deleted all data for selected keys or only data that are in the selected time range.", - "required": false, - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "startTs", - "in": "query", - "description": "A long value representing the start timestamp of removal time range in milliseconds.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTs", - "in": "query", - "description": "A long value representing the end timestamp of removal time range in milliseconds.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "deleteLatest", - "in": "query", - "description": "If the parameter is set to true, the latest telemetry can be removed, otherwise, in case that parameter is set to false the latest value will not removed.", - "required": false, - "schema": { - "type": "boolean", - "default": true - } - }, - { - "name": "rewriteLatestIfDeleted", - "in": "query", - "description": "If the parameter is set to true, the latest telemetry will be rewritten in case that current latest value was removed, otherwise, in case that parameter is set to false the new latest value will not set.", - "required": false, - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "key", - "in": "query", - "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } } ], "responses": { "200": { - "description": "Time series for the selected keys in the request was removed. Platform creates an audit log event about entity time series removal with action type 'TIMESERIES_DELETED'.", + "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/SchedulerEventWithCustomerInfo" + } } } } }, "400": { - "description": "Platform returns a bad request in case if keys list is empty or start and end timestamp values is empty when deleteAllDataForKeys is set to false.", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } }, "401": { - "description": "User is not authorized to delete entity time series for selected entity. Most likely, User belongs to different Customer or Tenant.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "The exception was thrown during processing the request. Platform creates an audit log event about entity time series removal with action type 'TIMESERIES_DELETED' that includes an error stacktrace.", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } @@ -112871,94 +113878,86 @@ ] } }, - "/api/plugins/telemetry/{entityType}/{entityId}/timeseries/{scope}": { - "post": { + "/api/schedulerEvents/list": { + "get": { "tags": [ - "telemetry-controller" + "scheduler-event-controller" ], - "summary": "Save or update time series data (saveEntityTelemetry)", - "description": "Creates or updates the entity time series data based on the Entity Id and request payload.The request payload is a JSON document with three possible formats:\n\nSimple format without timestamp. In such a case, current server time will be used: \n\n```json\n{\"temperature\": 26}\n```\n\n Single JSON object with timestamp: \n\n```json\n{\"ts\":1634712287000,\"values\":{\"temperature\":26, \"humidity\":87}}\n```\n\n JSON array with timestamps: \n\n```json\n[{\"ts\":1634712287000,\"values\":{\"temperature\":26, \"humidity\":87}}, {\"ts\":1634712588000,\"values\":{\"temperature\":25, \"humidity\":88}}]\n```\n\n The scope parameter is not used in the API call implementation but should be specified whatever value because it is used as a path variable. Referencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "saveEntityTelemetry", + "summary": "Get Scheduler Events By Ids (getSchedulerEventsByIds)", + "description": "Requested scheduler events must be owned by tenant or assigned to customer which user is performing the request. Scheduler Events allows you to schedule various types of events with flexible schedule configuration. Scheduler fires configured scheduler events according to their schedule. See the 'Model' tab of the Response Class for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getSchedulerEventsByIds", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "scope", - "in": "path", - "description": "Value is deprecated, reserved for backward compatibility and not used in the API call implementation. Specify any scope for compatibility", + "name": "schedulerEventIds", + "in": "query", + "description": "A list of scheduler event ids, separated by comma ','", "required": true, "schema": { - "type": "string", - "enum": [ - "ANY" - ] - } - } - ], - "requestBody": { - "description": "A JSON with the telemetry values. See API call description for more details.", - "content": { - "text/plain": { - "schema": { + "type": "array", + "items": { "type": "string" } } - }, - "required": true - }, + } + ], "responses": { "200": { - "description": "Time series from the request was created or updated. Platform creates an audit log event about entity time series updates with action type 'TIMESERIES_UPDATED'.", + "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/SchedulerEventInfo" + } } } } }, "400": { - "description": "Invalid structure of the request", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } }, "401": { - "description": "User is not authorized to save entity time series for selected entity. Most likely, User belongs to different Customer or Tenant.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "The exception was thrown during processing the request. Platform creates an audit log event about entity time series updates with action type 'TIMESERIES_UPDATED' that includes an error stacktrace.", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } @@ -113046,104 +114045,122 @@ ] } }, - "/api/plugins/telemetry/{entityType}/{entityId}/timeseries/{scope}/{ttl}": { - "post": { + "/api/schedulerEvents/startTime/{startTime}/endTime/{endTime}": { + "get": { "tags": [ - "telemetry-controller" + "scheduler-event-controller" ], - "summary": "Save or update time series data with TTL (saveEntityTelemetryWithTTL)", - "description": "Creates or updates the entity time series data based on the Entity Id and request payload.The request payload is a JSON document with three possible formats:\n\nSimple format without timestamp. In such a case, current server time will be used: \n\n```json\n{\"temperature\": 26}\n```\n\n Single JSON object with timestamp: \n\n```json\n{\"ts\":1634712287000,\"values\":{\"temperature\":26, \"humidity\":87}}\n```\n\n JSON array with timestamps: \n\n```json\n[{\"ts\":1634712287000,\"values\":{\"temperature\":26, \"humidity\":87}}, {\"ts\":1634712588000,\"values\":{\"temperature\":25, \"humidity\":88}}]\n```\n\n The scope parameter is not used in the API call implementation but should be specified whatever value because it is used as a path variable. \n\nThe ttl parameter takes affect only in case of Cassandra DB.Referencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "saveEntityTelemetryWithTTL", + "summary": "Get scheduler events (getSchedulerEventsByRange)", + "description": "Retrieves scheduler events filtering by event run time. Requested scheduler events must be owned by tenant or assigned to customer which user is performing the request. Scheduler Event With Customer Info extends Scheduler Event Info object and adds 'customerTitle' - a String value representing the title of the customer which user created a Scheduler Event and 'customerIsPublic' - a boolean parameter that specifies if customer is public. See the 'Model' tab of the Response Class for more details. \n\nYou can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.\n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getSchedulerEventsByRange", "parameters": [ { - "name": "entityType", + "name": "startTime", "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", + "description": "Start time filter in milliseconds for scheduler event run time", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int64" } }, { - "name": "entityId", + "name": "endTime", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "End time filter in milliseconds for scheduler event run time", "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "type", + "in": "query", + "description": "A string value representing the scheduler type. For example, 'generateReport'", + "required": false, "schema": { "type": "string" } }, { - "name": "scope", - "in": "path", - "description": "Value is deprecated, reserved for backward compatibility and not used in the API call implementation. Specify any scope for compatibility", - "required": true, + "name": "edgeId", + "in": "query", + "description": "A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": false, "schema": { "type": "string", - "enum": [ - "ANY" - ] + "format": "uuid" } }, { - "name": "ttl", - "in": "path", - "description": "A long value representing TTL (Time to Live) parameter.", - "required": true, + "name": "textSearch", + "in": "query", + "description": "Case-insensitive 'substring' filter based on event's name, type, or customer's name", + "required": false, "schema": { - "type": "integer", - "format": "int64" + "type": "string" } } ], - "requestBody": { - "description": "A JSON with the telemetry values. See API call description for more details.", - "content": { - "text/plain": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "Time series from the request was created or updated. Platform creates an audit log event about entity time series updates with action type 'TIMESERIES_UPDATED'.", + "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/SchedulerEventWithCustomerInfo" + } } } } }, "400": { - "description": "Invalid structure of the request", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } }, "401": { - "description": "User is not authorized to save entity time series for selected entity. Most likely, User belongs to different Customer or Tenant.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "The exception was thrown during processing the request. Platform creates an audit log event about entity time series updates with action type 'TIMESERIES_UPDATED' that includes an error stacktrace.", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } @@ -113231,52 +114248,22 @@ ] } }, - "/api/plugins/telemetry/{entityType}/{entityId}/values/attributes": { + "/api/secret": { "get": { "tags": [ - "telemetry-controller" + "secret-controller" ], - "summary": "Get attributes (getAttributes)", - "description": "Returns all attributes that belong to specified entity. Use optional 'keys' parameter to return specific attributes.\n Example of the result: \n\n```json\n[\n {\"key\": \"stringAttributeKey\", \"value\": \"value\", \"lastUpdateTs\": 1609459200000},\n {\"key\": \"booleanAttributeKey\", \"value\": false, \"lastUpdateTs\": 1609459200001},\n {\"key\": \"doubleAttributeKey\", \"value\": 42.2, \"lastUpdateTs\": 1609459200002},\n {\"key\": \"longKeyExample\", \"value\": 73, \"lastUpdateTs\": 1609459200003},\n {\"key\": \"jsonKeyExample\",\n \"value\": {\n \"someNumber\": 42,\n \"someArray\": [1,2,3],\n \"someNestedObject\": {\"key\": \"value\"}\n },\n \"lastUpdateTs\": 1609459200004\n }\n]\n```\n\n Referencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getAttributes", + "summary": "Get Secret info by name (getSecretInfoByName)", + "description": "\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getSecretInfoByName", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "keys", + "name": "name", "in": "query", - "description": "A string value representing the comma-separated list of attributes keys. For example, 'active,inactivityAlarmTime'. If attribute keys contain comma, duplicate 'key' parameter for each key, for example '?key=my,key&key=my,second,key", - "required": false, + "required": true, "schema": { "type": "string" } - }, - { - "name": "key", - "in": "query", - "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } } ], "responses": { @@ -113285,10 +114272,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AttributeData" - } + "$ref": "#/components/schemas/SecretInfo" } } } @@ -113422,80 +114406,31 @@ "ApiKeyForm": [] } ] - } - }, - "/api/plugins/telemetry/{entityType}/{entityId}/values/attributes/{scope}": { - "get": { + }, + "post": { "tags": [ - "telemetry-controller" + "secret-controller" ], - "summary": "Get attributes by scope (getAttributesByScope)", - "description": "Returns all attributes of a specified scope that belong to specified entity. List of possible attribute scopes depends on the entity type: \n\n * SERVER_SCOPE - supported for all entity types;\n * SHARED_SCOPE - supported for devices;\n * CLIENT_SCOPE - supported for devices. \n\nUse optional 'keys' parameter to return specific attributes.\n Example of the result: \n\n```json\n[\n {\"key\": \"stringAttributeKey\", \"value\": \"value\", \"lastUpdateTs\": 1609459200000},\n {\"key\": \"booleanAttributeKey\", \"value\": false, \"lastUpdateTs\": 1609459200001},\n {\"key\": \"doubleAttributeKey\", \"value\": 42.2, \"lastUpdateTs\": 1609459200002},\n {\"key\": \"longKeyExample\", \"value\": 73, \"lastUpdateTs\": 1609459200003},\n {\"key\": \"jsonKeyExample\",\n \"value\": {\n \"someNumber\": 42,\n \"someArray\": [1,2,3],\n \"someNestedObject\": {\"key\": \"value\"}\n },\n \"lastUpdateTs\": 1609459200004\n }\n]\n```\n\n Referencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getAttributesByScope", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "scope", - "in": "path", - "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", - "required": true, - "schema": { - "type": "string", - "enum": [ - "SERVER_SCOPE", - "SHARED_SCOPE", - "CLIENT_SCOPE" - ] - } - }, - { - "name": "keys", - "in": "query", - "description": "A string value representing the comma-separated list of attributes keys. For example, 'active,inactivityAlarmTime'. If attribute keys contain comma, duplicate 'key' parameter for each key, for example '?key=my,key&key=my,second,key", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "key", - "in": "query", - "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", - "schema": { - "type": "array", - "items": { - "type": "string" + "summary": "Save or Update Secret (saveSecret)", + "description": "Create or update the Secret. When creating secret, platform generates Secret Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Secret Id will be present in the response. Specify existing Secret Id to update the secret. Secret name is not updatable, only value could be changed. Referencing non-existing Secret Id will cause 'Not Found' error.\n\nSecret name is unique in the scope of tenant.", + "operationId": "saveSecret", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Secret" } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AttributeData" - } + "$ref": "#/components/schemas/SecretInfo" } } } @@ -113511,7 +114446,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -113631,76 +114566,23 @@ ] } }, - "/api/plugins/telemetry/{entityType}/{entityId}/values/timeseries": { + "/api/secret/names": { "get": { "tags": [ - "telemetry-controller" - ], - "summary": "Get latest time series value (getLatestTimeseries)", - "description": "Returns all time series that belong to specified entity. Use optional 'keys' parameter to return specific time series. The result is a JSON object. The format of the values depends on the 'useStrictDataTypes' parameter. By default, all time series values are converted to strings: \n\n```json\n{\n \"stringTsKey\": [{ \"value\": \"value\", \"ts\": 1609459200000}],\n \"booleanTsKey\": [{ \"value\": \"false\", \"ts\": 1609459200000}],\n \"doubleTsKey\": [{ \"value\": \"42.2\", \"ts\": 1609459200000}],\n \"longTsKey\": [{ \"value\": \"73\", \"ts\": 1609459200000}],\n \"jsonTsKey\": [{ \"value\": \"{\\\"someNumber\\\": 42,\\\"someArray\\\": [1,2,3],\\\"someNestedObject\\\": {\\\"key\\\": \\\"value\\\"}}\", \"ts\": 1609459200000}]\n}\n\n```\n\n However, it is possible to request the values without conversion ('useStrictDataTypes'=true): \n\n```json\n{\n \"stringTsKey\": [{ \"value\": \"value\", \"ts\": 1609459200000}],\n \"booleanTsKey\": [{ \"value\": false, \"ts\": 1609459200000}],\n \"doubleTsKey\": [{ \"value\": 42.2, \"ts\": 1609459200000}],\n \"longTsKey\": [{ \"value\": 73, \"ts\": 1609459200000}],\n \"jsonTsKey\": [{ \n \"value\": {\n \"someNumber\": 42,\n \"someArray\": [1,2,3],\n \"someNestedObject\": {\"key\": \"value\"}\n }, \n \"ts\": 1609459200000}]\n}\n\n```\n\n Referencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getLatestTimeseries", - "parameters": [ - { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "keys", - "in": "query", - "description": "A string value representing the comma-separated list of telemetry keys. If keys are not selected, the result will return all latest time series. For example, 'temperature,humidity'. If telemetry keys contain comma, duplicate 'key' parameter for each key, for example '?key=my,key&key=my,second,key", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "useStrictDataTypes", - "in": "query", - "description": "Enables/disables conversion of telemetry values to strings. Conversion is enabled by default. Set parameter to 'true' in order to disable the conversion.", - "required": false, - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "key", - "in": "query", - "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } + "secret-controller" ], + "summary": "Get Tenant Secret names (getSecretNames)", + "description": "Returns a page of secret names owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getSecretNames", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TsData" - } + "type": "array", + "items": { + "type": "string" } } } @@ -113835,58 +114717,34 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/secret/{id}": { + "delete": { "tags": [ - "telemetry-controller" + "secret-controller" ], - "summary": "Get time series data by read queries (getTimeseriesByReadTsKvQueries)", - "description": "Returns aggregated time series values according to queries for specified entity. ```json\n[\n {\n \"queryId\": 49,\n \"data\": [\n {\n \"ts\": 1751450399999,\n \"kv\": {\n \"key\": \"temperature\",\n \"value\": 26,\n \"doubleValue\": 26,\n \"valueAsString\": \"26.0\",\n \"dataType\": \"DOUBLE\",\n \"longValue\": null,\n \"booleanValue\": null,\n \"jsonValue\": null,\n \"strValue\": null\n },\n \"version\": null\n }\n ],\n \"lastEntryTs\": 1750264592675\n },\n {\n \"queryId\": 50,\n \"data\": [],\n \"lastEntryTs\": 1751317200000\n }\n]\n```\n\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getTimeseriesByReadTsKvQueries", + "summary": "Delete secret by ID (deleteSecret)", + "description": "Deletes the secret. Referencing non-existing Secret Id will cause an error.\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "deleteSecret", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", + "name": "id", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], - "requestBody": { - "description": "A JSON array of time series read queries.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseReadTsKvQuery" - } - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ReadTsKvQueryResult" - } + "$ref": "#/components/schemas/TbSecretDeleteResult" } } } @@ -113902,7 +114760,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -114022,172 +114880,43 @@ ] } }, - "/api/plugins/telemetry/{entityType}/{entityId}/values/timeseries/history": { - "get": { + "/api/secret/{id}/description": { + "put": { "tags": [ - "telemetry-controller" + "secret-controller" ], - "summary": "Get time series data (getTimeseriesHistory)", - "description": "Returns a range of time series values for specified entity. Returns not aggregated data by default. Use aggregation function ('agg') and aggregation interval ('interval') to enable aggregation of the results on the database / server side. The aggregation is generally more efficient then fetching all records. \n\n```json\n{\n \"temperature\": [\n {\n \"value\": 36.7,\n \"ts\": 1609459200000\n },\n {\n \"value\": 36.6,\n \"ts\": 1609459201000\n }\n ]\n}\n```\n\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getTimeseriesHistory", + "summary": "Update Secret Description", + "description": "Updates the description of the existing Secret by secretId. Only the description can be updated. Referencing a non-existing Secret Id will cause a 'Not Found' error.", + "operationId": "updateSecretDescription", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", + "name": "id", "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "keys", - "in": "query", - "description": "A string value representing the comma-separated list of telemetry keys.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "startTs", - "in": "query", - "description": "A long value representing the start timestamp of the time range in milliseconds, UTC.", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "endTs", - "in": "query", - "description": "A long value representing the end timestamp of the time range in milliseconds, UTC.", + "description": "Unique identifier of the Secret to update", "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "intervalType", - "in": "query", - "description": "A string value representing the type fo the interval.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "MILLISECONDS", - "WEEK", - "WEEK_ISO", - "MONTH", - "QUARTER" - ] - } - }, - { - "name": "interval", - "in": "query", - "description": "A long value representing the aggregation interval range in milliseconds.", - "required": false, - "schema": { - "type": "integer", - "format": "int64", - "default": 0 - } - }, - { - "name": "timeZone", - "in": "query", - "description": "A string value representing the timezone that will be used to calculate exact timestamps for 'WEEK', 'WEEK_ISO', 'MONTH' and 'QUARTER' interval types.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "limit", - "in": "query", - "description": "An integer value that represents a max number of time series data points to fetch. This parameter is used only in the case if 'agg' parameter is set to 'NONE'.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "agg", - "in": "query", - "description": "A string value representing the aggregation function. If the interval is not specified, 'agg' parameter will use 'NONE' value.", - "required": false, "schema": { "type": "string", - "enum": [ - "MIN", - "MAX", - "AVG", - "SUM", - "COUNT", - "NONE" - ] - } - }, - { - "name": "orderBy", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - }, - { - "name": "useStrictDataTypes", - "in": "query", - "description": "Enables/disables conversion of telemetry values to strings. Conversion is enabled by default. Set parameter to 'true' in order to disable the conversion.", - "required": false, - "schema": { - "type": "boolean", - "default": false + "format": "uuid" } - }, - { - "name": "key", - "in": "query", - "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", - "schema": { - "type": "array", - "items": { - "type": "string" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "New description for the Secret" } } } - ], + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TsData" - } - } + "$ref": "#/components/schemas/SecretInfo" } } } @@ -114323,95 +115052,80 @@ ] } }, - "/api/plugins/telemetry/{entityType}/{entityId}/{scope}": { - "post": { + "/api/secret/{id}/info": { + "get": { "tags": [ - "telemetry-controller" + "secret-controller" ], - "summary": "Save entity attributes (saveEntityAttributesV1)", - "description": "Creates or updates the entity attributes based on Entity Id and the specified attribute scope. List of possible attribute scopes depends on the entity type: \n\n * SERVER_SCOPE - supported for all entity types;\n * SHARED_SCOPE - supported for devices.\n\nThe request payload is a JSON object with key-value format of attributes to create or update. For example:\n\n```json\n{\n \"stringKey\":\"value1\", \n \"booleanKey\":true, \n \"doubleKey\":42.0, \n \"longKey\":73, \n \"jsonKey\": {\n \"someNumber\": 42,\n \"someArray\": [1,2,3],\n \"someNestedObject\": {\"key\": \"value\"}\n }\n}\n```\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "saveEntityAttributesV1", + "summary": "Get Secret info by Id (getSecretInfoById)", + "description": "\n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getSecretInfoById", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "scope", + "name": "id", "in": "path", - "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", "required": true, "schema": { "type": "string", - "enum": [ - "SERVER_SCOPE", - "SHARED_SCOPE" - ] + "format": "uuid" } } ], - "requestBody": { - "description": "A string value representing the json object. For example, '{\"key\":\"value\"}'. See API call description for more details.", - "content": { - "text/plain": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "Attribute from the request was created or updated. Platform creates an audit log event about entity attributes updates with action type 'ATTRIBUTES_UPDATED', and also sends event msg to the rule engine with msg type 'ATTRIBUTES_UPDATED'.", + "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/SecretInfo" } } } }, "400": { - "description": "Invalid structure of the request or invalid attributes scope provided.", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } }, "401": { - "description": "User is not authorized to save entity attributes for selected entity. Most likely, User belongs to different Customer or Tenant.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "The exception was thrown during processing the request. Platform creates an audit log event about entity attributes updates with action type 'ATTRIBUTES_UPDATED' that includes an error stacktrace.", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } @@ -114497,105 +115211,94 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/secret/{id}/value": { + "put": { "tags": [ - "telemetry-controller" + "secret-controller" ], - "summary": "Delete entity attributes (deleteEntityAttributes)", - "description": "Delete entity attributes using provided Entity Id, scope and a list of keys. This operation is idempotent: keys that do not exist are silently ignored and the response is still 200 OK. Referencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "deleteEntityAttributes", + "summary": "Update Secret value", + "description": "Updates the value of the existing Secret by secretId. Referencing a non-existing Secret Id will cause a 'Not Found' error.", + "operationId": "updateSecretValue", "parameters": [ { - "name": "entityType", - "in": "path", - "description": "A string value representing the entity type. For example, 'DEVICE'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "entityId", - "in": "path", - "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "scope", + "name": "id", "in": "path", - "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", + "description": "Unique identifier of the Secret to update", "required": true, "schema": { "type": "string", - "enum": [ - "SERVER_SCOPE", - "SHARED_SCOPE", - "CLIENT_SCOPE" - ] - } - }, - { - "name": "keys", - "in": "query", - "description": "A string value representing the comma-separated list of attributes keys. For example, 'active,inactivityAlarmTime'. If attribute keys contain comma, duplicate 'key' parameter for each key, for example '?key=my,key&key=my,second,key", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "key", - "in": "query", - "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", - "schema": { - "type": "array", - "items": { - "type": "string" - } + "format": "uuid" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "New value for the Secret" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "Entity attributes were removed for the selected keys in the request (keys that did not exist are silently ignored). Platform creates an audit log event about entity attributes removal with action type 'ATTRIBUTES_DELETED'.", + "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/SecretInfo" } } } }, "400": { - "description": "Platform returns a bad request in case if keys or scope are not specified.", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } }, "401": { - "description": "User is not authorized to delete entity attributes for selected entity. Most likely, User belongs to different Customer or Tenant.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "The exception was thrown during processing the request. Platform creates an audit log event about entity attributes removal with action type 'ATTRIBUTES_DELETED' that includes an error stacktrace.", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } } } } @@ -114683,31 +115386,77 @@ ] } }, - "/api/tenant": { - "post": { + "/api/secrets": { + "get": { "tags": [ - "tenant-controller" + "secret-controller" ], - "summary": "Create Or update Tenant (saveTenant)", - "description": "Create or update the Tenant. When creating tenant, platform generates Tenant Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). Default Rule Chain and Device profile are also generated for the new tenants automatically. The newly created Tenant Id will be present in the response. Specify existing Tenant Id id to update the Tenant. Referencing non-existing Tenant Id will cause 'Not Found' error.Remove 'id', 'tenantId' from the request body example (below) to create new Tenant entity.\n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "saveTenant", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Tenant" - } + "summary": "Get Tenant Secret infos (getSecretInfos)", + "description": "Returns a page of secret infos owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getSecretInfos", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "required": true - }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the secret name and description.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "name" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Tenant" + "$ref": "#/components/schemas/PageDataSecretInfo" } } } @@ -114723,7 +115472,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -114843,23 +115592,30 @@ ] } }, - "/api/tenant/info/{tenantId}": { + "/api/noauth/selfRegistration/privacyPolicy": { "get": { "tags": [ - "tenant-controller" + "self-registration-controller" ], - "summary": "Get Tenant Info (getTenantInfoById)", - "description": "Fetch the Tenant Info object based on the provided Tenant Id. The Tenant Info object extends regular Tenant object and includes Tenant Profile name. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getTenantInfoById", + "summary": "Get Privacy Policy for Self Registration form (getPrivacyPolicy)", + "description": "Fetch the Privacy Policy based on the domain name from the request. Available for non-authorized users. ", + "operationId": "getPrivacyPolicy", "parameters": [ { - "name": "tenantId", - "in": "path", - "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, + "name": "pkgName", + "in": "query", + "required": false, "schema": { "type": "string" } + }, + { + "name": "platform", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/PlatformType" + } } ], "responses": { @@ -114868,7 +115624,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TenantInfo" + "type": "string" } } } @@ -114993,34 +115749,38 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/tenant/{tenantId}": { + "/api/noauth/selfRegistration/signUpSelfRegistrationParams": { "get": { "tags": [ - "tenant-controller" + "self-registration-controller" ], - "summary": "Get Tenant (getTenantById)", - "description": "Fetch the Tenant object based on the provided Tenant Id. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getTenantById", + "summary": "Get Self Registration form parameters without authentication (getSignUpSelfRegistrationParams)", + "description": "Fetch the Self Registration parameters based on the domain name from the request. Available for non-authorized users. Contains the information to customize the sign-up form.", + "operationId": "getSignUpSelfRegistrationParams", "parameters": [ { - "name": "tenantId", - "in": "path", - "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, + "name": "pkgName", + "in": "query", + "required": false, "schema": { "type": "string" } + }, + { + "name": "platformType", + "in": "query", + "description": "Platform type", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ANDROID", + "IOS" + ] + } } ], "responses": { @@ -115029,7 +115789,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Tenant" + "$ref": "#/components/schemas/SignUpSelfRegistrationParams" } } } @@ -115154,37 +115914,45 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] - }, - "delete": { + } + } + }, + "/api/noauth/selfRegistration/termsOfUse": { + "get": { "tags": [ - "tenant-controller" + "self-registration-controller" ], - "summary": "Delete Tenant (deleteTenant)", - "description": "Deletes the tenant, it's customers, rule chains, devices and all other related entities. Referencing non-existing tenant Id will cause an error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "deleteTenant", + "summary": "Get Terms of Use for Self Registration form (getTermsOfUse)", + "description": "Fetch the Terms of Use based on the domain name from the request. Available for non-authorized users. ", + "operationId": "getTermsOfUse", "parameters": [ { - "name": "tenantId", - "in": "path", - "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, + "name": "pkgName", + "in": "query", + "required": false, "schema": { "type": "string" } + }, + { + "name": "platform", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/PlatformType" + } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } }, "400": { "description": "Bad Request", @@ -115306,99 +116074,24 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/tenantInfos": { + "/api/selfRegistration/selfRegistrationParams": { "get": { "tags": [ - "tenant-controller" - ], - "summary": "Get Tenants Info (getTenants)", - "description": "Returns a page of tenant info objects registered in the platform. The Tenant Info object extends regular Tenant object and includes Tenant Profile name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "getTenantInfos", - "parameters": [ - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the tenant name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "tenantProfileName", - "title", - "email", - "country", - "state", - "city", - "address", - "address2", - "zip", - "phone", - "email" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } + "self-registration-controller" ], + "summary": "Get Self Registration parameters (getSelfRegistrationParams)", + "description": "Fetch the Self Registration parameters object for the tenant of the current user. \n\nAvailable for users with 'TENANT_ADMIN' authority.\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", + "operationId": "getWebSelfRegistrationParams", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataTenantInfo" + "$ref": "#/components/schemas/SelfRegistrationParams" } } } @@ -115532,89 +116225,31 @@ "ApiKeyForm": [] } ] - } - }, - "/api/tenants": { - "get": { + }, + "post": { "tags": [ - "tenant-controller" + "self-registration-controller" ], - "summary": "Get Tenants (getTenants)", - "description": "Returns a page of tenants registered in the platform. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "getTenants", - "parameters": [ - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the tenant name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "title", - "email", - "country", - "state", - "city", - "address", - "address2", - "zip", - "phone", - "email" - ] + "summary": "Create Or Update Self Registration parameters (saveSelfRegistrationParams)", + "description": "Creates or Updates the Self Registration parameters. When creating, platform generates Admin Settings Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Admin Settings Id will be present in the response. Specify existing Admin Settings Id to update the Self Registration parameters. Referencing non-existing Admin Settings Id will cause 'Not Found' error.\n\nSelf Registration allows users to signup for using the platform and automatically create a Customer account for them. You may configure default dashboard and user roles that will be assigned for this Customer. This allows you to build out-of-the-box solutions for customers. Ability to white-label the login and main pages helps to brand the platform.\n\nAvailable for users with 'TENANT_ADMIN' authority.\n\nSecurity check is performed to verify that the user has 'WRITE' permission for the white labeling resource.", + "operationId": "saveWebSelfRegistrationParams", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebSelfRegistrationParams" + } } }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] - } - } - ], + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataTenant" + "$ref": "#/components/schemas/WebSelfRegistrationParams" } } } @@ -115630,7 +116265,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -115748,43 +116383,16 @@ "ApiKeyForm": [] } ] - } - }, - "/api/tenants/list": { - "get": { + }, + "delete": { "tags": [ - "tenant-controller" - ], - "summary": "Get Tenants By Ids (getTenantsByIds)", - "description": "Fetch Tenant objects based on the provided ids. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "getTenantsByIds", - "parameters": [ - { - "name": "tenantIds", - "in": "query", - "description": "A list of tenant ids, separated by comma ','", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } + "self-registration-controller" ], + "summary": "deleteWebSelfRegistrationParams", + "operationId": "deleteWebSelfRegistrationParams", "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Tenant" - } - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -115917,31 +116525,54 @@ ] } }, - "/api/tenantProfile": { + "/api/noauth/activateByEmailCode": { "post": { "tags": [ - "tenant-profile-controller" + "sign-up-controller" ], - "summary": "Create Or update Tenant Profile (saveTenantProfile)", - "description": "Create or update the Tenant Profile. When creating tenant profile, platform generates Tenant Profile Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Tenant Profile Id will be present in the response. Specify existing Tenant Profile Id id to update the Tenant Profile. Referencing non-existing Tenant Profile Id will cause 'Not Found' error. \n\nUpdate of the tenant profile configuration will cause immediate recalculation of API limits for all affected Tenants. \n\nThe **'profileData'** object is the part of Tenant Profile that defines API limits and Rate limits. \n\nYou have an ability to define maximum number of devices ('maxDevice'), assets ('maxAssets') and other entities. You may also define maximum number of messages to be processed per month ('maxTransportMessages', 'maxREExecutions', etc). The '*RateLimit' defines the rate limits using simple syntax. For example, '1000:1,20000:60' means up to 1000 events per second but no more than 20000 event per minute. Let's review the example of tenant profile data below: \n\n```json\n{\n \"name\": \"Your name\",\n \"description\": \"Your description\",\n \"isolatedTbRuleEngine\": false,\n \"profileData\": {\n \"configuration\": {\n \"type\": \"DEFAULT\",\n \"maxDevices\": 0,\n \"maxAssets\": 0,\n \"maxCustomers\": 0,\n \"maxUsers\": 0,\n \"maxDashboards\": 0,\n \"maxRuleChains\": 0,\n \"maxResourcesInBytes\": 0,\n \"maxOtaPackagesInBytes\": 0,\n \"maxResourceSize\": 0,\n \"transportTenantMsgRateLimit\": \"1000:1,20000:60\",\n \"transportTenantTelemetryMsgRateLimit\": \"1000:1,20000:60\",\n \"transportTenantTelemetryDataPointsRateLimit\": \"1000:1,20000:60\",\n \"transportDeviceMsgRateLimit\": \"20:1,600:60\",\n \"transportDeviceTelemetryMsgRateLimit\": \"20:1,600:60\",\n \"transportDeviceTelemetryDataPointsRateLimit\": \"20:1,600:60\",\n \"transportGatewayMsgRateLimit\": \"20:1,600:60\",\n \"transportGatewayTelemetryMsgRateLimit\": \"20:1,600:60\",\n \"transportGatewayTelemetryDataPointsRateLimit\": \"20:1,600:60\",\n \"transportGatewayDeviceMsgRateLimit\": \"20:1,600:60\",\n \"transportGatewayDeviceTelemetryMsgRateLimit\": \"20:1,600:60\",\n \"transportGatewayDeviceTelemetryDataPointsRateLimit\": \"20:1,600:60\",\n \"integrationMsgsPerTenantRateLimit\": \"20:1,600:60\",\n \"integrationMsgsPerDeviceRateLimit\": \"20:1,600:60\",\n \"integrationMsgsPerAssetRateLimit\": \"20:1,600:60\",\n \"maxTransportMessages\": 10000000,\n \"maxTransportDataPoints\": 10000000,\n \"maxREExecutions\": 4000000,\n \"maxJSExecutions\": 5000000,\n \"maxDPStorageDays\": 0,\n \"maxRuleNodeExecutionsPerMessage\": 50,\n \"maxDebugModeDurationMinutes\": 15,\n \"maxEmails\": 0,\n \"maxSms\": 0,\n \"maxCreatedAlarms\": 1000,\n \"defaultStorageTtlDays\": 0,\n \"alarmsTtlDays\": 0,\n \"rpcTtlDays\": 0,\n \"queueStatsTtlDays\": 0,\n \"ruleEngineExceptionsTtlDays\": 0,\n \"blobEntityTtlDays\": 0,\n \"warnThreshold\": 0,\n \"maxCalculatedFieldsPerEntity\": 100,\n \"maxArgumentsPerCF\": 10,\n \"minAllowedScheduledUpdateIntervalInSecForCF\": 10,\n \"maxRelationLevelPerCfArgument\": 2,\n \"maxRelatedEntitiesToReturnPerCfArgument\": 1000,\n \"maxDataPointsPerRollingArg\": 1000,\n \"maxStateSizeInKBytes\": 512,\n \"maxSingleValueArgumentSizeInKBytes\": 32, \"minAllowedDeduplicationIntervalInSecForCF\": 10, \"minAllowedAggregationIntervalInSecForCF\": 60, \"intermediateAggregationIntervalInSecForCF\": 300, \"cfReevaluationCheckInterval\": 60, \"alarmsReevaluationInterval\": 60 }\n },\n \"default\": false\n}\n```Remove 'id', from the request body example (below) to create new Tenant Profile entity.\n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "saveTenantProfile", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TenantProfile" - } + "summary": "Activate and login using code from Email (activateUserByEmailCode)", + "description": "Activate the user using code(link) from the activation email and return the JWT Token. Sends the notification and email about user activation. Checks that user was not activated yet.", + "operationId": "activateUserByEmailCode", + "parameters": [ + { + "name": "emailCode", + "in": "query", + "description": "Activation token.", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "pkgName", + "in": "query", + "description": "Optional package name of the mobile application.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform type", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ANDROID", + "IOS" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TenantProfile" + "$ref": "#/components/schemas/JwtPair" } } } @@ -116066,34 +116697,48 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/tenantProfile/{tenantProfileId}": { + "/api/noauth/activateEmail": { "get": { "tags": [ - "tenant-profile-controller" + "sign-up-controller" ], - "summary": "Get Tenant Profile (getTenantProfileById)", - "description": "Fetch the Tenant Profile object based on the provided Tenant Profile Id. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "getTenantProfileById", + "summary": "Activate User using code from Email (activateEmail)", + "description": "Activate the user using code(link) from the activation email. Validates the code an redirects according to the signup flow. Checks that user was not activated yet.", + "operationId": "activateEmail", "parameters": [ { - "name": "tenantProfileId", - "in": "path", - "description": "A string value representing the tenant profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "emailCode", + "in": "query", + "description": "Activation token.", "required": true, "schema": { "type": "string" } + }, + { + "name": "pkgName", + "in": "query", + "description": "Optional package name of the mobile application.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform type", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ANDROID", + "IOS" + ] + } } ], "responses": { @@ -116102,7 +116747,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TenantProfile" + "type": "string" } } } @@ -116227,37 +116872,58 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] - }, - "delete": { + } + } + }, + "/api/noauth/cloud/activateByEmailCode": { + "post": { "tags": [ - "tenant-profile-controller" + "sign-up-controller" ], - "summary": "Delete Tenant Profile (deleteTenantProfile)", - "description": "Deletes the tenant profile. Referencing non-existing tenant profile Id will cause an error. Referencing profile that is used by the tenants will cause an error. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "deleteTenantProfile", + "summary": "activateCloudUserByEmailCode", + "operationId": "activateCloudUserByEmailCode", "parameters": [ { - "name": "tenantProfileId", - "in": "path", - "description": "A string value representing the tenant profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "emailCode", + "in": "query", "required": true, "schema": { "type": "string" } + }, + { + "name": "pkgName", + "in": "query", + "description": "Optional package name of the mobile application.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform type", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ANDROID", + "IOS" + ] + } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JwtPair" + } + } + } }, "400": { "description": "Bad Request", @@ -116270,7 +116936,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -116379,34 +117045,46 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/tenantProfile/{tenantProfileId}/default": { - "post": { + "/api/noauth/cloud/activateEmail": { + "get": { "tags": [ - "tenant-profile-controller" + "sign-up-controller" ], - "summary": "Make tenant profile default (setDefaultTenantProfile)", - "description": "Makes specified tenant profile to be default. Referencing non-existing tenant profile Id will cause an error. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "setDefaultTenantProfile", + "summary": "activateCloudEmail", + "operationId": "activateCloudEmail", "parameters": [ { - "name": "tenantProfileId", - "in": "path", - "description": "A string value representing the tenant profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "emailCode", + "in": "query", "required": true, "schema": { "type": "string" } + }, + { + "name": "pkgName", + "in": "query", + "description": "Optional package name of the mobile application.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform type", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ANDROID", + "IOS" + ] + } } ], "responses": { @@ -116415,7 +117093,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TenantProfile" + "type": "string" } } } @@ -116431,7 +117109,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -116540,32 +117218,48 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/tenantProfileInfo/default": { + "/api/noauth/cloud/login": { "get": { "tags": [ - "tenant-profile-controller" + "sign-up-controller" + ], + "summary": "Cloud mobile Login redirect (cloudMobileLogin)", + "description": "This method generates redirect to the special link that is handled by mobile application. Useful for email verification flow on cloud mobile app.", + "operationId": "cloudMobileLogin", + "parameters": [ + { + "name": "pkgName", + "in": "query", + "description": "Mobile app package name. Used to identify the application and build the redirect link.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform type", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ANDROID", + "IOS" + ] + } + } ], - "summary": "Get default Tenant Profile Info (getDefaultTenantProfileInfo)", - "description": "Fetch the default Tenant Profile Info object based. Tenant Profile Info is a lightweight object that contains only id and name of the profile. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "getDefaultTenantProfileInfo", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityInfo" + "type": "string" } } } @@ -116690,46 +117384,50 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/tenantProfileInfo/{tenantProfileId}": { - "get": { + "/api/noauth/cloud/resendEmailActivation": { + "post": { "tags": [ - "tenant-profile-controller" + "sign-up-controller" ], - "summary": "Get Tenant Profile Info (getTenantProfileInfoById)", - "description": "Fetch the Tenant Profile Info object based on the provided Tenant Profile Id. Tenant Profile Info is a lightweight object that contains only id and name of the profile. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "getTenantProfileInfoById", + "summary": "resendCloudEmailActivation", + "operationId": "resendCloudEmailActivation", "parameters": [ { - "name": "tenantProfileId", - "in": "path", - "description": "A string value representing the tenant profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "name": "email", + "in": "query", "required": true, "schema": { "type": "string" } + }, + { + "name": "pkgName", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "platform", + "in": "query", + "description": "Platform type", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ANDROID", + "IOS" + ] + } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityInfo" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -116742,7 +117440,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -116851,78 +117549,37 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/tenantProfileInfos": { + "/api/noauth/login": { "get": { "tags": [ - "tenant-profile-controller" + "sign-up-controller" ], - "summary": "Get Tenant Profiles Info (getTenantProfileInfos)", - "description": "Returns a page of tenant profile info objects registered in the platform. Tenant Profile Info is a lightweight object that contains only id and name of the profile. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "getTenantProfileInfos", + "summary": "Mobile Login redirect (mobileLogin)", + "description": "This method generates redirect to the special link that is handled by mobile application. Useful for email verification flow on mobile app.", + "operationId": "mobileLogin", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", + "name": "pkgName", "in": "query", - "description": "Sequence number of page starting from 0", + "description": "Mobile app package name. Used to identify the application and build the redirect link.", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the tenant profile name.", - "required": false, "schema": { "type": "string" } }, { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "id", - "name" - ] - } - }, - { - "name": "sortOrder", + "name": "platform", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, + "description": "Platform type", + "required": true, "schema": { "type": "string", "enum": [ - "ASC", - "DESC" + "ANDROID", + "IOS" ] } } @@ -116933,7 +117590,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataEntityInfo" + "type": "string" } } } @@ -117058,94 +117715,54 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/tenantProfiles": { - "get": { + "/api/noauth/resendEmailActivation": { + "post": { "tags": [ - "tenant-profile-controller" + "sign-up-controller" ], - "summary": "Get Tenant Profiles (getTenantProfiles)", - "description": "Returns a page of tenant profiles registered in the platform. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "getTenantProfiles", + "summary": "Resend Activation Email (resendEmailActivation)", + "description": "Request to resend the activation email for the user. Checks that user was not activated yet.", + "operationId": "resendEmailActivation", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", + "name": "email", "in": "query", - "description": "Sequence number of page starting from 0", + "description": "Email of the user.", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the tenant profile name.", - "required": false, "schema": { "type": "string" - } + }, + "example": "john.doe@company.com" }, { - "name": "sortProperty", + "name": "pkgName", "in": "query", - "description": "Property of entity to sort by", + "description": "Optional package name of the mobile application.", "required": false, "schema": { - "type": "string", - "enum": [ - "createdTime", - "name", - "description", - "isDefault" - ] + "type": "string" } }, { - "name": "sortOrder", + "name": "platform", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "description": "Platform type", "required": false, "schema": { "type": "string", "enum": [ - "ASC", - "DESC" + "ANDROID", + "IOS" ] } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PageDataTenantProfile" - } - } - } + "description": "OK" }, "400": { "description": "Bad Request", @@ -117158,7 +117775,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -117267,48 +117884,34 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/tenantProfiles/list": { - "get": { + "/api/noauth/signup": { + "post": { "tags": [ - "tenant-profile-controller" + "sign-up-controller" ], - "summary": "Get Tenant Profile list (getTenantProfileList)", - "operationId": "getTenantProfileList", - "parameters": [ - { - "name": "ids", - "in": "query", - "description": "Comma-separated list of tenant profile ids", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string" + "summary": "User Sign Up (signUp)", + "description": "Process user sign up request. Creates the Customer and corresponding User based on self Registration parameters for the domain. See [Self Registration Controller](/swagger-ui.html#/self-registration-controller) for more details. The result is either 'SUCCESS' or 'INACTIVE_USER_EXISTS'. If Success, the user will receive an email with instruction to activate the account. The content of the email is customizable via the mail templates.", + "operationId": "signUp", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SignUpRequest" } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TenantProfile" - } + "$ref": "#/components/schemas/SignUpResult" } } } @@ -117324,7 +117927,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -117433,59 +118036,23 @@ } } } - }, - "security": [ - { - "HttpLoginForm": [] - }, - { - "ApiKeyForm": [] - } - ] + } } }, - "/api/noauth/translation/login/{localeCode}": { + "/api/noauth/signup/recaptchaParams": { "get": { "tags": [ - "translation-controller" - ], - "summary": "Get system translation for login page", - "description": "Fetch the end-user translation for specified locale.", - "operationId": "getLoginPageTranslation", - "parameters": [ - { - "name": "localeCode", - "in": "path", - "description": "Locale code (e.g. 'en_US').", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "If-None-Match", - "in": "header", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "Accept-Encoding", - "in": "header", - "required": false, - "schema": { - "type": "string" - } - } + "sign-up-controller" ], + "summary": "getRecaptchaParams", + "operationId": "getRecaptchaParams", "responses": { "200": { - "description": "Translation for login page in specified locale.", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/CaptchaClientParams" } } } @@ -117613,21 +118180,21 @@ } } }, - "/api/translation/availableJavaLocales": { - "get": { + "/api/signup/acceptPrivacyPolicy": { + "post": { "tags": [ - "translation-controller" + "sign-up-controller" ], - "summary": "Get list of available java locales (getAvailableJavaLocales)", - "description": "The result is map where key is locale code and value is locale language and country", - "operationId": "getAvailableJavaLocales", + "summary": "Accept privacy policy (acceptPrivacyPolicy)", + "description": "Accept privacy policy by the current user.", + "operationId": "acceptPrivacyPolicy", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/JwtPair" } } } @@ -117643,7 +118210,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -117763,21 +118330,20 @@ ] } }, - "/api/translation/availableLocales": { - "get": { + "/api/signup/acceptPrivacyPolicyAndTermsOfUse": { + "post": { "tags": [ - "translation-controller" + "sign-up-controller" ], - "summary": "Get list of available locales (getAvailableLocales)", - "description": "Fetch the list of customized locales from all levels\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", - "operationId": "getAvailableLocales", + "summary": "acceptPrivacyPolicyAndTermsOfUse", + "operationId": "acceptPrivacyPolicyAndTermsOfUse", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/JwtPair" } } } @@ -117793,7 +118359,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -117913,31 +118479,21 @@ ] } }, - "/api/translation/edit/basic/{localeCode}": { - "get": { + "/api/signup/acceptTermsOfUse": { + "post": { "tags": [ - "translation-controller" - ], - "summary": "Get end-user multi-translation for basic edit (getTranslationForBasicEdit)", - "description": "Fetch the translation info map where value is info object containing key translation, origin translation, translation of parent level, translation status.", - "operationId": "getTranslationForBasicEdit", - "parameters": [ - { - "name": "localeCode", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "sign-up-controller" ], + "summary": "Accept Terms of Use (acceptTermsOfUse)", + "description": "Accept Terms of Use by the current user.", + "operationId": "acceptTermsOfUse", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/JwtPair" } } } @@ -117953,7 +118509,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -118073,48 +118629,20 @@ ] } }, - "/api/translation/full/{localeCode}": { + "/api/signup/displayWelcome": { "get": { "tags": [ - "translation-controller" - ], - "summary": "Get end-user all-to-one translation (getFullTranslation)", - "description": "Fetch the end-user translation for specified locale. The result is the merge of user custom translation, system language translation and default locale translation.", - "operationId": "getFullTranslation", - "parameters": [ - { - "name": "localeCode", - "in": "path", - "description": "Locale code (e.g. 'en_US').", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "If-None-Match", - "in": "header", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "Accept-Encoding", - "in": "header", - "required": false, - "schema": { - "type": "string" - } - } + "sign-up-controller" ], + "summary": "isDisplayWelcome", + "operationId": "isDisplayWelcome", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JsonNode" + "type": "boolean" } } } @@ -118250,33 +118778,163 @@ ] } }, - "/api/translation/full/{localeCode}/download": { - "get": { + "/api/signup/notDisplayWelcome": { + "post": { "tags": [ - "translation-controller" + "sign-up-controller" ], - "summary": "Download end-user all-to-one translation (downloadFullTranslation)", - "description": "Fetch the end-user translation for the specified locale. The result is a json file with merged user custom translation, system language translation and default locale translation.", - "operationId": "downloadFullTranslation", - "parameters": [ - { - "name": "localeCode", - "in": "path", - "description": "Locale code (e.g. 'en_US').", - "required": true, - "schema": { - "type": "string" + "summary": "setNotDisplayWelcome", + "operationId": "setNotDisplayWelcome", + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] } + ] + } + }, + "/api/signup/privacyPolicyAccepted": { + "get": { + "tags": [ + "sign-up-controller" ], + "summary": "Check privacy policy (privacyPolicyAccepted)", + "description": "Checks that current user accepted the privacy policy.", + "operationId": "privacyPolicyAccepted", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string", - "format": "binary" + "type": "boolean" } } } @@ -118412,27 +119070,25 @@ ] } }, - "/api/translation/info": { - "get": { + "/api/signup/tenantAccount": { + "post": { "tags": [ - "translation-controller" + "sign-up-controller" ], - "summary": "Get Translation info (getTranslationInfos)", - "description": "Fetch the list of customized locales and corresponding details such as language display name, country display name and translation progress percentage.\n\n Response example: \n\n```json\n[\n {\n \"localeCode\": \"uk_UA\",\n \"language\": \"Ukrainian (українська)\",\n \"country\": \"Україна\",\n \"progress\": 32\n },\n {\n \"localeCode\": \"es_ES\",\n \"language\": \"Spanish (español)\",\n \"country\": \"España\",\n \"progress\": 79\n }]\n```\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", - "operationId": "getTranslationInfos", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TranslationInfo" - } - } + "summary": "deleteTenantAccount", + "operationId": "deleteTenantAccount", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTenantRequest" } } + } + }, + "responses": { + "200": { + "description": "OK" }, "400": { "description": "Bad Request", @@ -118445,7 +119101,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -118565,21 +119221,21 @@ ] } }, - "/api/trendz/summary": { + "/api/signup/termsOfUseAccepted": { "get": { "tags": [ - "trendz-api-controller" + "sign-up-controller" ], - "summary": "Get Trendz Summary (getTrendzSummary)", - "description": "Fetch the Trendz summary object. Can only be used if Trendz is already synchronized and integration is enabled. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getTrendzSummary", + "summary": "Check Terms Of User (termsOfUseAccepted)", + "description": "Checks that current user accepted the privacy policy.", + "operationId": "termsOfUseAccepted", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TrendzSummary" + "type": "boolean" } } } @@ -118715,21 +119371,32 @@ ] } }, - "/api/trendz/usage": { - "get": { + "/api/solution/export": { + "post": { "tags": [ - "trendz-api-controller" + "solution-export-import-controller" ], - "summary": "Get Trendz Usage (getTrendzUsage)", - "description": "Fetch the Trendz usage object. Can only be used if Trendz is already synchronized and integration is enabled. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getTrendzUsage", + "summary": "Export Solution (exportSolution)", + "description": "Exports a set of entities as a portable solution package. The request specifies entities to include via 'internalIds' (server-internal UUIDs) and/or 'externalIds' (looked up by the entity's stored externalId within the current tenant); at least one of the two collections must be non-empty, and entities reached via both sides are deduplicated. Optional export settings control inclusion of relations, attributes, and credentials. All resolved entities must belong to the current tenant. The response contains the solution data (entities grouped by type) and any dependency warnings (e.g. when an exported device profile references a rule chain that was not included in the export). The solution data can later be imported into the same or a different tenant via the import endpoint.\n\nAvailable for users with 'TENANT_ADMIN' authority. Requires VERSION_CONTROL WRITE permission.", + "operationId": "exportSolution", + "requestBody": { + "description": "Export request with internal and/or external entity IDs and optional settings.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SolutionExportRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TrendzUsage" + "$ref": "#/components/schemas/SolutionExportResponse" } } } @@ -118745,7 +119412,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -118865,80 +119532,193 @@ ] } }, - "/api/trendz/view/all": { - "get": { + "/api/solution/import": { + "post": { "tags": [ - "trendz-api-controller" + "solution-export-import-controller" ], - "summary": "Get Trendz Views (getTrendzViews)", - "description": "Returns a page of Trendz views that are available for the current user. Can only be used if Trendz is already synchronized and integration is enabled. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getTrendzViews", - "parameters": [ - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + "summary": "Import Solution (importSolution)", + "description": "Imports a solution package into the current tenant. Before importing, the endpoint checks for name conflicts with existing entities in the tenant. If name conflicts are detected, the import is rejected with HTTP 409 (Conflict). The import is transactional — if any entity fails to import, all changes are rolled back (all-or-nothing). Entities are imported in dependency order with a two-pass resolution for circular references (e.g. rule chains referencing each other).\n\nAvailable for users with 'TENANT_ADMIN' authority. Requires VERSION_CONTROL WRITE permission.", + "operationId": "importSolution", + "requestBody": { + "description": "Solution data exported via the export endpoint.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SolutionData" + } } }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", - "required": true, - "schema": { - "type": "integer", - "format": "int32" + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SolutionImportResult" + } + } } }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the Trendz view name.", - "required": false, - "schema": { - "type": "string" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "name", - "createdAt", - "updatedAt", - "favorite" - ] + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] } + ] + } + }, + "/api/solution/validate": { + "post": { + "tags": [ + "solution-export-import-controller" ], + "summary": "Validate Solution (validateSolution)", + "description": "Performs a dry-run validation of a solution without modifying any data. Detects duplicate entities within the solution, identifies name conflicts with existing entities in the current tenant, and reports missing dependency references (e.g. a device profile referencing an absent rule chain). The result indicates whether the solution is safe to import (valid=true) and lists any conflicts or warnings.\n\nAvailable for users with 'TENANT_ADMIN' authority. Requires VERSION_CONTROL WRITE permission.", + "operationId": "validateSolution", + "requestBody": { + "description": "Solution data to validate.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SolutionData" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataTrendzViewConfigLite" + "$ref": "#/components/schemas/SolutionValidationResult" } } } @@ -118954,7 +119734,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -119074,32 +119854,20 @@ ] } }, - "/api/trendz/view/{viewId}": { + "/api/tenant/subscription": { "get": { "tags": [ - "trendz-api-controller" - ], - "summary": "Get Trendz View by Id (getTrendzViewById)", - "description": "Fetch the Trendz View object based on the provided Trendz View Id. Can only be used if Trendz is already synchronized and integration is enabled. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "getTrendzViewById", - "parameters": [ - { - "name": "viewId", - "in": "path", - "description": "A string value representing the Trendz view id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - } + "subscription-controller" ], + "summary": "getTenantSubscription", + "operationId": "getTenantSubscription", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TrendzViewConfig" + "$ref": "#/components/schemas/SubscriptionDetails" } } } @@ -119235,21 +120003,20 @@ ] } }, - "/api/trendz/config": { + "/api/tenant/subscription/mergedProfileConfig": { "get": { "tags": [ - "trendz-controller" + "subscription-controller" ], - "summary": "Get Trendz configuration (getTrendzConfig)", - "description": "Retrieves Trendz configuration (URLs). Returns trendzUrl and tbUrl.\n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "getTrendzConfig", + "summary": "getMergedTenantProfileConfiguration", + "operationId": "getMergedTenantProfileConfiguration", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TrendzConfiguration" + "$ref": "#/components/schemas/DefaultTenantProfileConfiguration" } } } @@ -119383,31 +120150,22 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/tenant/subscription/trendzUsed": { + "get": { "tags": [ - "trendz-controller" + "subscription-controller" ], - "summary": "Save Trendz configuration (saveTrendzConfig)", - "description": "Saves Trendz configuration (URLs only, without triggering synchronization). Request body example:\n```json\n{\n \"trendzUrl\": \"https://trendz.domain.com\",\n \"tbUrl\": \"https://thingsboard.domain.com\"\n}\n```\n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "saveTrendzConfig", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TrendzConfiguration" - } - } - }, - "required": true - }, + "summary": "trendzUsed", + "operationId": "trendzUsed", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TrendzConfiguration" + "type": "boolean" } } } @@ -119423,7 +120181,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -119543,21 +120301,20 @@ ] } }, - "/api/trendz/connect": { - "post": { + "/api/tenant/subscription/usage": { + "get": { "tags": [ - "trendz-controller" + "subscription-controller" ], - "summary": "Connect to Trendz (connectToTrendz)", - "description": "Initiates synchronization with Trendz (Connect button action). Uses Trendz configuration from settings or falls back to environment variables. Generates API key, saves configuration, checks Trendz version, and performs initial sync. \n\nAvailable for users with 'SYS_ADMIN' authority.", - "operationId": "connectToTrendz", + "summary": "getTenantSubscriptionUsage", + "operationId": "getTenantSubscriptionUsage", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TrendzSynchronizationResult" + "$ref": "#/components/schemas/SubscriptionUsage" } } } @@ -119573,7 +120330,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -119693,21 +120450,30 @@ ] } }, - "/api/trendz/healthcheck": { + "/api/tenantProfile/{tenantProfileId}/profileConfig": { "get": { "tags": [ - "trendz-controller" + "subscription-controller" + ], + "summary": "getTenantProfileConfigurationById", + "operationId": "getTenantProfileConfigurationById", + "parameters": [ + { + "name": "tenantProfileId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Perform Trendz healthcheck (performTrendzHealthcheck)", - "description": "Performs healthcheck for Trendz integration. Returns version, type, status, and message. Can only be performed if Trendz is already synchronized and integration is enabled.\n\nAvailable for any authorized user. ", - "operationId": "performTrendzHealthcheck", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TrendzHealthcheckResult" + "$ref": "#/components/schemas/DefaultTenantProfileConfiguration" } } } @@ -119843,17 +120609,111 @@ ] } }, - "/api/trendz/public/connect": { - "post": { + "/api/resource": { + "get": { "tags": [ - "trendz-controller" + "tb-resource-controller" + ], + "summary": "Get Resource Infos (getResources)", + "description": "Returns a page of Resource Info objects owned by tenant or sysadmin. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Resource Info is a lightweight object that includes main information about the Resource excluding the heavyweight data. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getResources", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "resourceType", + "in": "query", + "description": "A string value representing the resource type.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "LWM2M_MODEL", + "JKS", + "PKCS_12", + "JS_MODULE" + ] + } + }, + { + "name": "resourceSubType", + "in": "query", + "description": "A string value representing the resource sub-type.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "EXTENSION", + "MODULE" + ] + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the resource title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "title", + "resourceType", + "tenantId" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } ], - "summary": "Public connect to Trendz (publicConnectToTrendz)", - "description": "Initiates synchronization with Trendz if Trendz is not synced yet. Uses Trendz configuration from settings or falls back to environment variables. Generates API key, saves configuration, checks Trendz version, and performs initial sync.", - "operationId": "publicConnectToTrendz", "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataTbResourceInfo" + } + } + } }, "400": { "description": "Bad Request", @@ -119866,7 +120726,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -119984,23 +120844,31 @@ "ApiKeyForm": [] } ] - } - }, - "/api/trendz/sync": { - "get": { + }, + "post": { "tags": [ - "trendz-controller" + "tb-resource-controller" ], - "summary": "Get Trendz synchronization result (getTrendzSyncResult)", - "description": "Retrieves Trendz synchronization result and status. Returns trendzVersion, updatedTs, resultType, and status.\n\nAvailable for any authorized user. ", - "operationId": "getTrendzSyncResult", + "summary": "Create Or Update Resource (saveResource)", + "description": "Create or update the Resource. When creating the Resource, platform generates Resource id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Resource id will be present in the response. Specify existing Resource id to update the Resource. Referencing non-existing Resource Id will cause 'Not Found' error. \n\nResource combination of the title with the key is unique in the scope of tenant. Remove 'id', 'tenantId' from the request body example (below) to create new Resource entity.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "saveResource", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TbResource" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TrendzSynchronizationResult" + "$ref": "#/components/schemas/TbResourceInfo" } } } @@ -120016,7 +120884,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid UUID string: 123", + "message": "Invalid request body", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -120126,6 +120994,7 @@ } } }, + "deprecated": true, "security": [ { "HttpLoginForm": [] @@ -120136,41 +121005,32 @@ ] } }, - "/api/2fa/account/config": { - "put": { + "/api/resource/info/{resourceId}": { + "get": { "tags": [ - "two-factor-auth-config-controller" + "tb-resource-controller" ], - "summary": "Update 2FA account config (updateTwoFaAccountConfig)", - "description": "Update config for a given provider type. \nUpdate request example:\n```\n{\n \"useByDefault\": true\n}\n```\nReturns whole account's 2FA settings object.\n\n\nAvailable for any authorized user. ", - "operationId": "updateTwoFaAccountConfig", + "summary": "Get Resource Info (getResourceInfoById)", + "description": "Fetch the Resource Info object based on the provided Resource Id. Resource Info is a lightweight object that includes main information about the Resource excluding the heavyweight data. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getResourceInfoById", "parameters": [ { - "name": "providerType", - "in": "query", + "name": "resourceId", + "in": "path", + "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "$ref": "#/components/schemas/TwoFaProviderType" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TwoFaAccountConfigUpdateRequest" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccountTwoFaSettings" + "$ref": "#/components/schemas/TbResourceInfo" } } } @@ -120304,41 +121164,43 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/resource/jks/{resourceId}/download": { + "get": { "tags": [ - "two-factor-auth-config-controller" + "tb-resource-controller" ], - "summary": "Verify and save 2FA account config (verifyAndSaveTwoFaAccountConfig)", - "description": "Checks the verification code for submitted config, and if it is correct, saves the provided account config. \n\nReturns whole account's 2FA settings object.\nWill throw an error (Bad Request) if the provider is not configured for usage. \n\nAvailable for any authorized user. ", - "operationId": "verifyAndSaveTwoFaAccountConfig", + "summary": "Download JKS Resource (downloadJksResourceIfChanged)", + "description": "Download Resource based on the provided Resource Id or return 304 status code if resource was not changed.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "downloadJksResourceIfChanged", "parameters": [ { - "name": "verificationCode", - "in": "query", + "name": "resourceId", + "in": "path", + "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "If-None-Match", + "in": "header", "required": false, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TwoFaAccountConfig" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { - "application/json": { + "application/x-java-keystore": { "schema": { - "$ref": "#/components/schemas/AccountTwoFaSettings" + "type": "string", + "format": "binary" } } } @@ -120354,7 +121216,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -120472,21 +121334,32 @@ "ApiKeyForm": [] } ] - }, - "delete": { + } + }, + "/api/resource/js/{resourceId}/download": { + "get": { "tags": [ - "two-factor-auth-config-controller" + "tb-resource-controller" ], - "summary": "Delete 2FA account config (deleteTwoFaAccountConfig)", - "description": "Delete 2FA config for a given 2FA provider type. \nReturns whole account's 2FA settings object.\n\n\nAvailable for any authorized user. ", - "operationId": "deleteTwoFaAccountConfig", + "summary": "Download JS Resource (downloadJsResourceIfChanged)", + "description": "Download Resource based on the provided Resource Id or return 304 status code if resource was not changed.\n\nAvailable for any authorized user. ", + "operationId": "downloadJsResourceIfChanged", "parameters": [ { - "name": "providerType", - "in": "query", + "name": "resourceId", + "in": "path", + "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "$ref": "#/components/schemas/TwoFaProviderType" + "type": "string" + } + }, + { + "name": "If-None-Match", + "in": "header", + "required": false, + "schema": { + "type": "string" } } ], @@ -120494,9 +121367,10 @@ "200": { "description": "OK", "content": { - "application/json": { + "application/javascript": { "schema": { - "$ref": "#/components/schemas/AccountTwoFaSettings" + "type": "string", + "format": "binary" } } } @@ -120632,22 +121506,24 @@ ] } }, - "/api/2fa/account/config/generate": { - "post": { + "/api/resource/list": { + "get": { "tags": [ - "two-factor-auth-config-controller" + "tb-resource-controller" ], - "summary": "Generate 2FA account config (generateTwoFaAccountConfig)", - "description": "Generate new 2FA account config template for specified provider type. \n\nFor TOTP, this will return a corresponding account config template with a generated OTP auth URL (with new random secret key for each API call) that can be then converted to a QR code to scan with an authenticator app. Example:\n```\n{\n \"providerType\": \"TOTP\",\n \"useByDefault\": false,\n \"authUrl\": \"otpauth://totp/TB%202FA:tenant@thingsboard.org?issuer=TB+2FA&secret=PNJDNWJVAK4ZTUYT7RFGPQLXA7XGU7PX\"\n}\n```\n\nFor EMAIL, the generated config will contain email from user's account:\n```\n{\n \"providerType\": \"EMAIL\",\n \"useByDefault\": false,\n \"email\": \"tenant@thingsboard.org\"\n}\n```\n\nFor SMS 2FA this method will just return a config with empty/default values as there is nothing to generate/preset:\n```\n{\n \"providerType\": \"SMS\",\n \"useByDefault\": false,\n \"phoneNumber\": null\n}\n```\n\nWill throw an error (Bad Request) if the provider is not configured for usage. \n\nAvailable for any authorized user. ", - "operationId": "generateTwoFaAccountConfig", + "summary": "Get Resource Infos by ids (getSystemOrTenantResourcesByIds)", + "operationId": "getSystemOrTenantResourcesByIds", "parameters": [ { - "name": "providerType", + "name": "resourceIds", "in": "query", - "description": "2FA provider type to generate new account config for", + "description": "A list of resource ids, separated by comma ','", "required": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } } ], @@ -120657,7 +121533,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TwoFaAccountConfig" + "type": "array", + "items": { + "$ref": "#/components/schemas/TbResourceInfo" + } } } } @@ -120673,7 +121552,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -120793,27 +121672,67 @@ ] } }, - "/api/2fa/account/config/submit": { - "post": { + "/api/resource/lwm2m": { + "get": { "tags": [ - "two-factor-auth-config-controller" + "tb-resource-controller" ], - "summary": "Submit 2FA account config (submitTwoFaAccountConfig)", - "description": "Submit 2FA account config to prepare for a future verification. Basically, this method will send a verification code for a given account config, if this has sense for a chosen 2FA provider. This code is needed to then verify and save the account config.\n\nExample of EMAIL 2FA account config:\n```\n{\n \"providerType\": \"EMAIL\",\n \"useByDefault\": true,\n \"email\": \"separate-email-for-2fa@thingsboard.org\"\n}\n```\n\nExample of SMS 2FA account config:\n```\n{\n \"providerType\": \"SMS\",\n \"useByDefault\": false,\n \"phoneNumber\": \"+38012312321\"\n}\n```\n\nFor TOTP this method does nothing.\n\nWill throw an error (Bad Request) if submitted account config is not valid, or if the provider is not configured for usage. \n\nAvailable for any authorized user. ", - "operationId": "submitTwoFaAccountConfig", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TwoFaAccountConfig" - } + "summary": "Get LwM2M Objects (getLwm2mListObjects)", + "description": "Returns a page of LwM2M objects parsed from Resources with type 'LWM2M_MODEL' owned by tenant or sysadmin. You can specify parameters to filter the results. LwM2M Object is a object that includes information about the LwM2M model which can be used in transport configuration for the LwM2M device profile. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getLwm2mListObjects", + "parameters": [ + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": true, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] } }, - "required": true - }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": true, + "schema": { + "type": "string", + "enum": [ + "id", + "name" + ] + } + }, + { + "name": "objectIds", + "in": "query", + "description": "LwM2M Object ids.", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LwM2mObject" + } + } + } + } }, "400": { "description": "Bad Request", @@ -120826,7 +121745,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -120946,21 +121865,81 @@ ] } }, - "/api/2fa/account/settings": { + "/api/resource/lwm2m/page": { "get": { "tags": [ - "two-factor-auth-config-controller" + "tb-resource-controller" + ], + "summary": "Get LwM2M Objects (getLwm2mListObjectsPage)", + "description": "Returns a page of LwM2M objects parsed from Resources with type 'LWM2M_MODEL' owned by tenant or sysadmin. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. LwM2M Object is a object that includes information about the LwM2M model which can be used in transport configuration for the LwM2M device profile. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getLwm2mListObjectsPage", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the resource title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "id", + "name" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } ], - "summary": "Get account 2FA settings (getAccountTwoFaSettings)", - "description": "Get user's account 2FA configuration. Configuration contains configs for different 2FA providers.\n\nExample:\n```\n{\n \"configs\": {\n \"EMAIL\": {\n \"providerType\": \"EMAIL\",\n \"useByDefault\": true,\n \"email\": \"tenant@thingsboard.org\"\n },\n \"TOTP\": {\n \"providerType\": \"TOTP\",\n \"useByDefault\": false,\n \"authUrl\": \"otpauth://totp/TB%202FA:tenant@thingsboard.org?issuer=TB+2FA&secret=P6Z2TLYTASOGP6LCJZAD24ETT5DACNNX\"\n },\n \"SMS\": {\n \"providerType\": \"SMS\",\n \"useByDefault\": false,\n \"phoneNumber\": \"+380501253652\"\n }\n }\n}\n```\n\nAvailable for any authorized user. ", - "operationId": "getAccountTwoFaSettings", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccountTwoFaSettings" + "type": "array", + "items": { + "$ref": "#/components/schemas/LwM2mObject" + } } } } @@ -121096,24 +122075,41 @@ ] } }, - "/api/2fa/providers": { + "/api/resource/lwm2m/{resourceId}/download": { "get": { "tags": [ - "two-factor-auth-config-controller" + "tb-resource-controller" + ], + "summary": "Download LWM2M Resource (downloadLwm2mResourceIfChanged)", + "description": "Download Resource based on the provided Resource Id or return 304 status code if resource was not changed.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "downloadLwm2mResourceIfChanged", + "parameters": [ + { + "name": "resourceId", + "in": "path", + "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "If-None-Match", + "in": "header", + "required": false, + "schema": { + "type": "string" + } + } ], - "summary": "Get available 2FA providers (getAvailableTwoFaProviderTypes)", - "description": "Get the list of provider types available for user to use (the ones configured by tenant or sysadmin).\nExample of response:\n```\n[\n \"TOTP\",\n \"EMAIL\",\n \"SMS\"\n]\n```\n\nAvailable for any authorized user. ", - "operationId": "getAvailableTwoFaProviderTypes", "responses": { "200": { "description": "OK", "content": { - "application/json": { + "application/xml": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TwoFaProviderType" - } + "type": "string", + "format": "binary" } } } @@ -121249,21 +122245,41 @@ ] } }, - "/api/2fa/settings": { + "/api/resource/pkcs12/{resourceId}/download": { "get": { "tags": [ - "two-factor-auth-config-controller" + "tb-resource-controller" + ], + "summary": "Download PKCS_12 Resource (downloadPkcs12ResourceIfChanged)", + "description": "Download Resource based on the provided Resource Id or return 304 status code if resource was not changed.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "downloadPkcs12ResourceIfChanged", + "parameters": [ + { + "name": "resourceId", + "in": "path", + "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "If-None-Match", + "in": "header", + "required": false, + "schema": { + "type": "string" + } + } ], - "summary": "Get platform 2FA settings (getPlatformTwoFaSettings)", - "description": "Get platform settings for 2FA. The settings are described for savePlatformTwoFaSettings API method. If 2FA is not configured, then an empty response will be returned.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "getPlatformTwoFaSettings", "responses": { "200": { "description": "OK", "content": { - "application/json": { + "application/x-pkcs12": { "schema": { - "$ref": "#/components/schemas/PlatformTwoFaSettings" + "type": "string", + "format": "binary" } } } @@ -121397,31 +122413,82 @@ "ApiKeyForm": [] } ] - }, - "post": { + } + }, + "/api/resource/tenant": { + "get": { "tags": [ - "two-factor-auth-config-controller" + "tb-resource-controller" ], - "summary": "Save platform 2FA settings (savePlatformTwoFaSettings)", - "description": "Save 2FA settings for platform. The settings have following properties:\n- `useSystemTwoFactorAuthSettings` - option for tenant admins to use 2FA settings configured by sysadmin. If this param is set to true, then the settings will not be validated for constraints (if it is a tenant admin; for sysadmin this param is ignored).\n- `providers` - the list of 2FA providers' configs. Users will only be allowed to use 2FA providers from this list. \n\n- `minVerificationCodeSendPeriod` - minimal period in seconds to wait after verification code send request to send next request. \n- `verificationCodeCheckRateLimit` - rate limit configuration for verification code checking.\nThe format is standard: 'amountOfRequests:periodInSeconds'. The value of '1:60' would limit verification code checking requests to one per minute.\n- `maxVerificationFailuresBeforeUserLockout` - maximum number of verification failures before a user gets disabled.\n- `totalAllowedTimeForVerification` - total amount of time in seconds allotted for verification. Basically, this property sets a lifetime for pre-verification token. If not set, default value of 30 minutes is used.\n\n\nTOTP 2FA provider config has following settings:\n- `issuerName` - issuer name that will be displayed in an authenticator app near a username. Must not be blank.\n\nFor SMS 2FA provider:\n- `smsVerificationMessageTemplate` - verification message template. Available template variables are ${code} and ${userEmail}. It must not be blank and must contain verification code variable.\n- `verificationCodeLifetime` - verification code lifetime in seconds. Required to be positive.\n\nFor EMAIL provider type:\n- `verificationCodeLifetime` - the same as for SMS.\n\nExample of the settings:\n```\n{\n \"useSystemTwoFactorAuthSettings\": false,\n \"providers\": [\n {\n \"providerType\": \"TOTP\",\n \"issuerName\": \"TB\"\n },\n {\n \"providerType\": \"EMAIL\",\n \"verificationCodeLifetime\": 60\n },\n {\n \"providerType\": \"SMS\",\n \"verificationCodeLifetime\": 60,\n \"smsVerificationMessageTemplate\": \"Here is your verification code: ${code}\"\n }\n ],\n \"minVerificationCodeSendPeriod\": 60,\n \"verificationCodeCheckRateLimit\": \"3:900\",\n \"maxVerificationFailuresBeforeUserLockout\": 10,\n \"totalAllowedTimeForVerification\": 600\n}\n```\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", - "operationId": "savePlatformTwoFaSettings", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PlatformTwoFaSettings" - } + "summary": "Get All Resource Infos (getTenantResources)", + "description": "Returns a page of Resource Info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Resource Info is a lightweight object that includes main information about the Resource excluding the heavyweight data. \n\nAvailable for users with 'TENANT_ADMIN' authority.", + "operationId": "getTenantResources", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "required": true - }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the resource title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "title", + "resourceType", + "tenantId" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PlatformTwoFaSettings" + "$ref": "#/components/schemas/PageDataTbResourceInfo" } } } @@ -121437,7 +122504,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -121557,21 +122624,57 @@ ] } }, - "/api/auth/2fa/login": { + "/api/resource/upload": { "post": { "tags": [ - "two-factor-auth-controller" + "tb-resource-controller" ], - "summary": "Get regular token pair after successfully configuring 2FA", - "description": "Checks 2FA is configured, returning token pair on success.", - "operationId": "authenticateByTwoFaConfigurationToken", + "summary": "Upload Resource via Multipart File (uploadResource)", + "description": "Create the Resource using multipart file upload. \n\nResource combination of the title with the key is unique in the scope of tenant. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "uploadResource", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Resource title." + }, + "resourceType": { + "type": "string", + "description": "Resource type." + }, + "descriptor": { + "type": "string", + "description": "Resource descriptor (JSON)." + }, + "resourceSubType": { + "type": "string", + "description": "Resource sub type." + }, + "file": { + "type": "string", + "format": "binary", + "description": "Resource file." + } + }, + "required": [ + "file", + "resourceType" + ] + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JwtPair" + "$ref": "#/components/schemas/TbResourceInfo" } } } @@ -121707,24 +122810,51 @@ ] } }, - "/api/auth/2fa/providers": { - "get": { + "/api/resource/{id}/data": { + "put": { "tags": [ - "two-factor-auth-controller" + "tb-resource-controller" ], - "summary": "Get available 2FA providers (getAvailableTwoFaProviderInfos)", - "description": "Get the list of 2FA provider infos available for user to use. Example:\n```\n[\n {\n \"type\": \"EMAIL\",\n \"default\": true,\n \"contact\": \"ab*****ko@gmail.com\"\n },\n {\n \"type\": \"TOTP\",\n \"default\": false,\n \"contact\": null\n },\n {\n \"type\": \"SMS\",\n \"default\": false,\n \"contact\": \"+38********12\"\n }\n]\n```", - "operationId": "getAvailableTwoFaProviderInfos", + "summary": "updateResourceData", + "operationId": "updateResourceData", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Unique identifier of the Resource to update", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary", + "description": "Resource file." + } + }, + "required": [ + "file" + ] + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TwoFaProviderInfo" - } + "$ref": "#/components/schemas/TbResourceInfo" } } } @@ -121860,39 +122990,42 @@ ] } }, - "/api/auth/2fa/verification/check": { - "post": { + "/api/resource/{id}/info": { + "put": { "tags": [ - "two-factor-auth-controller" + "tb-resource-controller" ], - "summary": "Check 2FA verification code (checkTwoFaVerificationCode)", - "description": "Checks 2FA verification code, and if it is correct the method returns a regular access and refresh token pair.\n\nThe API method is rate limited (using rate limit config from TwoFactorAuthSettings), and also will block a user after X unsuccessful verification attempts if such behavior is configured (in TwoFactorAuthSettings).\n\nWill return a Bad Request error if provider is not configured for usage, and Too Many Requests error if rate limits are exceeded.", - "operationId": "checkTwoFaVerificationCode", + "summary": "updateResourceInfo", + "operationId": "updateResourceInfo", "parameters": [ { - "name": "providerType", - "in": "query", - "required": true, - "schema": { - "$ref": "#/components/schemas/TwoFaProviderType" - } - }, - { - "name": "verificationCode", - "in": "query", + "name": "id", + "in": "path", + "description": "Unique identifier of the Resource to update", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TbResourceInfo" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/JwtPair" + "$ref": "#/components/schemas/TbResourceInfo" } } } @@ -121908,7 +123041,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -122028,27 +123161,35 @@ ] } }, - "/api/auth/2fa/verification/send": { - "post": { + "/api/resource/{resourceId}": { + "get": { "tags": [ - "two-factor-auth-controller" + "tb-resource-controller" ], - "summary": "Request 2FA verification code (requestTwoFaVerificationCode)", - "description": "Request 2FA verification code.\n\nTo make a request to this endpoint, you need an access token with the scope of PRE_VERIFICATION_TOKEN, which is issued on username/password auth if 2FA is enabled.\n\nThe API method is rate limited (using rate limit config from TwoFactorAuthSettings). Will return a Bad Request error if provider is not configured for usage, and Too Many Requests error if rate limits are exceeded.", - "operationId": "requestTwoFaVerificationCode", + "summary": "Get Resource (getResourceById)", + "description": "Fetch the Resource object based on the provided Resource Id. Resource is a heavyweight object that includes main information about the Resource and also data. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getResourceById", "parameters": [ { - "name": "providerType", - "in": "query", + "name": "resourceId", + "in": "path", + "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { - "$ref": "#/components/schemas/TwoFaProviderType" + "type": "string" } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TbResource" + } + } + } }, "400": { "description": "Bad Request", @@ -122061,7 +123202,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -122171,6 +123312,7 @@ } } }, + "deprecated": true, "security": [ { "HttpLoginForm": [] @@ -122179,23 +123321,40 @@ "ApiKeyForm": [] } ] - } - }, - "/api/uiSettings/helpBaseUrl": { - "get": { + }, + "delete": { "tags": [ - "ui-settings-controller" + "tb-resource-controller" + ], + "summary": "Delete Resource (deleteResource)", + "description": "Deletes the Resource. Referencing non-existing Resource Id will cause an error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "deleteResource", + "parameters": [ + { + "name": "resourceId", + "in": "path", + "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } ], - "summary": "Get UI help base url (getHelpBaseUrl)", - "description": "Get UI help base url used to fetch help assets. The actual value of the base url is configurable in the system configuration file.", - "operationId": "getHelpBaseUrl", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/TbResourceDeleteResult" } } } @@ -122331,20 +123490,33 @@ ] } }, - "/api/usage": { + "/api/resource/{resourceId}/download": { "get": { "tags": [ - "usage-info-controller" + "tb-resource-controller" + ], + "summary": "Download Resource (downloadResource)", + "description": "Download Resource based on the provided Resource Id.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "downloadResource", + "parameters": [ + { + "name": "resourceId", + "in": "path", + "description": "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "getTenantUsageInfo", - "operationId": "getTenantUsageInfo", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UsageInfo" + "type": "string", + "format": "binary" } } } @@ -122480,70 +123652,59 @@ ] } }, - "/api/customer/users": { + "/api/resource/{resourceType}/{scope}/{key}": { "get": { "tags": [ - "user-controller" + "tb-resource-controller" ], - "summary": "Get Customer Users (getCustomerUsers)", - "description": "Returns a page of users for the current tenant with authority 'CUSTOMER_USER'. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getAllCustomerUsers", + "summary": "Download resource (downloadResourceIfChanged)", + "description": "Download resource with a given type and key for the given scope\n\nAvailable for any authorized user. ", + "operationId": "downloadResourceIfChanged", "parameters": [ { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", + "name": "resourceType", + "in": "path", + "description": "Type of the resource", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "enum": [ + "lwm2m_model", + "jks", + "pkcs_12", + "js_module", + "dashboard" + ] } }, { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "scope", + "in": "path", + "description": "Scope of the resource", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "enum": [ + "system", + "tenant" + ] } }, { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the user email.", - "required": false, + "name": "key", + "in": "path", + "description": "Key of the resource, e.g. 'extension.js'", + "required": true, "schema": { "type": "string" } }, { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "firstName", - "lastName", - "email" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "name": "If-None-Match", + "in": "header", "required": false, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "string" } } ], @@ -122553,7 +123714,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataUser" + "type": "string", + "format": "binary" } } } @@ -122689,88 +123851,51 @@ ] } }, - "/api/customer/{customerId}/userInfos": { + "/api/resource/{resourceType}/{scope}/{key}/info": { "get": { "tags": [ - "user-controller" + "tb-resource-controller" ], - "summary": "Get Customer user Infos (getCustomerUserInfos)", - "description": "Returns a page of user info objects owned by the specified customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerUserInfos", + "summary": "Get resource info (getResourceInfo)", + "description": "Get info for the resource with the given type, scope and key. Resource Info is a lightweight object that includes main information about the Resource excluding the heavyweight data. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getResourceInfo", "parameters": [ { - "name": "customerId", + "name": "resourceType", "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", + "description": "Type of the resource", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "enum": [ + "lwm2m_model", + "jks", + "pkcs_12", + "js_module", + "dashboard" + ] } }, { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "scope", + "in": "path", + "description": "Scope of the resource", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "includeCustomers", - "in": "query", - "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the user email.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, "schema": { "type": "string", "enum": [ - "createdTime", - "firstName", - "lastName", - "email" + "system", + "tenant" ] } }, { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, + "name": "key", + "in": "path", + "description": "Key of the resource, e.g. 'extension.js'", + "required": true, "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "string" } } ], @@ -122780,7 +123905,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataUserInfo" + "$ref": "#/components/schemas/TbResourceInfo" } } } @@ -122916,137 +124041,86 @@ ] } }, - "/api/customer/{customerId}/users": { - "get": { + "/api/plugins/telemetry/{deviceId}/{scope}": { + "post": { "tags": [ - "user-controller" + "telemetry-controller" ], - "summary": "Get Customer Users (getCustomerUsers)", - "description": "Returns a page of users owned by customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getCustomerUsers", + "summary": "Save device attributes (saveDeviceAttributes)", + "description": "Creates or updates the device attributes based on device id and specified attribute scope. The request payload is a JSON object with key-value format of attributes to create or update. For example:\n\n```json\n{\n \"stringKey\":\"value1\", \n \"booleanKey\":true, \n \"doubleKey\":42.0, \n \"longKey\":73, \n \"jsonKey\": {\n \"someNumber\": 42,\n \"someArray\": [1,2,3],\n \"someNestedObject\": {\"key\": \"value\"}\n }\n}\n```\n\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "saveDeviceAttributes", "parameters": [ { - "name": "customerId", + "name": "deviceId", "in": "path", - "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "scope", + "in": "path", + "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the user email.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, "schema": { "type": "string", "enum": [ - "createdTime", - "firstName", - "lastName", - "email" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" + "SERVER_SCOPE", + "SHARED_SCOPE" ] } } ], + "requestBody": { + "description": "A string value representing the json object. For example, '{\"key\":\"value\"}'. See API call description for more details.", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "OK", + "description": "Attribute from the request was created or updated. Platform creates an audit log event about device attributes updates with action type 'ATTRIBUTES_UPDATED', and also sends event msg to the rule engine with msg type 'ATTRIBUTES_UPDATED'.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataUser" + "type": "string" } } } }, "400": { - "description": "Bad Request", + "description": "Invalid structure of the request or invalid attributes scope provided.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + "type": "string" } } } }, "401": { - "description": "Unauthorized", + "description": "User is not authorized to save device attributes for selected device. Most likely, User belongs to different Customer or Tenant.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + "type": "string" + } + } + } + }, + "500": { + "description": "The exception was thrown during processing the request. Platform creates an audit log event about device attributes updates with action type 'ATTRIBUTES_UPDATED' that includes an error stacktrace.", + "content": { + "application/json": { + "schema": { + "type": "string" } } } @@ -123132,139 +124206,96 @@ "ApiKeyForm": [] } ] - } - }, - "/api/entityGroup/{entityGroupId}/users": { - "get": { + }, + "delete": { "tags": [ - "user-controller" + "telemetry-controller" ], - "summary": "Get users by Entity Group Id (getUsersByEntityGroupId)", - "description": "Returns a page of user objects that belongs to specified Entity Group Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for specified group.", - "operationId": "getUsersByEntityGroupId", + "summary": "Delete device attributes (deleteDeviceAttributes)", + "description": "Delete device attributes using provided Device Id, scope and a list of keys. Referencing a non-existing Device Id will cause an error\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "deleteDeviceAttributes", "parameters": [ { - "name": "entityGroupId", + "name": "deviceId", "in": "path", - "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } }, { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "scope", + "in": "path", + "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "enum": [ + "SERVER_SCOPE", + "SHARED_SCOPE", + "CLIENT_SCOPE" + ] } }, { - "name": "textSearch", + "name": "keys", "in": "query", - "description": "The case insensitive 'substring' filter based on the user email.", + "description": "A string value representing the comma-separated list of attributes keys. For example, 'active,inactivityAlarmTime'. If attribute keys contain comma, duplicate 'key' parameter for each key, for example '?key=my,key&key=my,second,key", "required": false, "schema": { "type": "string" } }, { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "firstName", - "lastName", - "email" - ] - } - }, - { - "name": "sortOrder", + "name": "key", "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, + "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "type": "array", + "items": { + "type": "string" + } } } ], "responses": { "200": { - "description": "OK", + "description": "Device attributes was removed for the selected keys in the request. Platform creates an audit log event about device attributes removal with action type 'ATTRIBUTES_DELETED'.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataUser" + "type": "string" } } } }, "400": { - "description": "Bad Request", + "description": "Platform returns a bad request in case if keys or scope are not specified.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + "type": "string" } } } }, "401": { - "description": "Unauthorized", + "description": "User is not authorized to delete device attributes for selected entity. Most likely, User belongs to different Customer or Tenant.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + "type": "string" + } + } + } + }, + "500": { + "description": "The exception was thrown during processing the request. Platform creates an audit log event about device attributes removal with action type 'ATTRIBUTES_DELETED' that includes an error stacktrace.", + "content": { + "application/json": { + "schema": { + "type": "string" } } } @@ -123352,137 +124383,95 @@ ] } }, - "/api/tenant/{tenantId}/users": { - "get": { + "/api/plugins/telemetry/{entityType}/{entityId}/attributes/{scope}": { + "post": { "tags": [ - "user-controller" + "telemetry-controller" ], - "summary": "Get Tenant Users (getTenantAdmins)", - "description": "Returns a page of users owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getTenantAdmins", + "summary": "Save entity attributes (saveEntityAttributesV2)", + "description": "Creates or updates the entity attributes based on Entity Id and the specified attribute scope. List of possible attribute scopes depends on the entity type: \n\n * SERVER_SCOPE - supported for all entity types;\n * SHARED_SCOPE - supported for devices.\n\nThe request payload is a JSON object with key-value format of attributes to create or update. For example:\n\n```json\n{\n \"stringKey\":\"value1\", \n \"booleanKey\":true, \n \"doubleKey\":42.0, \n \"longKey\":73, \n \"jsonKey\": {\n \"someNumber\": 42,\n \"someArray\": [1,2,3],\n \"someNestedObject\": {\"key\": \"value\"}\n }\n}\n```\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "saveEntityAttributesV2", "parameters": [ { - "name": "tenantId", + "name": "entityType", "in": "path", - "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { "type": "string" } }, { - "name": "pageSize", - "in": "query", - "description": "Maximum amount of entities in a one page", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "page", - "in": "query", - "description": "Sequence number of page starting from 0", + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "textSearch", - "in": "query", - "description": "The case insensitive 'substring' filter based on the user email.", - "required": false, "schema": { "type": "string" } }, { - "name": "sortProperty", - "in": "query", - "description": "Property of entity to sort by", - "required": false, - "schema": { - "type": "string", - "enum": [ - "createdTime", - "firstName", - "lastName", - "email" - ] - } - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", - "required": false, + "name": "scope", + "in": "path", + "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", + "required": true, "schema": { "type": "string", "enum": [ - "ASC", - "DESC" + "SERVER_SCOPE", + "SHARED_SCOPE" ] } } ], + "requestBody": { + "description": "A string value representing the json object. For example, '{\"key\":\"value\"}'. See API call description for more details.", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "OK", + "description": "Attribute from the request was created or updated. Platform creates an audit log event about entity attributes updates with action type 'ATTRIBUTES_UPDATED', and also sends event msg to the rule engine with msg type 'ATTRIBUTES_UPDATED'.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PageDataUser" + "type": "string" } } } }, "400": { - "description": "Bad Request", + "description": "Invalid structure of the request or invalid attributes scope provided.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + "type": "string" } } } }, "401": { - "description": "Unauthorized", + "description": "User is not authorized to save entity attributes for selected entity. Most likely, User belongs to different Customer or Tenant.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + "type": "string" + } + } + } + }, + "500": { + "description": "The exception was thrown during processing the request. Platform creates an audit log event about entity attributes updates with action type 'ATTRIBUTES_UPDATED' that includes an error stacktrace.", + "content": { + "application/json": { + "schema": { + "type": "string" } } } @@ -123570,62 +124559,44 @@ ] } }, - "/api/user": { - "post": { + "/api/plugins/telemetry/{entityType}/{entityId}/keys/attributes": { + "get": { "tags": [ - "user-controller" + "telemetry-controller" ], - "summary": "Save Or update User (saveUser)", - "description": "Create or update the User. When creating user, platform generates User Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created User Id will be present in the response. Specify existing User Id to update the device. Referencing non-existing User Id will cause 'Not Found' error.\n\nDevice email is unique for entire platform setup.\n\nRemove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new User entity. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", - "operationId": "saveUser", + "summary": "Get all attribute keys (getAttributeKeys)", + "description": "Returns a set of unique attribute key names for the selected entity. The response will include merged key names set for all attribute scopes:\n\n * SERVER_SCOPE - supported for all entity types;\n * CLIENT_SCOPE - supported for devices;\n * SHARED_SCOPE - supported for devices. \n\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getAttributeKeys", "parameters": [ { - "name": "sendActivationMail", - "in": "query", - "description": "Send activation email (or use activation link)", - "required": false, + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, "schema": { "type": "string" } }, { - "name": "entityGroupId", - "in": "query", - "required": false, + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, "schema": { "type": "string" } - }, - { - "name": "entityGroupIds", - "in": "query", - "description": "A list of entity group ids, separated by comma ','", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "type": "array", + "items": { + "type": "string" + } } } } @@ -123641,7 +124612,7 @@ "error-code-400": { "summary": "Bad Request", "value": { - "message": "Invalid request body", + "message": "Invalid UUID string: 123", "errorCode": 31, "status": 400, "subscriptionErrorCode": null, @@ -123761,32 +124732,46 @@ ] } }, - "/api/user/dashboards/{dashboardId}/{action}": { + "/api/plugins/telemetry/{entityType}/{entityId}/keys/attributes/{scope}": { "get": { "tags": [ - "user-controller" + "telemetry-controller" ], - "summary": "Report action of User over the dashboard (reportUserDashboardAction)", - "description": "Report action of User over the dashboard. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", - "operationId": "reportUserDashboardAction", + "summary": "Get all attribute keys by scope (getAttributeKeysByScope)", + "description": "Returns a set of unique attribute key names for the selected entity and attributes scope: \n\n * SERVER_SCOPE - supported for all entity types;\n * CLIENT_SCOPE - supported for devices;\n * SHARED_SCOPE - supported for devices. \n\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getAttributeKeysByScope", "parameters": [ { - "name": "dashboardId", + "name": "entityType", "in": "path", - "description": "A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "A string value representing the entity type. For example, 'DEVICE'", "required": true, "schema": { "type": "string" } }, { - "name": "action", + "name": "entityId", "in": "path", - "description": "Dashboard action, one of: \"visit\", \"star\" or \"unstar\".", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", "required": true, "schema": { "type": "string" } + }, + { + "name": "scope", + "in": "path", + "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "SERVER_SCOPE", + "SHARED_SCOPE", + "CLIENT_SCOPE" + ] + } } ], "responses": { @@ -123795,7 +124780,11465 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserDashboardsInfo" + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/plugins/telemetry/{entityType}/{entityId}/keys/timeseries": { + "get": { + "tags": [ + "telemetry-controller" + ], + "summary": "Get time series keys (getTimeseriesKeys)", + "description": "Returns a set of unique time series key names for the selected entity. \n\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getTimeseriesKeys", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/plugins/telemetry/{entityType}/{entityId}/timeseries/delete": { + "delete": { + "tags": [ + "telemetry-controller" + ], + "summary": "Delete entity time series data (deleteEntityTimeseries)", + "description": "Delete time series for selected entity based on entity id, entity type and keys. Use 'deleteAllDataForKeys' to delete all time series data. Use 'startTs' and 'endTs' to specify time-range instead. Use 'deleteLatest' to delete latest value (stored in separate table for performance) if the value's timestamp matches the time-range. Use 'rewriteLatestIfDeleted' to rewrite latest value (stored in separate table for performance) if the value's timestamp matches the time-range and 'deleteLatest' param is true. The replacement value will be fetched from the 'time series' table, and its timestamp will be the most recent one before the defined time-range. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "deleteEntityTimeseries", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "keys", + "in": "query", + "description": "A string value representing the comma-separated list of telemetry keys. If keys are not selected, the result will return all latest time series. For example, 'temperature,humidity'. If telemetry keys contain comma, duplicate 'key' parameter for each key, for example '?key=my,key&key=my,second,key", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "deleteAllDataForKeys", + "in": "query", + "description": "A boolean value to specify if should be deleted all data for selected keys or only data that are in the selected time range.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "startTs", + "in": "query", + "description": "A long value representing the start timestamp of removal time range in milliseconds.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTs", + "in": "query", + "description": "A long value representing the end timestamp of removal time range in milliseconds.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "deleteLatest", + "in": "query", + "description": "If the parameter is set to true, the latest telemetry can be removed, otherwise, in case that parameter is set to false the latest value will not removed.", + "required": false, + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "rewriteLatestIfDeleted", + "in": "query", + "description": "If the parameter is set to true, the latest telemetry will be rewritten in case that current latest value was removed, otherwise, in case that parameter is set to false the new latest value will not set.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "key", + "in": "query", + "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Time series for the selected keys in the request was removed. Platform creates an audit log event about entity time series removal with action type 'TIMESERIES_DELETED'.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Platform returns a bad request in case if keys list is empty or start and end timestamp values is empty when deleteAllDataForKeys is set to false.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "User is not authorized to delete entity time series for selected entity. Most likely, User belongs to different Customer or Tenant.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "500": { + "description": "The exception was thrown during processing the request. Platform creates an audit log event about entity time series removal with action type 'TIMESERIES_DELETED' that includes an error stacktrace.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/plugins/telemetry/{entityType}/{entityId}/timeseries/{scope}": { + "post": { + "tags": [ + "telemetry-controller" + ], + "summary": "Save or update time series data (saveEntityTelemetry)", + "description": "Creates or updates the entity time series data based on the Entity Id and request payload.The request payload is a JSON document with three possible formats:\n\nSimple format without timestamp. In such a case, current server time will be used: \n\n```json\n{\"temperature\": 26}\n```\n\n Single JSON object with timestamp: \n\n```json\n{\"ts\":1634712287000,\"values\":{\"temperature\":26, \"humidity\":87}}\n```\n\n JSON array with timestamps: \n\n```json\n[{\"ts\":1634712287000,\"values\":{\"temperature\":26, \"humidity\":87}}, {\"ts\":1634712588000,\"values\":{\"temperature\":25, \"humidity\":88}}]\n```\n\n The scope parameter is not used in the API call implementation but should be specified whatever value because it is used as a path variable. Referencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "saveEntityTelemetry", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "scope", + "in": "path", + "description": "Value is deprecated, reserved for backward compatibility and not used in the API call implementation. Specify any scope for compatibility", + "required": true, + "schema": { + "type": "string", + "enum": [ + "ANY" + ] + } + } + ], + "requestBody": { + "description": "A JSON with the telemetry values. See API call description for more details.", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Time series from the request was created or updated. Platform creates an audit log event about entity time series updates with action type 'TIMESERIES_UPDATED'.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Invalid structure of the request", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "User is not authorized to save entity time series for selected entity. Most likely, User belongs to different Customer or Tenant.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "500": { + "description": "The exception was thrown during processing the request. Platform creates an audit log event about entity time series updates with action type 'TIMESERIES_UPDATED' that includes an error stacktrace.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/plugins/telemetry/{entityType}/{entityId}/timeseries/{scope}/{ttl}": { + "post": { + "tags": [ + "telemetry-controller" + ], + "summary": "Save or update time series data with TTL (saveEntityTelemetryWithTTL)", + "description": "Creates or updates the entity time series data based on the Entity Id and request payload.The request payload is a JSON document with three possible formats:\n\nSimple format without timestamp. In such a case, current server time will be used: \n\n```json\n{\"temperature\": 26}\n```\n\n Single JSON object with timestamp: \n\n```json\n{\"ts\":1634712287000,\"values\":{\"temperature\":26, \"humidity\":87}}\n```\n\n JSON array with timestamps: \n\n```json\n[{\"ts\":1634712287000,\"values\":{\"temperature\":26, \"humidity\":87}}, {\"ts\":1634712588000,\"values\":{\"temperature\":25, \"humidity\":88}}]\n```\n\n The scope parameter is not used in the API call implementation but should be specified whatever value because it is used as a path variable. \n\nThe ttl parameter takes affect only in case of Cassandra DB.Referencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "saveEntityTelemetryWithTTL", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "scope", + "in": "path", + "description": "Value is deprecated, reserved for backward compatibility and not used in the API call implementation. Specify any scope for compatibility", + "required": true, + "schema": { + "type": "string", + "enum": [ + "ANY" + ] + } + }, + { + "name": "ttl", + "in": "path", + "description": "A long value representing TTL (Time to Live) parameter.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "A JSON with the telemetry values. See API call description for more details.", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Time series from the request was created or updated. Platform creates an audit log event about entity time series updates with action type 'TIMESERIES_UPDATED'.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Invalid structure of the request", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "User is not authorized to save entity time series for selected entity. Most likely, User belongs to different Customer or Tenant.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "500": { + "description": "The exception was thrown during processing the request. Platform creates an audit log event about entity time series updates with action type 'TIMESERIES_UPDATED' that includes an error stacktrace.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/plugins/telemetry/{entityType}/{entityId}/values/attributes": { + "get": { + "tags": [ + "telemetry-controller" + ], + "summary": "Get attributes (getAttributes)", + "description": "Returns all attributes that belong to specified entity. Use optional 'keys' parameter to return specific attributes.\n Example of the result: \n\n```json\n[\n {\"key\": \"stringAttributeKey\", \"value\": \"value\", \"lastUpdateTs\": 1609459200000},\n {\"key\": \"booleanAttributeKey\", \"value\": false, \"lastUpdateTs\": 1609459200001},\n {\"key\": \"doubleAttributeKey\", \"value\": 42.2, \"lastUpdateTs\": 1609459200002},\n {\"key\": \"longKeyExample\", \"value\": 73, \"lastUpdateTs\": 1609459200003},\n {\"key\": \"jsonKeyExample\",\n \"value\": {\n \"someNumber\": 42,\n \"someArray\": [1,2,3],\n \"someNestedObject\": {\"key\": \"value\"}\n },\n \"lastUpdateTs\": 1609459200004\n }\n]\n```\n\n Referencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getAttributes", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "keys", + "in": "query", + "description": "A string value representing the comma-separated list of attributes keys. For example, 'active,inactivityAlarmTime'. If attribute keys contain comma, duplicate 'key' parameter for each key, for example '?key=my,key&key=my,second,key", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "key", + "in": "query", + "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AttributeData" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/plugins/telemetry/{entityType}/{entityId}/values/attributes/{scope}": { + "get": { + "tags": [ + "telemetry-controller" + ], + "summary": "Get attributes by scope (getAttributesByScope)", + "description": "Returns all attributes of a specified scope that belong to specified entity. List of possible attribute scopes depends on the entity type: \n\n * SERVER_SCOPE - supported for all entity types;\n * SHARED_SCOPE - supported for devices;\n * CLIENT_SCOPE - supported for devices. \n\nUse optional 'keys' parameter to return specific attributes.\n Example of the result: \n\n```json\n[\n {\"key\": \"stringAttributeKey\", \"value\": \"value\", \"lastUpdateTs\": 1609459200000},\n {\"key\": \"booleanAttributeKey\", \"value\": false, \"lastUpdateTs\": 1609459200001},\n {\"key\": \"doubleAttributeKey\", \"value\": 42.2, \"lastUpdateTs\": 1609459200002},\n {\"key\": \"longKeyExample\", \"value\": 73, \"lastUpdateTs\": 1609459200003},\n {\"key\": \"jsonKeyExample\",\n \"value\": {\n \"someNumber\": 42,\n \"someArray\": [1,2,3],\n \"someNestedObject\": {\"key\": \"value\"}\n },\n \"lastUpdateTs\": 1609459200004\n }\n]\n```\n\n Referencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getAttributesByScope", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "scope", + "in": "path", + "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "SERVER_SCOPE", + "SHARED_SCOPE", + "CLIENT_SCOPE" + ] + } + }, + { + "name": "keys", + "in": "query", + "description": "A string value representing the comma-separated list of attributes keys. For example, 'active,inactivityAlarmTime'. If attribute keys contain comma, duplicate 'key' parameter for each key, for example '?key=my,key&key=my,second,key", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "key", + "in": "query", + "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AttributeData" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/plugins/telemetry/{entityType}/{entityId}/values/timeseries": { + "get": { + "tags": [ + "telemetry-controller" + ], + "summary": "Get latest time series value (getLatestTimeseries)", + "description": "Returns all time series that belong to specified entity. Use optional 'keys' parameter to return specific time series. The result is a JSON object. The format of the values depends on the 'useStrictDataTypes' parameter. By default, all time series values are converted to strings: \n\n```json\n{\n \"stringTsKey\": [{ \"value\": \"value\", \"ts\": 1609459200000}],\n \"booleanTsKey\": [{ \"value\": \"false\", \"ts\": 1609459200000}],\n \"doubleTsKey\": [{ \"value\": \"42.2\", \"ts\": 1609459200000}],\n \"longTsKey\": [{ \"value\": \"73\", \"ts\": 1609459200000}],\n \"jsonTsKey\": [{ \"value\": \"{\\\"someNumber\\\": 42,\\\"someArray\\\": [1,2,3],\\\"someNestedObject\\\": {\\\"key\\\": \\\"value\\\"}}\", \"ts\": 1609459200000}]\n}\n\n```\n\n However, it is possible to request the values without conversion ('useStrictDataTypes'=true): \n\n```json\n{\n \"stringTsKey\": [{ \"value\": \"value\", \"ts\": 1609459200000}],\n \"booleanTsKey\": [{ \"value\": false, \"ts\": 1609459200000}],\n \"doubleTsKey\": [{ \"value\": 42.2, \"ts\": 1609459200000}],\n \"longTsKey\": [{ \"value\": 73, \"ts\": 1609459200000}],\n \"jsonTsKey\": [{ \n \"value\": {\n \"someNumber\": 42,\n \"someArray\": [1,2,3],\n \"someNestedObject\": {\"key\": \"value\"}\n }, \n \"ts\": 1609459200000}]\n}\n\n```\n\n Referencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getLatestTimeseries", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "keys", + "in": "query", + "description": "A string value representing the comma-separated list of telemetry keys. If keys are not selected, the result will return all latest time series. For example, 'temperature,humidity'. If telemetry keys contain comma, duplicate 'key' parameter for each key, for example '?key=my,key&key=my,second,key", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "useStrictDataTypes", + "in": "query", + "description": "Enables/disables conversion of telemetry values to strings. Conversion is enabled by default. Set parameter to 'true' in order to disable the conversion.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "key", + "in": "query", + "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TsData" + } + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + }, + "post": { + "tags": [ + "telemetry-controller" + ], + "summary": "Get time series data by read queries (getTimeseriesByReadTsKvQueries)", + "description": "Returns aggregated time series values according to queries for specified entity. ```json\n[\n {\n \"queryId\": 49,\n \"data\": [\n {\n \"ts\": 1751450399999,\n \"kv\": {\n \"key\": \"temperature\",\n \"value\": 26,\n \"doubleValue\": 26,\n \"valueAsString\": \"26.0\",\n \"dataType\": \"DOUBLE\",\n \"longValue\": null,\n \"booleanValue\": null,\n \"jsonValue\": null,\n \"strValue\": null\n },\n \"version\": null\n }\n ],\n \"lastEntryTs\": 1750264592675\n },\n {\n \"queryId\": 50,\n \"data\": [],\n \"lastEntryTs\": 1751317200000\n }\n]\n```\n\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getTimeseriesByReadTsKvQueries", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "A JSON array of time series read queries.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseReadTsKvQuery" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReadTsKvQueryResult" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/plugins/telemetry/{entityType}/{entityId}/values/timeseries/history": { + "get": { + "tags": [ + "telemetry-controller" + ], + "summary": "Get time series data (getTimeseriesHistory)", + "description": "Returns a range of time series values for specified entity. Returns not aggregated data by default. Use aggregation function ('agg') and aggregation interval ('interval') to enable aggregation of the results on the database / server side. The aggregation is generally more efficient then fetching all records. \n\n```json\n{\n \"temperature\": [\n {\n \"value\": 36.7,\n \"ts\": 1609459200000\n },\n {\n \"value\": 36.6,\n \"ts\": 1609459201000\n }\n ]\n}\n```\n\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getTimeseriesHistory", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "keys", + "in": "query", + "description": "A string value representing the comma-separated list of telemetry keys.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "startTs", + "in": "query", + "description": "A long value representing the start timestamp of the time range in milliseconds, UTC.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "endTs", + "in": "query", + "description": "A long value representing the end timestamp of the time range in milliseconds, UTC.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "intervalType", + "in": "query", + "description": "A string value representing the type fo the interval.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "MILLISECONDS", + "WEEK", + "WEEK_ISO", + "MONTH", + "QUARTER" + ] + } + }, + { + "name": "interval", + "in": "query", + "description": "A long value representing the aggregation interval range in milliseconds.", + "required": false, + "schema": { + "type": "integer", + "format": "int64", + "default": 0 + } + }, + { + "name": "timeZone", + "in": "query", + "description": "A string value representing the timezone that will be used to calculate exact timestamps for 'WEEK', 'WEEK_ISO', 'MONTH' and 'QUARTER' interval types.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "An integer value that represents a max number of time series data points to fetch. This parameter is used only in the case if 'agg' parameter is set to 'NONE'.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "agg", + "in": "query", + "description": "A string value representing the aggregation function. If the interval is not specified, 'agg' parameter will use 'NONE' value.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "MIN", + "MAX", + "AVG", + "SUM", + "COUNT", + "NONE" + ] + } + }, + { + "name": "orderBy", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "name": "useStrictDataTypes", + "in": "query", + "description": "Enables/disables conversion of telemetry values to strings. Conversion is enabled by default. Set parameter to 'true' in order to disable the conversion.", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "key", + "in": "query", + "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TsData" + } + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/plugins/telemetry/{entityType}/{entityId}/{scope}": { + "post": { + "tags": [ + "telemetry-controller" + ], + "summary": "Save entity attributes (saveEntityAttributesV1)", + "description": "Creates or updates the entity attributes based on Entity Id and the specified attribute scope. List of possible attribute scopes depends on the entity type: \n\n * SERVER_SCOPE - supported for all entity types;\n * SHARED_SCOPE - supported for devices.\n\nThe request payload is a JSON object with key-value format of attributes to create or update. For example:\n\n```json\n{\n \"stringKey\":\"value1\", \n \"booleanKey\":true, \n \"doubleKey\":42.0, \n \"longKey\":73, \n \"jsonKey\": {\n \"someNumber\": 42,\n \"someArray\": [1,2,3],\n \"someNestedObject\": {\"key\": \"value\"}\n }\n}\n```\nReferencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "saveEntityAttributesV1", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "scope", + "in": "path", + "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "SERVER_SCOPE", + "SHARED_SCOPE" + ] + } + } + ], + "requestBody": { + "description": "A string value representing the json object. For example, '{\"key\":\"value\"}'. See API call description for more details.", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Attribute from the request was created or updated. Platform creates an audit log event about entity attributes updates with action type 'ATTRIBUTES_UPDATED', and also sends event msg to the rule engine with msg type 'ATTRIBUTES_UPDATED'.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Invalid structure of the request or invalid attributes scope provided.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "User is not authorized to save entity attributes for selected entity. Most likely, User belongs to different Customer or Tenant.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "500": { + "description": "The exception was thrown during processing the request. Platform creates an audit log event about entity attributes updates with action type 'ATTRIBUTES_UPDATED' that includes an error stacktrace.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + }, + "delete": { + "tags": [ + "telemetry-controller" + ], + "summary": "Delete entity attributes (deleteEntityAttributes)", + "description": "Delete entity attributes using provided Entity Id, scope and a list of keys. This operation is idempotent: keys that do not exist are silently ignored and the response is still 200 OK. Referencing a non-existing entity Id or invalid entity type will cause an error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "deleteEntityAttributes", + "parameters": [ + { + "name": "entityType", + "in": "path", + "description": "A string value representing the entity type. For example, 'DEVICE'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "entityId", + "in": "path", + "description": "A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "scope", + "in": "path", + "description": "A string value representing the attributes scope. For example, 'SERVER_SCOPE'.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "SERVER_SCOPE", + "SHARED_SCOPE", + "CLIENT_SCOPE" + ] + } + }, + { + "name": "keys", + "in": "query", + "description": "A string value representing the comma-separated list of attributes keys. For example, 'active,inactivityAlarmTime'. If attribute keys contain comma, duplicate 'key' parameter for each key, for example '?key=my,key&key=my,second,key", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "key", + "in": "query", + "description": "Repeatable key query parameter (alternative to comma-separated 'keys')", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Entity attributes were removed for the selected keys in the request (keys that did not exist are silently ignored). Platform creates an audit log event about entity attributes removal with action type 'ATTRIBUTES_DELETED'.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Platform returns a bad request in case if keys or scope are not specified.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "User is not authorized to delete entity attributes for selected entity. Most likely, User belongs to different Customer or Tenant.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "500": { + "description": "The exception was thrown during processing the request. Platform creates an audit log event about entity attributes removal with action type 'ATTRIBUTES_DELETED' that includes an error stacktrace.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenant": { + "post": { + "tags": [ + "tenant-controller" + ], + "summary": "Create Or update Tenant (saveTenant)", + "description": "Create or update the Tenant. When creating tenant, platform generates Tenant Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). Default Rule Chain and Device profile are also generated for the new tenants automatically. The newly created Tenant Id will be present in the response. Specify existing Tenant Id id to update the Tenant. Referencing non-existing Tenant Id will cause 'Not Found' error.Remove 'id', 'tenantId' from the request body example (below) to create new Tenant entity.\n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "saveTenant", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Tenant" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Tenant" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenant/info/{tenantId}": { + "get": { + "tags": [ + "tenant-controller" + ], + "summary": "Get Tenant Info (getTenantInfoById)", + "description": "Fetch the Tenant Info object based on the provided Tenant Id. The Tenant Info object extends regular Tenant object and includes Tenant Profile name. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getTenantInfoById", + "parameters": [ + { + "name": "tenantId", + "in": "path", + "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TenantInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenant/{tenantId}": { + "get": { + "tags": [ + "tenant-controller" + ], + "summary": "Get Tenant (getTenantById)", + "description": "Fetch the Tenant object based on the provided Tenant Id. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getTenantById", + "parameters": [ + { + "name": "tenantId", + "in": "path", + "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Tenant" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + }, + "delete": { + "tags": [ + "tenant-controller" + ], + "summary": "Delete Tenant (deleteTenant)", + "description": "Deletes the tenant, it's customers, rule chains, devices and all other related entities. Referencing non-existing tenant Id will cause an error.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "deleteTenant", + "parameters": [ + { + "name": "tenantId", + "in": "path", + "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenantInfos": { + "get": { + "tags": [ + "tenant-controller" + ], + "summary": "Get Tenants Info (getTenants)", + "description": "Returns a page of tenant info objects registered in the platform. The Tenant Info object extends regular Tenant object and includes Tenant Profile name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "getTenantInfos", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the tenant name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "tenantProfileName", + "title", + "email", + "country", + "state", + "city", + "address", + "address2", + "zip", + "phone", + "email" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataTenantInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenants": { + "get": { + "tags": [ + "tenant-controller" + ], + "summary": "Get Tenants (getTenants)", + "description": "Returns a page of tenants registered in the platform. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "getTenants", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the tenant name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "title", + "email", + "country", + "state", + "city", + "address", + "address2", + "zip", + "phone", + "email" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataTenant" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenants/list": { + "get": { + "tags": [ + "tenant-controller" + ], + "summary": "Get Tenants By Ids (getTenantsByIds)", + "description": "Fetch Tenant objects based on the provided ids. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "getTenantsByIds", + "parameters": [ + { + "name": "tenantIds", + "in": "query", + "description": "A list of tenant ids, separated by comma ','", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Tenant" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenantProfile": { + "post": { + "tags": [ + "tenant-profile-controller" + ], + "summary": "Create Or update Tenant Profile (saveTenantProfile)", + "description": "Create or update the Tenant Profile. When creating tenant profile, platform generates Tenant Profile Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Tenant Profile Id will be present in the response. Specify existing Tenant Profile Id id to update the Tenant Profile. Referencing non-existing Tenant Profile Id will cause 'Not Found' error. \n\nUpdate of the tenant profile configuration will cause immediate recalculation of API limits for all affected Tenants. \n\nThe **'profileData'** object is the part of Tenant Profile that defines API limits and Rate limits. \n\nYou have an ability to define maximum number of devices ('maxDevice'), assets ('maxAssets') and other entities. You may also define maximum number of messages to be processed per month ('maxTransportMessages', 'maxREExecutions', etc). The '*RateLimit' defines the rate limits using simple syntax. For example, '1000:1,20000:60' means up to 1000 events per second but no more than 20000 event per minute. Let's review the example of tenant profile data below: \n\n```json\n{\n \"name\": \"Your name\",\n \"description\": \"Your description\",\n \"isolatedTbRuleEngine\": false,\n \"profileData\": {\n \"configuration\": {\n \"type\": \"DEFAULT\",\n \"maxDevices\": 0,\n \"maxAssets\": 0,\n \"maxCustomers\": 0,\n \"maxUsers\": 0,\n \"maxDashboards\": 0,\n \"maxRuleChains\": 0,\n \"maxResourcesInBytes\": 0,\n \"maxOtaPackagesInBytes\": 0,\n \"maxResourceSize\": 0,\n \"transportTenantMsgRateLimit\": \"1000:1,20000:60\",\n \"transportTenantTelemetryMsgRateLimit\": \"1000:1,20000:60\",\n \"transportTenantTelemetryDataPointsRateLimit\": \"1000:1,20000:60\",\n \"transportDeviceMsgRateLimit\": \"20:1,600:60\",\n \"transportDeviceTelemetryMsgRateLimit\": \"20:1,600:60\",\n \"transportDeviceTelemetryDataPointsRateLimit\": \"20:1,600:60\",\n \"transportGatewayMsgRateLimit\": \"20:1,600:60\",\n \"transportGatewayTelemetryMsgRateLimit\": \"20:1,600:60\",\n \"transportGatewayTelemetryDataPointsRateLimit\": \"20:1,600:60\",\n \"transportGatewayDeviceMsgRateLimit\": \"20:1,600:60\",\n \"transportGatewayDeviceTelemetryMsgRateLimit\": \"20:1,600:60\",\n \"transportGatewayDeviceTelemetryDataPointsRateLimit\": \"20:1,600:60\",\n \"integrationMsgsPerTenantRateLimit\": \"20:1,600:60\",\n \"integrationMsgsPerDeviceRateLimit\": \"20:1,600:60\",\n \"integrationMsgsPerAssetRateLimit\": \"20:1,600:60\",\n \"maxTransportMessages\": 10000000,\n \"maxTransportDataPoints\": 10000000,\n \"maxREExecutions\": 4000000,\n \"maxJSExecutions\": 5000000,\n \"maxDPStorageDays\": 0,\n \"maxRuleNodeExecutionsPerMessage\": 50,\n \"maxDebugModeDurationMinutes\": 15,\n \"maxEmails\": 0,\n \"maxSms\": 0,\n \"maxCreatedAlarms\": 1000,\n \"defaultStorageTtlDays\": 0,\n \"alarmsTtlDays\": 0,\n \"rpcTtlDays\": 0,\n \"queueStatsTtlDays\": 0,\n \"ruleEngineExceptionsTtlDays\": 0,\n \"blobEntityTtlDays\": 0,\n \"warnThreshold\": 0,\n \"maxCalculatedFieldsPerEntity\": 100,\n \"maxArgumentsPerCF\": 10,\n \"minAllowedScheduledUpdateIntervalInSecForCF\": 10,\n \"maxRelationLevelPerCfArgument\": 2,\n \"maxRelatedEntitiesToReturnPerCfArgument\": 1000,\n \"maxDataPointsPerRollingArg\": 1000,\n \"maxStateSizeInKBytes\": 512,\n \"maxSingleValueArgumentSizeInKBytes\": 32, \"minAllowedDeduplicationIntervalInSecForCF\": 10, \"minAllowedAggregationIntervalInSecForCF\": 60, \"intermediateAggregationIntervalInSecForCF\": 300, \"cfReevaluationCheckInterval\": 60, \"alarmsReevaluationInterval\": 60 }\n },\n \"default\": false\n}\n```Remove 'id', from the request body example (below) to create new Tenant Profile entity.\n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "saveTenantProfile", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TenantProfile" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TenantProfile" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenantProfile/{tenantProfileId}": { + "get": { + "tags": [ + "tenant-profile-controller" + ], + "summary": "Get Tenant Profile (getTenantProfileById)", + "description": "Fetch the Tenant Profile object based on the provided Tenant Profile Id. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "getTenantProfileById", + "parameters": [ + { + "name": "tenantProfileId", + "in": "path", + "description": "A string value representing the tenant profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TenantProfile" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + }, + "delete": { + "tags": [ + "tenant-profile-controller" + ], + "summary": "Delete Tenant Profile (deleteTenantProfile)", + "description": "Deletes the tenant profile. Referencing non-existing tenant profile Id will cause an error. Referencing profile that is used by the tenants will cause an error. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "deleteTenantProfile", + "parameters": [ + { + "name": "tenantProfileId", + "in": "path", + "description": "A string value representing the tenant profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenantProfile/{tenantProfileId}/default": { + "post": { + "tags": [ + "tenant-profile-controller" + ], + "summary": "Make tenant profile default (setDefaultTenantProfile)", + "description": "Makes specified tenant profile to be default. Referencing non-existing tenant profile Id will cause an error. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "setDefaultTenantProfile", + "parameters": [ + { + "name": "tenantProfileId", + "in": "path", + "description": "A string value representing the tenant profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TenantProfile" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenantProfileInfo/default": { + "get": { + "tags": [ + "tenant-profile-controller" + ], + "summary": "Get default Tenant Profile Info (getDefaultTenantProfileInfo)", + "description": "Fetch the default Tenant Profile Info object based. Tenant Profile Info is a lightweight object that contains only id and name of the profile. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "getDefaultTenantProfileInfo", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenantProfileInfo/{tenantProfileId}": { + "get": { + "tags": [ + "tenant-profile-controller" + ], + "summary": "Get Tenant Profile Info (getTenantProfileInfoById)", + "description": "Fetch the Tenant Profile Info object based on the provided Tenant Profile Id. Tenant Profile Info is a lightweight object that contains only id and name of the profile. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "getTenantProfileInfoById", + "parameters": [ + { + "name": "tenantProfileId", + "in": "path", + "description": "A string value representing the tenant profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenantProfileInfos": { + "get": { + "tags": [ + "tenant-profile-controller" + ], + "summary": "Get Tenant Profiles Info (getTenantProfileInfos)", + "description": "Returns a page of tenant profile info objects registered in the platform. Tenant Profile Info is a lightweight object that contains only id and name of the profile. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "getTenantProfileInfos", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the tenant profile name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "id", + "name" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataEntityInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenantProfiles": { + "get": { + "tags": [ + "tenant-profile-controller" + ], + "summary": "Get Tenant Profiles (getTenantProfiles)", + "description": "Returns a page of tenant profiles registered in the platform. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "getTenantProfiles", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the tenant profile name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "name", + "description", + "isDefault" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataTenantProfile" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenantProfiles/list": { + "get": { + "tags": [ + "tenant-profile-controller" + ], + "summary": "Get Tenant Profile list (getTenantProfileList)", + "operationId": "getTenantProfileList", + "parameters": [ + { + "name": "ids", + "in": "query", + "description": "Comma-separated list of tenant profile ids", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TenantProfile" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/noauth/translation/login/{localeCode}": { + "get": { + "tags": [ + "translation-controller" + ], + "summary": "Get system translation for login page", + "description": "Fetch the end-user translation for specified locale.", + "operationId": "getLoginPageTranslation", + "parameters": [ + { + "name": "localeCode", + "in": "path", + "description": "Locale code (e.g. 'en_US').", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "If-None-Match", + "in": "header", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "Accept-Encoding", + "in": "header", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Translation for login page in specified locale.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + } + } + }, + "/api/translation/availableJavaLocales": { + "get": { + "tags": [ + "translation-controller" + ], + "summary": "Get list of available java locales (getAvailableJavaLocales)", + "description": "The result is map where key is locale code and value is locale language and country", + "operationId": "getAvailableJavaLocales", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/translation/availableLocales": { + "get": { + "tags": [ + "translation-controller" + ], + "summary": "Get list of available locales (getAvailableLocales)", + "description": "Fetch the list of customized locales from all levels\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", + "operationId": "getAvailableLocales", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/translation/edit/basic/{localeCode}": { + "get": { + "tags": [ + "translation-controller" + ], + "summary": "Get end-user multi-translation for basic edit (getTranslationForBasicEdit)", + "description": "Fetch the translation info map where value is info object containing key translation, origin translation, translation of parent level, translation status.", + "operationId": "getTranslationForBasicEdit", + "parameters": [ + { + "name": "localeCode", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/translation/full/{localeCode}": { + "get": { + "tags": [ + "translation-controller" + ], + "summary": "Get end-user all-to-one translation (getFullTranslation)", + "description": "Fetch the end-user translation for specified locale. The result is the merge of user custom translation, system language translation and default locale translation.", + "operationId": "getFullTranslation", + "parameters": [ + { + "name": "localeCode", + "in": "path", + "description": "Locale code (e.g. 'en_US').", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "If-None-Match", + "in": "header", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "Accept-Encoding", + "in": "header", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JsonNode" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/translation/full/{localeCode}/download": { + "get": { + "tags": [ + "translation-controller" + ], + "summary": "Download end-user all-to-one translation (downloadFullTranslation)", + "description": "Fetch the end-user translation for the specified locale. The result is a json file with merged user custom translation, system language translation and default locale translation.", + "operationId": "downloadFullTranslation", + "parameters": [ + { + "name": "localeCode", + "in": "path", + "description": "Locale code (e.g. 'en_US').", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/translation/info": { + "get": { + "tags": [ + "translation-controller" + ], + "summary": "Get Translation info (getTranslationInfos)", + "description": "Fetch the list of customized locales and corresponding details such as language display name, country display name and translation progress percentage.\n\n Response example: \n\n```json\n[\n {\n \"localeCode\": \"uk_UA\",\n \"language\": \"Ukrainian (українська)\",\n \"country\": \"Україна\",\n \"progress\": 32\n },\n {\n \"localeCode\": \"es_ES\",\n \"language\": \"Spanish (español)\",\n \"country\": \"España\",\n \"progress\": 79\n }]\n```\n\nSecurity check is performed to verify that the user has 'READ' permission for the white labeling resource.", + "operationId": "getTranslationInfos", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TranslationInfo" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/trendz/summary": { + "get": { + "tags": [ + "trendz-api-controller" + ], + "summary": "Get Trendz Summary (getTrendzSummary)", + "description": "Fetch the Trendz summary object. Can only be used if Trendz is already synchronized and integration is enabled. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getTrendzSummary", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrendzSummary" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/trendz/usage": { + "get": { + "tags": [ + "trendz-api-controller" + ], + "summary": "Get Trendz Usage (getTrendzUsage)", + "description": "Fetch the Trendz usage object. Can only be used if Trendz is already synchronized and integration is enabled. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getTrendzUsage", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrendzUsage" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/trendz/view/all": { + "get": { + "tags": [ + "trendz-api-controller" + ], + "summary": "Get Trendz Views (getTrendzViews)", + "description": "Returns a page of Trendz views that are available for the current user. Can only be used if Trendz is already synchronized and integration is enabled. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getTrendzViews", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the Trendz view name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "name", + "createdAt", + "updatedAt", + "favorite" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataTrendzViewConfigLite" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/trendz/view/{viewId}": { + "get": { + "tags": [ + "trendz-api-controller" + ], + "summary": "Get Trendz View by Id (getTrendzViewById)", + "description": "Fetch the Trendz View object based on the provided Trendz View Id. Can only be used if Trendz is already synchronized and integration is enabled. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "getTrendzViewById", + "parameters": [ + { + "name": "viewId", + "in": "path", + "description": "A string value representing the Trendz view id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrendzViewConfig" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/trendz/config": { + "get": { + "tags": [ + "trendz-controller" + ], + "summary": "Get Trendz configuration (getTrendzConfig)", + "description": "Retrieves Trendz configuration (URLs). Returns trendzUrl and tbUrl.\n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "getTrendzConfig", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrendzConfiguration" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + }, + "post": { + "tags": [ + "trendz-controller" + ], + "summary": "Save Trendz configuration (saveTrendzConfig)", + "description": "Saves Trendz configuration (URLs only, without triggering synchronization). Request body example:\n```json\n{\n \"trendzUrl\": \"https://trendz.domain.com\",\n \"tbUrl\": \"https://thingsboard.domain.com\"\n}\n```\n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "saveTrendzConfig", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrendzConfiguration" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrendzConfiguration" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/trendz/connect": { + "post": { + "tags": [ + "trendz-controller" + ], + "summary": "Connect to Trendz (connectToTrendz)", + "description": "Initiates synchronization with Trendz (Connect button action). Uses Trendz configuration from settings or falls back to environment variables. Generates API key, saves configuration, checks Trendz version, and performs initial sync. \n\nAvailable for users with 'SYS_ADMIN' authority.", + "operationId": "connectToTrendz", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrendzSynchronizationResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/trendz/healthcheck": { + "get": { + "tags": [ + "trendz-controller" + ], + "summary": "Perform Trendz healthcheck (performTrendzHealthcheck)", + "description": "Performs healthcheck for Trendz integration. Returns version, type, status, and message. Can only be performed if Trendz is already synchronized and integration is enabled.\n\nAvailable for any authorized user. ", + "operationId": "performTrendzHealthcheck", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrendzHealthcheckResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/trendz/public/connect": { + "post": { + "tags": [ + "trendz-controller" + ], + "summary": "Public connect to Trendz (publicConnectToTrendz)", + "description": "Initiates synchronization with Trendz if Trendz is not synced yet. Uses Trendz configuration from settings or falls back to environment variables. Generates API key, saves configuration, checks Trendz version, and performs initial sync.", + "operationId": "publicConnectToTrendz", + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/trendz/sync": { + "get": { + "tags": [ + "trendz-controller" + ], + "summary": "Get Trendz synchronization result (getTrendzSyncResult)", + "description": "Retrieves Trendz synchronization result and status. Returns trendzVersion, updatedTs, resultType, and status.\n\nAvailable for any authorized user. ", + "operationId": "getTrendzSyncResult", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrendzSynchronizationResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/2fa/account/config": { + "put": { + "tags": [ + "two-factor-auth-config-controller" + ], + "summary": "Update 2FA account config (updateTwoFaAccountConfig)", + "description": "Update config for a given provider type. \nUpdate request example:\n```\n{\n \"useByDefault\": true\n}\n```\nReturns whole account's 2FA settings object.\n\n\nAvailable for any authorized user. ", + "operationId": "updateTwoFaAccountConfig", + "parameters": [ + { + "name": "providerType", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/TwoFaProviderType" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TwoFaAccountConfigUpdateRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountTwoFaSettings" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + }, + "post": { + "tags": [ + "two-factor-auth-config-controller" + ], + "summary": "Verify and save 2FA account config (verifyAndSaveTwoFaAccountConfig)", + "description": "Checks the verification code for submitted config, and if it is correct, saves the provided account config. \n\nReturns whole account's 2FA settings object.\nWill throw an error (Bad Request) if the provider is not configured for usage. \n\nAvailable for any authorized user. ", + "operationId": "verifyAndSaveTwoFaAccountConfig", + "parameters": [ + { + "name": "verificationCode", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TwoFaAccountConfig" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountTwoFaSettings" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + }, + "delete": { + "tags": [ + "two-factor-auth-config-controller" + ], + "summary": "Delete 2FA account config (deleteTwoFaAccountConfig)", + "description": "Delete 2FA config for a given 2FA provider type. \nReturns whole account's 2FA settings object.\n\n\nAvailable for any authorized user. ", + "operationId": "deleteTwoFaAccountConfig", + "parameters": [ + { + "name": "providerType", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/TwoFaProviderType" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountTwoFaSettings" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/2fa/account/config/generate": { + "post": { + "tags": [ + "two-factor-auth-config-controller" + ], + "summary": "Generate 2FA account config (generateTwoFaAccountConfig)", + "description": "Generate new 2FA account config template for specified provider type. \n\nFor TOTP, this will return a corresponding account config template with a generated OTP auth URL (with new random secret key for each API call) that can be then converted to a QR code to scan with an authenticator app. Example:\n```\n{\n \"providerType\": \"TOTP\",\n \"useByDefault\": false,\n \"authUrl\": \"otpauth://totp/TB%202FA:tenant@thingsboard.org?issuer=TB+2FA&secret=PNJDNWJVAK4ZTUYT7RFGPQLXA7XGU7PX\"\n}\n```\n\nFor EMAIL, the generated config will contain email from user's account:\n```\n{\n \"providerType\": \"EMAIL\",\n \"useByDefault\": false,\n \"email\": \"tenant@thingsboard.org\"\n}\n```\n\nFor SMS 2FA this method will just return a config with empty/default values as there is nothing to generate/preset:\n```\n{\n \"providerType\": \"SMS\",\n \"useByDefault\": false,\n \"phoneNumber\": null\n}\n```\n\nWill throw an error (Bad Request) if the provider is not configured for usage. \n\nAvailable for any authorized user. ", + "operationId": "generateTwoFaAccountConfig", + "parameters": [ + { + "name": "providerType", + "in": "query", + "description": "2FA provider type to generate new account config for", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TwoFaAccountConfig" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/2fa/account/config/submit": { + "post": { + "tags": [ + "two-factor-auth-config-controller" + ], + "summary": "Submit 2FA account config (submitTwoFaAccountConfig)", + "description": "Submit 2FA account config to prepare for a future verification. Basically, this method will send a verification code for a given account config, if this has sense for a chosen 2FA provider. This code is needed to then verify and save the account config.\n\nExample of EMAIL 2FA account config:\n```\n{\n \"providerType\": \"EMAIL\",\n \"useByDefault\": true,\n \"email\": \"separate-email-for-2fa@thingsboard.org\"\n}\n```\n\nExample of SMS 2FA account config:\n```\n{\n \"providerType\": \"SMS\",\n \"useByDefault\": false,\n \"phoneNumber\": \"+38012312321\"\n}\n```\n\nFor TOTP this method does nothing.\n\nWill throw an error (Bad Request) if submitted account config is not valid, or if the provider is not configured for usage. \n\nAvailable for any authorized user. ", + "operationId": "submitTwoFaAccountConfig", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TwoFaAccountConfig" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/2fa/account/settings": { + "get": { + "tags": [ + "two-factor-auth-config-controller" + ], + "summary": "Get account 2FA settings (getAccountTwoFaSettings)", + "description": "Get user's account 2FA configuration. Configuration contains configs for different 2FA providers.\n\nExample:\n```\n{\n \"configs\": {\n \"EMAIL\": {\n \"providerType\": \"EMAIL\",\n \"useByDefault\": true,\n \"email\": \"tenant@thingsboard.org\"\n },\n \"TOTP\": {\n \"providerType\": \"TOTP\",\n \"useByDefault\": false,\n \"authUrl\": \"otpauth://totp/TB%202FA:tenant@thingsboard.org?issuer=TB+2FA&secret=P6Z2TLYTASOGP6LCJZAD24ETT5DACNNX\"\n },\n \"SMS\": {\n \"providerType\": \"SMS\",\n \"useByDefault\": false,\n \"phoneNumber\": \"+380501253652\"\n }\n }\n}\n```\n\nAvailable for any authorized user. ", + "operationId": "getAccountTwoFaSettings", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountTwoFaSettings" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/2fa/providers": { + "get": { + "tags": [ + "two-factor-auth-config-controller" + ], + "summary": "Get available 2FA providers (getAvailableTwoFaProviderTypes)", + "description": "Get the list of provider types available for user to use (the ones configured by tenant or sysadmin).\nExample of response:\n```\n[\n \"TOTP\",\n \"EMAIL\",\n \"SMS\"\n]\n```\n\nAvailable for any authorized user. ", + "operationId": "getAvailableTwoFaProviderTypes", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TwoFaProviderType" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/2fa/settings": { + "get": { + "tags": [ + "two-factor-auth-config-controller" + ], + "summary": "Get platform 2FA settings (getPlatformTwoFaSettings)", + "description": "Get platform settings for 2FA. The settings are described for savePlatformTwoFaSettings API method. If 2FA is not configured, then an empty response will be returned.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "getPlatformTwoFaSettings", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlatformTwoFaSettings" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + }, + "post": { + "tags": [ + "two-factor-auth-config-controller" + ], + "summary": "Save platform 2FA settings (savePlatformTwoFaSettings)", + "description": "Save 2FA settings for platform. The settings have following properties:\n- `useSystemTwoFactorAuthSettings` - option for tenant admins to use 2FA settings configured by sysadmin. If this param is set to true, then the settings will not be validated for constraints (if it is a tenant admin; for sysadmin this param is ignored).\n- `providers` - the list of 2FA providers' configs. Users will only be allowed to use 2FA providers from this list. \n\n- `minVerificationCodeSendPeriod` - minimal period in seconds to wait after verification code send request to send next request. \n- `verificationCodeCheckRateLimit` - rate limit configuration for verification code checking.\nThe format is standard: 'amountOfRequests:periodInSeconds'. The value of '1:60' would limit verification code checking requests to one per minute.\n- `maxVerificationFailuresBeforeUserLockout` - maximum number of verification failures before a user gets disabled.\n- `totalAllowedTimeForVerification` - total amount of time in seconds allotted for verification. Basically, this property sets a lifetime for pre-verification token. If not set, default value of 30 minutes is used.\n\n\nTOTP 2FA provider config has following settings:\n- `issuerName` - issuer name that will be displayed in an authenticator app near a username. Must not be blank.\n\nFor SMS 2FA provider:\n- `smsVerificationMessageTemplate` - verification message template. Available template variables are ${code} and ${userEmail}. It must not be blank and must contain verification code variable.\n- `verificationCodeLifetime` - verification code lifetime in seconds. Required to be positive.\n\nFor EMAIL provider type:\n- `verificationCodeLifetime` - the same as for SMS.\n\nExample of the settings:\n```\n{\n \"useSystemTwoFactorAuthSettings\": false,\n \"providers\": [\n {\n \"providerType\": \"TOTP\",\n \"issuerName\": \"TB\"\n },\n {\n \"providerType\": \"EMAIL\",\n \"verificationCodeLifetime\": 60\n },\n {\n \"providerType\": \"SMS\",\n \"verificationCodeLifetime\": 60,\n \"smsVerificationMessageTemplate\": \"Here is your verification code: ${code}\"\n }\n ],\n \"minVerificationCodeSendPeriod\": 60,\n \"verificationCodeCheckRateLimit\": \"3:900\",\n \"maxVerificationFailuresBeforeUserLockout\": 10,\n \"totalAllowedTimeForVerification\": 600\n}\n```\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.", + "operationId": "savePlatformTwoFaSettings", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlatformTwoFaSettings" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlatformTwoFaSettings" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/auth/2fa/login": { + "post": { + "tags": [ + "two-factor-auth-controller" + ], + "summary": "Get regular token pair after successfully configuring 2FA", + "description": "Checks 2FA is configured, returning token pair on success.", + "operationId": "authenticateByTwoFaConfigurationToken", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JwtPair" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/auth/2fa/providers": { + "get": { + "tags": [ + "two-factor-auth-controller" + ], + "summary": "Get available 2FA providers (getAvailableTwoFaProviderInfos)", + "description": "Get the list of 2FA provider infos available for user to use. Example:\n```\n[\n {\n \"type\": \"EMAIL\",\n \"default\": true,\n \"contact\": \"ab*****ko@gmail.com\"\n },\n {\n \"type\": \"TOTP\",\n \"default\": false,\n \"contact\": null\n },\n {\n \"type\": \"SMS\",\n \"default\": false,\n \"contact\": \"+38********12\"\n }\n]\n```", + "operationId": "getAvailableTwoFaProviderInfos", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TwoFaProviderInfo" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/auth/2fa/verification/check": { + "post": { + "tags": [ + "two-factor-auth-controller" + ], + "summary": "Check 2FA verification code (checkTwoFaVerificationCode)", + "description": "Checks 2FA verification code, and if it is correct the method returns a regular access and refresh token pair.\n\nThe API method is rate limited (using rate limit config from TwoFactorAuthSettings), and also will block a user after X unsuccessful verification attempts if such behavior is configured (in TwoFactorAuthSettings).\n\nWill return a Bad Request error if provider is not configured for usage, and Too Many Requests error if rate limits are exceeded.", + "operationId": "checkTwoFaVerificationCode", + "parameters": [ + { + "name": "providerType", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/TwoFaProviderType" + } + }, + { + "name": "verificationCode", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JwtPair" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/auth/2fa/verification/send": { + "post": { + "tags": [ + "two-factor-auth-controller" + ], + "summary": "Request 2FA verification code (requestTwoFaVerificationCode)", + "description": "Request 2FA verification code.\n\nTo make a request to this endpoint, you need an access token with the scope of PRE_VERIFICATION_TOKEN, which is issued on username/password auth if 2FA is enabled.\n\nThe API method is rate limited (using rate limit config from TwoFactorAuthSettings). Will return a Bad Request error if provider is not configured for usage, and Too Many Requests error if rate limits are exceeded.", + "operationId": "requestTwoFaVerificationCode", + "parameters": [ + { + "name": "providerType", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/TwoFaProviderType" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/uiSettings/helpBaseUrl": { + "get": { + "tags": [ + "ui-settings-controller" + ], + "summary": "Get UI help base url (getHelpBaseUrl)", + "description": "Get UI help base url used to fetch help assets. The actual value of the base url is configurable in the system configuration file.", + "operationId": "getHelpBaseUrl", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/usage": { + "get": { + "tags": [ + "usage-info-controller" + ], + "summary": "getTenantUsageInfo", + "operationId": "getTenantUsageInfo", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UsageInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/customer/users": { + "get": { + "tags": [ + "user-controller" + ], + "summary": "Get Customer Users (getCustomerUsers)", + "description": "Returns a page of users for the current tenant with authority 'CUSTOMER_USER'. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getAllCustomerUsers", + "parameters": [ + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the user email.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "firstName", + "lastName", + "email" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataUser" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/customer/{customerId}/userInfos": { + "get": { + "tags": [ + "user-controller" + ], + "summary": "Get Customer user Infos (getCustomerUserInfos)", + "description": "Returns a page of user info objects owned by the specified customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerUserInfos", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeCustomers", + "in": "query", + "description": "Include customer or sub-customer entities. For tenant administrator: when true, includes entities for all customers; when false (default), only own entities are returned. For customer user: when true, includes entities for all sub-customers.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the user email.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "firstName", + "lastName", + "email" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataUserInfo" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/customer/{customerId}/users": { + "get": { + "tags": [ + "user-controller" + ], + "summary": "Get Customer Users (getCustomerUsers)", + "description": "Returns a page of users owned by customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getCustomerUsers", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the user email.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "firstName", + "lastName", + "email" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataUser" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/entityGroup/{entityGroupId}/users": { + "get": { + "tags": [ + "user-controller" + ], + "summary": "Get users by Entity Group Id (getUsersByEntityGroupId)", + "description": "Returns a page of user objects that belongs to specified Entity Group Id. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\n Security check is performed to verify that the user has 'READ' permission for specified group.", + "operationId": "getUsersByEntityGroupId", + "parameters": [ + { + "name": "entityGroupId", + "in": "path", + "description": "A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the user email.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "firstName", + "lastName", + "email" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataUser" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/tenant/{tenantId}/users": { + "get": { + "tags": [ + "user-controller" + ], + "summary": "Get Tenant Users (getTenantAdmins)", + "description": "Returns a page of users owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. \n\nAvailable for users with 'SYS_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getTenantAdmins", + "parameters": [ + { + "name": "tenantId", + "in": "path", + "description": "A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "Maximum amount of entities in a one page", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page", + "in": "query", + "description": "Sequence number of page starting from 0", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "textSearch", + "in": "query", + "description": "The case insensitive 'substring' filter based on the user email.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sortProperty", + "in": "query", + "description": "Property of entity to sort by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdTime", + "firstName", + "lastName", + "email" + ] + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Sort order. ASC (ASCENDING) or DESC (DESCENDING)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PageDataUser" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/user": { + "post": { + "tags": [ + "user-controller" + ], + "summary": "Save Or update User (saveUser)", + "description": "Create or update the User. When creating user, platform generates User Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created User Id will be present in the response. Specify existing User Id to update the device. Referencing non-existing User Id will cause 'Not Found' error.\n\nDevice email is unique for entire platform setup.\n\nRemove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new User entity. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "operationId": "saveUser", + "parameters": [ + { + "name": "sendActivationMail", + "in": "query", + "description": "Send activation email (or use activation link)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "entityGroupId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "entityGroupIds", + "in": "query", + "description": "A list of entity group ids, separated by comma ','", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid request body", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/user/dashboards/{dashboardId}/{action}": { + "get": { + "tags": [ + "user-controller" + ], + "summary": "Report action of User over the dashboard (reportUserDashboardAction)", + "description": "Report action of User over the dashboard. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", + "operationId": "reportUserDashboardAction", + "parameters": [ + { + "name": "dashboardId", + "in": "path", + "description": "A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "action", + "in": "path", + "description": "Dashboard action, one of: \"visit\", \"star\" or \"unstar\".", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserDashboardsInfo" } } } @@ -133544,428 +145987,1955 @@ } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + }, + "/api/widgetsBundles/list": { + "get": { + "tags": [ + "widgets-bundle-controller" + ], + "summary": "Get Widgets Bundles By Ids (getWidgetsBundlesList)", + "description": "Requested widgets bundles must be system level or owned by tenant of the user which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", + "operationId": "getWidgetsBundlesList", + "parameters": [ + { + "name": "widgetsBundleIds", + "in": "query", + "description": "A list of widgets bundle ids, separated by comma ','", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WidgetsBundle" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-400": { + "summary": "Bad Request", + "value": { + "message": "Invalid UUID string: 123", + "errorCode": 31, + "status": 400, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-401": { + "summary": "Unauthorized", + "value": { + "message": "Authentication failed", + "errorCode": 10, + "status": 401, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-403": { + "summary": "Forbidden", + "value": { + "message": "You don't have permission to perform this operation!", + "errorCode": 20, + "status": 403, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-404": { + "summary": "Not Found", + "value": { + "message": "Requested item wasn't found!", + "errorCode": 32, + "status": 404, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThingsboardErrorResponse" + }, + "examples": { + "error-code-429": { + "summary": "Too Many Requests", + "value": { + "message": "Too many requests for current tenant!", + "errorCode": 33, + "status": 429, + "subscriptionErrorCode": null, + "subscriptionEntry": null, + "subscriptionValue": null, + "timestamp": 1609459200000 + } + } + } + } + } + } + }, + "security": [ + { + "HttpLoginForm": [] + }, + { + "ApiKeyForm": [] + } + ] + } + } + }, + "components": { + "schemas": { + "AccountTwoFaSettings": { + "type": "object", + "description": "Account Two-Factor Authentication Settings", + "properties": { + "configs": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TwoFaAccountConfig" + } + } + } + }, + "AcmeCertificateId": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "string", + "example": "784f394c-42b6-435a-983c-b7beff2784f9" + } + }, + "required": [ + "id" + ] + }, + "Action": { + "type": "string", + "enum": [ + "ASSIGNED", + "UNASSIGNED" + ] + }, + "ActionStatus": { + "type": "string", + "enum": [ + "SUCCESS", + "FAILURE" + ] + }, + "ActionType": { + "type": "string", + "enum": [ + "ADDED", + "DELETED", + "UPDATED", + "ATTRIBUTES_UPDATED", + "ATTRIBUTES_DELETED", + "TIMESERIES_UPDATED", + "TIMESERIES_DELETED", + "RPC_CALL", + "CREDENTIALS_UPDATED", + "ASSIGNED_TO_CUSTOMER", + "UNASSIGNED_FROM_CUSTOMER", + "CHANGE_OWNER", + "ACTIVATED", + "SUSPENDED", + "CREDENTIALS_READ", + "ATTRIBUTES_READ", + "RELATION_ADD_OR_UPDATE", + "RELATION_DELETED", + "RELATIONS_DELETED", + "ALARM_ACK", + "ALARM_CLEAR", + "ALARM_DELETE", + "ALARM_ASSIGNED", + "ALARM_UNASSIGNED", + "ADDED_TO_ENTITY_GROUP", + "REMOVED_FROM_ENTITY_GROUP", + "REST_API_RULE_ENGINE_CALL", + "MADE_PUBLIC", + "MADE_PRIVATE", + "LOGIN", + "LOGOUT", + "LOCKOUT", + "ASSIGNED_FROM_TENANT", + "ASSIGNED_TO_TENANT", + "PROVISION_SUCCESS", + "PROVISION_FAILURE", + "ASSIGNED_TO_EDGE", + "UNASSIGNED_FROM_EDGE", + "ADDED_COMMENT", + "UPDATED_COMMENT", + "DELETED_COMMENT", + "SMS_SENT", + "SUBSCRIPTION_CREATED", + "SUBSCRIPTION_UPDATED", + "SUBSCRIPTION_CANCELED", + "SUBSCRIPTION_PLAN_UPDATED", + "SUBSCRIPTION_COUPON_APPLIED" + ] + }, + "ActivateUserRequest": { + "type": "object", + "description": "Activate user request.", + "properties": { + "activateToken": { + "type": "string", + "description": "The activate token to verify", + "example": "AAB254FF67D.." + }, + "password": { + "type": "string", + "description": "The new password to set", + "example": "secret" + } + } + }, + "AdminSettings": { + "type": "object", + "description": "A JSON value representing the Mail Settings.", + "properties": { + "id": { + "$ref": "#/components/schemas/AdminSettingsId", + "description": "The Id of the Administration Settings, auto-generated, UUID" + }, + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the settings creation, in milliseconds", + "example": 1609459200000, + "readOnly": true + }, + "tenantId": { + "$ref": "#/components/schemas/TenantId", + "description": "JSON object with Tenant Id.", + "readOnly": true + }, + "key": { + "type": "string", + "description": "The Administration Settings key, (e.g. 'general' or 'mail')", + "example": "mail" + }, + "jsonValue": { + "$ref": "#/components/schemas/JsonNode", + "description": "JSON representation of the Administration Settings value" + } + } + }, + "AdminSettingsId": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/EntityId" + }, + { + "type": "object" + } + ], + "example": { + "entityType": "ADMIN_SETTINGS", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + } + }, + "AffectedTenantAdministratorsFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/UsersFilter" + } + ], + "example": { + "type": "AFFECTED_TENANT_ADMINISTRATORS" + } + }, + "AffectedUserFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/UsersFilter" + } + ], + "example": { + "type": "AFFECTED_USER" + } + }, + "Agent": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/AgentId", + "description": "JSON object with the Agent Id. Specify this field to update the Agent. Referencing non-existing Agent Id will cause error. Omit this field to create new Agent." + }, + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the agent creation, in milliseconds", + "example": 1609459200000, + "readOnly": true + }, + "additionalInfo": { + "$ref": "#/components/schemas/JsonNode" + }, + "tenantId": { + "$ref": "#/components/schemas/TenantId", + "description": "JSON object with Tenant Id. Use 'assignAgentToTenant' to change the Tenant Id.", + "readOnly": true + }, + "customerId": { + "$ref": "#/components/schemas/CustomerId", + "description": "JSON object with Customer Id.", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Unique Agent Name in scope of Tenant", + "example": "Silo_A_Agent" + }, + "description": { + "type": "string", + "description": "Agent description" + }, + "routingKey": { + "type": "string", + "description": "Agent routing key used for authentication", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "secret": { + "type": "string", + "description": "Agent secret used for authentication" + }, + "agentProfileId": { + "$ref": "#/components/schemas/AgentProfileId", + "description": "JSON object with Agent Profile Id. Nullable." + }, + "version": { + "type": "integer", + "format": "int64" + }, + "ownerId": { + "$ref": "#/components/schemas/EntityId", + "description": "JSON object with Customer or Tenant Id", + "readOnly": true + } + }, + "required": [ + "name", + "routingKey", + "secret" + ] + }, + "AgentAppArgument": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Argument name, referenced in the compose as ${tb.}.", + "example": "device_uuid" + }, + "sourceType": { + "$ref": "#/components/schemas/AgentAppArgumentSource", + "description": "Source entity the value is resolved from." + }, + "sourceEntityId": { + "$ref": "#/components/schemas/EntityId", + "description": "Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources." + }, + "valueType": { + "$ref": "#/components/schemas/AgentAppArgumentValueType", + "description": "Whether the value is read from an attribute or the latest telemetry." + }, + "scope": { + "$ref": "#/components/schemas/AttributeScope", + "description": "Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE." + }, + "key": { + "type": "string", + "description": "Attribute or latest telemetry key to read.", + "example": "cloud_endpoint" + }, + "defaultValue": { + "type": "string", + "description": "Optional fallback value used when the source has no value for the key." + }, + "format": { + "$ref": "#/components/schemas/AgentAppArgumentFormat", + "description": "How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING." + } + } + }, + "AgentAppArgumentFormat": { + "type": "string", + "enum": [ + "STRING", + "JSON" + ] + }, + "AgentAppArgumentSource": { + "type": "string", + "enum": [ + "AGENT", + "OWNER", + "RELATED_ENTITY", + "TENANT", + "DEVICE", + "ASSET", + "CUSTOMER", + "EDGE" + ] + }, + "AgentAppArgumentValueType": { + "type": "string", + "enum": [ + "ATTRIBUTE", + "LATEST_TELEMETRY" + ] + }, + "AgentAppConfig": { + "type": "object", + "discriminator": { + "propertyName": "type" + }, + "properties": { + "arguments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentAppArgument" + } + }, + "edgeRoutingKey": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/AgentAppConfigType" + } + } + }, + "AgentAppConfigType": { + "type": "string", + "enum": [ + "DOCKER_COMPOSE" + ] + }, + "AgentAppEvent": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/AgentAppEventId", + "description": "JSON object with the Agent App Event Id." + }, + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the event creation, in milliseconds", + "readOnly": true + }, + "tenantId": { + "$ref": "#/components/schemas/TenantId" + }, + "applicationId": { + "$ref": "#/components/schemas/AgentApplicationId" + }, + "agentId": { + "$ref": "#/components/schemas/AgentId" + }, + "applicationName": { + "type": "string" + }, + "actionType": { + "$ref": "#/components/schemas/AgentAppEventActionType" + }, + "startStatus": { + "$ref": "#/components/schemas/ProcessingStartStatus" + }, + "processingStatus": { + "$ref": "#/components/schemas/AgentProcessingStatus" + }, + "currentStepId": { + "type": "string", + "format": "uuid" + }, + "currentActivity": { + "type": "string" + }, + "errorMessage": { + "type": "string" + }, + "updatedTime": { + "type": "integer", + "format": "int64" + }, + "stepStates": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/BackupVolumesStepState" + }, + { + "$ref": "#/components/schemas/ComposeDownStepState" + }, + { + "$ref": "#/components/schemas/ComposeStepState" + }, + { + "$ref": "#/components/schemas/RollBackStepState" + }, + { + "$ref": "#/components/schemas/RunJobStepState" + } + ] + } + }, + "bulkActionId": { + "type": "string", + "format": "uuid" + }, + "resolvedArguments": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "winnerContainerId": { + "type": "string" + }, + "finalizeDeadlineTs": { + "type": "integer", + "format": "int64" + }, + "contextMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "AgentAppEventActionType": { + "type": "string", + "enum": [ + "INSTALL", + "UPDATE", + "DELETE", + "RESTART", + "ROLLBACK", + "UPGRADE", + "AGENT_UPGRADE" + ] + }, + "AgentAppEventId": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/EntityId" + }, + { + "type": "object" + } + ], + "example": { + "entityType": "AGENT_APP_EVENT", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + } + }, + "AgentAppEventInfo": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/AgentAppEventId", + "description": "JSON object with the Agent App Event Id." + }, + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the event creation, in milliseconds", + "readOnly": true + }, + "tenantId": { + "$ref": "#/components/schemas/TenantId" + }, + "applicationId": { + "$ref": "#/components/schemas/AgentApplicationId" + }, + "agentId": { + "$ref": "#/components/schemas/AgentId" + }, + "applicationName": { + "type": "string" + }, + "actionType": { + "$ref": "#/components/schemas/AgentAppEventActionType" + }, + "startStatus": { + "$ref": "#/components/schemas/ProcessingStartStatus" + }, + "processingStatus": { + "$ref": "#/components/schemas/AgentProcessingStatus" + }, + "currentStepId": { + "type": "string", + "format": "uuid" + }, + "currentActivity": { + "type": "string" + }, + "errorMessage": { + "type": "string" + }, + "updatedTime": { + "type": "integer", + "format": "int64" + }, + "stepStates": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/BackupVolumesStepState" + }, + { + "$ref": "#/components/schemas/ComposeDownStepState" + }, + { + "$ref": "#/components/schemas/ComposeStepState" + }, + { + "$ref": "#/components/schemas/RollBackStepState" + }, + { + "$ref": "#/components/schemas/RunJobStepState" + } + ] + } + }, + "bulkActionId": { + "type": "string", + "format": "uuid" + }, + "resolvedArguments": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "winnerContainerId": { + "type": "string" + }, + "finalizeDeadlineTs": { + "type": "integer", + "format": "int64" + }, + "contextMetadata": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "agentName": { + "type": "string", + "description": "Name of the Agent that owns the Application.", + "readOnly": true + } + } + }, + "AgentAppEventRequest": { + "type": "object", + "description": "Request payload for creating an agent application event (install, update, upgrade, restart, delete, etc.).", + "properties": { + "actionType": { + "$ref": "#/components/schemas/AgentAppEventActionType", + "description": "Action to perform against the agent application." + }, + "application": { + "$ref": "#/components/schemas/AgentApplication", + "description": "Agent application payload supplied by the caller. Used to carry name/config changes for UPDATE and the target state for INSTALL/UPGRADE." + }, + "stepInputs": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/BackupVolumesStepState" + }, + { + "$ref": "#/components/schemas/ComposeDownStepState" + }, + { + "$ref": "#/components/schemas/ComposeStepState" + }, + { + "$ref": "#/components/schemas/RollBackStepState" + }, + { + "$ref": "#/components/schemas/RunJobStepState" + } + ] + }, + "description": "Per-step input overrides keyed by step id (e.g. pullImages flag, backup volume selection)." + }, + "relatedEntityId": { + "$ref": "#/components/schemas/EntityId", + "description": "INSTALL-action optional related entity (Edge or Gateway Device) to link to the application in the same operation. When set, the application is created and the relation is assigned atomically. Ignored for non-INSTALL actions." + }, + "bulkActionId": { + "type": "string", + "format": "uuid", + "description": "Optional bulk-action correlation id. When the same value is used across multiple application events, duplicates are deduplicated server-side." + }, + "skipProfileRefetch": { + "type": "boolean", + "description": "UPDATE-action flag for profile-managed apps. When true, the compose is not re-resolved from the (possibly upgraded) profile — only the credentials carried by `application.config` are applied. Ignored for non-UPDATE actions and for non-profile-managed apps." + } + } + }, + "AgentAppInstallResponse": { + "type": "object", + "description": "Response payload for the install-agent-application endpoint. Carries both the created application and the INSTALL event so the caller can open a progress dialog without a second round-trip.", + "properties": { + "application": { + "$ref": "#/components/schemas/AgentApplication", + "description": "The newly created agent application." + }, + "event": { + "$ref": "#/components/schemas/AgentAppEvent", + "description": "The INSTALL event created alongside the application." + } + } + }, + "AgentAppProfile": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/AgentAppProfileId", + "description": "JSON object with the Agent Application Profile Id." + }, + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the profile creation, in milliseconds", + "readOnly": true + }, + "tenantId": { + "$ref": "#/components/schemas/TenantId", + "description": "JSON object with Tenant Id.", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Unique profile name within tenant" + }, + "description": { + "type": "string", + "description": "Profile description" + }, + "appType": { + "$ref": "#/components/schemas/AgentApplicationType", + "description": "Application type: EDGE, GATEWAY, or GENERIC" + }, + "templateVersion": { + "type": "string", + "description": "Template version this profile is based on" + }, + "config": { + "description": "Shared config (compose definition)", + "oneOf": [ + { + "$ref": "#/components/schemas/DockerComposeConfig" + } + ] + }, + "version": { + "type": "integer", + "format": "int64" + } + }, + "required": [ + "appType", + "name", + "templateVersion" + ] + }, + "AgentAppProfileId": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/EntityId" + }, + { + "type": "object" + } + ], + "example": { + "entityType": "AGENT_APP_PROFILE", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + } + }, + "AgentAppProfileInfo": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/AgentAppProfileId", + "description": "JSON object with the Agent Application Profile Id." + }, + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the profile creation, in milliseconds", + "readOnly": true + }, + "tenantId": { + "$ref": "#/components/schemas/TenantId", + "description": "JSON object with Tenant Id.", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Unique profile name within tenant" + }, + "description": { + "type": "string", + "description": "Profile description" + }, + "appType": { + "$ref": "#/components/schemas/AgentApplicationType", + "description": "Application type: EDGE, GATEWAY, or GENERIC" + }, + "templateVersion": { + "type": "string", + "description": "Template version this profile is based on" + }, + "config": { + "description": "Shared config (compose definition)", + "oneOf": [ + { + "$ref": "#/components/schemas/DockerComposeConfig" + } + ] + }, + "version": { + "type": "integer", + "format": "int64" + }, + "templateCurrentVersion": { + "type": "string", + "description": "Current version of the template this profile points to.", + "readOnly": true + } + }, + "required": [ + "appType", + "name", + "templateVersion" + ] + }, + "AgentAppProfileRelationInfo": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/AgentAppProfileId", + "description": "JSON object with the Agent Application Profile Id." + }, + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the profile creation, in milliseconds", + "readOnly": true + }, + "tenantId": { + "$ref": "#/components/schemas/TenantId", + "description": "JSON object with Tenant Id.", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Unique profile name within tenant" + }, + "description": { + "type": "string", + "description": "Profile description" + }, + "appType": { + "$ref": "#/components/schemas/AgentApplicationType", + "description": "Application type: EDGE, GATEWAY, or GENERIC" + }, + "templateVersion": { + "type": "string", + "description": "Template version this profile is based on" + }, + "config": { + "description": "Shared config (compose definition)", + "oneOf": [ + { + "$ref": "#/components/schemas/DockerComposeConfig" + } + ] + }, + "version": { + "type": "integer", + "format": "int64" + }, + "templateCurrentVersion": { + "type": "string", + "description": "Current version of the template this profile points to.", + "readOnly": true + }, + "agentProfileId": { + "$ref": "#/components/schemas/AgentProfileId", + "description": "JSON object with the Agent Profile Id this app profile is assigned to.", + "readOnly": true + }, + "assignedApplicationsCount": { + "type": "integer", + "format": "int64", + "description": "Number of AgentApplications using this app profile within the agent profile.", + "readOnly": true + }, + "additionalInfo": { + "$ref": "#/components/schemas/JsonNode", + "description": "Additional info of the assignment relation between the agent profile and this app profile.", + "readOnly": true + } + }, + "required": [ + "appType", + "name", + "templateVersion" + ] + }, + "AgentAppStep": { + "type": "object", + "discriminator": { + "propertyName": "type" + }, + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "nextId": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "templateOnly": { + "type": "boolean" + }, + "condition": { + "type": "string" + }, + "stateful": { + "type": "boolean" + }, + "type": { + "$ref": "#/components/schemas/AgentAppStepType" + } + } + }, + "AgentAppStepState": { + "type": "object", + "discriminator": { + "propertyName": "type" + }, + "properties": { + "type": { + "$ref": "#/components/schemas/AgentAppStepType" + } + } + }, + "AgentAppStepType": { + "type": "string", + "enum": [ + "COMPOSE_TEMPLATE", + "COMPOSE", + "COMPOSE_START", + "COMPOSE_DOWN", + "ROLLBACK", + "BACKUP_VOLUME", + "BACKUP_VOLUME_REMOVE", + "COMPOSE_RESTART", + "RUN_JOB", + "AGENT_PREPARE", + "AGENT_FINALIZE" + ] + }, + "AgentAppTemplate": { + "type": "object", + "properties": { + "tenantId": { + "$ref": "#/components/schemas/TenantId", + "description": "JSON object with Tenant Id.", + "readOnly": true + }, + "appType": { + "$ref": "#/components/schemas/AgentApplicationType", + "description": "Application type" + }, + "configType": { + "$ref": "#/components/schemas/AgentAppConfigType", + "description": "Config type (e.g. 'DOCKER_COMPOSE'); the compose body lives in the template's compose-template step, not here" + }, + "currentVersion": { + "type": "string", + "description": "Current template version" + }, + "nextVersion": { + "type": "string", + "description": "Next template version" + }, + "startSteps": { + "type": "array", + "description": "Start steps", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AgentFinalizeStep" }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + { + "$ref": "#/components/schemas/AgentPrepareStep" + }, + { + "$ref": "#/components/schemas/BackupVolumesRemoveStep" + }, + { + "$ref": "#/components/schemas/BackupVolumesStep" + }, + { + "$ref": "#/components/schemas/ComposeDownStep" + }, + { + "$ref": "#/components/schemas/ComposeRestartStep" + }, + { + "$ref": "#/components/schemas/ComposeStartStep" + }, + { + "$ref": "#/components/schemas/ComposeStep" + }, + { + "$ref": "#/components/schemas/ComposeTypeChoiceStep" + }, + { + "$ref": "#/components/schemas/RollBackStep" + }, + { + "$ref": "#/components/schemas/RunJobStep" } - } + ] } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" + "upgradeSteps": { + "type": "array", + "description": "Upgrade steps", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AgentFinalizeStep" }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + { + "$ref": "#/components/schemas/AgentPrepareStep" + }, + { + "$ref": "#/components/schemas/BackupVolumesRemoveStep" + }, + { + "$ref": "#/components/schemas/BackupVolumesStep" + }, + { + "$ref": "#/components/schemas/ComposeDownStep" + }, + { + "$ref": "#/components/schemas/ComposeRestartStep" + }, + { + "$ref": "#/components/schemas/ComposeStartStep" + }, + { + "$ref": "#/components/schemas/ComposeStep" + }, + { + "$ref": "#/components/schemas/ComposeTypeChoiceStep" + }, + { + "$ref": "#/components/schemas/RollBackStep" + }, + { + "$ref": "#/components/schemas/RunJobStep" } - } + ] } }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" + "deleteSteps": { + "type": "array", + "description": "Delete steps", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AgentFinalizeStep" }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + { + "$ref": "#/components/schemas/AgentPrepareStep" + }, + { + "$ref": "#/components/schemas/BackupVolumesRemoveStep" + }, + { + "$ref": "#/components/schemas/BackupVolumesStep" + }, + { + "$ref": "#/components/schemas/ComposeDownStep" + }, + { + "$ref": "#/components/schemas/ComposeRestartStep" + }, + { + "$ref": "#/components/schemas/ComposeStartStep" + }, + { + "$ref": "#/components/schemas/ComposeStep" + }, + { + "$ref": "#/components/schemas/ComposeTypeChoiceStep" + }, + { + "$ref": "#/components/schemas/RollBackStep" + }, + { + "$ref": "#/components/schemas/RunJobStep" } - } + ] } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" + "rollbackSteps": { + "type": "array", + "description": "Rollback steps", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AgentFinalizeStep" }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + { + "$ref": "#/components/schemas/AgentPrepareStep" + }, + { + "$ref": "#/components/schemas/BackupVolumesRemoveStep" + }, + { + "$ref": "#/components/schemas/BackupVolumesStep" + }, + { + "$ref": "#/components/schemas/ComposeDownStep" + }, + { + "$ref": "#/components/schemas/ComposeRestartStep" + }, + { + "$ref": "#/components/schemas/ComposeStartStep" + }, + { + "$ref": "#/components/schemas/ComposeStep" + }, + { + "$ref": "#/components/schemas/ComposeTypeChoiceStep" + }, + { + "$ref": "#/components/schemas/RollBackStep" + }, + { + "$ref": "#/components/schemas/RunJobStep" } - } + ] } }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" + "restartSteps": { + "type": "array", + "description": "Restart steps", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AgentFinalizeStep" }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } + { + "$ref": "#/components/schemas/AgentPrepareStep" + }, + { + "$ref": "#/components/schemas/BackupVolumesRemoveStep" + }, + { + "$ref": "#/components/schemas/BackupVolumesStep" + }, + { + "$ref": "#/components/schemas/ComposeDownStep" + }, + { + "$ref": "#/components/schemas/ComposeRestartStep" + }, + { + "$ref": "#/components/schemas/ComposeStartStep" + }, + { + "$ref": "#/components/schemas/ComposeStep" + }, + { + "$ref": "#/components/schemas/ComposeTypeChoiceStep" + }, + { + "$ref": "#/components/schemas/RollBackStep" + }, + { + "$ref": "#/components/schemas/RunJobStep" } - } + ] } } }, - "security": [ - { - "HttpLoginForm": [] + "required": [ + "appType", + "currentVersion" + ] + }, + "AgentAppUnit": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/AgentAppUnitId", + "description": "JSON object with the Agent App Unit Id." }, - { - "ApiKeyForm": [] + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the agent app unit creation, in milliseconds", + "readOnly": true + }, + "tenantId": { + "$ref": "#/components/schemas/TenantId", + "description": "Tenant this unit belongs to" + }, + "agentApplicationId": { + "$ref": "#/components/schemas/AgentApplicationId", + "description": "Agent application this unit belongs to" + }, + "identifier": { + "type": "string", + "description": "Unit identifier" + }, + "type": { + "$ref": "#/components/schemas/AgentAppUnitType", + "description": "Unit type" } + }, + "required": [ + "agentApplicationId", + "identifier", + "tenantId", + "type" ] - } - }, - "/api/widgetsBundles/list": { - "get": { - "tags": [ - "widgets-bundle-controller" - ], - "summary": "Get Widgets Bundles By Ids (getWidgetsBundlesList)", - "description": "Requested widgets bundles must be system level or owned by tenant of the user which is performing the request. \n\n Security check is performed to verify that the user has 'READ' permission for the entity (entities).", - "operationId": "getWidgetsBundlesList", - "parameters": [ + }, + "AgentAppUnitId": { + "type": "object", + "allOf": [ { - "name": "widgetsBundleIds", - "in": "query", - "description": "A list of widgets bundle ids, separated by comma ','", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } + "$ref": "#/components/schemas/EntityId" + }, + { + "type": "object" } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WidgetsBundle" - } - } - } - } + "example": { + "entityType": "AGENT_APP_UNIT", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + } + }, + "AgentAppUnitType": { + "type": "string", + "enum": [ + "CONTAINER", + "VOLUME", + "NETWORK" + ] + }, + "AgentApplication": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/AgentApplicationId", + "description": "JSON object with the Agent Application Id." }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-400": { - "summary": "Bad Request", - "value": { - "message": "Invalid UUID string: 123", - "errorCode": 31, - "status": 400, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the agent application creation, in milliseconds", + "readOnly": true }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-401": { - "summary": "Unauthorized", - "value": { - "message": "Authentication failed", - "errorCode": 10, - "status": 401, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } + "tenantId": { + "$ref": "#/components/schemas/TenantId", + "description": "JSON object with Tenant Id.", + "readOnly": true }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-403": { - "summary": "Forbidden", - "value": { - "message": "You don't have permission to perform this operation!", - "errorCode": 20, - "status": 403, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } + "agentId": { + "$ref": "#/components/schemas/AgentId", + "description": "Agent this application belongs to" }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-404": { - "summary": "Not Found", - "value": { - "message": "Requested item wasn't found!", - "errorCode": 32, - "status": 404, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } - } - } + "name": { + "type": "string", + "description": "Application name (not unique across tenant)" }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThingsboardErrorResponse" - }, - "examples": { - "error-code-429": { - "summary": "Too Many Requests", - "value": { - "message": "Too many requests for current tenant!", - "errorCode": 33, - "status": 429, - "subscriptionErrorCode": null, - "subscriptionEntry": null, - "subscriptionValue": null, - "timestamp": 1609459200000 - } - } - } + "templateVersion": { + "type": "string", + "description": "Template version this application is based on" + }, + "desiredTemplateVersion": { + "type": "string" + }, + "appType": { + "$ref": "#/components/schemas/AgentApplicationType", + "description": "Application type" + }, + "config": { + "description": "Config (with compose field and type = 'DOCKER_COMPOSE' for EDGE/GATEWAY)", + "oneOf": [ + { + "$ref": "#/components/schemas/DockerComposeConfig" } - } + ] + }, + "version": { + "type": "integer", + "format": "int64" + }, + "projectName": { + "type": "string" + }, + "pendingDeletion": { + "type": "boolean" + }, + "origin": { + "$ref": "#/components/schemas/AgentApplicationOrigin", + "description": "Origin of the application (INSTALLED or DISCOVERED)" + }, + "applicationProfileId": { + "$ref": "#/components/schemas/AgentAppProfileId", + "description": "Application Profile Id. When set, config is read-only and inherited from the profile." + }, + "profileConfigVersion": { + "type": "integer", + "format": "int64" } }, - "security": [ + "required": [ + "agentId", + "appType", + "templateVersion" + ] + }, + "AgentApplicationId": { + "type": "object", + "allOf": [ { - "HttpLoginForm": [] + "$ref": "#/components/schemas/EntityId" }, { - "ApiKeyForm": [] - } - ] - } - } - }, - "components": { - "schemas": { - "AccountTwoFaSettings": { - "type": "object", - "description": "Account Two-Factor Authentication Settings", - "properties": { - "configs": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TwoFaAccountConfig" - } + "type": "object" } + ], + "example": { + "entityType": "AGENT_APPLICATION", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" } }, - "AcmeCertificateId": { + "AgentApplicationInfo": { "type": "object", "properties": { "id": { + "$ref": "#/components/schemas/AgentApplicationId", + "description": "JSON object with the Agent Application Id." + }, + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the agent application creation, in milliseconds", + "readOnly": true + }, + "tenantId": { + "$ref": "#/components/schemas/TenantId", + "description": "JSON object with Tenant Id.", + "readOnly": true + }, + "agentId": { + "$ref": "#/components/schemas/AgentId", + "description": "Agent this application belongs to" + }, + "name": { "type": "string", - "format": "uuid", - "description": "string", - "example": "784f394c-42b6-435a-983c-b7beff2784f9" + "description": "Application name (not unique across tenant)" + }, + "templateVersion": { + "type": "string", + "description": "Template version this application is based on" + }, + "desiredTemplateVersion": { + "type": "string" + }, + "appType": { + "$ref": "#/components/schemas/AgentApplicationType", + "description": "Application type" + }, + "config": { + "description": "Config (with compose field and type = 'DOCKER_COMPOSE' for EDGE/GATEWAY)", + "oneOf": [ + { + "$ref": "#/components/schemas/DockerComposeConfig" + } + ] + }, + "version": { + "type": "integer", + "format": "int64" + }, + "projectName": { + "type": "string" + }, + "pendingDeletion": { + "type": "boolean" + }, + "origin": { + "$ref": "#/components/schemas/AgentApplicationOrigin", + "description": "Origin of the application (INSTALLED or DISCOVERED)" + }, + "applicationProfileId": { + "$ref": "#/components/schemas/AgentAppProfileId", + "description": "Application Profile Id. When set, config is read-only and inherited from the profile." + }, + "profileConfigVersion": { + "type": "integer", + "format": "int64" + }, + "currentVersion": { + "type": "string", + "description": "Current version of the template this application is based on.", + "readOnly": true + }, + "nextVersion": { + "type": "string", + "description": "Next version available for upgrade.", + "readOnly": true + }, + "profileConfigOutdated": { + "type": "boolean", + "description": "True if the app's config is outdated relative to its profile.", + "readOnly": true + }, + "profileName": { + "type": "string", + "description": "Name of the application profile this app is based on.", + "readOnly": true + }, + "profileTemplateVersion": { + "type": "string", + "description": "Template version of the application profile this app is based on.", + "readOnly": true + }, + "agentName": { + "type": "string", + "description": "Name of the owning agent.", + "readOnly": true + }, + "relatedEntityId": { + "$ref": "#/components/schemas/EntityId", + "description": "Related entity id (Edge or Gateway device) currently assigned to this application.", + "readOnly": true } }, "required": [ - "id" + "agentId", + "appType", + "templateVersion" ] }, - "Action": { + "AgentApplicationOrigin": { "type": "string", "enum": [ - "ASSIGNED", - "UNASSIGNED" + "INSTALLED", + "DISCOVERED", + "AUTO_PROVISIONED" ] }, - "ActionStatus": { + "AgentApplicationType": { "type": "string", "enum": [ - "SUCCESS", - "FAILURE" + "GENERIC", + "EDGE", + "GATEWAY" ] }, - "ActionType": { + "AgentBulkAction": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/AgentBulkActionId", + "description": "JSON object with the Agent Bulk Action Id." + }, + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the bulk action creation, in milliseconds", + "readOnly": true + }, + "tenantId": { + "$ref": "#/components/schemas/TenantId" + }, + "agentProfileId": { + "type": "string", + "format": "uuid" + }, + "applicationProfileId": { + "type": "string", + "format": "uuid" + }, + "actionType": { + "$ref": "#/components/schemas/AgentAppEventActionType" + }, + "status": { + "$ref": "#/components/schemas/AgentBulkActionStatus" + }, + "errorMsg": { + "type": "string" + }, + "processingStartedTime": { + "type": "integer", + "format": "int64" + }, + "total": { + "type": "integer", + "format": "int32" + }, + "submitted": { + "type": "integer", + "format": "int32" + }, + "skipCounts": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int32" + } + } + } + }, + "AgentBulkActionEventStats": { + "type": "object", + "properties": { + "countsByStatus": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int64" + }, + "description": "Number of events produced by the bulk action per processing status" + }, + "total": { + "type": "integer", + "format": "int64", + "description": "Total number of events produced by the bulk action" + } + } + }, + "AgentBulkActionId": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/EntityId" + }, + { + "type": "object" + } + ], + "example": { + "entityType": "AGENT_BULK_ACTION", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + } + }, + "AgentBulkActionStatus": { "type": "string", "enum": [ - "ADDED", - "DELETED", - "UPDATED", - "ATTRIBUTES_UPDATED", - "ATTRIBUTES_DELETED", - "TIMESERIES_UPDATED", - "TIMESERIES_DELETED", - "RPC_CALL", - "CREDENTIALS_UPDATED", - "ASSIGNED_TO_CUSTOMER", - "UNASSIGNED_FROM_CUSTOMER", - "CHANGE_OWNER", - "ACTIVATED", - "SUSPENDED", - "CREDENTIALS_READ", - "ATTRIBUTES_READ", - "RELATION_ADD_OR_UPDATE", - "RELATION_DELETED", - "RELATIONS_DELETED", - "ALARM_ACK", - "ALARM_CLEAR", - "ALARM_DELETE", - "ALARM_ASSIGNED", - "ALARM_UNASSIGNED", - "ADDED_TO_ENTITY_GROUP", - "REMOVED_FROM_ENTITY_GROUP", - "REST_API_RULE_ENGINE_CALL", - "MADE_PUBLIC", - "MADE_PRIVATE", - "LOGIN", - "LOGOUT", - "LOCKOUT", - "ASSIGNED_FROM_TENANT", - "ASSIGNED_TO_TENANT", - "PROVISION_SUCCESS", - "PROVISION_FAILURE", - "ASSIGNED_TO_EDGE", - "UNASSIGNED_FROM_EDGE", - "ADDED_COMMENT", - "UPDATED_COMMENT", - "DELETED_COMMENT", - "SMS_SENT", - "SUBSCRIPTION_CREATED", - "SUBSCRIPTION_UPDATED", - "SUBSCRIPTION_CANCELED", - "SUBSCRIPTION_PLAN_UPDATED", - "SUBSCRIPTION_COUPON_APPLIED" + "QUEUED", + "IN_PROGRESS", + "STARTED", + "START_FAILED" ] }, - "ActivateUserRequest": { + "AgentFinalizeStep": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStep" + } + ] + }, + "AgentId": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/EntityId" + }, + { + "type": "object" + } + ], + "example": { + "entityType": "AGENT", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + } + }, + "AgentInfo": { "type": "object", - "description": "Activate user request.", "properties": { - "activateToken": { + "id": { + "$ref": "#/components/schemas/AgentId", + "description": "JSON object with the Agent Id. Specify this field to update the Agent. Referencing non-existing Agent Id will cause error. Omit this field to create new Agent." + }, + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the agent creation, in milliseconds", + "example": 1609459200000, + "readOnly": true + }, + "additionalInfo": { + "$ref": "#/components/schemas/JsonNode" + }, + "tenantId": { + "$ref": "#/components/schemas/TenantId", + "description": "JSON object with Tenant Id. Use 'assignAgentToTenant' to change the Tenant Id.", + "readOnly": true + }, + "customerId": { + "$ref": "#/components/schemas/CustomerId", + "description": "JSON object with Customer Id.", + "readOnly": true + }, + "name": { "type": "string", - "description": "The activate token to verify", - "example": "AAB254FF67D.." + "description": "Unique Agent Name in scope of Tenant", + "example": "Silo_A_Agent" }, - "password": { + "description": { "type": "string", - "description": "The new password to set", - "example": "secret" + "description": "Agent description" + }, + "routingKey": { + "type": "string", + "description": "Agent routing key used for authentication", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "secret": { + "type": "string", + "description": "Agent secret used for authentication" + }, + "agentProfileId": { + "$ref": "#/components/schemas/AgentProfileId", + "description": "JSON object with Agent Profile Id. Nullable." + }, + "version": { + "type": "integer", + "format": "int64" + }, + "customerTitle": { + "type": "string", + "description": "Title of the Customer that owns the agent.", + "readOnly": true + }, + "customerIsPublic": { + "type": "boolean", + "description": "Indicates special 'Public' Customer that is auto-generated to use the agents on public dashboards.", + "readOnly": true + }, + "agentProfileName": { + "type": "string", + "description": "Name of the Agent Profile the agent belongs to.", + "readOnly": true + }, + "ownerName": { + "type": "string", + "description": "Owner name — tenant title if the agent is owned by a tenant, or customer title otherwise.", + "readOnly": true + }, + "groups": { + "type": "array", + "description": "Entity groups that contain this agent (excluding the implicit 'All' group).", + "items": { + "$ref": "#/components/schemas/EntityInfo" + }, + "readOnly": true + }, + "active": { + "type": "boolean", + "description": "Whether the agent currently has an active connection (derived from server-scope 'active' attribute).", + "readOnly": true + }, + "agentVersion": { + "type": "string", + "description": "Agent software version reported on the last connect (derived from server-scope 'agentVersion' attribute).", + "readOnly": true + }, + "upgradeTargetImageRef": { + "type": "string", + "description": "Image reference this agent should be upgraded to, or null when no upgrade applies. Resolved from the published version graph.", + "readOnly": true + }, + "ownerId": { + "$ref": "#/components/schemas/EntityId", + "description": "JSON object with Customer or Tenant Id", + "readOnly": true + } + }, + "required": [ + "name", + "routingKey", + "secret" + ] + }, + "AgentInstructions": { + "type": "object", + "properties": { + "instructions": { + "type": "string", + "description": "Resolved install/provision instructions for the selected method" } } }, - "AdminSettings": { + "AgentPrepareStep": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStep" + } + ] + }, + "AgentProcessingStatus": { + "type": "string", + "enum": [ + "PENDING", + "QUEUED", + "PROCESSING", + "FINISHED", + "ERROR", + "START_FAILED" + ] + }, + "AgentProfile": { "type": "object", - "description": "A JSON value representing the Mail Settings.", "properties": { "id": { - "$ref": "#/components/schemas/AdminSettingsId", - "description": "The Id of the Administration Settings, auto-generated, UUID" + "$ref": "#/components/schemas/AgentProfileId", + "description": "JSON object with the Agent Profile Id." }, "createdTime": { "type": "integer", "format": "int64", - "description": "Timestamp of the settings creation, in milliseconds", - "example": 1609459200000, + "description": "Timestamp of the profile creation, in milliseconds", "readOnly": true }, "tenantId": { @@ -133973,18 +147943,40 @@ "description": "JSON object with Tenant Id.", "readOnly": true }, - "key": { + "name": { "type": "string", - "description": "The Administration Settings key, (e.g. 'general' or 'mail')", - "example": "mail" + "description": "Unique profile name within tenant" }, - "jsonValue": { - "$ref": "#/components/schemas/JsonNode", - "description": "JSON representation of the Administration Settings value" + "description": { + "type": "string", + "description": "Profile description" + }, + "provisionKey": { + "type": "string", + "description": "Provision key for future auto-provisioning" + }, + "provisionSecret": { + "type": "string", + "description": "Provision secret for future auto-provisioning" + }, + "provisionType": { + "$ref": "#/components/schemas/AgentProvisionType", + "description": "Provisioning strategy. DISABLED by default." + }, + "version": { + "type": "integer", + "format": "int64" + }, + "default": { + "type": "boolean", + "description": "Used to mark the default profile that will be assigned to agents when no profile is specified." } - } + }, + "required": [ + "name" + ] }, - "AdminSettingsId": { + "AgentProfileId": { "type": "object", "allOf": [ { @@ -133995,29 +147987,81 @@ } ], "example": { - "entityType": "ADMIN_SETTINGS", + "entityType": "AGENT_PROFILE", "id": "784f394c-42b6-435a-983c-b7beff2784f9" } }, - "AffectedTenantAdministratorsFilter": { - "allOf": [ - { - "$ref": "#/components/schemas/UsersFilter" + "AgentProfileInfo": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/AgentProfileId", + "description": "JSON object with the Agent Profile Id." + }, + "createdTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the profile creation, in milliseconds", + "readOnly": true + }, + "tenantId": { + "$ref": "#/components/schemas/TenantId", + "description": "JSON object with Tenant Id.", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Unique profile name within tenant" + }, + "description": { + "type": "string", + "description": "Profile description" + }, + "provisionKey": { + "type": "string", + "description": "Provision key for future auto-provisioning" + }, + "provisionSecret": { + "type": "string", + "description": "Provision secret for future auto-provisioning" + }, + "provisionType": { + "$ref": "#/components/schemas/AgentProvisionType", + "description": "Provisioning strategy. DISABLED by default." + }, + "version": { + "type": "integer", + "format": "int64" + }, + "default": { + "type": "boolean", + "description": "Used to mark the default profile that will be assigned to agents when no profile is specified." } - ], - "example": { - "type": "AFFECTED_TENANT_ADMINISTRATORS" - } + }, + "required": [ + "name" + ] }, - "AffectedUserFilter": { - "allOf": [ - { - "$ref": "#/components/schemas/UsersFilter" + "AgentProvisionType": { + "type": "string", + "enum": [ + "DISABLED", + "NO_AUTO_INSTALL", + "AUTO_INSTALL_PER_APP_TYPE", + "AUTO_INSTALL_PER_APP_PROFILE" + ] + }, + "AgentUpgradeRequest": { + "type": "object", + "properties": { + "imageRef": { + "type": "string", + "description": "Target agent image reference — a digest-pinned reference in production, or a tag." } - ], - "example": { - "type": "AFFECTED_USER" - } + }, + "required": [ + "imageRef" + ] }, "AggFunction": { "type": "string", @@ -137629,6 +151673,43 @@ "codesQuantity": null } }, + "BackupVolumesRemoveStep": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStep" + } + ] + }, + "BackupVolumesStep": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStep" + }, + { + "type": "object", + "properties": { + "state": { + "$ref": "#/components/schemas/BackupVolumesStepState" + } + } + } + ] + }, + "BackupVolumesStepState": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStepState" + }, + { + "type": "object", + "properties": { + "backupVolumes": { + "$ref": "#/components/schemas/StepFieldListString" + } + } + } + ] + }, "BadgePosition": { "type": "string", "enum": [ @@ -138086,6 +152167,66 @@ } } }, + "BulkOperationPreview": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int32", + "description": "Total number of apps targeted by the bulk operation" + }, + "eligible": { + "type": "integer", + "format": "int32", + "description": "Number of apps that would be submitted (total minus skipped)" + }, + "skippedCountsByReason": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int32" + }, + "description": "Skip count per reason for the targeted apps" + }, + "skippedSample": { + "type": "array", + "description": "Sample of skipped apps, capped per reason. Use the run history to inspect the full list.", + "items": { + "$ref": "#/components/schemas/SkippedApp" + } + } + } + }, + "BulkOperationRequest": { + "type": "object", + "properties": { + "actionType": { + "$ref": "#/components/schemas/AgentAppEventActionType" + }, + "stepInputs": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/BackupVolumesStepState" + }, + { + "$ref": "#/components/schemas/ComposeDownStepState" + }, + { + "$ref": "#/components/schemas/ComposeStepState" + }, + { + "$ref": "#/components/schemas/RollBackStepState" + }, + { + "$ref": "#/components/schemas/RunJobStepState" + } + ] + } + } + } + }, "Button": { "type": "object", "properties": { @@ -138640,7 +152781,25 @@ } } } - ] + ], + "example": { + "key": null, + "success": null, + "discarded": null, + "finishTs": null, + "error": null, + "jobType": "CF_REPROCESSING", + "failure": { + "error": null, + "entityInfo": { + "id": { + "entityType": "DEVICE", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + "name": null + } + } + } }, "CfReprocessingValidationResult": { "type": "object", @@ -138737,13 +152896,6 @@ "none" ] }, - "ChatType": { - "type": "string", - "enum": [ - "GENERIC", - "SOLUTION_BUILDER" - ] - }, "CheckPreProvisionedDevicesDeviceProfileProvisionConfiguration": { "allOf": [ { @@ -139238,6 +153390,104 @@ "FLOW" ] }, + "ComposeDownStep": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStep" + }, + { + "type": "object", + "properties": { + "state": { + "$ref": "#/components/schemas/ComposeDownStepState" + } + } + } + ] + }, + "ComposeDownStepState": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStepState" + }, + { + "type": "object", + "properties": { + "serviceImageRegexPatterns": { + "$ref": "#/components/schemas/StepFieldListString" + }, + "removeVolumes": { + "$ref": "#/components/schemas/StepFieldBoolean" + } + } + } + ] + }, + "ComposeRestartStep": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStep" + } + ] + }, + "ComposeStartStep": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStep" + } + ] + }, + "ComposeStep": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStep" + }, + { + "type": "object", + "properties": { + "state": { + "$ref": "#/components/schemas/ComposeStepState" + } + } + } + ] + }, + "ComposeStepState": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStepState" + }, + { + "type": "object", + "properties": { + "serviceImageRegexPatterns": { + "$ref": "#/components/schemas/StepFieldListString" + }, + "pullImages": { + "$ref": "#/components/schemas/StepFieldBoolean" + } + } + } + ] + }, + "ComposeTypeChoiceStep": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStep" + }, + { + "type": "object", + "properties": { + "composeTemplates": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/JsonNode" + } + } + } + } + ] + }, "ContactBasedObject": { "type": "object", "properties": { @@ -141028,6 +155278,14 @@ "type": "integer", "format": "int64" }, + "maxAgents": { + "type": "integer", + "format": "int64" + }, + "maxAgentApplications": { + "type": "integer", + "format": "int64" + }, "maxResourcesInBytes": { "type": "integer", "format": "int64" @@ -141278,6 +155536,18 @@ "edgeUplinkMessagesRateLimitsPerEdge": { "type": "string" }, + "agentEventRateLimits": { + "type": "string" + }, + "agentEventRateLimitsPerAgent": { + "type": "string" + }, + "agentLogChunkRateLimits": { + "type": "string" + }, + "agentLogChunkRateLimitsPerAgent": { + "type": "string" + }, "defaultStorageTtlDays": { "type": "integer", "format": "int32" @@ -141390,6 +155660,8 @@ "maxDashboards": null, "maxRuleChains": null, "maxEdges": null, + "maxAgents": null, + "maxAgentApplications": null, "maxResourcesInBytes": null, "maxOtaPackagesInBytes": null, "maxResourceSize": null, @@ -141453,6 +155725,10 @@ "edgeEventRateLimitsPerEdge": null, "edgeUplinkMessagesRateLimits": null, "edgeUplinkMessagesRateLimitsPerEdge": null, + "agentEventRateLimits": null, + "agentEventRateLimitsPerAgent": null, + "agentLogChunkRateLimits": null, + "agentLogChunkRateLimitsPerAgent": null, "defaultStorageTtlDays": null, "alarmsTtlDays": null, "rpcTtlDays": null, @@ -142497,6 +156773,24 @@ "color": null } }, + "DockerComposeConfig": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppConfig" + }, + { + "type": "object", + "properties": { + "compose": { + "$ref": "#/components/schemas/JsonNode" + }, + "composeType": { + "type": "string" + } + } + } + ] + }, "Domain": { "type": "object", "description": "A JSON value representing the Domain.", @@ -142726,7 +157020,20 @@ } } } - ] + ], + "example": { + "key": null, + "success": null, + "discarded": null, + "finishTs": null, + "error": null, + "jobType": "DUMMY", + "failure": { + "error": null, + "number": null, + "failAlways": null + } + } }, "DurationAlarmCondition": { "allOf": [ @@ -144205,7 +158512,8 @@ "USER", "ENTITY_VIEW", "DASHBOARD", - "EDGE" + "EDGE", + "AGENT" ] }, "name": { @@ -144385,7 +158693,8 @@ "USER", "ENTITY_VIEW", "DASHBOARD", - "EDGE" + "EDGE", + "AGENT" ] }, "name": { @@ -144496,6 +158805,13 @@ "propertyName": "entityType", "mapping": { "ADMIN_SETTINGS": "#/components/schemas/AdminSettingsId", + "AGENT": "#/components/schemas/AgentId", + "AGENT_APPLICATION": "#/components/schemas/AgentApplicationId", + "AGENT_APP_EVENT": "#/components/schemas/AgentAppEventId", + "AGENT_APP_PROFILE": "#/components/schemas/AgentAppProfileId", + "AGENT_APP_UNIT": "#/components/schemas/AgentAppUnitId", + "AGENT_BULK_ACTION": "#/components/schemas/AgentBulkActionId", + "AGENT_PROFILE": "#/components/schemas/AgentProfileId", "AI_MODEL": "#/components/schemas/AiModelId", "ALARM": "#/components/schemas/AlarmId", "API_KEY": "#/components/schemas/ApiKeyId", @@ -144949,6 +159265,13 @@ "ADMIN_SETTINGS", "AI_MODEL", "API_KEY", + "AGENT", + "AGENT_APPLICATION", + "AGENT_APP_EVENT", + "AGENT_APP_UNIT", + "AGENT_APP_PROFILE", + "AGENT_PROFILE", + "AGENT_BULK_ACTION", "BILLING_CUSTOMER", "SUBSCRIPTION_PLAN", "SUBSCRIPTION", @@ -147885,6 +162208,10 @@ "EDGE_EVENTS_PER_EDGE", "EDGE_UPLINK_MESSAGES", "EDGE_UPLINK_MESSAGES_PER_EDGE", + "AGENT_EVENTS", + "AGENT_EVENTS_PER_AGENT", + "AGENT_LOG_CHUNKS", + "AGENT_LOG_CHUNKS_PER_AGENT", "INTEGRATION_MSGS_PER_TENANT", "INTEGRATION_MSGS_PER_DEVICE", "INTEGRATION_MSGS_PER_ASSET", @@ -148063,6 +162390,10 @@ "$ref": "#/components/schemas/PaletteSettings", "description": "Complex JSON that describes structure of the Angular Material Palette. See [theming](https://material.angular.io/guide/theming) for more details" }, + "primaryColorPanels": { + "type": "boolean", + "description": "Whether primary-color panels (top toolbar, side navigation, dialog and entity-details headers) use the primary palette color as background. When false, they render on a white background" + }, "helpLinkBaseUrl": { "type": "string", "description": "Base URL for help link" @@ -148143,7 +162474,28 @@ }, "LwM2MBootstrapServerCredential": { "discriminator": { - "propertyName": "securityMode" + "propertyName": "securityMode", + "mapping": { + "NO_SEC": "#/components/schemas/NoSecLwM2MBootstrapServerCredential", + "PSK": "#/components/schemas/PSKLwM2MBootstrapServerCredential", + "RPK": "#/components/schemas/RPKLwM2MBootstrapServerCredential", + "X509": "#/components/schemas/X509LwM2MBootstrapServerCredential" + } + }, + "example": { + "securityMode": "NO_SEC", + "shortServerId": 123, + "bootstrapServerIs": true, + "host": "0.0.0.0", + "port": "'5685' or '5687'", + "clientHoldOffTime": 1, + "serverPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAZ0pSaGKHk/GrDaUDnQZpeEdGwX7m3Ws+U/kiVat\n+44sgk3c8g0LotfMpLlZJPhPwJ6ipXV+O1r7IZUjBs3LNA==", + "serverCertificate": "MMIICODCCAd6gAwIBAgIUI88U1zowOdrxDK/dOV+36gJxI2MwCgYIKoZIzj0EAwIwejELMAkGA1UEBhMCVUs\nxEjAQBgNVBAgTCUt5aXYgY2l0eTENMAsGA1UEBxMES3lpdjEUMBIGA1UEChMLVGhpbmdzYm9hcmQxFzAVBgNVBAsMDkRFVkVMT1BFUl9URVNUMRkwFwYDVQQDDBBpbnRlcm1lZGlhdGVfY2EwMB4XDTIyMDEwOTEzMDMwMFoXDTI3MDEwODEzMDMwMFowFDESMBAGA1UEAxM\nJbG9jYWxob3N0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUO3vBo/JTv0eooY7XHiKAIVDoWKFqtrU7C6q8AIKqpLcqhCdW+haFeBOH3PjY6EwaWkY04Bir4oanU0s7tz2uKOBpzCBpDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADAdBgNVHQ4EFgQUEjc3Q4a0TxzP/3x3EV4fHxYUg0YwHwYDVR0jBBgwFoAUuSquGycMU6Q0SYNcbtSkSD3TfH0wLwYDVR0RBCgwJoIVbG9jYWxob3N0LmxvY2FsZG9tYWlugglsb2NhbGhvc3SCAiAtMAoGCCqGSM49BAMCA0gAMEUCIQD7dbZObyUaoDiNbX+9fUNp\nAWrD7N7XuJUwZ9FcN75R3gIgb2RNjDkHoyUyF1YajwkBk+7XmIXNClmizNJigj908mw=", + "bootstrapServerAccountTimeout": 0, + "lifetime": 300, + "defaultMinPeriod": 1, + "notifIfDisabled": true, + "binding": "U" }, "properties": { "securityMode": { @@ -149487,7 +163839,22 @@ } } } - ] + ], + "example": { + "securityMode": "NO_SEC", + "shortServerId": 123, + "bootstrapServerIs": true, + "host": "0.0.0.0", + "port": "'5685' or '5687'", + "clientHoldOffTime": 1, + "serverPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAZ0pSaGKHk/GrDaUDnQZpeEdGwX7m3Ws+U/kiVat\n+44sgk3c8g0LotfMpLlZJPhPwJ6ipXV+O1r7IZUjBs3LNA==", + "serverCertificate": "MMIICODCCAd6gAwIBAgIUI88U1zowOdrxDK/dOV+36gJxI2MwCgYIKoZIzj0EAwIwejELMAkGA1UEBhMCVUs\nxEjAQBgNVBAgTCUt5aXYgY2l0eTENMAsGA1UEBxMES3lpdjEUMBIGA1UEChMLVGhpbmdzYm9hcmQxFzAVBgNVBAsMDkRFVkVMT1BFUl9URVNUMRkwFwYDVQQDDBBpbnRlcm1lZGlhdGVfY2EwMB4XDTIyMDEwOTEzMDMwMFoXDTI3MDEwODEzMDMwMFowFDESMBAGA1UEAxM\nJbG9jYWxob3N0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUO3vBo/JTv0eooY7XHiKAIVDoWKFqtrU7C6q8AIKqpLcqhCdW+haFeBOH3PjY6EwaWkY04Bir4oanU0s7tz2uKOBpzCBpDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADAdBgNVHQ4EFgQUEjc3Q4a0TxzP/3x3EV4fHxYUg0YwHwYDVR0jBBgwFoAUuSquGycMU6Q0SYNcbtSkSD3TfH0wLwYDVR0RBCgwJoIVbG9jYWxob3N0LmxvY2FsZG9tYWlugglsb2NhbGhvc3SCAiAtMAoGCCqGSM49BAMCA0gAMEUCIQD7dbZObyUaoDiNbX+9fUNp\nAWrD7N7XuJUwZ9FcN75R3gIgb2RNjDkHoyUyF1YajwkBk+7XmIXNClmizNJigj908mw=", + "bootstrapServerAccountTimeout": 0, + "lifetime": 300, + "defaultMinPeriod": 1, + "notifIfDisabled": true, + "binding": "U" + } }, "NodeConnectionInfo": { "type": "object", @@ -150281,6 +164648,9 @@ }, "timezone": { "type": "string" + }, + "makePublic": { + "type": "boolean" } }, "required": [ @@ -151531,7 +165901,22 @@ } } } - ] + ], + "example": { + "securityMode": "PSK", + "shortServerId": 123, + "bootstrapServerIs": true, + "host": "0.0.0.0", + "port": "'5685' or '5687'", + "clientHoldOffTime": 1, + "serverPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAZ0pSaGKHk/GrDaUDnQZpeEdGwX7m3Ws+U/kiVat\n+44sgk3c8g0LotfMpLlZJPhPwJ6ipXV+O1r7IZUjBs3LNA==", + "serverCertificate": "MMIICODCCAd6gAwIBAgIUI88U1zowOdrxDK/dOV+36gJxI2MwCgYIKoZIzj0EAwIwejELMAkGA1UEBhMCVUs\nxEjAQBgNVBAgTCUt5aXYgY2l0eTENMAsGA1UEBxMES3lpdjEUMBIGA1UEChMLVGhpbmdzYm9hcmQxFzAVBgNVBAsMDkRFVkVMT1BFUl9URVNUMRkwFwYDVQQDDBBpbnRlcm1lZGlhdGVfY2EwMB4XDTIyMDEwOTEzMDMwMFoXDTI3MDEwODEzMDMwMFowFDESMBAGA1UEAxM\nJbG9jYWxob3N0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUO3vBo/JTv0eooY7XHiKAIVDoWKFqtrU7C6q8AIKqpLcqhCdW+haFeBOH3PjY6EwaWkY04Bir4oanU0s7tz2uKOBpzCBpDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADAdBgNVHQ4EFgQUEjc3Q4a0TxzP/3x3EV4fHxYUg0YwHwYDVR0jBBgwFoAUuSquGycMU6Q0SYNcbtSkSD3TfH0wLwYDVR0RBCgwJoIVbG9jYWxob3N0LmxvY2FsZG9tYWlugglsb2NhbGhvc3SCAiAtMAoGCCqGSM49BAMCA0gAMEUCIQD7dbZObyUaoDiNbX+9fUNp\nAWrD7N7XuJUwZ9FcN75R3gIgb2RNjDkHoyUyF1YajwkBk+7XmIXNClmizNJigj908mw=", + "bootstrapServerAccountTimeout": 0, + "lifetime": 300, + "defaultMinPeriod": 1, + "notifIfDisabled": true, + "binding": "U" + } }, "PageBreakComponent": { "allOf": [ @@ -151544,6 +165929,306 @@ "type": "PAGE_BREAK" } }, + "PageDataAgent": { + "type": "object", + "properties": { + "data": { + "type": "array", + "description": "Array of the entities", + "items": { + "$ref": "#/components/schemas/Agent" + }, + "readOnly": true + }, + "totalPages": { + "type": "integer", + "format": "int32", + "description": "Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria", + "readOnly": true + }, + "totalElements": { + "type": "integer", + "format": "int64", + "description": "Total number of elements in all available pages", + "readOnly": true + }, + "hasNext": { + "type": "boolean", + "description": "'false' value indicates the end of the result set", + "readOnly": true + } + } + }, + "PageDataAgentAppEvent": { + "type": "object", + "properties": { + "data": { + "type": "array", + "description": "Array of the entities", + "items": { + "$ref": "#/components/schemas/AgentAppEvent" + }, + "readOnly": true + }, + "totalPages": { + "type": "integer", + "format": "int32", + "description": "Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria", + "readOnly": true + }, + "totalElements": { + "type": "integer", + "format": "int64", + "description": "Total number of elements in all available pages", + "readOnly": true + }, + "hasNext": { + "type": "boolean", + "description": "'false' value indicates the end of the result set", + "readOnly": true + } + } + }, + "PageDataAgentAppEventInfo": { + "type": "object", + "properties": { + "data": { + "type": "array", + "description": "Array of the entities", + "items": { + "$ref": "#/components/schemas/AgentAppEventInfo" + }, + "readOnly": true + }, + "totalPages": { + "type": "integer", + "format": "int32", + "description": "Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria", + "readOnly": true + }, + "totalElements": { + "type": "integer", + "format": "int64", + "description": "Total number of elements in all available pages", + "readOnly": true + }, + "hasNext": { + "type": "boolean", + "description": "'false' value indicates the end of the result set", + "readOnly": true + } + } + }, + "PageDataAgentAppProfile": { + "type": "object", + "properties": { + "data": { + "type": "array", + "description": "Array of the entities", + "items": { + "$ref": "#/components/schemas/AgentAppProfile" + }, + "readOnly": true + }, + "totalPages": { + "type": "integer", + "format": "int32", + "description": "Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria", + "readOnly": true + }, + "totalElements": { + "type": "integer", + "format": "int64", + "description": "Total number of elements in all available pages", + "readOnly": true + }, + "hasNext": { + "type": "boolean", + "description": "'false' value indicates the end of the result set", + "readOnly": true + } + } + }, + "PageDataAgentAppUnit": { + "type": "object", + "properties": { + "data": { + "type": "array", + "description": "Array of the entities", + "items": { + "$ref": "#/components/schemas/AgentAppUnit" + }, + "readOnly": true + }, + "totalPages": { + "type": "integer", + "format": "int32", + "description": "Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria", + "readOnly": true + }, + "totalElements": { + "type": "integer", + "format": "int64", + "description": "Total number of elements in all available pages", + "readOnly": true + }, + "hasNext": { + "type": "boolean", + "description": "'false' value indicates the end of the result set", + "readOnly": true + } + } + }, + "PageDataAgentApplicationInfo": { + "type": "object", + "properties": { + "data": { + "type": "array", + "description": "Array of the entities", + "items": { + "$ref": "#/components/schemas/AgentApplicationInfo" + }, + "readOnly": true + }, + "totalPages": { + "type": "integer", + "format": "int32", + "description": "Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria", + "readOnly": true + }, + "totalElements": { + "type": "integer", + "format": "int64", + "description": "Total number of elements in all available pages", + "readOnly": true + }, + "hasNext": { + "type": "boolean", + "description": "'false' value indicates the end of the result set", + "readOnly": true + } + } + }, + "PageDataAgentBulkAction": { + "type": "object", + "properties": { + "data": { + "type": "array", + "description": "Array of the entities", + "items": { + "$ref": "#/components/schemas/AgentBulkAction" + }, + "readOnly": true + }, + "totalPages": { + "type": "integer", + "format": "int32", + "description": "Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria", + "readOnly": true + }, + "totalElements": { + "type": "integer", + "format": "int64", + "description": "Total number of elements in all available pages", + "readOnly": true + }, + "hasNext": { + "type": "boolean", + "description": "'false' value indicates the end of the result set", + "readOnly": true + } + } + }, + "PageDataAgentInfo": { + "type": "object", + "properties": { + "data": { + "type": "array", + "description": "Array of the entities", + "items": { + "$ref": "#/components/schemas/AgentInfo" + }, + "readOnly": true + }, + "totalPages": { + "type": "integer", + "format": "int32", + "description": "Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria", + "readOnly": true + }, + "totalElements": { + "type": "integer", + "format": "int64", + "description": "Total number of elements in all available pages", + "readOnly": true + }, + "hasNext": { + "type": "boolean", + "description": "'false' value indicates the end of the result set", + "readOnly": true + } + } + }, + "PageDataAgentProfile": { + "type": "object", + "properties": { + "data": { + "type": "array", + "description": "Array of the entities", + "items": { + "$ref": "#/components/schemas/AgentProfile" + }, + "readOnly": true + }, + "totalPages": { + "type": "integer", + "format": "int32", + "description": "Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria", + "readOnly": true + }, + "totalElements": { + "type": "integer", + "format": "int64", + "description": "Total number of elements in all available pages", + "readOnly": true + }, + "hasNext": { + "type": "boolean", + "description": "'false' value indicates the end of the result set", + "readOnly": true + } + } + }, + "PageDataAgentProfileInfo": { + "type": "object", + "properties": { + "data": { + "type": "array", + "description": "Array of the entities", + "items": { + "$ref": "#/components/schemas/AgentProfileInfo" + }, + "readOnly": true + }, + "totalPages": { + "type": "integer", + "format": "int32", + "description": "Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria", + "readOnly": true + }, + "totalElements": { + "type": "integer", + "format": "int64", + "description": "Total number of elements in all available pages", + "readOnly": true + }, + "hasNext": { + "type": "boolean", + "description": "'false' value indicates the end of the result set", + "readOnly": true + } + } + }, "PageDataAiModel": { "type": "object", "properties": { @@ -153943,6 +168628,14 @@ "AES_256" ] }, + "ProcessingStartStatus": { + "type": "string", + "enum": [ + "DELIVERY_FAIL", + "PENDING", + "DELIVERED" + ] + }, "ProcessingStrategy": { "type": "object", "properties": { @@ -154423,7 +169116,22 @@ } } } - ] + ], + "example": { + "securityMode": "RPK", + "shortServerId": 123, + "bootstrapServerIs": true, + "host": "0.0.0.0", + "port": "'5685' or '5687'", + "clientHoldOffTime": 1, + "serverPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAZ0pSaGKHk/GrDaUDnQZpeEdGwX7m3Ws+U/kiVat\n+44sgk3c8g0LotfMpLlZJPhPwJ6ipXV+O1r7IZUjBs3LNA==", + "serverCertificate": "MMIICODCCAd6gAwIBAgIUI88U1zowOdrxDK/dOV+36gJxI2MwCgYIKoZIzj0EAwIwejELMAkGA1UEBhMCVUs\nxEjAQBgNVBAgTCUt5aXYgY2l0eTENMAsGA1UEBxMES3lpdjEUMBIGA1UEChMLVGhpbmdzYm9hcmQxFzAVBgNVBAsMDkRFVkVMT1BFUl9URVNUMRkwFwYDVQQDDBBpbnRlcm1lZGlhdGVfY2EwMB4XDTIyMDEwOTEzMDMwMFoXDTI3MDEwODEzMDMwMFowFDESMBAGA1UEAxM\nJbG9jYWxob3N0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUO3vBo/JTv0eooY7XHiKAIVDoWKFqtrU7C6q8AIKqpLcqhCdW+haFeBOH3PjY6EwaWkY04Bir4oanU0s7tz2uKOBpzCBpDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADAdBgNVHQ4EFgQUEjc3Q4a0TxzP/3x3EV4fHxYUg0YwHwYDVR0jBBgwFoAUuSquGycMU6Q0SYNcbtSkSD3TfH0wLwYDVR0RBCgwJoIVbG9jYWxob3N0LmxvY2FsZG9tYWlugglsb2NhbGhvc3SCAiAtMAoGCCqGSM49BAMCA0gAMEUCIQD7dbZObyUaoDiNbX+9fUNp\nAWrD7N7XuJUwZ9FcN75R3gIgb2RNjDkHoyUyF1YajwkBk+7XmIXNClmizNJigj908mw=", + "bootstrapServerAccountTimeout": 0, + "lifetime": 300, + "defaultMinPeriod": 1, + "notifIfDisabled": true, + "binding": "U" + } }, "RateLimitsNotificationRuleTriggerConfig": { "allOf": [ @@ -154683,7 +169391,8 @@ "RULE_CHAIN", "RULE_NODE", "EDGE", - "EDGE_AUTO_ASSIGN_RULE_CHAIN" + "EDGE_AUTO_ASSIGN_RULE_CHAIN", + "AGENT" ] }, "RelationsQueryFilter": { @@ -154859,10 +169568,16 @@ "userId": { "$ref": "#/components/schemas/UserId" }, + "publicKey": { + "type": "string" + }, "ownerId": { "$ref": "#/components/schemas/EntityId", "description": "JSON object with Customer or Tenant Id", "readOnly": true + }, + "public": { + "type": "boolean" } }, "required": [ @@ -155125,6 +169840,9 @@ "userId": { "$ref": "#/components/schemas/UserId" }, + "publicKey": { + "type": "string" + }, "templateInfo": { "$ref": "#/components/schemas/EntityInfo" }, @@ -155138,6 +169856,9 @@ "$ref": "#/components/schemas/EntityId", "description": "JSON object with Customer or Tenant Id", "readOnly": true + }, + "public": { + "type": "boolean" } }, "required": [ @@ -155165,6 +169886,9 @@ "timezone": { "type": "string" }, + "makePublic": { + "type": "boolean" + }, "targets": { "type": "array", "items": { @@ -155212,6 +169936,7 @@ "id": "784f394c-42b6-435a-983c-b7beff2784f9" }, "timezone": null, + "makePublic": null, "targets": null, "notificationTemplateId": { "entityType": "NOTIFICATION_TEMPLATE", @@ -155314,204 +170039,250 @@ "entityType": "USER", "id": "784f394c-42b6-435a-983c-b7beff2784f9" }, + "publicKey": null, + "ownerId": { + "entityType": "DEVICE", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + "public": null + } + } + }, + "ReportLatestChartSettings": { + "type": "object", + "properties": { + "showTitle": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "titleFont": { + "$ref": "#/components/schemas/Font" + }, + "titleColor": { + "type": "string" + }, + "titleAlignment": { + "$ref": "#/components/schemas/TextAlignment" + }, + "units": { + "type": "string" + }, + "decimals": { + "type": "integer", + "format": "int32" + }, + "autoScale": { + "type": "boolean" + }, + "sortSeries": { + "type": "boolean" + }, + "showTotal": { + "type": "boolean" + }, + "showLegend": { + "type": "boolean" + }, + "legendPosition": { + "$ref": "#/components/schemas/LegendPosition" + }, + "legendLabelFont": { + "$ref": "#/components/schemas/Font" + }, + "legendLabelColor": { + "type": "string" + }, + "legendValueFont": { + "$ref": "#/components/schemas/Font" + }, + "legendValueColor": { + "type": "string" + }, + "legendShowTotal": { + "type": "boolean" + } + } + }, + "ReportPieChartSettings": { + "allOf": [ + { + "$ref": "#/components/schemas/ReportLatestChartSettings" + }, + { + "type": "object", + "properties": { + "showLabel": { + "type": "boolean" + }, + "labelPosition": { + "$ref": "#/components/schemas/PieChartLabelPosition" + }, + "labelFont": { + "$ref": "#/components/schemas/Font" + }, + "labelColor": { + "type": "string" + }, + "borderWidth": { + "type": "number", + "format": "float" + }, + "borderColor": { + "type": "string" + }, + "radius": { + "type": "number", + "format": "double" + }, + "clockwise": { + "type": "boolean" + } + } + } + ] + }, + "ReportRangeChartSettings": { + "allOf": [ + { + "$ref": "#/components/schemas/ReportTimeSeriesChartSettings" + }, + { + "type": "object", + "properties": { + "rangeColors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColorRange" + } + }, + "outOfRangeColor": { + "type": "string" + }, + "showRangeThresholds": { + "type": "boolean" + }, + "rangeThreshold": { + "$ref": "#/components/schemas/TimeSeriesChartThreshold" + }, + "fillArea": { + "type": "boolean" + }, + "fillAreaOpacity": { + "type": "number", + "format": "float" + }, + "lineSettings": { + "$ref": "#/components/schemas/LineSeriesSettings" + }, + "rangeUnits": { + "type": "string" + }, + "rangeDecimals": { + "type": "integer", + "format": "int32" + } + } + } + ] + }, + "ReportRequest": { + "type": "object", + "properties": { + "reportTemplateId": { + "$ref": "#/components/schemas/ReportTemplateId", + "description": "Json object representing the report template id." + }, + "reportTemplateConfig": { + "$ref": "#/components/schemas/ReportTemplateConfig", + "description": "Json object representing the report template config." + }, + "timezone": { + "type": "string", + "description": "Timezone used for report generation.", + "example": "Europe/Kiev" + }, + "userId": { + "type": "string", + "description": "A string value representing the user id.", + "example": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + "makePublic": { + "type": "boolean", + "description": "A boolean value indicating whether the generated report should be made public.", + "example": false + }, + "originator": { + "$ref": "#/components/schemas/EntityId", + "description": "Json object representing the originator id." + }, + "targets": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "notificationTemplateId": { + "$ref": "#/components/schemas/NotificationTemplateId" + } + } + }, + "ReportTaskResult": { + "allOf": [ + { + "$ref": "#/components/schemas/TaskResult" + }, + { + "type": "object", + "properties": { + "report": { + "$ref": "#/components/schemas/Report" + } + } + } + ], + "example": { + "key": null, + "success": null, + "discarded": null, + "finishTs": null, + "error": null, + "jobType": "REPORT", + "report": { + "id": { + "entityType": "REPORT", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + "createdTime": 1746028547220, + "tenantId": { + "entityType": "TENANT", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + "customerId": { + "entityType": "CUSTOMER", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + "templateId": { + "entityType": "REPORT_TEMPLATE", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + "format": {}, + "name": null, + "userId": { + "entityType": "USER", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + "publicKey": null, "ownerId": { "entityType": "DEVICE", "id": "784f394c-42b6-435a-983c-b7beff2784f9" - } - } - } - }, - "ReportLatestChartSettings": { - "type": "object", - "properties": { - "showTitle": { - "type": "boolean" - }, - "title": { - "type": "string" - }, - "titleFont": { - "$ref": "#/components/schemas/Font" - }, - "titleColor": { - "type": "string" - }, - "titleAlignment": { - "$ref": "#/components/schemas/TextAlignment" - }, - "units": { - "type": "string" - }, - "decimals": { - "type": "integer", - "format": "int32" - }, - "autoScale": { - "type": "boolean" - }, - "sortSeries": { - "type": "boolean" - }, - "showTotal": { - "type": "boolean" - }, - "showLegend": { - "type": "boolean" - }, - "legendPosition": { - "$ref": "#/components/schemas/LegendPosition" - }, - "legendLabelFont": { - "$ref": "#/components/schemas/Font" - }, - "legendLabelColor": { - "type": "string" - }, - "legendValueFont": { - "$ref": "#/components/schemas/Font" - }, - "legendValueColor": { - "type": "string" - }, - "legendShowTotal": { - "type": "boolean" - } - } - }, - "ReportPieChartSettings": { - "allOf": [ - { - "$ref": "#/components/schemas/ReportLatestChartSettings" - }, - { - "type": "object", - "properties": { - "showLabel": { - "type": "boolean" - }, - "labelPosition": { - "$ref": "#/components/schemas/PieChartLabelPosition" - }, - "labelFont": { - "$ref": "#/components/schemas/Font" - }, - "labelColor": { - "type": "string" - }, - "borderWidth": { - "type": "number", - "format": "float" - }, - "borderColor": { - "type": "string" - }, - "radius": { - "type": "number", - "format": "double" - }, - "clockwise": { - "type": "boolean" - } - } - } - ] - }, - "ReportRangeChartSettings": { - "allOf": [ - { - "$ref": "#/components/schemas/ReportTimeSeriesChartSettings" - }, - { - "type": "object", - "properties": { - "rangeColors": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ColorRange" - } - }, - "outOfRangeColor": { - "type": "string" - }, - "showRangeThresholds": { - "type": "boolean" - }, - "rangeThreshold": { - "$ref": "#/components/schemas/TimeSeriesChartThreshold" - }, - "fillArea": { - "type": "boolean" - }, - "fillAreaOpacity": { - "type": "number", - "format": "float" - }, - "lineSettings": { - "$ref": "#/components/schemas/LineSeriesSettings" - }, - "rangeUnits": { - "type": "string" - }, - "rangeDecimals": { - "type": "integer", - "format": "int32" - } - } - } - ] - }, - "ReportRequest": { - "type": "object", - "properties": { - "reportTemplateId": { - "$ref": "#/components/schemas/ReportTemplateId", - "description": "Json object representing the report template id." - }, - "reportTemplateConfig": { - "$ref": "#/components/schemas/ReportTemplateConfig", - "description": "Json object representing the report template config." - }, - "timezone": { - "type": "string", - "description": "Timezone used for report generation.", - "example": "Europe/Kiev" - }, - "userId": { - "type": "string", - "description": "A string value representing the user id.", - "example": "784f394c-42b6-435a-983c-b7beff2784f9" - }, - "originator": { - "$ref": "#/components/schemas/EntityId", - "description": "Json object representing the originator id." - }, - "targets": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "notificationTemplateId": { - "$ref": "#/components/schemas/NotificationTemplateId" + }, + "public": null } } }, - "ReportTaskResult": { - "allOf": [ - { - "$ref": "#/components/schemas/TaskResult" - }, - { - "type": "object", - "properties": { - "report": { - "$ref": "#/components/schemas/Report" - } - } - } - ] - }, "ReportTemplate": { "type": "object", "description": "A JSON value representing the Report Template.", @@ -155984,6 +170755,7 @@ "ENTITY_VIEW_GROUP", "EDGE_GROUP", "DASHBOARD_GROUP", + "AGENT_GROUP", "ROLE", "GROUP_PERMISSION", "WHITE_LABELING", @@ -156003,6 +170775,9 @@ "REPORT_TEMPLATE", "REPORT", "AI_MODEL", + "AGENT", + "AGENT_APP_PROFILE", + "AGENT_PROFILE", "AI", "API_KEY" ] @@ -156317,6 +171092,36 @@ "GROUP" ] }, + "RollBackStep": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStep" + }, + { + "type": "object", + "properties": { + "state": { + "$ref": "#/components/schemas/RollBackStepState" + } + } + } + ] + }, + "RollBackStepState": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStepState" + }, + { + "type": "object", + "properties": { + "failedEventId": { + "$ref": "#/components/schemas/StepFieldAgentAppEventId" + } + } + } + ] + }, "Rpc": { "type": "object", "properties": { @@ -157041,6 +171846,60 @@ "id": "784f394c-42b6-435a-983c-b7beff2784f9" } }, + "RunJobStep": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStep" + }, + { + "type": "object", + "properties": { + "state": { + "$ref": "#/components/schemas/RunJobStepState" + } + } + } + ] + }, + "RunJobStepState": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentAppStepState" + }, + { + "type": "object", + "properties": { + "image": { + "$ref": "#/components/schemas/StepFieldString" + }, + "entrypoint": { + "$ref": "#/components/schemas/StepFieldListString" + }, + "cmd": { + "$ref": "#/components/schemas/StepFieldListString" + }, + "env": { + "$ref": "#/components/schemas/StepFieldListString" + }, + "binds": { + "$ref": "#/components/schemas/StepFieldListString" + }, + "networks": { + "$ref": "#/components/schemas/StepFieldListString" + }, + "pullImages": { + "$ref": "#/components/schemas/StepFieldBoolean" + }, + "retries": { + "$ref": "#/components/schemas/StepFieldInteger" + }, + "networkFromServiceImageRegexPattern": { + "$ref": "#/components/schemas/StepFieldString" + } + } + } + ] + }, "SaveDeviceWithCredentialsRequest": { "type": "object", "description": "The JSON object with device and credentials. See method description above for example.", @@ -158254,6 +173113,44 @@ } } }, + "SkipReason": { + "type": "string", + "enum": [ + "VERSION_MISMATCH", + "ACTIVE_EVENT", + "RATE_LIMIT_EXCEEDED", + "ERROR" + ] + }, + "SkippedApp": { + "type": "object", + "properties": { + "agentId": { + "$ref": "#/components/schemas/AgentId", + "description": "Agent Id owning the application" + }, + "agentName": { + "type": "string", + "description": "Agent name" + }, + "applicationId": { + "$ref": "#/components/schemas/AgentApplicationId", + "description": "Application Id" + }, + "applicationName": { + "type": "string", + "description": "Application name" + }, + "reason": { + "$ref": "#/components/schemas/SkipReason", + "description": "Reason for skipping" + }, + "msg": { + "type": "string", + "description": "Optional message in case of a failure" + } + } + }, "SlackConversation": { "type": "object", "properties": { @@ -159113,6 +174010,65 @@ "maxErrorsOccurred": 300 } }, + "StepFieldAgentAppEventId": { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/AgentAppEventId" + }, + "userChoice": { + "type": "boolean" + } + } + }, + "StepFieldBoolean": { + "type": "object", + "properties": { + "value": { + "type": "boolean" + }, + "userChoice": { + "type": "boolean" + } + } + }, + "StepFieldInteger": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + }, + "userChoice": { + "type": "boolean" + } + } + }, + "StepFieldListString": { + "type": "object", + "properties": { + "userChoice": { + "type": "boolean" + }, + "value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "StepFieldString": { + "type": "object", + "properties": { + "value": { + "type": "string" + }, + "userChoice": { + "type": "boolean" + } + } + }, "StoreInfo": { "type": "object", "properties": { @@ -159360,6 +174316,8 @@ 9, 10, 11, + 12, + 13, 30, 31 ] @@ -159707,7 +174665,30 @@ "TaskResult": { "type": "object", "discriminator": { - "propertyName": "jobType" + "propertyName": "jobType", + "mapping": { + "CF_REPROCESSING": "#/components/schemas/CfReprocessingTaskResult", + "REPORT": "#/components/schemas/ReportTaskResult", + "DUMMY": "#/components/schemas/DummyTaskResult" + } + }, + "example": { + "key": null, + "success": null, + "discarded": null, + "finishTs": null, + "error": null, + "jobType": "CF_REPROCESSING", + "failure": { + "error": null, + "entityInfo": { + "id": { + "entityType": "DEVICE", + "id": "784f394c-42b6-435a-983c-b7beff2784f9" + }, + "name": null + } + } }, "properties": { "key": { @@ -160217,10 +175198,11 @@ }, "TelemetryObserveStrategy": { "type": "string", + "description": "Observation strategy for telemetry. SINGLE (0): one resource equals one single observe request. COMPOSITE_ALL (1): all resources in one composite observe request. COMPOSITE_BY_OBJECT (2): grouped composite observe requests by object.", "enum": [ - "SINGLE (0): One resource equals one single observe request", - "COMPOSITE_ALL (1): All resources in one composite observe request", - "COMPOSITE_BY_OBJECT (2): Grouped composite observe requests by object" + "SINGLE", + "COMPOSITE_ALL", + "COMPOSITE_BY_OBJECT" ] }, "TelemetryQueryingSnmpCommunicationConfig": { @@ -160671,6 +175653,8 @@ "maxDashboards": null, "maxRuleChains": null, "maxEdges": null, + "maxAgents": null, + "maxAgentApplications": null, "maxResourcesInBytes": null, "maxOtaPackagesInBytes": null, "maxResourceSize": null, @@ -160734,6 +175718,10 @@ "edgeEventRateLimitsPerEdge": null, "edgeUplinkMessagesRateLimits": null, "edgeUplinkMessagesRateLimitsPerEdge": null, + "agentEventRateLimits": null, + "agentEventRateLimitsPerAgent": null, + "agentLogChunkRateLimits": null, + "agentLogChunkRateLimitsPerAgent": null, "defaultStorageTtlDays": null, "alarmsTtlDays": null, "rpcTtlDays": null, @@ -163559,6 +178547,10 @@ "$ref": "#/components/schemas/PaletteSettings", "description": "Complex JSON that describes structure of the Angular Material Palette. See [theming](https://material.angular.io/guide/theming) for more details" }, + "primaryColorPanels": { + "type": "boolean", + "description": "Whether primary-color panels (top toolbar, side navigation, dialog and entity-details headers) use the primary palette color as background. When false, they render on a white background" + }, "helpLinkBaseUrl": { "type": "string", "description": "Base URL for help link" @@ -164102,7 +179094,22 @@ } } } - ] + ], + "example": { + "securityMode": "X509", + "shortServerId": 123, + "bootstrapServerIs": true, + "host": "0.0.0.0", + "port": "'5685' or '5687'", + "clientHoldOffTime": 1, + "serverPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAZ0pSaGKHk/GrDaUDnQZpeEdGwX7m3Ws+U/kiVat\n+44sgk3c8g0LotfMpLlZJPhPwJ6ipXV+O1r7IZUjBs3LNA==", + "serverCertificate": "MMIICODCCAd6gAwIBAgIUI88U1zowOdrxDK/dOV+36gJxI2MwCgYIKoZIzj0EAwIwejELMAkGA1UEBhMCVUs\nxEjAQBgNVBAgTCUt5aXYgY2l0eTENMAsGA1UEBxMES3lpdjEUMBIGA1UEChMLVGhpbmdzYm9hcmQxFzAVBgNVBAsMDkRFVkVMT1BFUl9URVNUMRkwFwYDVQQDDBBpbnRlcm1lZGlhdGVfY2EwMB4XDTIyMDEwOTEzMDMwMFoXDTI3MDEwODEzMDMwMFowFDESMBAGA1UEAxM\nJbG9jYWxob3N0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUO3vBo/JTv0eooY7XHiKAIVDoWKFqtrU7C6q8AIKqpLcqhCdW+haFeBOH3PjY6EwaWkY04Bir4oanU0s7tz2uKOBpzCBpDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADAdBgNVHQ4EFgQUEjc3Q4a0TxzP/3x3EV4fHxYUg0YwHwYDVR0jBBgwFoAUuSquGycMU6Q0SYNcbtSkSD3TfH0wLwYDVR0RBCgwJoIVbG9jYWxob3N0LmxvY2FsZG9tYWlugglsb2NhbGhvc3SCAiAtMAoGCCqGSM49BAMCA0gAMEUCIQD7dbZObyUaoDiNbX+9fUNp\nAWrD7N7XuJUwZ9FcN75R3gIgb2RNjDkHoyUyF1YajwkBk+7XmIXNClmizNJigj908mw=", + "bootstrapServerAccountTimeout": 0, + "lifetime": 300, + "defaultMinPeriod": 1, + "notifIfDisabled": true, + "binding": "U" + } }, "YearInterval": { "allOf": [ diff --git a/paas/src/main/java/org/thingsboard/client/ApiClient.java b/paas/src/main/java/org/thingsboard/client/ApiClient.java index 667d5ca0..f44f6e83 100644 --- a/paas/src/main/java/org/thingsboard/client/ApiClient.java +++ b/paas/src/main/java/org/thingsboard/client/ApiClient.java @@ -173,7 +173,7 @@ public static List parameterToPairs( public ApiClient() { this.builder = createDefaultHttpClientBuilder(); this.mapper = createDefaultObjectMapper(); - updateBaseUri("http://localhost:35943"); + updateBaseUri("http://localhost:35993"); interceptor = null; readTimeout = null; connectTimeout = null; @@ -191,7 +191,7 @@ public ApiClient() { public ApiClient(HttpClient.Builder builder, ObjectMapper mapper, String baseUri) { this.builder = builder; this.mapper = mapper; - updateBaseUri(baseUri != null ? baseUri : "http://localhost:35943"); + updateBaseUri(baseUri != null ? baseUri : "http://localhost:35993"); interceptor = null; readTimeout = null; connectTimeout = null; diff --git a/paas/src/main/java/org/thingsboard/client/Configuration.java b/paas/src/main/java/org/thingsboard/client/Configuration.java index c632f7e2..4641961a 100644 --- a/paas/src/main/java/org/thingsboard/client/Configuration.java +++ b/paas/src/main/java/org/thingsboard/client/Configuration.java @@ -22,7 +22,7 @@ @Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") public class Configuration { - public static final String VERSION = "4.3.1.4.0PAAS"; + public static final String VERSION = "4.4.0PAAS"; private static final AtomicReference defaultApiClient = new AtomicReference<>(); private static volatile Supplier apiClientFactory = ApiClient::new; diff --git a/paas/src/main/java/org/thingsboard/client/api/ThingsboardApi.java b/paas/src/main/java/org/thingsboard/client/api/ThingsboardApi.java index 7806aa11..5d30dfb1 100644 --- a/paas/src/main/java/org/thingsboard/client/api/ThingsboardApi.java +++ b/paas/src/main/java/org/thingsboard/client/api/ThingsboardApi.java @@ -25,6 +25,28 @@ import org.thingsboard.client.model.AccountTwoFaSettings; import org.thingsboard.client.model.ActivateUserRequest; import org.thingsboard.client.model.AdminSettings; +import org.thingsboard.client.model.Agent; +import org.thingsboard.client.model.AgentAppConfigType; +import org.thingsboard.client.model.AgentAppEvent; +import org.thingsboard.client.model.AgentAppEventActionType; +import org.thingsboard.client.model.AgentAppEventRequest; +import org.thingsboard.client.model.AgentAppInstallResponse; +import org.thingsboard.client.model.AgentAppProfile; +import org.thingsboard.client.model.AgentAppProfileInfo; +import org.thingsboard.client.model.AgentAppProfileRelationInfo; +import org.thingsboard.client.model.AgentAppTemplate; +import org.thingsboard.client.model.AgentAppUnitType; +import org.thingsboard.client.model.AgentApplication; +import org.thingsboard.client.model.AgentApplicationInfo; +import org.thingsboard.client.model.AgentApplicationType; +import org.thingsboard.client.model.AgentBulkAction; +import org.thingsboard.client.model.AgentBulkActionEventStats; +import org.thingsboard.client.model.AgentInfo; +import org.thingsboard.client.model.AgentInstructions; +import org.thingsboard.client.model.AgentProcessingStatus; +import org.thingsboard.client.model.AgentProfile; +import org.thingsboard.client.model.AgentProfileInfo; +import org.thingsboard.client.model.AgentUpgradeRequest; import org.thingsboard.client.model.AiModel; import org.thingsboard.client.model.Alarm; import org.thingsboard.client.model.AlarmComment; @@ -53,6 +75,8 @@ import org.thingsboard.client.model.BulkImportResultAsset; import org.thingsboard.client.model.BulkImportResultDevice; import org.thingsboard.client.model.BulkImportResultEdge; +import org.thingsboard.client.model.BulkOperationPreview; +import org.thingsboard.client.model.BulkOperationRequest; import org.thingsboard.client.model.CMAssigneeType; import org.thingsboard.client.model.CMScope; import org.thingsboard.client.model.CalculatedField; @@ -60,7 +84,6 @@ import org.thingsboard.client.model.CaptchaClientParams; import org.thingsboard.client.model.CfReprocessingValidationResult; import org.thingsboard.client.model.ChangePasswordRequest; -import org.thingsboard.client.model.ChatType; import org.thingsboard.client.model.ClaimRequest; import org.thingsboard.client.model.CloudDomainInfo; import org.thingsboard.client.model.ComponentDescriptor; @@ -111,6 +134,7 @@ import org.thingsboard.client.model.EventFilter; import org.thingsboard.client.model.FeaturesInfo; import java.io.File; +import org.thingsboard.client.model.GetManagedRelatedEntityIds200ResponseInner; import org.thingsboard.client.model.GroupPermission; import org.thingsboard.client.model.GroupPermissionInfo; import org.thingsboard.client.model.HomeDashboard; @@ -150,6 +174,16 @@ import org.thingsboard.client.model.OAuth2ClientRegistrationTemplate; import org.thingsboard.client.model.OtaPackage; import org.thingsboard.client.model.OtaPackageInfo; +import org.thingsboard.client.model.PageDataAgent; +import org.thingsboard.client.model.PageDataAgentAppEvent; +import org.thingsboard.client.model.PageDataAgentAppEventInfo; +import org.thingsboard.client.model.PageDataAgentAppProfile; +import org.thingsboard.client.model.PageDataAgentAppUnit; +import org.thingsboard.client.model.PageDataAgentApplicationInfo; +import org.thingsboard.client.model.PageDataAgentBulkAction; +import org.thingsboard.client.model.PageDataAgentInfo; +import org.thingsboard.client.model.PageDataAgentProfile; +import org.thingsboard.client.model.PageDataAgentProfileInfo; import org.thingsboard.client.model.PageDataAiModel; import org.thingsboard.client.model.PageDataAlarmCommentInfo; import org.thingsboard.client.model.PageDataAlarmData; @@ -1511,6 +1545,175 @@ private HttpRequest.Builder assignAlarmRequestBuilder(@Nonnull String alarmId, @ return localVarRequestBuilder; } + /** + * Assign App Profile to Agent Profile (assignAppProfileToAgentProfile) + * Assigns the given agent application profile to the agent profile, making it available to applications managed by that agent profile. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param applicationProfileId Agent Application Profile Id (required) + * @throws ApiException if fails to make API call + */ + public void assignAppProfileToAgentProfile(@Nonnull String agentProfileId, @Nonnull String applicationProfileId) throws ApiException { + assignAppProfileToAgentProfileWithHttpInfo(agentProfileId, applicationProfileId, null); + } + + /** + * Assign App Profile to Agent Profile (assignAppProfileToAgentProfile) + * Assigns the given agent application profile to the agent profile, making it available to applications managed by that agent profile. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param applicationProfileId Agent Application Profile Id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<Void> + * @throws ApiException if fails to make API call + */ + public ApiResponse assignAppProfileToAgentProfileWithHttpInfo(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = assignAppProfileToAgentProfileRequestBuilder(agentProfileId, applicationProfileId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("assignAppProfileToAgentProfile", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody != null) { + localVarResponseBody.readAllBytes(); + } + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder assignAppProfileToAgentProfileRequestBuilder(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling assignAppProfileToAgentProfile"); + } + // verify the required parameter 'applicationProfileId' is set + if (applicationProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'applicationProfileId' when calling assignAppProfileToAgentProfile"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())) + .replace("{applicationProfileId}", ApiClient.urlEncode(applicationProfileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Assign Multiple App Profiles to Agent Profile (assignAppProfilesToAgentProfile) + * Assigns the given set of agent application profiles to the agent profile in a single request, replacing the previous assignment set. An explicitly empty 'appProfileIds' value (e.g. 'appProfileIds=') removes all assignments. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param appProfileIds Agent application profile ids that replace the current assignment set. An explicitly empty value removes all assignments. (optional) + * @throws ApiException if fails to make API call + */ + public void assignAppProfilesToAgentProfile(@Nonnull String agentProfileId, @Nullable List appProfileIds) throws ApiException { + assignAppProfilesToAgentProfileWithHttpInfo(agentProfileId, appProfileIds, null); + } + + /** + * Assign Multiple App Profiles to Agent Profile (assignAppProfilesToAgentProfile) + * Assigns the given set of agent application profiles to the agent profile in a single request, replacing the previous assignment set. An explicitly empty 'appProfileIds' value (e.g. 'appProfileIds=') removes all assignments. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param appProfileIds Agent application profile ids that replace the current assignment set. An explicitly empty value removes all assignments. (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<Void> + * @throws ApiException if fails to make API call + */ + public ApiResponse assignAppProfilesToAgentProfileWithHttpInfo(@Nonnull String agentProfileId, @Nullable List appProfileIds, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = assignAppProfilesToAgentProfileRequestBuilder(agentProfileId, appProfileIds, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("assignAppProfilesToAgentProfile", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody != null) { + localVarResponseBody.readAllBytes(); + } + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder assignAppProfilesToAgentProfileRequestBuilder(@Nonnull String agentProfileId, @Nullable List appProfileIds, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling assignAppProfilesToAgentProfile"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/{agentProfileId}/appProfiles/assign" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "appProfileIds"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("multi", "appProfileIds", appProfileIds)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Assign device to tenant (assignDeviceToTenant) * Creates assignment of the device to tenant. Thereafter tenant will be able to reassign the device to a customer. Available for users with 'TENANT_ADMIN' authority. Security check is performed to verify that the user has 'ASSIGN_TO_TENANT' permission for the entity (entities). @@ -1770,6 +1973,97 @@ private HttpRequest.Builder assignIntegrationToEdgeRequestBuilder(@Nonnull Strin return localVarRequestBuilder; } + /** + * Assign Related Entity to Agent Application (assignRelatedEntityToAgentApp) + * Links an Edge or Gateway Device to the specified agent application and re-merges entity credentials into the compose. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param entityType Related entity type (EDGE or DEVICE) (required) + * @param entityId Related entity id (required) + * @return AgentApplication + * @throws ApiException if fails to make API call + */ + public AgentApplication assignRelatedEntityToAgentApp(@Nonnull String agentApplicationId, @Nonnull String entityType, @Nonnull String entityId) throws ApiException { + ApiResponse localVarResponse = assignRelatedEntityToAgentAppWithHttpInfo(agentApplicationId, entityType, entityId, null); + return localVarResponse.getData(); + } + + /** + * Assign Related Entity to Agent Application (assignRelatedEntityToAgentApp) + * Links an Edge or Gateway Device to the specified agent application and re-merges entity credentials into the compose. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param entityType Related entity type (EDGE or DEVICE) (required) + * @param entityId Related entity id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentApplication> + * @throws ApiException if fails to make API call + */ + public ApiResponse assignRelatedEntityToAgentAppWithHttpInfo(@Nonnull String agentApplicationId, @Nonnull String entityType, @Nonnull String entityId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = assignRelatedEntityToAgentAppRequestBuilder(agentApplicationId, entityType, entityId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("assignRelatedEntityToAgentApp", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentApplication responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder assignRelatedEntityToAgentAppRequestBuilder(@Nonnull String agentApplicationId, @Nonnull String entityType, @Nonnull String entityId, Map headers) throws ApiException { + // verify the required parameter 'agentApplicationId' is set + if (agentApplicationId == null) { + throw new ApiException(400, "Missing the required parameter 'agentApplicationId' when calling assignRelatedEntityToAgentApp"); + } + // verify the required parameter 'entityType' is set + if (entityType == null) { + throw new ApiException(400, "Missing the required parameter 'entityType' when calling assignRelatedEntityToAgentApp"); + } + // verify the required parameter 'entityId' is set + if (entityId == null) { + throw new ApiException(400, "Missing the required parameter 'entityId' when calling assignRelatedEntityToAgentApp"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/{agentApplicationId}/relatedEntity/{entityType}/{entityId}" + .replace("{agentApplicationId}", ApiClient.urlEncode(agentApplicationId.toString())) + .replace("{entityType}", ApiClient.urlEncode(entityType.toString())) + .replace("{entityId}", ApiClient.urlEncode(entityId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Assign rule chain to edge (assignRuleChainToEdge) * Creates assignment of an existing rule chain to an instance of The Edge. Assignment works in async way - first, notification event pushed to edge service queue on platform. Second, remote edge service will receive a copy of assignment rule chain (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once rule chain will be delivered to edge service, it's going to start processing messages locally. Only rule chain with type 'EDGE' can be assigned to edge. Available for users with 'TENANT_ADMIN' authority. @@ -1938,6 +2232,90 @@ private HttpRequest.Builder assignSchedulerEventToEdgeRequestBuilder(@Nonnull St return localVarRequestBuilder; } + /** + * Attach Application to Profile (attachToProfile) + * Re-attaches the application to a profile. The application adopts the profile's template version without running any upgrade or downgrade steps. After attachment the profile becomes the source of the config; the app's own credentials are carried over. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param profileId (required) + * @return AgentApplication + * @throws ApiException if fails to make API call + */ + public AgentApplication attachToProfile(@Nonnull String agentApplicationId, @Nonnull String profileId) throws ApiException { + ApiResponse localVarResponse = attachToProfileWithHttpInfo(agentApplicationId, profileId, null); + return localVarResponse.getData(); + } + + /** + * Attach Application to Profile (attachToProfile) + * Re-attaches the application to a profile. The application adopts the profile's template version without running any upgrade or downgrade steps. After attachment the profile becomes the source of the config; the app's own credentials are carried over. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param profileId (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentApplication> + * @throws ApiException if fails to make API call + */ + public ApiResponse attachToProfileWithHttpInfo(@Nonnull String agentApplicationId, @Nonnull String profileId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = attachToProfileRequestBuilder(agentApplicationId, profileId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("attachToProfile", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentApplication responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder attachToProfileRequestBuilder(@Nonnull String agentApplicationId, @Nonnull String profileId, Map headers) throws ApiException { + // verify the required parameter 'agentApplicationId' is set + if (agentApplicationId == null) { + throw new ApiException(400, "Missing the required parameter 'agentApplicationId' when calling attachToProfile"); + } + // verify the required parameter 'profileId' is set + if (profileId == null) { + throw new ApiException(400, "Missing the required parameter 'profileId' when calling attachToProfile"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/{agentApplicationId}/attach/{profileId}" + .replace("{agentApplicationId}", ApiClient.urlEncode(agentApplicationId.toString())) + .replace("{profileId}", ApiClient.urlEncode(profileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Get regular token pair after successfully configuring 2FA * Checks 2FA is configured, returning token pair on success. @@ -2078,6 +2456,182 @@ private HttpRequest.Builder autoCommitSettingsExistsRequestBuilder(Map localVarResponse = bulkOperationWithHttpInfo(agentProfileId, applicationProfileId, bulkOperationRequest, null); + return localVarResponse.getData(); + } + + /** + * Bulk Operation (bulkOperation) + * Enqueues a bulk operation over the applications of the given agent profile and application profile and returns the created bulk action to track its progress. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param applicationProfileId Agent Application Profile Id (required) + * @param bulkOperationRequest (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentBulkAction> + * @throws ApiException if fails to make API call + */ + public ApiResponse bulkOperationWithHttpInfo(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull BulkOperationRequest bulkOperationRequest, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = bulkOperationRequestBuilder(agentProfileId, applicationProfileId, bulkOperationRequest, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("bulkOperation", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentBulkAction responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder bulkOperationRequestBuilder(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull BulkOperationRequest bulkOperationRequest, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling bulkOperation"); + } + // verify the required parameter 'applicationProfileId' is set + if (applicationProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'applicationProfileId' when calling bulkOperation"); + } + // verify the required parameter 'bulkOperationRequest' is set + if (bulkOperationRequest == null) { + throw new ApiException(400, "Missing the required parameter 'bulkOperationRequest' when calling bulkOperation"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}/bulk" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())) + .replace("{applicationProfileId}", ApiClient.urlEncode(applicationProfileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(bulkOperationRequest); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Cancel Agent Application Event (cancelAgentAppEvent) + * Force-cancels an in-flight or pending agent application event, marking it as ERROR. Cannot cancel events that are already in a terminal state (FINISHED or ERROR). Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param agentAppEventId A string value representing the agent app event id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @throws ApiException if fails to make API call + */ + public void cancelAgentAppEvent(@Nonnull String agentApplicationId, @Nonnull String agentAppEventId) throws ApiException { + cancelAgentAppEventWithHttpInfo(agentApplicationId, agentAppEventId, null); + } + + /** + * Cancel Agent Application Event (cancelAgentAppEvent) + * Force-cancels an in-flight or pending agent application event, marking it as ERROR. Cannot cancel events that are already in a terminal state (FINISHED or ERROR). Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param agentAppEventId A string value representing the agent app event id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<Void> + * @throws ApiException if fails to make API call + */ + public ApiResponse cancelAgentAppEventWithHttpInfo(@Nonnull String agentApplicationId, @Nonnull String agentAppEventId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = cancelAgentAppEventRequestBuilder(agentApplicationId, agentAppEventId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("cancelAgentAppEvent", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody != null) { + localVarResponseBody.readAllBytes(); + } + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder cancelAgentAppEventRequestBuilder(@Nonnull String agentApplicationId, @Nonnull String agentAppEventId, Map headers) throws ApiException { + // verify the required parameter 'agentApplicationId' is set + if (agentApplicationId == null) { + throw new ApiException(400, "Missing the required parameter 'agentApplicationId' when calling cancelAgentAppEvent"); + } + // verify the required parameter 'agentAppEventId' is set + if (agentAppEventId == null) { + throw new ApiException(400, "Missing the required parameter 'agentAppEventId' when calling cancelAgentAppEvent"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/{agentApplicationId}/event/{agentAppEventId}/cancel" + .replace("{agentApplicationId}", ApiClient.urlEncode(agentApplicationId.toString())) + .replace("{agentAppEventId}", ApiClient.urlEncode(agentAppEventId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Cancel job (cancelJob) * Cancels the job. The status of the job must be QUEUED, PENDING or RUNNING. For a running job, all the tasks not yet processed will be discarded. See the example of a cancelled job result in getJobById method description. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. @@ -4221,6 +4775,95 @@ private HttpRequest.Builder countEntitiesByQueryRequestBuilder(@Nonnull EntityCo return localVarRequestBuilder; } + /** + * Execute Agent Application Event (createAgentAppEvent) + * Creates an event for the specified agent application. The action type determines the operation (UPDATE, DELETE, RESTART, UPGRADE, ROLLBACK). Step inputs can be provided for actions that require them. Returns the created event so the caller can open a progress view. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param agentAppEventRequest A JSON value representing the event request. (required) + * @return AgentAppEvent + * @throws ApiException if fails to make API call + */ + public AgentAppEvent createAgentAppEvent(@Nonnull String agentApplicationId, @Nonnull AgentAppEventRequest agentAppEventRequest) throws ApiException { + ApiResponse localVarResponse = createAgentAppEventWithHttpInfo(agentApplicationId, agentAppEventRequest, null); + return localVarResponse.getData(); + } + + /** + * Execute Agent Application Event (createAgentAppEvent) + * Creates an event for the specified agent application. The action type determines the operation (UPDATE, DELETE, RESTART, UPGRADE, ROLLBACK). Step inputs can be provided for actions that require them. Returns the created event so the caller can open a progress view. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param agentAppEventRequest A JSON value representing the event request. (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentAppEvent> + * @throws ApiException if fails to make API call + */ + public ApiResponse createAgentAppEventWithHttpInfo(@Nonnull String agentApplicationId, @Nonnull AgentAppEventRequest agentAppEventRequest, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = createAgentAppEventRequestBuilder(agentApplicationId, agentAppEventRequest, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("createAgentAppEvent", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentAppEvent responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder createAgentAppEventRequestBuilder(@Nonnull String agentApplicationId, @Nonnull AgentAppEventRequest agentAppEventRequest, Map headers) throws ApiException { + // verify the required parameter 'agentApplicationId' is set + if (agentApplicationId == null) { + throw new ApiException(400, "Missing the required parameter 'agentApplicationId' when calling createAgentAppEvent"); + } + // verify the required parameter 'agentAppEventRequest' is set + if (agentAppEventRequest == null) { + throw new ApiException(400, "Missing the required parameter 'agentAppEventRequest' when calling createAgentAppEvent"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/{agentApplicationId}/event" + .replace("{agentApplicationId}", ApiClient.urlEncode(agentApplicationId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(agentAppEventRequest); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * createChat * @@ -4642,6 +5285,225 @@ private HttpRequest.Builder createSolutionRequestBuilder(@Nonnull UUID solutionI return localVarRequestBuilder; } + /** + * Delete agent (deleteAgent) + * Deletes the agent and all the relations (from and to the agent). Referencing non-existing agent Id will cause an error. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @throws ApiException if fails to make API call + */ + public void deleteAgent(@Nonnull String agentId) throws ApiException { + deleteAgentWithHttpInfo(agentId, null); + } + + /** + * Delete agent (deleteAgent) + * Deletes the agent and all the relations (from and to the agent). Referencing non-existing agent Id will cause an error. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<Void> + * @throws ApiException if fails to make API call + */ + public ApiResponse deleteAgentWithHttpInfo(@Nonnull String agentId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = deleteAgentRequestBuilder(agentId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("deleteAgent", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody != null) { + localVarResponseBody.readAllBytes(); + } + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder deleteAgentRequestBuilder(@Nonnull String agentId, Map headers) throws ApiException { + // verify the required parameter 'agentId' is set + if (agentId == null) { + throw new ApiException(400, "Missing the required parameter 'agentId' when calling deleteAgent"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/{agentId}" + .replace("{agentId}", ApiClient.urlEncode(agentId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Delete Agent Application Profile (deleteAgentAppProfile) + * Deletes the agent application profile. Cannot delete if referenced by applications. Available for users with 'TENANT_ADMIN' authority. + * @param profileId Profile Id (required) + * @throws ApiException if fails to make API call + */ + public void deleteAgentAppProfile(@Nonnull String profileId) throws ApiException { + deleteAgentAppProfileWithHttpInfo(profileId, null); + } + + /** + * Delete Agent Application Profile (deleteAgentAppProfile) + * Deletes the agent application profile. Cannot delete if referenced by applications. Available for users with 'TENANT_ADMIN' authority. + * @param profileId Profile Id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<Void> + * @throws ApiException if fails to make API call + */ + public ApiResponse deleteAgentAppProfileWithHttpInfo(@Nonnull String profileId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = deleteAgentAppProfileRequestBuilder(profileId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("deleteAgentAppProfile", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody != null) { + localVarResponseBody.readAllBytes(); + } + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder deleteAgentAppProfileRequestBuilder(@Nonnull String profileId, Map headers) throws ApiException { + // verify the required parameter 'profileId' is set + if (profileId == null) { + throw new ApiException(400, "Missing the required parameter 'profileId' when calling deleteAgentAppProfile"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/profile/{profileId}" + .replace("{profileId}", ApiClient.urlEncode(profileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Delete Agent Profile (deleteAgentProfile) + * Deletes the Agent Profile. Referencing a non-existing Agent Profile Id will cause an error. The default Agent Profile can not be deleted. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @throws ApiException if fails to make API call + */ + public void deleteAgentProfile(@Nonnull String agentProfileId) throws ApiException { + deleteAgentProfileWithHttpInfo(agentProfileId, null); + } + + /** + * Delete Agent Profile (deleteAgentProfile) + * Deletes the Agent Profile. Referencing a non-existing Agent Profile Id will cause an error. The default Agent Profile can not be deleted. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<Void> + * @throws ApiException if fails to make API call + */ + public ApiResponse deleteAgentProfileWithHttpInfo(@Nonnull String agentProfileId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = deleteAgentProfileRequestBuilder(agentProfileId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("deleteAgentProfile", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody != null) { + localVarResponseBody.readAllBytes(); + } + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder deleteAgentProfileRequestBuilder(@Nonnull String agentProfileId, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling deleteAgentProfile"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/{agentProfileId}" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Delete AI model by ID (deleteAiModelById) * Deletes the AI model record by its `id`. If a record with the specified `id` exists, the record is deleted and the endpoint returns `true`. If no such record exists, the endpoint returns `false`. Available for users with 'TENANT_ADMIN' authority. @@ -9770,27 +10632,27 @@ private HttpRequest.Builder deleteWidgetsBundleRequestBuilder(@Nonnull String wi } /** - * Download Blob Entity By Id (downloadBlobEntity) - * Download report file based on the provided Blob entity Id. Referencing non-existing Blob entity Id will cause an error. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). - * @param blobEntityId A string value representing the blob entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) - * @return File + * Detach Application from Profile (detachFromProfile) + * Detaches the application from its profile. The application keeps the effective config it already carries (profile config with its own credentials merged in) and becomes standalone and editable. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @return AgentApplication * @throws ApiException if fails to make API call */ - public File downloadBlobEntity(@Nonnull String blobEntityId) throws ApiException { - ApiResponse localVarResponse = downloadBlobEntityWithHttpInfo(blobEntityId, null); + public AgentApplication detachFromProfile(@Nonnull String agentApplicationId) throws ApiException { + ApiResponse localVarResponse = detachFromProfileWithHttpInfo(agentApplicationId, null); return localVarResponse.getData(); } /** - * Download Blob Entity By Id (downloadBlobEntity) - * Download report file based on the provided Blob entity Id. Referencing non-existing Blob entity Id will cause an error. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). - * @param blobEntityId A string value representing the blob entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * Detach Application from Profile (detachFromProfile) + * Detaches the application from its profile. The application keeps the effective config it already carries (profile config with its own credentials merged in) and becomes standalone and editable. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) * @param headers Optional headers to include in the request - * @return ApiResponse<File> + * @return ApiResponse<AgentApplication> * @throws ApiException if fails to make API call */ - public ApiResponse downloadBlobEntityWithHttpInfo(@Nonnull String blobEntityId, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = downloadBlobEntityRequestBuilder(blobEntityId, headers); + public ApiResponse detachFromProfileWithHttpInfo(@Nonnull String agentApplicationId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = detachFromProfileRequestBuilder(agentApplicationId, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -9801,14 +10663,15 @@ public ApiResponse downloadBlobEntityWithHttpInfo(@Nonnull String blobEnti InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("downloadBlobEntity", localVarResponse); + throw getApiException("detachFromProfile", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } - File responseValue = downloadFileFromResponse(localVarResponse, localVarResponseBody); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentApplication responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -9823,17 +10686,17 @@ public ApiResponse downloadBlobEntityWithHttpInfo(@Nonnull String blobEnti } } - private HttpRequest.Builder downloadBlobEntityRequestBuilder(@Nonnull String blobEntityId, Map headers) throws ApiException { - // verify the required parameter 'blobEntityId' is set - if (blobEntityId == null) { - throw new ApiException(400, "Missing the required parameter 'blobEntityId' when calling downloadBlobEntity"); + private HttpRequest.Builder detachFromProfileRequestBuilder(@Nonnull String agentApplicationId, Map headers) throws ApiException { + // verify the required parameter 'agentApplicationId' is set + if (agentApplicationId == null) { + throw new ApiException(400, "Missing the required parameter 'agentApplicationId' when calling detachFromProfile"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/blobEntity/{blobEntityId}/download" - .replace("{blobEntityId}", ApiClient.urlEncode(blobEntityId.toString())); + String localVarPath = "/api/agent/app/{agentApplicationId}/detach" + .replace("{agentApplicationId}", ApiClient.urlEncode(agentApplicationId.toString())); localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); - localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.noBody()); if (memberVarReadTimeout != null) { localVarRequestBuilder.timeout(memberVarReadTimeout); } @@ -9846,29 +10709,27 @@ private HttpRequest.Builder downloadBlobEntityRequestBuilder(@Nonnull String blo } /** - * Download dashboard report (downloadDashboardReport) - * Generate and download a report from the specified dashboard. The request payload is a JSON object with params of report. For example: ```json { \"type\": \"pdf\", \"timezone\": \"Europe/Kiev\", \"timewindow\": { \"displayValue\": \"\", \"hideInterval\": false, \"hideLastInterval\": false, \"hideQuickInterval\": false, \"hideAggregation\": false, \"hideAggInterval\": false, \"hideTimezone\": false, \"selectedTab\": 0, \"realtime\": { \"realtimeType\": 0, \"interval\": 1000, \"timewindowMs\": 60000, \"quickInterval\": \"CURRENT_DAY\" }, \"history\": { \"historyType\": 0, \"interval\": 1000, \"timewindowMs\": 60000, \"fixedTimewindow\": { \"startTimeMs\": 1703687976592, \"endTimeMs\": 1703774376592 }, \"quickInterval\": \"CURRENT_DAY\" }, \"aggregation\": { \"type\": \"AVG\", \"limit\": 25000 } }, \"state\": null } ``` Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. - * @param dashboardId A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) - * @param body (required) + * Download Blob Entity By Id (downloadBlobEntity) + * Download report file based on the provided Blob entity Id. Referencing non-existing Blob entity Id will cause an error. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). + * @param blobEntityId A string value representing the blob entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) * @return File * @throws ApiException if fails to make API call */ - public File downloadDashboardReport(@Nonnull String dashboardId, @Nullable Object body) throws ApiException { - ApiResponse localVarResponse = downloadDashboardReportWithHttpInfo(dashboardId, body, null); + public File downloadBlobEntity(@Nonnull String blobEntityId) throws ApiException { + ApiResponse localVarResponse = downloadBlobEntityWithHttpInfo(blobEntityId, null); return localVarResponse.getData(); } /** - * Download dashboard report (downloadDashboardReport) - * Generate and download a report from the specified dashboard. The request payload is a JSON object with params of report. For example: ```json { \"type\": \"pdf\", \"timezone\": \"Europe/Kiev\", \"timewindow\": { \"displayValue\": \"\", \"hideInterval\": false, \"hideLastInterval\": false, \"hideQuickInterval\": false, \"hideAggregation\": false, \"hideAggInterval\": false, \"hideTimezone\": false, \"selectedTab\": 0, \"realtime\": { \"realtimeType\": 0, \"interval\": 1000, \"timewindowMs\": 60000, \"quickInterval\": \"CURRENT_DAY\" }, \"history\": { \"historyType\": 0, \"interval\": 1000, \"timewindowMs\": 60000, \"fixedTimewindow\": { \"startTimeMs\": 1703687976592, \"endTimeMs\": 1703774376592 }, \"quickInterval\": \"CURRENT_DAY\" }, \"aggregation\": { \"type\": \"AVG\", \"limit\": 25000 } }, \"state\": null } ``` Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. - * @param dashboardId A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) - * @param body (required) + * Download Blob Entity By Id (downloadBlobEntity) + * Download report file based on the provided Blob entity Id. Referencing non-existing Blob entity Id will cause an error. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). + * @param blobEntityId A string value representing the blob entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) * @param headers Optional headers to include in the request * @return ApiResponse<File> * @throws ApiException if fails to make API call */ - public ApiResponse downloadDashboardReportWithHttpInfo(@Nonnull String dashboardId, @Nullable Object body, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = downloadDashboardReportRequestBuilder(dashboardId, body, headers); + public ApiResponse downloadBlobEntityWithHttpInfo(@Nonnull String blobEntityId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = downloadBlobEntityRequestBuilder(blobEntityId, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -9879,7 +10740,85 @@ public ApiResponse downloadDashboardReportWithHttpInfo(@Nonnull String das InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("downloadDashboardReport", localVarResponse); + throw getApiException("downloadBlobEntity", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + File responseValue = downloadFileFromResponse(localVarResponse, localVarResponseBody); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder downloadBlobEntityRequestBuilder(@Nonnull String blobEntityId, Map headers) throws ApiException { + // verify the required parameter 'blobEntityId' is set + if (blobEntityId == null) { + throw new ApiException(400, "Missing the required parameter 'blobEntityId' when calling downloadBlobEntity"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/blobEntity/{blobEntityId}/download" + .replace("{blobEntityId}", ApiClient.urlEncode(blobEntityId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Download dashboard report (downloadDashboardReport) + * Generate and download a report from the specified dashboard. The request payload is a JSON object with params of report. For example: ```json { \"type\": \"pdf\", \"timezone\": \"Europe/Kiev\", \"timewindow\": { \"displayValue\": \"\", \"hideInterval\": false, \"hideLastInterval\": false, \"hideQuickInterval\": false, \"hideAggregation\": false, \"hideAggInterval\": false, \"hideTimezone\": false, \"selectedTab\": 0, \"realtime\": { \"realtimeType\": 0, \"interval\": 1000, \"timewindowMs\": 60000, \"quickInterval\": \"CURRENT_DAY\" }, \"history\": { \"historyType\": 0, \"interval\": 1000, \"timewindowMs\": 60000, \"fixedTimewindow\": { \"startTimeMs\": 1703687976592, \"endTimeMs\": 1703774376592 }, \"quickInterval\": \"CURRENT_DAY\" }, \"aggregation\": { \"type\": \"AVG\", \"limit\": 25000 } }, \"state\": null } ``` Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. + * @param dashboardId A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param body (required) + * @return File + * @throws ApiException if fails to make API call + */ + public File downloadDashboardReport(@Nonnull String dashboardId, @Nullable Object body) throws ApiException { + ApiResponse localVarResponse = downloadDashboardReportWithHttpInfo(dashboardId, body, null); + return localVarResponse.getData(); + } + + /** + * Download dashboard report (downloadDashboardReport) + * Generate and download a report from the specified dashboard. The request payload is a JSON object with params of report. For example: ```json { \"type\": \"pdf\", \"timezone\": \"Europe/Kiev\", \"timewindow\": { \"displayValue\": \"\", \"hideInterval\": false, \"hideLastInterval\": false, \"hideQuickInterval\": false, \"hideAggregation\": false, \"hideAggInterval\": false, \"hideTimezone\": false, \"selectedTab\": 0, \"realtime\": { \"realtimeType\": 0, \"interval\": 1000, \"timewindowMs\": 60000, \"quickInterval\": \"CURRENT_DAY\" }, \"history\": { \"historyType\": 0, \"interval\": 1000, \"timewindowMs\": 60000, \"fixedTimewindow\": { \"startTimeMs\": 1703687976592, \"endTimeMs\": 1703774376592 }, \"quickInterval\": \"CURRENT_DAY\" }, \"aggregation\": { \"type\": \"AVG\", \"limit\": 25000 } }, \"state\": null } ``` Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. + * @param dashboardId A string value representing the dashboard id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param body (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<File> + * @throws ApiException if fails to make API call + */ + public ApiResponse downloadDashboardReportWithHttpInfo(@Nonnull String dashboardId, @Nullable Object body, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = downloadDashboardReportRequestBuilder(dashboardId, body, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("downloadDashboardReport", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { @@ -11019,6 +11958,82 @@ private HttpRequest.Builder downloadReportRequestBuilder(@Nonnull UUID reportId, return localVarRequestBuilder; } + /** + * Download report by public key (downloadReportByPublicKey) + * Downloads the report identified by its public key. This endpoint is intentionally public: it requires no authentication and is accessible to anyone in possession of the report's random public key. It only returns data for reports that have been explicitly made public (see updateReportPublicStatus). + * @param publicKey The random public key of the report (required) + * @return File + * @throws ApiException if fails to make API call + */ + public File downloadReportByPublicKey(@Nonnull String publicKey) throws ApiException { + ApiResponse localVarResponse = downloadReportByPublicKeyWithHttpInfo(publicKey, null); + return localVarResponse.getData(); + } + + /** + * Download report by public key (downloadReportByPublicKey) + * Downloads the report identified by its public key. This endpoint is intentionally public: it requires no authentication and is accessible to anyone in possession of the report's random public key. It only returns data for reports that have been explicitly made public (see updateReportPublicStatus). + * @param publicKey The random public key of the report (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<File> + * @throws ApiException if fails to make API call + */ + public ApiResponse downloadReportByPublicKeyWithHttpInfo(@Nonnull String publicKey, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = downloadReportByPublicKeyRequestBuilder(publicKey, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("downloadReportByPublicKey", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + File responseValue = downloadFileFromResponse(localVarResponse, localVarResponseBody); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder downloadReportByPublicKeyRequestBuilder(@Nonnull String publicKey, Map headers) throws ApiException { + // verify the required parameter 'publicKey' is set + if (publicKey == null) { + throw new ApiException(400, "Missing the required parameter 'publicKey' when calling downloadReportByPublicKey"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/v2/report/public/{publicKey}/download" + .replace("{publicKey}", ApiClient.urlEncode(publicKey.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Download Resource (downloadResource) * Download Resource based on the provided Resource Id. Available for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority. @@ -14538,27 +15553,27 @@ private HttpRequest.Builder getAdminSettingsRequestBuilder(@Nonnull String key, } /** - * Get AI model by ID (getAiModelById) - * Fetches an AI model record by its `id`. Available for users with 'TENANT_ADMIN' authority. - * @param modelUuid ID of the AI model record (required) - * @return AiModel + * Get Agent Application Event (getAgentAppEventById) + * Fetches a single agent application event by id. Works for orphan events whose application has been deleted (application_id is nullable). Available for users with 'TENANT_ADMIN' authority. + * @param agentAppEventId A string value representing the agent app event id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @return AgentAppEvent * @throws ApiException if fails to make API call */ - public AiModel getAiModelById(@Nonnull UUID modelUuid) throws ApiException { - ApiResponse localVarResponse = getAiModelByIdWithHttpInfo(modelUuid, null); + public AgentAppEvent getAgentAppEventById(@Nonnull String agentAppEventId) throws ApiException { + ApiResponse localVarResponse = getAgentAppEventByIdWithHttpInfo(agentAppEventId, null); return localVarResponse.getData(); } /** - * Get AI model by ID (getAiModelById) - * Fetches an AI model record by its `id`. Available for users with 'TENANT_ADMIN' authority. - * @param modelUuid ID of the AI model record (required) + * Get Agent Application Event (getAgentAppEventById) + * Fetches a single agent application event by id. Works for orphan events whose application has been deleted (application_id is nullable). Available for users with 'TENANT_ADMIN' authority. + * @param agentAppEventId A string value representing the agent app event id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) * @param headers Optional headers to include in the request - * @return ApiResponse<AiModel> + * @return ApiResponse<AgentAppEvent> * @throws ApiException if fails to make API call */ - public ApiResponse getAiModelByIdWithHttpInfo(@Nonnull UUID modelUuid, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getAiModelByIdRequestBuilder(modelUuid, headers); + public ApiResponse getAgentAppEventByIdWithHttpInfo(@Nonnull String agentAppEventId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentAppEventByIdRequestBuilder(agentAppEventId, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -14569,15 +15584,15 @@ public ApiResponse getAiModelByIdWithHttpInfo(@Nonnull UUID modelUuid, InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getAiModelById", localVarResponse); + throw getApiException("getAgentAppEventById", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - AiModel responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + AgentAppEvent responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -14592,14 +15607,14 @@ public ApiResponse getAiModelByIdWithHttpInfo(@Nonnull UUID modelUuid, } } - private HttpRequest.Builder getAiModelByIdRequestBuilder(@Nonnull UUID modelUuid, Map headers) throws ApiException { - // verify the required parameter 'modelUuid' is set - if (modelUuid == null) { - throw new ApiException(400, "Missing the required parameter 'modelUuid' when calling getAiModelById"); + private HttpRequest.Builder getAgentAppEventByIdRequestBuilder(@Nonnull String agentAppEventId, Map headers) throws ApiException { + // verify the required parameter 'agentAppEventId' is set + if (agentAppEventId == null) { + throw new ApiException(400, "Missing the required parameter 'agentAppEventId' when calling getAgentAppEventById"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/ai/model/{modelUuid}" - .replace("{modelUuid}", ApiClient.urlEncode(modelUuid.toString())); + String localVarPath = "/api/agent/app/event/{agentAppEventId}" + .replace("{agentAppEventId}", ApiClient.urlEncode(agentAppEventId.toString())); localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); @@ -14615,35 +15630,41 @@ private HttpRequest.Builder getAiModelByIdRequestBuilder(@Nonnull UUID modelUuid } /** - * Get AI models (getAiModels) - * Returns a page of AI models. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * Get Agent App Event Infos by Agent Id (getAgentAppEventInfosByAgentId) + * Returns a page of agent application events for all applications belonging to the specified agent, enriched with the application name for each event. Supports optional filtering by action type and status, and text search over the application name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) * @param pageSize Maximum amount of entities in a one page (required) * @param page Sequence number of page starting from 0 (required) - * @param textSearch The case insensitive 'substring' filter based on the AI model name, provider and model ID. (optional) + * @param textSearch Optional text value to match against the application name (optional) * @param sortProperty Property of entity to sort by (optional) * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) - * @return PageDataAiModel + * @param actionType Optional filter by event action type (optional) + * @param processingStatus Optional filter by event status (optional) + * @return PageDataAgentAppEventInfo * @throws ApiException if fails to make API call */ - public PageDataAiModel getAiModels(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { - ApiResponse localVarResponse = getAiModelsWithHttpInfo(pageSize, page, textSearch, sortProperty, sortOrder, null); + public PageDataAgentAppEventInfo getAgentAppEventInfosByAgentId(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus) throws ApiException { + ApiResponse localVarResponse = getAgentAppEventInfosByAgentIdWithHttpInfo(agentId, pageSize, page, textSearch, sortProperty, sortOrder, actionType, processingStatus, null); return localVarResponse.getData(); } /** - * Get AI models (getAiModels) - * Returns a page of AI models. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * Get Agent App Event Infos by Agent Id (getAgentAppEventInfosByAgentId) + * Returns a page of agent application events for all applications belonging to the specified agent, enriched with the application name for each event. Supports optional filtering by action type and status, and text search over the application name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) * @param pageSize Maximum amount of entities in a one page (required) * @param page Sequence number of page starting from 0 (required) - * @param textSearch The case insensitive 'substring' filter based on the AI model name, provider and model ID. (optional) + * @param textSearch Optional text value to match against the application name (optional) * @param sortProperty Property of entity to sort by (optional) * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @param actionType Optional filter by event action type (optional) + * @param processingStatus Optional filter by event status (optional) * @param headers Optional headers to include in the request - * @return ApiResponse<PageDataAiModel> + * @return ApiResponse<PageDataAgentAppEventInfo> * @throws ApiException if fails to make API call */ - public ApiResponse getAiModelsWithHttpInfo(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getAiModelsRequestBuilder(pageSize, page, textSearch, sortProperty, sortOrder, headers); + public ApiResponse getAgentAppEventInfosByAgentIdWithHttpInfo(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentAppEventInfosByAgentIdRequestBuilder(agentId, pageSize, page, textSearch, sortProperty, sortOrder, actionType, processingStatus, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -14654,15 +15675,15 @@ public ApiResponse getAiModelsWithHttpInfo(@Nonnull Integer pag InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getAiModels", localVarResponse); + throw getApiException("getAgentAppEventInfosByAgentId", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - PageDataAiModel responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + PageDataAgentAppEventInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -14677,17 +15698,22 @@ public ApiResponse getAiModelsWithHttpInfo(@Nonnull Integer pag } } - private HttpRequest.Builder getAiModelsRequestBuilder(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + private HttpRequest.Builder getAgentAppEventInfosByAgentIdRequestBuilder(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus, Map headers) throws ApiException { + // verify the required parameter 'agentId' is set + if (agentId == null) { + throw new ApiException(400, "Missing the required parameter 'agentId' when calling getAgentAppEventInfosByAgentId"); + } // verify the required parameter 'pageSize' is set if (pageSize == null) { - throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getAiModels"); + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getAgentAppEventInfosByAgentId"); } // verify the required parameter 'page' is set if (page == null) { - throw new ApiException(400, "Missing the required parameter 'page' when calling getAiModels"); + throw new ApiException(400, "Missing the required parameter 'page' when calling getAgentAppEventInfosByAgentId"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/ai/model"; + String localVarPath = "/api/agent/{agentId}/eventInfos" + .replace("{agentId}", ApiClient.urlEncode(agentId.toString())); List localVarQueryParams = new ArrayList<>(); StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); String localVarQueryParameterBaseName; @@ -14701,6 +15727,10 @@ private HttpRequest.Builder getAiModelsRequestBuilder(@Nonnull Integer pageSize, localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); localVarQueryParameterBaseName = "sortOrder"; localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + localVarQueryParameterBaseName = "actionType"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("actionType", actionType)); + localVarQueryParameterBaseName = "processingStatus"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("processingStatus", processingStatus)); if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { StringJoiner queryJoiner = new StringJoiner("&"); localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); @@ -14725,27 +15755,41 @@ private HttpRequest.Builder getAiModelsRequestBuilder(@Nonnull Integer pageSize, } /** - * Get Alarm (getAlarmById) - * Fetch the Alarm object based on the provided Alarm Id. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). - * @param alarmId A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) - * @return Alarm + * Get Agent Application Events (getAgentAppEvents) + * Returns a page of events for the specified agent application. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional case-insensitive substring matched against the event action type and processing status (optional) + * @param actionType Optional action type filter (optional) + * @param processingStatus Optional processing status filter (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAgentAppEvent * @throws ApiException if fails to make API call */ - public Alarm getAlarmById(@Nonnull String alarmId) throws ApiException { - ApiResponse localVarResponse = getAlarmByIdWithHttpInfo(alarmId, null); + public PageDataAgentAppEvent getAgentAppEvents(@Nonnull String agentApplicationId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getAgentAppEventsWithHttpInfo(agentApplicationId, pageSize, page, textSearch, actionType, processingStatus, sortProperty, sortOrder, null); return localVarResponse.getData(); } /** - * Get Alarm (getAlarmById) - * Fetch the Alarm object based on the provided Alarm Id. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). - * @param alarmId A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * Get Agent Application Events (getAgentAppEvents) + * Returns a page of events for the specified agent application. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional case-insensitive substring matched against the event action type and processing status (optional) + * @param actionType Optional action type filter (optional) + * @param processingStatus Optional processing status filter (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) * @param headers Optional headers to include in the request - * @return ApiResponse<Alarm> + * @return ApiResponse<PageDataAgentAppEvent> * @throws ApiException if fails to make API call */ - public ApiResponse getAlarmByIdWithHttpInfo(@Nonnull String alarmId, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getAlarmByIdRequestBuilder(alarmId, headers); + public ApiResponse getAgentAppEventsWithHttpInfo(@Nonnull String agentApplicationId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentAppEventsRequestBuilder(agentApplicationId, pageSize, page, textSearch, actionType, processingStatus, sortProperty, sortOrder, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -14756,15 +15800,15 @@ public ApiResponse getAlarmByIdWithHttpInfo(@Nonnull String alarmId, Map< InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getAlarmById", localVarResponse); + throw getApiException("getAgentAppEvents", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - Alarm responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + PageDataAgentAppEvent responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -14779,15 +15823,49 @@ public ApiResponse getAlarmByIdWithHttpInfo(@Nonnull String alarmId, Map< } } - private HttpRequest.Builder getAlarmByIdRequestBuilder(@Nonnull String alarmId, Map headers) throws ApiException { - // verify the required parameter 'alarmId' is set - if (alarmId == null) { - throw new ApiException(400, "Missing the required parameter 'alarmId' when calling getAlarmById"); + private HttpRequest.Builder getAgentAppEventsRequestBuilder(@Nonnull String agentApplicationId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'agentApplicationId' is set + if (agentApplicationId == null) { + throw new ApiException(400, "Missing the required parameter 'agentApplicationId' when calling getAgentAppEvents"); + } + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getAgentAppEvents"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getAgentAppEvents"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/alarm/{alarmId}" - .replace("{alarmId}", ApiClient.urlEncode(alarmId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + String localVarPath = "/api/agent/app/{agentApplicationId}/events" + .replace("{agentApplicationId}", ApiClient.urlEncode(agentApplicationId.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "actionType"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("actionType", actionType)); + localVarQueryParameterBaseName = "processingStatus"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("processingStatus", processingStatus)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); if (memberVarReadTimeout != null) { @@ -14802,35 +15880,37 @@ private HttpRequest.Builder getAlarmByIdRequestBuilder(@Nonnull String alarmId, } /** - * Get Alarm comments (getAlarmComments) - * Returns a page of alarm comments for specified alarm. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. - * @param alarmId A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * Get Agent App Events by Agent Id (getAgentAppEventsByAgentId) + * Returns a page of agent application events for all applications belonging to the specified agent. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) * @param pageSize Maximum amount of entities in a one page (required) * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional String value reserved for future event filtering (optional) * @param sortProperty Property of entity to sort by (optional) * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) - * @return PageDataAlarmCommentInfo + * @return PageDataAgentAppEvent * @throws ApiException if fails to make API call */ - public PageDataAlarmCommentInfo getAlarmComments(@Nonnull String alarmId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { - ApiResponse localVarResponse = getAlarmCommentsWithHttpInfo(alarmId, pageSize, page, sortProperty, sortOrder, null); + public PageDataAgentAppEvent getAgentAppEventsByAgentId(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getAgentAppEventsByAgentIdWithHttpInfo(agentId, pageSize, page, textSearch, sortProperty, sortOrder, null); return localVarResponse.getData(); } /** - * Get Alarm comments (getAlarmComments) - * Returns a page of alarm comments for specified alarm. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. - * @param alarmId A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * Get Agent App Events by Agent Id (getAgentAppEventsByAgentId) + * Returns a page of agent application events for all applications belonging to the specified agent. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) * @param pageSize Maximum amount of entities in a one page (required) * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional String value reserved for future event filtering (optional) * @param sortProperty Property of entity to sort by (optional) * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) * @param headers Optional headers to include in the request - * @return ApiResponse<PageDataAlarmCommentInfo> + * @return ApiResponse<PageDataAgentAppEvent> * @throws ApiException if fails to make API call */ - public ApiResponse getAlarmCommentsWithHttpInfo(@Nonnull String alarmId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getAlarmCommentsRequestBuilder(alarmId, pageSize, page, sortProperty, sortOrder, headers); + public ApiResponse getAgentAppEventsByAgentIdWithHttpInfo(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentAppEventsByAgentIdRequestBuilder(agentId, pageSize, page, textSearch, sortProperty, sortOrder, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -14841,15 +15921,15 @@ public ApiResponse getAlarmCommentsWithHttpInfo(@Nonnu InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getAlarmComments", localVarResponse); + throw getApiException("getAgentAppEventsByAgentId", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - PageDataAlarmCommentInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + PageDataAgentAppEvent responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -14864,22 +15944,2598 @@ public ApiResponse getAlarmCommentsWithHttpInfo(@Nonnu } } - private HttpRequest.Builder getAlarmCommentsRequestBuilder(@Nonnull String alarmId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { - // verify the required parameter 'alarmId' is set - if (alarmId == null) { - throw new ApiException(400, "Missing the required parameter 'alarmId' when calling getAlarmComments"); + private HttpRequest.Builder getAgentAppEventsByAgentIdRequestBuilder(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'agentId' is set + if (agentId == null) { + throw new ApiException(400, "Missing the required parameter 'agentId' when calling getAgentAppEventsByAgentId"); } // verify the required parameter 'pageSize' is set if (pageSize == null) { - throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getAlarmComments"); + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getAgentAppEventsByAgentId"); } // verify the required parameter 'page' is set if (page == null) { - throw new ApiException(400, "Missing the required parameter 'page' when calling getAlarmComments"); + throw new ApiException(400, "Missing the required parameter 'page' when calling getAgentAppEventsByAgentId"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/alarm/{alarmId}/comment" - .replace("{alarmId}", ApiClient.urlEncode(alarmId.toString())); + String localVarPath = "/api/agent/{agentId}/events" + .replace("{agentId}", ApiClient.urlEncode(agentId.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Application Profile (getAgentAppProfileById) + * Fetch the Agent Application Profile by Id. Available for users with 'TENANT_ADMIN' authority. + * @param profileId Profile Id (required) + * @return AgentAppProfile + * @throws ApiException if fails to make API call + */ + public AgentAppProfile getAgentAppProfileById(@Nonnull String profileId) throws ApiException { + ApiResponse localVarResponse = getAgentAppProfileByIdWithHttpInfo(profileId, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Application Profile (getAgentAppProfileById) + * Fetch the Agent Application Profile by Id. Available for users with 'TENANT_ADMIN' authority. + * @param profileId Profile Id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentAppProfile> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentAppProfileByIdWithHttpInfo(@Nonnull String profileId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentAppProfileByIdRequestBuilder(profileId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentAppProfileById", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentAppProfile responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentAppProfileByIdRequestBuilder(@Nonnull String profileId, Map headers) throws ApiException { + // verify the required parameter 'profileId' is set + if (profileId == null) { + throw new ApiException(400, "Missing the required parameter 'profileId' when calling getAgentAppProfileById"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/profile/{profileId}" + .replace("{profileId}", ApiClient.urlEncode(profileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Application Profile Info (getAgentAppProfileInfoById) + * Fetch the Agent Application Profile Info by Id. Readable by any tenant admin without AGENT_APP_PROFILE permission, so agent/application screens can resolve the linked profile. Returns the full profile, config and arguments included - an application profile carries deployment configuration rather than credentials, so it is not gated like other profiles. Available for users with 'TENANT_ADMIN' authority. + * @param profileId Profile Id (required) + * @return AgentAppProfileInfo + * @throws ApiException if fails to make API call + */ + public AgentAppProfileInfo getAgentAppProfileInfoById(@Nonnull String profileId) throws ApiException { + ApiResponse localVarResponse = getAgentAppProfileInfoByIdWithHttpInfo(profileId, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Application Profile Info (getAgentAppProfileInfoById) + * Fetch the Agent Application Profile Info by Id. Readable by any tenant admin without AGENT_APP_PROFILE permission, so agent/application screens can resolve the linked profile. Returns the full profile, config and arguments included - an application profile carries deployment configuration rather than credentials, so it is not gated like other profiles. Available for users with 'TENANT_ADMIN' authority. + * @param profileId Profile Id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentAppProfileInfo> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentAppProfileInfoByIdWithHttpInfo(@Nonnull String profileId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentAppProfileInfoByIdRequestBuilder(profileId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentAppProfileInfoById", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentAppProfileInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentAppProfileInfoByIdRequestBuilder(@Nonnull String profileId, Map headers) throws ApiException { + // verify the required parameter 'profileId' is set + if (profileId == null) { + throw new ApiException(400, "Missing the required parameter 'profileId' when calling getAgentAppProfileInfoById"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/profile/info/{profileId}" + .replace("{profileId}", ApiClient.urlEncode(profileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Application Profiles by app type (getAgentAppProfilesByAppType) + * Returns a list of agent application profiles filtered by application type. Available for users with 'TENANT_ADMIN' authority. + * @param appType Application type, e.g. 'EDGE', 'GATEWAY', 'GENERIC' (required) + * @return List<AgentAppProfileInfo> + * @throws ApiException if fails to make API call + */ + public List getAgentAppProfilesByAppType(@Nonnull AgentApplicationType appType) throws ApiException { + ApiResponse> localVarResponse = getAgentAppProfilesByAppTypeWithHttpInfo(appType, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Application Profiles by app type (getAgentAppProfilesByAppType) + * Returns a list of agent application profiles filtered by application type. Available for users with 'TENANT_ADMIN' authority. + * @param appType Application type, e.g. 'EDGE', 'GATEWAY', 'GENERIC' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<List<AgentAppProfileInfo>> + * @throws ApiException if fails to make API call + */ + public ApiResponse> getAgentAppProfilesByAppTypeWithHttpInfo(@Nonnull AgentApplicationType appType, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentAppProfilesByAppTypeRequestBuilder(appType, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentAppProfilesByAppType", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + List responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference>() {}); + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentAppProfilesByAppTypeRequestBuilder(@Nonnull AgentApplicationType appType, Map headers) throws ApiException { + // verify the required parameter 'appType' is set + if (appType == null) { + throw new ApiException(400, "Missing the required parameter 'appType' when calling getAgentAppProfilesByAppType"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/profiles/{appType}" + .replace("{appType}", ApiClient.urlEncode(appType.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Application Profiles By Ids (getAgentAppProfilesByIds) + * Requested agent application profiles must be owned by tenant which is performing the request. Security check is performed to verify that the user has 'READ' permission for the entity (entities). + * @param agentAppProfileIds A list of agent application profile ids, separated by comma ',' (required) + * @return List<AgentAppProfile> + * @throws ApiException if fails to make API call + */ + public List getAgentAppProfilesByIds(@Nonnull List agentAppProfileIds) throws ApiException { + ApiResponse> localVarResponse = getAgentAppProfilesByIdsWithHttpInfo(agentAppProfileIds, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Application Profiles By Ids (getAgentAppProfilesByIds) + * Requested agent application profiles must be owned by tenant which is performing the request. Security check is performed to verify that the user has 'READ' permission for the entity (entities). + * @param agentAppProfileIds A list of agent application profile ids, separated by comma ',' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<List<AgentAppProfile>> + * @throws ApiException if fails to make API call + */ + public ApiResponse> getAgentAppProfilesByIdsWithHttpInfo(@Nonnull List agentAppProfileIds, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentAppProfilesByIdsRequestBuilder(agentAppProfileIds, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentAppProfilesByIds", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + List responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference>() {}); + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentAppProfilesByIdsRequestBuilder(@Nonnull List agentAppProfileIds, Map headers) throws ApiException { + // verify the required parameter 'agentAppProfileIds' is set + if (agentAppProfileIds == null) { + throw new ApiException(400, "Missing the required parameter 'agentAppProfileIds' when calling getAgentAppProfilesByIds"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/profiles"; + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "agentAppProfileIds"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("multi", "agentAppProfileIds", agentAppProfileIds)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent App Template by current version (getAgentAppTemplateByCurrentVersion) + * Fetch the Agent App Template object based on the provided app type, config type, and current version. Matches the version exactly, including a floating tag used as a version such as the gateway 'latest' tag. Available for users with 'TENANT_ADMIN' authority. + * @param appType A string value representing the agent application type, e.g. 'EDGE', 'GATEWAY' (required) + * @param configType A string value representing the agent configuration type, e.g. 'DOCKER_COMPOSE' (required) + * @param currentVersion A string value representing the current version of the template, e.g. '1.0.0' (required) + * @return AgentAppTemplate + * @throws ApiException if fails to make API call + */ + public AgentAppTemplate getAgentAppTemplateByCurrentVersion(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType, @Nonnull String currentVersion) throws ApiException { + ApiResponse localVarResponse = getAgentAppTemplateByCurrentVersionWithHttpInfo(appType, configType, currentVersion, null); + return localVarResponse.getData(); + } + + /** + * Get Agent App Template by current version (getAgentAppTemplateByCurrentVersion) + * Fetch the Agent App Template object based on the provided app type, config type, and current version. Matches the version exactly, including a floating tag used as a version such as the gateway 'latest' tag. Available for users with 'TENANT_ADMIN' authority. + * @param appType A string value representing the agent application type, e.g. 'EDGE', 'GATEWAY' (required) + * @param configType A string value representing the agent configuration type, e.g. 'DOCKER_COMPOSE' (required) + * @param currentVersion A string value representing the current version of the template, e.g. '1.0.0' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentAppTemplate> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentAppTemplateByCurrentVersionWithHttpInfo(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType, @Nonnull String currentVersion, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentAppTemplateByCurrentVersionRequestBuilder(appType, configType, currentVersion, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentAppTemplateByCurrentVersion", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentAppTemplate responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentAppTemplateByCurrentVersionRequestBuilder(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType, @Nonnull String currentVersion, Map headers) throws ApiException { + // verify the required parameter 'appType' is set + if (appType == null) { + throw new ApiException(400, "Missing the required parameter 'appType' when calling getAgentAppTemplateByCurrentVersion"); + } + // verify the required parameter 'configType' is set + if (configType == null) { + throw new ApiException(400, "Missing the required parameter 'configType' when calling getAgentAppTemplateByCurrentVersion"); + } + // verify the required parameter 'currentVersion' is set + if (currentVersion == null) { + throw new ApiException(400, "Missing the required parameter 'currentVersion' when calling getAgentAppTemplateByCurrentVersion"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/template/{appType}/{configType}/version/{currentVersion}" + .replace("{appType}", ApiClient.urlEncode(appType.toString())) + .replace("{configType}", ApiClient.urlEncode(configType.toString())) + .replace("{currentVersion}", ApiClient.urlEncode(currentVersion.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get all Agent App Templates (getAgentAppTemplates) + * Returns a list of all agent app templates available for the current tenant. Available for users with 'TENANT_ADMIN' authority. + * @return List<AgentAppTemplate> + * @throws ApiException if fails to make API call + */ + public List getAgentAppTemplates() throws ApiException { + ApiResponse> localVarResponse = getAgentAppTemplatesWithHttpInfo(null); + return localVarResponse.getData(); + } + + /** + * Get all Agent App Templates (getAgentAppTemplates) + * Returns a list of all agent app templates available for the current tenant. Available for users with 'TENANT_ADMIN' authority. + * @param headers Optional headers to include in the request + * @return ApiResponse<List<AgentAppTemplate>> + * @throws ApiException if fails to make API call + */ + public ApiResponse> getAgentAppTemplatesWithHttpInfo(Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentAppTemplatesRequestBuilder(headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentAppTemplates", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + List responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference>() {}); + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentAppTemplatesRequestBuilder(Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/templates"; + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent App Templates by type (getAgentAppTemplatesByAppType) + * Returns a list of agent app templates filtered by application type and config type. Available for users with 'TENANT_ADMIN' authority. + * @param appType A string value representing the agent application type, e.g. 'EDGE', 'GATEWAY' (required) + * @param configType A string value representing the agent configuration type, e.g. 'DOCKER_COMPOSE' (required) + * @return List<AgentAppTemplate> + * @throws ApiException if fails to make API call + */ + public List getAgentAppTemplatesByAppType(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType) throws ApiException { + ApiResponse> localVarResponse = getAgentAppTemplatesByAppTypeWithHttpInfo(appType, configType, null); + return localVarResponse.getData(); + } + + /** + * Get Agent App Templates by type (getAgentAppTemplatesByAppType) + * Returns a list of agent app templates filtered by application type and config type. Available for users with 'TENANT_ADMIN' authority. + * @param appType A string value representing the agent application type, e.g. 'EDGE', 'GATEWAY' (required) + * @param configType A string value representing the agent configuration type, e.g. 'DOCKER_COMPOSE' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<List<AgentAppTemplate>> + * @throws ApiException if fails to make API call + */ + public ApiResponse> getAgentAppTemplatesByAppTypeWithHttpInfo(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentAppTemplatesByAppTypeRequestBuilder(appType, configType, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentAppTemplatesByAppType", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + List responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference>() {}); + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentAppTemplatesByAppTypeRequestBuilder(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType, Map headers) throws ApiException { + // verify the required parameter 'appType' is set + if (appType == null) { + throw new ApiException(400, "Missing the required parameter 'appType' when calling getAgentAppTemplatesByAppType"); + } + // verify the required parameter 'configType' is set + if (configType == null) { + throw new ApiException(400, "Missing the required parameter 'configType' when calling getAgentAppTemplatesByAppType"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/templates/{appType}/{configType}" + .replace("{appType}", ApiClient.urlEncode(appType.toString())) + .replace("{configType}", ApiClient.urlEncode(configType.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Application Units (getAgentAppUnits) + * Returns a page of units (containers, volumes, networks) for the specified agent application. Live per-unit data such as `image` and `state` lives in server-scope attributes on each unit and should be fetched separately via the standard telemetry/attributes API.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Case-insensitive substring match against the unit identifier (optional) + * @param type Optional unit type filter (CONTAINER, VOLUME, NETWORK) (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAgentAppUnit + * @throws ApiException if fails to make API call + */ + public PageDataAgentAppUnit getAgentAppUnits(@Nonnull String agentApplicationId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppUnitType type, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getAgentAppUnitsWithHttpInfo(agentApplicationId, pageSize, page, textSearch, type, sortProperty, sortOrder, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Application Units (getAgentAppUnits) + * Returns a page of units (containers, volumes, networks) for the specified agent application. Live per-unit data such as `image` and `state` lives in server-scope attributes on each unit and should be fetched separately via the standard telemetry/attributes API.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Case-insensitive substring match against the unit identifier (optional) + * @param type Optional unit type filter (CONTAINER, VOLUME, NETWORK) (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<PageDataAgentAppUnit> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentAppUnitsWithHttpInfo(@Nonnull String agentApplicationId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppUnitType type, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentAppUnitsRequestBuilder(agentApplicationId, pageSize, page, textSearch, type, sortProperty, sortOrder, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentAppUnits", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + PageDataAgentAppUnit responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentAppUnitsRequestBuilder(@Nonnull String agentApplicationId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppUnitType type, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'agentApplicationId' is set + if (agentApplicationId == null) { + throw new ApiException(400, "Missing the required parameter 'agentApplicationId' when calling getAgentAppUnits"); + } + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getAgentAppUnits"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getAgentAppUnits"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/{agentApplicationId}/units" + .replace("{agentApplicationId}", ApiClient.urlEncode(agentApplicationId.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "type"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("type", type)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Application (getAgentApplicationById) + * Fetch the Agent Application object based on the provided Agent Application Id. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @return AgentApplicationInfo + * @throws ApiException if fails to make API call + */ + public AgentApplicationInfo getAgentApplicationById(@Nonnull String agentApplicationId) throws ApiException { + ApiResponse localVarResponse = getAgentApplicationByIdWithHttpInfo(agentApplicationId, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Application (getAgentApplicationById) + * Fetch the Agent Application object based on the provided Agent Application Id. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentApplicationInfo> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentApplicationByIdWithHttpInfo(@Nonnull String agentApplicationId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentApplicationByIdRequestBuilder(agentApplicationId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentApplicationById", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentApplicationInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentApplicationByIdRequestBuilder(@Nonnull String agentApplicationId, Map headers) throws ApiException { + // verify the required parameter 'agentApplicationId' is set + if (agentApplicationId == null) { + throw new ApiException(400, "Missing the required parameter 'agentApplicationId' when calling getAgentApplicationById"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/{agentApplicationId}" + .replace("{agentApplicationId}", ApiClient.urlEncode(agentApplicationId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Application by Related Entity (getAgentApplicationByRelatedEntity) + * Returns the agent application linked to the specified entity. Available for users with 'TENANT_ADMIN' authority. + * @param entityType Entity type (required) + * @param entityId Entity id (required) + * @return AgentApplication + * @throws ApiException if fails to make API call + */ + public AgentApplication getAgentApplicationByRelatedEntity(@Nonnull String entityType, @Nonnull String entityId) throws ApiException { + ApiResponse localVarResponse = getAgentApplicationByRelatedEntityWithHttpInfo(entityType, entityId, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Application by Related Entity (getAgentApplicationByRelatedEntity) + * Returns the agent application linked to the specified entity. Available for users with 'TENANT_ADMIN' authority. + * @param entityType Entity type (required) + * @param entityId Entity id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentApplication> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentApplicationByRelatedEntityWithHttpInfo(@Nonnull String entityType, @Nonnull String entityId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentApplicationByRelatedEntityRequestBuilder(entityType, entityId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentApplicationByRelatedEntity", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentApplication responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentApplicationByRelatedEntityRequestBuilder(@Nonnull String entityType, @Nonnull String entityId, Map headers) throws ApiException { + // verify the required parameter 'entityType' is set + if (entityType == null) { + throw new ApiException(400, "Missing the required parameter 'entityType' when calling getAgentApplicationByRelatedEntity"); + } + // verify the required parameter 'entityId' is set + if (entityId == null) { + throw new ApiException(400, "Missing the required parameter 'entityId' when calling getAgentApplicationByRelatedEntity"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/apps/{entityType}/{entityId}" + .replace("{entityType}", ApiClient.urlEncode(entityType.toString())) + .replace("{entityId}", ApiClient.urlEncode(entityId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Applications by Agent Id (getAgentApplicationsByAgentId) + * Returns a page of agent applications that belong to the specified agent. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional String value representing application name (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAgentApplicationInfo + * @throws ApiException if fails to make API call + */ + public PageDataAgentApplicationInfo getAgentApplicationsByAgentId(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getAgentApplicationsByAgentIdWithHttpInfo(agentId, pageSize, page, textSearch, sortProperty, sortOrder, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Applications by Agent Id (getAgentApplicationsByAgentId) + * Returns a page of agent applications that belong to the specified agent. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional String value representing application name (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<PageDataAgentApplicationInfo> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentApplicationsByAgentIdWithHttpInfo(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentApplicationsByAgentIdRequestBuilder(agentId, pageSize, page, textSearch, sortProperty, sortOrder, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentApplicationsByAgentId", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + PageDataAgentApplicationInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentApplicationsByAgentIdRequestBuilder(@Nonnull String agentId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'agentId' is set + if (agentId == null) { + throw new ApiException(400, "Missing the required parameter 'agentId' when calling getAgentApplicationsByAgentId"); + } + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getAgentApplicationsByAgentId"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getAgentApplicationsByAgentId"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/{agentId}/apps" + .replace("{agentId}", ApiClient.urlEncode(agentId.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Bulk Action (getAgentBulkAction) + * Fetch the Agent Bulk Action object based on the provided Bulk Action Id. Available for users with 'TENANT_ADMIN' authority. + * @param bulkActionId Bulk Action Id (required) + * @return AgentBulkAction + * @throws ApiException if fails to make API call + */ + public AgentBulkAction getAgentBulkAction(@Nonnull String bulkActionId) throws ApiException { + ApiResponse localVarResponse = getAgentBulkActionWithHttpInfo(bulkActionId, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Bulk Action (getAgentBulkAction) + * Fetch the Agent Bulk Action object based on the provided Bulk Action Id. Available for users with 'TENANT_ADMIN' authority. + * @param bulkActionId Bulk Action Id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentBulkAction> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentBulkActionWithHttpInfo(@Nonnull String bulkActionId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentBulkActionRequestBuilder(bulkActionId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentBulkAction", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentBulkAction responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentBulkActionRequestBuilder(@Nonnull String bulkActionId, Map headers) throws ApiException { + // verify the required parameter 'bulkActionId' is set + if (bulkActionId == null) { + throw new ApiException(400, "Missing the required parameter 'bulkActionId' when calling getAgentBulkAction"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/bulk/{bulkActionId}" + .replace("{bulkActionId}", ApiClient.urlEncode(bulkActionId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Bulk Action Event Stats (getAgentBulkActionEventStats) + * Returns the number of agent application events produced by the given bulk action per processing status, together with their total. Available for users with 'TENANT_ADMIN' authority. + * @param bulkActionId Bulk Action Id (required) + * @return AgentBulkActionEventStats + * @throws ApiException if fails to make API call + */ + public AgentBulkActionEventStats getAgentBulkActionEventStats(@Nonnull String bulkActionId) throws ApiException { + ApiResponse localVarResponse = getAgentBulkActionEventStatsWithHttpInfo(bulkActionId, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Bulk Action Event Stats (getAgentBulkActionEventStats) + * Returns the number of agent application events produced by the given bulk action per processing status, together with their total. Available for users with 'TENANT_ADMIN' authority. + * @param bulkActionId Bulk Action Id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentBulkActionEventStats> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentBulkActionEventStatsWithHttpInfo(@Nonnull String bulkActionId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentBulkActionEventStatsRequestBuilder(bulkActionId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentBulkActionEventStats", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentBulkActionEventStats responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentBulkActionEventStatsRequestBuilder(@Nonnull String bulkActionId, Map headers) throws ApiException { + // verify the required parameter 'bulkActionId' is set + if (bulkActionId == null) { + throw new ApiException(400, "Missing the required parameter 'bulkActionId' when calling getAgentBulkActionEventStats"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/bulk/{bulkActionId}/eventStats" + .replace("{bulkActionId}", ApiClient.urlEncode(bulkActionId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Bulk Action Events (getAgentBulkActionEvents) + * Returns a page of agent application events produced by the given bulk action, optionally filtered by action type and status. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param bulkActionId Bulk Action Id (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Case-insensitive 'substring' filter based on the event fields (optional) + * @param actionType A string value representing the action type to filter by, e.g. 'UPDATE' (optional) + * @param processingStatus A string value representing the event status to filter by, e.g. 'FINISHED' (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAgentAppEventInfo + * @throws ApiException if fails to make API call + */ + public PageDataAgentAppEventInfo getAgentBulkActionEvents(@Nonnull String bulkActionId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getAgentBulkActionEventsWithHttpInfo(bulkActionId, pageSize, page, textSearch, actionType, processingStatus, sortProperty, sortOrder, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Bulk Action Events (getAgentBulkActionEvents) + * Returns a page of agent application events produced by the given bulk action, optionally filtered by action type and status. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param bulkActionId Bulk Action Id (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Case-insensitive 'substring' filter based on the event fields (optional) + * @param actionType A string value representing the action type to filter by, e.g. 'UPDATE' (optional) + * @param processingStatus A string value representing the event status to filter by, e.g. 'FINISHED' (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<PageDataAgentAppEventInfo> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentBulkActionEventsWithHttpInfo(@Nonnull String bulkActionId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentBulkActionEventsRequestBuilder(bulkActionId, pageSize, page, textSearch, actionType, processingStatus, sortProperty, sortOrder, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentBulkActionEvents", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + PageDataAgentAppEventInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentBulkActionEventsRequestBuilder(@Nonnull String bulkActionId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable AgentAppEventActionType actionType, @Nullable AgentProcessingStatus processingStatus, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'bulkActionId' is set + if (bulkActionId == null) { + throw new ApiException(400, "Missing the required parameter 'bulkActionId' when calling getAgentBulkActionEvents"); + } + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getAgentBulkActionEvents"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getAgentBulkActionEvents"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/bulk/{bulkActionId}/events" + .replace("{bulkActionId}", ApiClient.urlEncode(bulkActionId.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "actionType"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("actionType", actionType)); + localVarQueryParameterBaseName = "processingStatus"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("processingStatus", processingStatus)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent (getAgentById) + * Fetch the Agent object based on the provided Agent Id. The server checks that the agent is owned by the same tenant. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @return Agent + * @throws ApiException if fails to make API call + */ + public Agent getAgentById(@Nonnull String agentId) throws ApiException { + ApiResponse localVarResponse = getAgentByIdWithHttpInfo(agentId, null); + return localVarResponse.getData(); + } + + /** + * Get Agent (getAgentById) + * Fetch the Agent object based on the provided Agent Id. The server checks that the agent is owned by the same tenant. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<Agent> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentByIdWithHttpInfo(@Nonnull String agentId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentByIdRequestBuilder(agentId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentById", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + Agent responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentByIdRequestBuilder(@Nonnull String agentId, Map headers) throws ApiException { + // verify the required parameter 'agentId' is set + if (agentId == null) { + throw new ApiException(400, "Missing the required parameter 'agentId' when calling getAgentById"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/{agentId}" + .replace("{agentId}", ApiClient.urlEncode(agentId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Info (getAgentInfoById) + * Fetch the Agent Info object based on the provided Agent Id. Agent Info extends the Agent object and adds customer title and 'is public' flag. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @return AgentInfo + * @throws ApiException if fails to make API call + */ + public AgentInfo getAgentInfoById(@Nonnull String agentId) throws ApiException { + ApiResponse localVarResponse = getAgentInfoByIdWithHttpInfo(agentId, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Info (getAgentInfoById) + * Fetch the Agent Info object based on the provided Agent Id. Agent Info extends the Agent object and adds customer title and 'is public' flag. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentInfo> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentInfoByIdWithHttpInfo(@Nonnull String agentId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentInfoByIdRequestBuilder(agentId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentInfoById", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentInfoByIdRequestBuilder(@Nonnull String agentId, Map headers) throws ApiException { + // verify the required parameter 'agentId' is set + if (agentId == null) { + throw new ApiException(400, "Missing the required parameter 'agentId' when calling getAgentInfoById"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/info/{agentId}" + .replace("{agentId}", ApiClient.urlEncode(agentId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Infos By Ids (getAgentInfosByIds) + * Requested agents must be owned by tenant or assigned to customer which user is performing the request. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). + * @param agentIds A list of agent ids, separated by comma ',' (required) + * @return List<AgentInfo> + * @throws ApiException if fails to make API call + */ + public List getAgentInfosByIds(@Nonnull List agentIds) throws ApiException { + ApiResponse> localVarResponse = getAgentInfosByIdsWithHttpInfo(agentIds, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Infos By Ids (getAgentInfosByIds) + * Requested agents must be owned by tenant or assigned to customer which user is performing the request. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). + * @param agentIds A list of agent ids, separated by comma ',' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<List<AgentInfo>> + * @throws ApiException if fails to make API call + */ + public ApiResponse> getAgentInfosByIdsWithHttpInfo(@Nonnull List agentIds, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentInfosByIdsRequestBuilder(agentIds, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentInfosByIds", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + List responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference>() {}); + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentInfosByIdsRequestBuilder(@Nonnull List agentIds, Map headers) throws ApiException { + // verify the required parameter 'agentIds' is set + if (agentIds == null) { + throw new ApiException(400, "Missing the required parameter 'agentIds' when calling getAgentInfosByIds"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agentInfos"; + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "agentIds"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("multi", "agentIds", agentIds)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Install Instructions (getAgentInstallInstructions) + * Returns the docker install command for the specified agent with the server address and gRPC port resolved server-side. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param method Installation method ('docker') (required) + * @return AgentInstructions + * @throws ApiException if fails to make API call + */ + public AgentInstructions getAgentInstallInstructions(@Nonnull String agentId, @Nonnull String method) throws ApiException { + ApiResponse localVarResponse = getAgentInstallInstructionsWithHttpInfo(agentId, method, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Install Instructions (getAgentInstallInstructions) + * Returns the docker install command for the specified agent with the server address and gRPC port resolved server-side. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param method Installation method ('docker') (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentInstructions> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentInstallInstructionsWithHttpInfo(@Nonnull String agentId, @Nonnull String method, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentInstallInstructionsRequestBuilder(agentId, method, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentInstallInstructions", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentInstructions responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentInstallInstructionsRequestBuilder(@Nonnull String agentId, @Nonnull String method, Map headers) throws ApiException { + // verify the required parameter 'agentId' is set + if (agentId == null) { + throw new ApiException(400, "Missing the required parameter 'agentId' when calling getAgentInstallInstructions"); + } + // verify the required parameter 'method' is set + if (method == null) { + throw new ApiException(400, "Missing the required parameter 'method' when calling getAgentInstallInstructions"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/instructions/install/{agentId}/{method}" + .replace("{agentId}", ApiClient.urlEncode(agentId.toString())) + .replace("{method}", ApiClient.urlEncode(method.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Bulk Actions for Agent Profile and Application Profile (getAgentProfileAppProfileBulkActions) + * Returns a page of bulk actions previously submitted for the given agent profile and application profile pair. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param applicationProfileId Agent Application Profile Id (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAgentBulkAction + * @throws ApiException if fails to make API call + */ + public PageDataAgentBulkAction getAgentProfileAppProfileBulkActions(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getAgentProfileAppProfileBulkActionsWithHttpInfo(agentProfileId, applicationProfileId, pageSize, page, sortProperty, sortOrder, null); + return localVarResponse.getData(); + } + + /** + * Get Bulk Actions for Agent Profile and Application Profile (getAgentProfileAppProfileBulkActions) + * Returns a page of bulk actions previously submitted for the given agent profile and application profile pair. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param applicationProfileId Agent Application Profile Id (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<PageDataAgentBulkAction> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentProfileAppProfileBulkActionsWithHttpInfo(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentProfileAppProfileBulkActionsRequestBuilder(agentProfileId, applicationProfileId, pageSize, page, sortProperty, sortOrder, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentProfileAppProfileBulkActions", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + PageDataAgentBulkAction responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentProfileAppProfileBulkActionsRequestBuilder(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling getAgentProfileAppProfileBulkActions"); + } + // verify the required parameter 'applicationProfileId' is set + if (applicationProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'applicationProfileId' when calling getAgentProfileAppProfileBulkActions"); + } + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getAgentProfileAppProfileBulkActions"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getAgentProfileAppProfileBulkActions"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}/bulk" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())) + .replace("{applicationProfileId}", ApiClient.urlEncode(applicationProfileId.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Profile App Profile Infos (getAgentProfileAppProfileInfos) + * Returns app profiles assigned to the given agent profile, enriched with template version, the count of AgentApplications using each app profile within this agent profile and the additional info of the assignment relation. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @return List<AgentAppProfileRelationInfo> + * @throws ApiException if fails to make API call + */ + public List getAgentProfileAppProfileInfos(@Nonnull String agentProfileId) throws ApiException { + ApiResponse> localVarResponse = getAgentProfileAppProfileInfosWithHttpInfo(agentProfileId, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Profile App Profile Infos (getAgentProfileAppProfileInfos) + * Returns app profiles assigned to the given agent profile, enriched with template version, the count of AgentApplications using each app profile within this agent profile and the additional info of the assignment relation. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<List<AgentAppProfileRelationInfo>> + * @throws ApiException if fails to make API call + */ + public ApiResponse> getAgentProfileAppProfileInfosWithHttpInfo(@Nonnull String agentProfileId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentProfileAppProfileInfosRequestBuilder(agentProfileId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentProfileAppProfileInfos", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + List responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference>() {}); + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentProfileAppProfileInfosRequestBuilder(@Nonnull String agentProfileId, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling getAgentProfileAppProfileInfos"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/{agentProfileId}/appProfilesInfo" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Bulk Actions for Agent Profile (getAgentProfileBulkActions) + * Returns a page of bulk actions previously submitted for the given agent profile. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAgentBulkAction + * @throws ApiException if fails to make API call + */ + public PageDataAgentBulkAction getAgentProfileBulkActions(@Nonnull String agentProfileId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getAgentProfileBulkActionsWithHttpInfo(agentProfileId, pageSize, page, sortProperty, sortOrder, null); + return localVarResponse.getData(); + } + + /** + * Get Bulk Actions for Agent Profile (getAgentProfileBulkActions) + * Returns a page of bulk actions previously submitted for the given agent profile. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<PageDataAgentBulkAction> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentProfileBulkActionsWithHttpInfo(@Nonnull String agentProfileId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentProfileBulkActionsRequestBuilder(agentProfileId, pageSize, page, sortProperty, sortOrder, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentProfileBulkActions", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + PageDataAgentBulkAction responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentProfileBulkActionsRequestBuilder(@Nonnull String agentProfileId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling getAgentProfileBulkActions"); + } + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getAgentProfileBulkActions"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getAgentProfileBulkActions"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/{agentProfileId}/bulk" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Profile (getAgentProfileById) + * Fetch the Agent Profile object based on the provided Agent Profile Id. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @return AgentProfile + * @throws ApiException if fails to make API call + */ + public AgentProfile getAgentProfileById(@Nonnull String agentProfileId) throws ApiException { + ApiResponse localVarResponse = getAgentProfileByIdWithHttpInfo(agentProfileId, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Profile (getAgentProfileById) + * Fetch the Agent Profile object based on the provided Agent Profile Id. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentProfile> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentProfileByIdWithHttpInfo(@Nonnull String agentProfileId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentProfileByIdRequestBuilder(agentProfileId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentProfileById", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentProfile responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentProfileByIdRequestBuilder(@Nonnull String agentProfileId, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling getAgentProfileById"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/{agentProfileId}" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Profile Info (getAgentProfileInfoById) + * Fetch the Agent Profile Info object based on the provided Agent Profile Id. Agent Profile Info is a lightweight object that omits the auto-provision key and secret; it is readable by any tenant admin so agent screens can resolve the linked profile. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @return AgentProfileInfo + * @throws ApiException if fails to make API call + */ + public AgentProfileInfo getAgentProfileInfoById(@Nonnull String agentProfileId) throws ApiException { + ApiResponse localVarResponse = getAgentProfileInfoByIdWithHttpInfo(agentProfileId, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Profile Info (getAgentProfileInfoById) + * Fetch the Agent Profile Info object based on the provided Agent Profile Id. Agent Profile Info is a lightweight object that omits the auto-provision key and secret; it is readable by any tenant admin so agent screens can resolve the linked profile. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentProfileInfo> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentProfileInfoByIdWithHttpInfo(@Nonnull String agentProfileId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentProfileInfoByIdRequestBuilder(agentProfileId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentProfileInfoById", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentProfileInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentProfileInfoByIdRequestBuilder(@Nonnull String agentProfileId, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling getAgentProfileInfoById"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/info/{agentProfileId}" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Agent Provision Instructions (getAgentProvisionInstructions) + * Returns the auto-provision docker command for the specified agent profile with the server address and gRPC port resolved server-side. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param method Installation method ('docker') (required) + * @return AgentInstructions + * @throws ApiException if fails to make API call + */ + public AgentInstructions getAgentProvisionInstructions(@Nonnull String agentProfileId, @Nonnull String method) throws ApiException { + ApiResponse localVarResponse = getAgentProvisionInstructionsWithHttpInfo(agentProfileId, method, null); + return localVarResponse.getData(); + } + + /** + * Get Agent Provision Instructions (getAgentProvisionInstructions) + * Returns the auto-provision docker command for the specified agent profile with the server address and gRPC port resolved server-side. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param method Installation method ('docker') (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentInstructions> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentProvisionInstructionsWithHttpInfo(@Nonnull String agentProfileId, @Nonnull String method, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentProvisionInstructionsRequestBuilder(agentProfileId, method, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentProvisionInstructions", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentInstructions responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentProvisionInstructionsRequestBuilder(@Nonnull String agentProfileId, @Nonnull String method, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling getAgentProvisionInstructions"); + } + // verify the required parameter 'method' is set + if (method == null) { + throw new ApiException(400, "Missing the required parameter 'method' when calling getAgentProvisionInstructions"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/instructions/provision/{agentProfileId}/{method}" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())) + .replace("{method}", ApiClient.urlEncode(method.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get the agent upgrade target (getAgentUpgradeTarget) + * Returns the image reference the agent should be upgraded to, or an empty string when it already runs the newest published image or cannot be placed in the version graph. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @return String + * @throws ApiException if fails to make API call + */ + public String getAgentUpgradeTarget(@Nonnull String agentId) throws ApiException { + ApiResponse localVarResponse = getAgentUpgradeTargetWithHttpInfo(agentId, null); + return localVarResponse.getData(); + } + + /** + * Get the agent upgrade target (getAgentUpgradeTarget) + * Returns the image reference the agent should be upgraded to, or an empty string when it already runs the newest published image or cannot be placed in the version graph. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<String> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAgentUpgradeTargetWithHttpInfo(@Nonnull String agentId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAgentUpgradeTargetRequestBuilder(agentId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAgentUpgradeTarget", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + String responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAgentUpgradeTargetRequestBuilder(@Nonnull String agentId, Map headers) throws ApiException { + // verify the required parameter 'agentId' is set + if (agentId == null) { + throw new ApiException(400, "Missing the required parameter 'agentId' when calling getAgentUpgradeTarget"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/{agentId}/upgrade/target" + .replace("{agentId}", ApiClient.urlEncode(agentId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get AI model by ID (getAiModelById) + * Fetches an AI model record by its `id`. Available for users with 'TENANT_ADMIN' authority. + * @param modelUuid ID of the AI model record (required) + * @return AiModel + * @throws ApiException if fails to make API call + */ + public AiModel getAiModelById(@Nonnull UUID modelUuid) throws ApiException { + ApiResponse localVarResponse = getAiModelByIdWithHttpInfo(modelUuid, null); + return localVarResponse.getData(); + } + + /** + * Get AI model by ID (getAiModelById) + * Fetches an AI model record by its `id`. Available for users with 'TENANT_ADMIN' authority. + * @param modelUuid ID of the AI model record (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AiModel> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAiModelByIdWithHttpInfo(@Nonnull UUID modelUuid, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAiModelByIdRequestBuilder(modelUuid, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAiModelById", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AiModel responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAiModelByIdRequestBuilder(@Nonnull UUID modelUuid, Map headers) throws ApiException { + // verify the required parameter 'modelUuid' is set + if (modelUuid == null) { + throw new ApiException(400, "Missing the required parameter 'modelUuid' when calling getAiModelById"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/ai/model/{modelUuid}" + .replace("{modelUuid}", ApiClient.urlEncode(modelUuid.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get AI models (getAiModels) + * Returns a page of AI models. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch The case insensitive 'substring' filter based on the AI model name, provider and model ID. (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAiModel + * @throws ApiException if fails to make API call + */ + public PageDataAiModel getAiModels(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getAiModelsWithHttpInfo(pageSize, page, textSearch, sortProperty, sortOrder, null); + return localVarResponse.getData(); + } + + /** + * Get AI models (getAiModels) + * Returns a page of AI models. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch The case insensitive 'substring' filter based on the AI model name, provider and model ID. (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<PageDataAiModel> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAiModelsWithHttpInfo(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAiModelsRequestBuilder(pageSize, page, textSearch, sortProperty, sortOrder, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAiModels", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + PageDataAiModel responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAiModelsRequestBuilder(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getAiModels"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getAiModels"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/ai/model"; + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Alarm (getAlarmById) + * Fetch the Alarm object based on the provided Alarm Id. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). + * @param alarmId A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @return Alarm + * @throws ApiException if fails to make API call + */ + public Alarm getAlarmById(@Nonnull String alarmId) throws ApiException { + ApiResponse localVarResponse = getAlarmByIdWithHttpInfo(alarmId, null); + return localVarResponse.getData(); + } + + /** + * Get Alarm (getAlarmById) + * Fetch the Alarm object based on the provided Alarm Id. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). + * @param alarmId A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<Alarm> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAlarmByIdWithHttpInfo(@Nonnull String alarmId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAlarmByIdRequestBuilder(alarmId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAlarmById", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + Alarm responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAlarmByIdRequestBuilder(@Nonnull String alarmId, Map headers) throws ApiException { + // verify the required parameter 'alarmId' is set + if (alarmId == null) { + throw new ApiException(400, "Missing the required parameter 'alarmId' when calling getAlarmById"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/alarm/{alarmId}" + .replace("{alarmId}", ApiClient.urlEncode(alarmId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Alarm comments (getAlarmComments) + * Returns a page of alarm comments for specified alarm. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. + * @param alarmId A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAlarmCommentInfo + * @throws ApiException if fails to make API call + */ + public PageDataAlarmCommentInfo getAlarmComments(@Nonnull String alarmId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getAlarmCommentsWithHttpInfo(alarmId, pageSize, page, sortProperty, sortOrder, null); + return localVarResponse.getData(); + } + + /** + * Get Alarm comments (getAlarmComments) + * Returns a page of alarm comments for specified alarm. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. + * @param alarmId A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<PageDataAlarmCommentInfo> + * @throws ApiException if fails to make API call + */ + public ApiResponse getAlarmCommentsWithHttpInfo(@Nonnull String alarmId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getAlarmCommentsRequestBuilder(alarmId, pageSize, page, sortProperty, sortOrder, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getAlarmComments", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + PageDataAlarmCommentInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getAlarmCommentsRequestBuilder(@Nonnull String alarmId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'alarmId' is set + if (alarmId == null) { + throw new ApiException(400, "Missing the required parameter 'alarmId' when calling getAlarmComments"); + } + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getAlarmComments"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getAlarmComments"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/alarm/{alarmId}/comment" + .replace("{alarmId}", ApiClient.urlEncode(alarmId.toString())); List localVarQueryParams = new ArrayList<>(); StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); String localVarQueryParameterBaseName; @@ -22401,13 +26057,167 @@ public ApiResponse getCustomMenuWithHttpInfo(@Nullable String } } - private HttpRequest.Builder getCustomMenuRequestBuilder(@Nullable String ifNoneMatch, Map headers) throws ApiException { + private HttpRequest.Builder getCustomMenuRequestBuilder(@Nullable String ifNoneMatch, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/customMenu"; + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + if (ifNoneMatch != null) { + localVarRequestBuilder.header("If-None-Match", ifNoneMatch.toString()); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Custom Menu assignee list (getCustomMenuAssigneeList) + * Fetch the list of Entity Info objects that represents users or customers, or empty list if custom menu is not assigned or has NO_ASSIGN/ALL assignee type. Security check is performed to verify that the user has 'READ' permission for the custom menu with specified id. + * @param customMenuId A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @return List<EntityInfo> + * @throws ApiException if fails to make API call + */ + public List getCustomMenuAssigneeList(@Nonnull UUID customMenuId) throws ApiException { + ApiResponse> localVarResponse = getCustomMenuAssigneeListWithHttpInfo(customMenuId, null); + return localVarResponse.getData(); + } + + /** + * Get Custom Menu assignee list (getCustomMenuAssigneeList) + * Fetch the list of Entity Info objects that represents users or customers, or empty list if custom menu is not assigned or has NO_ASSIGN/ALL assignee type. Security check is performed to verify that the user has 'READ' permission for the custom menu with specified id. + * @param customMenuId A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<List<EntityInfo>> + * @throws ApiException if fails to make API call + */ + public ApiResponse> getCustomMenuAssigneeListWithHttpInfo(@Nonnull UUID customMenuId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getCustomMenuAssigneeListRequestBuilder(customMenuId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getCustomMenuAssigneeList", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + List responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference>() {}); + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getCustomMenuAssigneeListRequestBuilder(@Nonnull UUID customMenuId, Map headers) throws ApiException { + // verify the required parameter 'customMenuId' is set + if (customMenuId == null) { + throw new ApiException(400, "Missing the required parameter 'customMenuId' when calling getCustomMenuAssigneeList"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/customMenu/{customMenuId}/assigneeList" + .replace("{customMenuId}", ApiClient.urlEncode(customMenuId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Custom Menu configuration by id (getCustomMenuConfig) + * Fetch the Custom Menu configuration based on the provided Custom Menu Id. Security check is performed to verify that the user has 'READ' permission for the custom menu with specified id. + * @param customMenuId A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @return CustomMenuConfig + * @throws ApiException if fails to make API call + */ + public CustomMenuConfig getCustomMenuConfig(@Nonnull UUID customMenuId) throws ApiException { + ApiResponse localVarResponse = getCustomMenuConfigWithHttpInfo(customMenuId, null); + return localVarResponse.getData(); + } + + /** + * Get Custom Menu configuration by id (getCustomMenuConfig) + * Fetch the Custom Menu configuration based on the provided Custom Menu Id. Security check is performed to verify that the user has 'READ' permission for the custom menu with specified id. + * @param customMenuId A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<CustomMenuConfig> + * @throws ApiException if fails to make API call + */ + public ApiResponse getCustomMenuConfigWithHttpInfo(@Nonnull UUID customMenuId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getCustomMenuConfigRequestBuilder(customMenuId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getCustomMenuConfig", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + CustomMenuConfig responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getCustomMenuConfigRequestBuilder(@Nonnull UUID customMenuId, Map headers) throws ApiException { + // verify the required parameter 'customMenuId' is set + if (customMenuId == null) { + throw new ApiException(400, "Missing the required parameter 'customMenuId' when calling getCustomMenuConfig"); + } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/customMenu"; + String localVarPath = "/api/customMenu/{customMenuId}/config" + .replace("{customMenuId}", ApiClient.urlEncode(customMenuId.toString())); localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); - if (ifNoneMatch != null) { - localVarRequestBuilder.header("If-None-Match", ifNoneMatch.toString()); - } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); if (memberVarReadTimeout != null) { @@ -22422,27 +26232,27 @@ private HttpRequest.Builder getCustomMenuRequestBuilder(@Nullable String ifNoneM } /** - * Get Custom Menu assignee list (getCustomMenuAssigneeList) - * Fetch the list of Entity Info objects that represents users or customers, or empty list if custom menu is not assigned or has NO_ASSIGN/ALL assignee type. Security check is performed to verify that the user has 'READ' permission for the custom menu with specified id. + * Get Custom Menu Info (getCustomMenuInfoById) + * Fetch the Custom Menu Info object based on the provided Custom Menu Id. Security check is performed to verify that the user has 'READ' permission for the custom menu with specified id. * @param customMenuId A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) - * @return List<EntityInfo> + * @return CustomMenuInfo * @throws ApiException if fails to make API call */ - public List getCustomMenuAssigneeList(@Nonnull UUID customMenuId) throws ApiException { - ApiResponse> localVarResponse = getCustomMenuAssigneeListWithHttpInfo(customMenuId, null); + public CustomMenuInfo getCustomMenuInfoById(@Nonnull UUID customMenuId) throws ApiException { + ApiResponse localVarResponse = getCustomMenuInfoByIdWithHttpInfo(customMenuId, null); return localVarResponse.getData(); } /** - * Get Custom Menu assignee list (getCustomMenuAssigneeList) - * Fetch the list of Entity Info objects that represents users or customers, or empty list if custom menu is not assigned or has NO_ASSIGN/ALL assignee type. Security check is performed to verify that the user has 'READ' permission for the custom menu with specified id. + * Get Custom Menu Info (getCustomMenuInfoById) + * Fetch the Custom Menu Info object based on the provided Custom Menu Id. Security check is performed to verify that the user has 'READ' permission for the custom menu with specified id. * @param customMenuId A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) * @param headers Optional headers to include in the request - * @return ApiResponse<List<EntityInfo>> + * @return ApiResponse<CustomMenuInfo> * @throws ApiException if fails to make API call */ - public ApiResponse> getCustomMenuAssigneeListWithHttpInfo(@Nonnull UUID customMenuId, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getCustomMenuAssigneeListRequestBuilder(customMenuId, headers); + public ApiResponse getCustomMenuInfoByIdWithHttpInfo(@Nonnull UUID customMenuId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getCustomMenuInfoByIdRequestBuilder(customMenuId, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -22453,15 +26263,15 @@ public ApiResponse> getCustomMenuAssigneeListWithHttpInfo(@Nonn InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getCustomMenuAssigneeList", localVarResponse); + throw getApiException("getCustomMenuInfoById", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - List responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference>() {}); - return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + CustomMenuInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -22476,13 +26286,13 @@ public ApiResponse> getCustomMenuAssigneeListWithHttpInfo(@Nonn } } - private HttpRequest.Builder getCustomMenuAssigneeListRequestBuilder(@Nonnull UUID customMenuId, Map headers) throws ApiException { + private HttpRequest.Builder getCustomMenuInfoByIdRequestBuilder(@Nonnull UUID customMenuId, Map headers) throws ApiException { // verify the required parameter 'customMenuId' is set if (customMenuId == null) { - throw new ApiException(400, "Missing the required parameter 'customMenuId' when calling getCustomMenuAssigneeList"); + throw new ApiException(400, "Missing the required parameter 'customMenuId' when calling getCustomMenuInfoById"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/customMenu/{customMenuId}/assigneeList" + String localVarPath = "/api/customMenu/{customMenuId}/info" .replace("{customMenuId}", ApiClient.urlEncode(customMenuId.toString())); localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); @@ -22499,27 +26309,39 @@ private HttpRequest.Builder getCustomMenuAssigneeListRequestBuilder(@Nonnull UUI } /** - * Get Custom Menu configuration by id (getCustomMenuConfig) - * Fetch the Custom Menu configuration based on the provided Custom Menu Id. Security check is performed to verify that the user has 'READ' permission for the custom menu with specified id. - * @param customMenuId A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) - * @return CustomMenuConfig + * Get all custom menus configured at user level (getCustomMenuInfos) + * Returns a page of custom menu info objects owned by the tenant or the customer of a current user, scope and assigneeType request parameters can be used to filter the result. Security check is performed to verify that the user has 'READ' permission for the white labeling resource. + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param scope Custom menu scope. (optional) + * @param assigneeType Custom menu assignee type. (optional) + * @param textSearch The case insensitive 'substring' filter based on the custom menu name. (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataCustomMenuInfo * @throws ApiException if fails to make API call */ - public CustomMenuConfig getCustomMenuConfig(@Nonnull UUID customMenuId) throws ApiException { - ApiResponse localVarResponse = getCustomMenuConfigWithHttpInfo(customMenuId, null); + public PageDataCustomMenuInfo getCustomMenuInfos(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable CMScope scope, @Nullable CMAssigneeType assigneeType, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getCustomMenuInfosWithHttpInfo(pageSize, page, scope, assigneeType, textSearch, sortProperty, sortOrder, null); return localVarResponse.getData(); } /** - * Get Custom Menu configuration by id (getCustomMenuConfig) - * Fetch the Custom Menu configuration based on the provided Custom Menu Id. Security check is performed to verify that the user has 'READ' permission for the custom menu with specified id. - * @param customMenuId A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * Get all custom menus configured at user level (getCustomMenuInfos) + * Returns a page of custom menu info objects owned by the tenant or the customer of a current user, scope and assigneeType request parameters can be used to filter the result. Security check is performed to verify that the user has 'READ' permission for the white labeling resource. + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param scope Custom menu scope. (optional) + * @param assigneeType Custom menu assignee type. (optional) + * @param textSearch The case insensitive 'substring' filter based on the custom menu name. (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) * @param headers Optional headers to include in the request - * @return ApiResponse<CustomMenuConfig> + * @return ApiResponse<PageDataCustomMenuInfo> * @throws ApiException if fails to make API call */ - public ApiResponse getCustomMenuConfigWithHttpInfo(@Nonnull UUID customMenuId, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getCustomMenuConfigRequestBuilder(customMenuId, headers); + public ApiResponse getCustomMenuInfosWithHttpInfo(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable CMScope scope, @Nullable CMAssigneeType assigneeType, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getCustomMenuInfosRequestBuilder(pageSize, page, scope, assigneeType, textSearch, sortProperty, sortOrder, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -22530,15 +26352,15 @@ public ApiResponse getCustomMenuConfigWithHttpInfo(@Nonnull UU InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getCustomMenuConfig", localVarResponse); + throw getApiException("getCustomMenuInfos", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - CustomMenuConfig responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + PageDataCustomMenuInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -22553,15 +26375,44 @@ public ApiResponse getCustomMenuConfigWithHttpInfo(@Nonnull UU } } - private HttpRequest.Builder getCustomMenuConfigRequestBuilder(@Nonnull UUID customMenuId, Map headers) throws ApiException { - // verify the required parameter 'customMenuId' is set - if (customMenuId == null) { - throw new ApiException(400, "Missing the required parameter 'customMenuId' when calling getCustomMenuConfig"); + private HttpRequest.Builder getCustomMenuInfosRequestBuilder(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable CMScope scope, @Nullable CMAssigneeType assigneeType, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getCustomMenuInfos"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getCustomMenuInfos"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/customMenu/{customMenuId}/config" - .replace("{customMenuId}", ApiClient.urlEncode(customMenuId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + String localVarPath = "/api/customMenu/infos"; + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "scope"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("scope", scope)); + localVarQueryParameterBaseName = "assigneeType"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("assigneeType", assigneeType)); + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); if (memberVarReadTimeout != null) { @@ -22576,27 +26427,27 @@ private HttpRequest.Builder getCustomMenuConfigRequestBuilder(@Nonnull UUID cust } /** - * Get Custom Menu Info (getCustomMenuInfoById) - * Fetch the Custom Menu Info object based on the provided Custom Menu Id. Security check is performed to verify that the user has 'READ' permission for the custom menu with specified id. - * @param customMenuId A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) - * @return CustomMenuInfo + * Get Custom Translation configuration (getCustomTranslation) + * Fetch the Custom Translation for specified locale that corresponds to the authority of the user. The API call is designed to load the custom translation items for edition. So, the result is NOT merged with the parent level configuration. Let's assume there is a custom translation configured on a system level. And there is no custom translation items configured on a tenant level. In such a case, the API call will return empty object for the tenant administrator. Response example: ```json {\"home\":\"MyHome\"} ``` Security check is performed to verify that the user has 'READ' permission for the white labeling resource. + * @param localeCode Locale code (e.g. 'en_US'). (required) + * @return com.fasterxml.jackson.databind.JsonNode * @throws ApiException if fails to make API call */ - public CustomMenuInfo getCustomMenuInfoById(@Nonnull UUID customMenuId) throws ApiException { - ApiResponse localVarResponse = getCustomMenuInfoByIdWithHttpInfo(customMenuId, null); + public com.fasterxml.jackson.databind.JsonNode getCustomTranslation(@Nonnull String localeCode) throws ApiException { + ApiResponse localVarResponse = getCustomTranslationWithHttpInfo(localeCode, null); return localVarResponse.getData(); } /** - * Get Custom Menu Info (getCustomMenuInfoById) - * Fetch the Custom Menu Info object based on the provided Custom Menu Id. Security check is performed to verify that the user has 'READ' permission for the custom menu with specified id. - * @param customMenuId A string value representing the custom menu id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * Get Custom Translation configuration (getCustomTranslation) + * Fetch the Custom Translation for specified locale that corresponds to the authority of the user. The API call is designed to load the custom translation items for edition. So, the result is NOT merged with the parent level configuration. Let's assume there is a custom translation configured on a system level. And there is no custom translation items configured on a tenant level. In such a case, the API call will return empty object for the tenant administrator. Response example: ```json {\"home\":\"MyHome\"} ``` Security check is performed to verify that the user has 'READ' permission for the white labeling resource. + * @param localeCode Locale code (e.g. 'en_US'). (required) * @param headers Optional headers to include in the request - * @return ApiResponse<CustomMenuInfo> + * @return ApiResponse<com.fasterxml.jackson.databind.JsonNode> * @throws ApiException if fails to make API call */ - public ApiResponse getCustomMenuInfoByIdWithHttpInfo(@Nonnull UUID customMenuId, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getCustomMenuInfoByIdRequestBuilder(customMenuId, headers); + public ApiResponse getCustomTranslationWithHttpInfo(@Nonnull String localeCode, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getCustomTranslationRequestBuilder(localeCode, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -22607,15 +26458,15 @@ public ApiResponse getCustomMenuInfoByIdWithHttpInfo(@Nonnull UU InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getCustomMenuInfoById", localVarResponse); + throw getApiException("getCustomTranslation", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - CustomMenuInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + com.fasterxml.jackson.databind.JsonNode responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -22630,14 +26481,14 @@ public ApiResponse getCustomMenuInfoByIdWithHttpInfo(@Nonnull UU } } - private HttpRequest.Builder getCustomMenuInfoByIdRequestBuilder(@Nonnull UUID customMenuId, Map headers) throws ApiException { - // verify the required parameter 'customMenuId' is set - if (customMenuId == null) { - throw new ApiException(400, "Missing the required parameter 'customMenuId' when calling getCustomMenuInfoById"); + private HttpRequest.Builder getCustomTranslationRequestBuilder(@Nonnull String localeCode, Map headers) throws ApiException { + // verify the required parameter 'localeCode' is set + if (localeCode == null) { + throw new ApiException(400, "Missing the required parameter 'localeCode' when calling getCustomTranslation"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/customMenu/{customMenuId}/info" - .replace("{customMenuId}", ApiClient.urlEncode(customMenuId.toString())); + String localVarPath = "/api/translation/custom/{localeCode}" + .replace("{localeCode}", ApiClient.urlEncode(localeCode.toString())); localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); @@ -22653,39 +26504,37 @@ private HttpRequest.Builder getCustomMenuInfoByIdRequestBuilder(@Nonnull UUID cu } /** - * Get all custom menus configured at user level (getCustomMenuInfos) - * Returns a page of custom menu info objects owned by the tenant or the customer of a current user, scope and assigneeType request parameters can be used to filter the result. Security check is performed to verify that the user has 'READ' permission for the white labeling resource. + * Get Customer Agent Infos (getCustomerAgentInfos) + * Returns a page of agent info objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param customerId A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) * @param pageSize Maximum amount of entities in a one page (required) * @param page Sequence number of page starting from 0 (required) - * @param scope Custom menu scope. (optional) - * @param assigneeType Custom menu assignee type. (optional) - * @param textSearch The case insensitive 'substring' filter based on the custom menu name. (optional) + * @param textSearch Optional String value representing agent name (optional) * @param sortProperty Property of entity to sort by (optional) * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) - * @return PageDataCustomMenuInfo + * @return PageDataAgentInfo * @throws ApiException if fails to make API call */ - public PageDataCustomMenuInfo getCustomMenuInfos(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable CMScope scope, @Nullable CMAssigneeType assigneeType, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { - ApiResponse localVarResponse = getCustomMenuInfosWithHttpInfo(pageSize, page, scope, assigneeType, textSearch, sortProperty, sortOrder, null); + public PageDataAgentInfo getCustomerAgentInfos(@Nonnull String customerId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getCustomerAgentInfosWithHttpInfo(customerId, pageSize, page, textSearch, sortProperty, sortOrder, null); return localVarResponse.getData(); } /** - * Get all custom menus configured at user level (getCustomMenuInfos) - * Returns a page of custom menu info objects owned by the tenant or the customer of a current user, scope and assigneeType request parameters can be used to filter the result. Security check is performed to verify that the user has 'READ' permission for the white labeling resource. + * Get Customer Agent Infos (getCustomerAgentInfos) + * Returns a page of agent info objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param customerId A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) * @param pageSize Maximum amount of entities in a one page (required) * @param page Sequence number of page starting from 0 (required) - * @param scope Custom menu scope. (optional) - * @param assigneeType Custom menu assignee type. (optional) - * @param textSearch The case insensitive 'substring' filter based on the custom menu name. (optional) + * @param textSearch Optional String value representing agent name (optional) * @param sortProperty Property of entity to sort by (optional) * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) * @param headers Optional headers to include in the request - * @return ApiResponse<PageDataCustomMenuInfo> + * @return ApiResponse<PageDataAgentInfo> * @throws ApiException if fails to make API call */ - public ApiResponse getCustomMenuInfosWithHttpInfo(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable CMScope scope, @Nullable CMAssigneeType assigneeType, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getCustomMenuInfosRequestBuilder(pageSize, page, scope, assigneeType, textSearch, sortProperty, sortOrder, headers); + public ApiResponse getCustomerAgentInfosWithHttpInfo(@Nonnull String customerId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getCustomerAgentInfosRequestBuilder(customerId, pageSize, page, textSearch, sortProperty, sortOrder, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -22696,15 +26545,15 @@ public ApiResponse getCustomMenuInfosWithHttpInfo(@Nonnu InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getCustomMenuInfos", localVarResponse); + throw getApiException("getCustomerAgentInfos", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - PageDataCustomMenuInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + PageDataAgentInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -22719,24 +26568,25 @@ public ApiResponse getCustomMenuInfosWithHttpInfo(@Nonnu } } - private HttpRequest.Builder getCustomMenuInfosRequestBuilder(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable CMScope scope, @Nullable CMAssigneeType assigneeType, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + private HttpRequest.Builder getCustomerAgentInfosRequestBuilder(@Nonnull String customerId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'customerId' is set + if (customerId == null) { + throw new ApiException(400, "Missing the required parameter 'customerId' when calling getCustomerAgentInfos"); + } // verify the required parameter 'pageSize' is set if (pageSize == null) { - throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getCustomMenuInfos"); + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getCustomerAgentInfos"); } // verify the required parameter 'page' is set if (page == null) { - throw new ApiException(400, "Missing the required parameter 'page' when calling getCustomMenuInfos"); + throw new ApiException(400, "Missing the required parameter 'page' when calling getCustomerAgentInfos"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/customMenu/infos"; + String localVarPath = "/api/customer/{customerId}/agentInfos" + .replace("{customerId}", ApiClient.urlEncode(customerId.toString())); List localVarQueryParams = new ArrayList<>(); StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); String localVarQueryParameterBaseName; - localVarQueryParameterBaseName = "scope"; - localVarQueryParams.addAll(ApiClient.parameterToPairs("scope", scope)); - localVarQueryParameterBaseName = "assigneeType"; - localVarQueryParams.addAll(ApiClient.parameterToPairs("assigneeType", assigneeType)); localVarQueryParameterBaseName = "pageSize"; localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); localVarQueryParameterBaseName = "page"; @@ -22771,27 +26621,37 @@ private HttpRequest.Builder getCustomMenuInfosRequestBuilder(@Nonnull Integer pa } /** - * Get Custom Translation configuration (getCustomTranslation) - * Fetch the Custom Translation for specified locale that corresponds to the authority of the user. The API call is designed to load the custom translation items for edition. So, the result is NOT merged with the parent level configuration. Let's assume there is a custom translation configured on a system level. And there is no custom translation items configured on a tenant level. In such a case, the API call will return empty object for the tenant administrator. Response example: ```json {\"home\":\"MyHome\"} ``` Security check is performed to verify that the user has 'READ' permission for the white labeling resource. - * @param localeCode Locale code (e.g. 'en_US'). (required) - * @return com.fasterxml.jackson.databind.JsonNode + * Get Customer Agents (getCustomerAgents) + * Returns a page of agent objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param customerId A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional String value representing agent name (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAgent * @throws ApiException if fails to make API call */ - public com.fasterxml.jackson.databind.JsonNode getCustomTranslation(@Nonnull String localeCode) throws ApiException { - ApiResponse localVarResponse = getCustomTranslationWithHttpInfo(localeCode, null); + public PageDataAgent getCustomerAgents(@Nonnull String customerId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getCustomerAgentsWithHttpInfo(customerId, pageSize, page, textSearch, sortProperty, sortOrder, null); return localVarResponse.getData(); } /** - * Get Custom Translation configuration (getCustomTranslation) - * Fetch the Custom Translation for specified locale that corresponds to the authority of the user. The API call is designed to load the custom translation items for edition. So, the result is NOT merged with the parent level configuration. Let's assume there is a custom translation configured on a system level. And there is no custom translation items configured on a tenant level. In such a case, the API call will return empty object for the tenant administrator. Response example: ```json {\"home\":\"MyHome\"} ``` Security check is performed to verify that the user has 'READ' permission for the white labeling resource. - * @param localeCode Locale code (e.g. 'en_US'). (required) + * Get Customer Agents (getCustomerAgents) + * Returns a page of agent objects assigned to customer. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param customerId A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional String value representing agent name (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) * @param headers Optional headers to include in the request - * @return ApiResponse<com.fasterxml.jackson.databind.JsonNode> + * @return ApiResponse<PageDataAgent> * @throws ApiException if fails to make API call */ - public ApiResponse getCustomTranslationWithHttpInfo(@Nonnull String localeCode, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getCustomTranslationRequestBuilder(localeCode, headers); + public ApiResponse getCustomerAgentsWithHttpInfo(@Nonnull String customerId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getCustomerAgentsRequestBuilder(customerId, pageSize, page, textSearch, sortProperty, sortOrder, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -22802,15 +26662,15 @@ public ApiResponse getCustomTranslation InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getCustomTranslation", localVarResponse); + throw getApiException("getCustomerAgents", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - com.fasterxml.jackson.databind.JsonNode responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + PageDataAgent responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -22825,15 +26685,45 @@ public ApiResponse getCustomTranslation } } - private HttpRequest.Builder getCustomTranslationRequestBuilder(@Nonnull String localeCode, Map headers) throws ApiException { - // verify the required parameter 'localeCode' is set - if (localeCode == null) { - throw new ApiException(400, "Missing the required parameter 'localeCode' when calling getCustomTranslation"); + private HttpRequest.Builder getCustomerAgentsRequestBuilder(@Nonnull String customerId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'customerId' is set + if (customerId == null) { + throw new ApiException(400, "Missing the required parameter 'customerId' when calling getCustomerAgents"); + } + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getCustomerAgents"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getCustomerAgents"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/translation/custom/{localeCode}" - .replace("{localeCode}", ApiClient.urlEncode(localeCode.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + String localVarPath = "/api/customer/{customerId}/agents" + .replace("{customerId}", ApiClient.urlEncode(customerId.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); if (memberVarReadTimeout != null) { @@ -25315,6 +29205,76 @@ private HttpRequest.Builder getDashboardsByIdsRequestBuilder(@Nonnull List localVarResponse = getDefaultAgentProfileInfoWithHttpInfo(null); + return localVarResponse.getData(); + } + + /** + * Get Default Agent Profile (getDefaultAgentProfileInfo) + * Fetch the Agent Profile Info object that is marked as default within the current tenant scope. Available for users with 'TENANT_ADMIN' authority. + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentProfileInfo> + * @throws ApiException if fails to make API call + */ + public ApiResponse getDefaultAgentProfileInfoWithHttpInfo(Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getDefaultAgentProfileInfoRequestBuilder(headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getDefaultAgentProfileInfo", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentProfileInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getDefaultAgentProfileInfoRequestBuilder(Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/info/default"; + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Get Default Asset Profile (getDefaultAssetProfileInfo) * Fetch the Default Asset Profile Info object. Asset Profile Info is a lightweight object that includes main information about Asset Profile. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. @@ -33339,6 +37299,160 @@ private HttpRequest.Builder getLastVisitedDashboardsRequestBuilder(Map localVarResponse = getLatestAgentAppTemplateByAppTypeAndConfigTypeWithHttpInfo(appType, configType, null); + return localVarResponse.getData(); + } + + /** + * Get Agent App Template (getLatestAgentAppTemplateByType) + * Fetch the latest Agent App Template object for the given app type and config type. Available for users with 'TENANT_ADMIN' authority. + * @param appType A string value representing the agent application type, e.g. 'EDGE', 'GATEWAY' (required) + * @param configType A string value representing the agent configuration type, e.g. 'DOCKER_COMPOSE' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentAppTemplate> + * @throws ApiException if fails to make API call + */ + public ApiResponse getLatestAgentAppTemplateByAppTypeAndConfigTypeWithHttpInfo(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getLatestAgentAppTemplateByAppTypeAndConfigTypeRequestBuilder(appType, configType, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getLatestAgentAppTemplateByAppTypeAndConfigType", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentAppTemplate responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getLatestAgentAppTemplateByAppTypeAndConfigTypeRequestBuilder(@Nonnull AgentApplicationType appType, @Nonnull AgentAppConfigType configType, Map headers) throws ApiException { + // verify the required parameter 'appType' is set + if (appType == null) { + throw new ApiException(400, "Missing the required parameter 'appType' when calling getLatestAgentAppTemplateByAppTypeAndConfigType"); + } + // verify the required parameter 'configType' is set + if (configType == null) { + throw new ApiException(400, "Missing the required parameter 'configType' when calling getLatestAgentAppTemplateByAppTypeAndConfigType"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/template/{appType}/{configType}/latest" + .replace("{appType}", ApiClient.urlEncode(appType.toString())) + .replace("{configType}", ApiClient.urlEncode(configType.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get the newest published agent image (getLatestAgentImageRef) + * Returns the newest agent image reference known from the version graph, or the floating tag while no version has been published. Lets a list of agents decide locally which rows are upgradable without asking per row. Available for users with 'TENANT_ADMIN' authority. + * @return String + * @throws ApiException if fails to make API call + */ + public String getLatestAgentImageRef() throws ApiException { + ApiResponse localVarResponse = getLatestAgentImageRefWithHttpInfo(null); + return localVarResponse.getData(); + } + + /** + * Get the newest published agent image (getLatestAgentImageRef) + * Returns the newest agent image reference known from the version graph, or the floating tag while no version has been published. Lets a list of agents decide locally which rows are upgradable without asking per row. Available for users with 'TENANT_ADMIN' authority. + * @param headers Optional headers to include in the request + * @return ApiResponse<String> + * @throws ApiException if fails to make API call + */ + public ApiResponse getLatestAgentImageRefWithHttpInfo(Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getLatestAgentImageRefRequestBuilder(headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getLatestAgentImageRef", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + String responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getLatestAgentImageRefRequestBuilder(Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/upgrade/latest"; + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Get latest alarm rule debug event (getLatestAlarmRuleDebugEvent) * Gets latest alarm rule debug event for specified alarm rule id. Referencing non-existing alarm rule id will cause an error. Available for users with 'TENANT_ADMIN' authority. @@ -34767,6 +38881,83 @@ private HttpRequest.Builder getMailTemplatesRequestBuilder(@Nullable Boolean sys return localVarRequestBuilder; } + /** + * Get Managed Related Entity Ids (getManagedRelatedEntityIds) + * Returns the ids of entities of the given type that are already linked to an agent application. Available for users with 'TENANT_ADMIN' authority. + * @param entityType Related entity type (EDGE or DEVICE) (required) + * @return List<GetManagedRelatedEntityIds200ResponseInner> + * @throws ApiException if fails to make API call + */ + public List getManagedRelatedEntityIds(@Nonnull String entityType) throws ApiException { + ApiResponse> localVarResponse = getManagedRelatedEntityIdsWithHttpInfo(entityType, null); + return localVarResponse.getData(); + } + + /** + * Get Managed Related Entity Ids (getManagedRelatedEntityIds) + * Returns the ids of entities of the given type that are already linked to an agent application. Available for users with 'TENANT_ADMIN' authority. + * @param entityType Related entity type (EDGE or DEVICE) (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<List<GetManagedRelatedEntityIds200ResponseInner>> + * @throws ApiException if fails to make API call + */ + public ApiResponse> getManagedRelatedEntityIdsWithHttpInfo(@Nonnull String entityType, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getManagedRelatedEntityIdsRequestBuilder(entityType, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getManagedRelatedEntityIds", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + List responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference>() {}); + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getManagedRelatedEntityIdsRequestBuilder(@Nonnull String entityType, Map headers) throws ApiException { + // verify the required parameter 'entityType' is set + if (entityType == null) { + throw new ApiException(400, "Missing the required parameter 'entityType' when calling getManagedRelatedEntityIds"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/managedRelatedEntities/{entityType}" + .replace("{entityType}", ApiClient.urlEncode(entityType.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Get max data points limit (getMaxDatapointsLimit) * Get the maximum number of data points that dashboard may request from the server per in a single subscription command. This value impacts the time window behavior. It impacts 'Max values' parameter in case user selects 'None' as 'Data aggregation function'. It also impacts the 'Grouping interval' in case of any other 'Data aggregation function' is selected. The actual value of the limit is configurable in the system configuration file. @@ -38467,6 +42658,120 @@ private HttpRequest.Builder getRecipientsForNotificationTargetConfigRequestBuild return localVarRequestBuilder; } + /** + * Get Related Entity Candidates (getRelatedEntityCandidates) + * Returns a page of Edges or Gateway Devices (devices with 'gateway' set in additional info) that can be linked to an agent application. Entities already linked to another application are excluded unless passed as 'currentEntityId'. Results are sorted by name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param entityType Related entity type (EDGE or DEVICE) (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional String value representing entity name (optional) + * @param currentEntityId Optional id of the entity currently linked to the edited application; it is kept in the result even though it is managed (optional) + * @return PageDataEntityInfo + * @throws ApiException if fails to make API call + */ + public PageDataEntityInfo getRelatedEntityCandidates(@Nonnull String entityType, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String currentEntityId) throws ApiException { + ApiResponse localVarResponse = getRelatedEntityCandidatesWithHttpInfo(entityType, pageSize, page, textSearch, currentEntityId, null); + return localVarResponse.getData(); + } + + /** + * Get Related Entity Candidates (getRelatedEntityCandidates) + * Returns a page of Edges or Gateway Devices (devices with 'gateway' set in additional info) that can be linked to an agent application. Entities already linked to another application are excluded unless passed as 'currentEntityId'. Results are sorted by name. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param entityType Related entity type (EDGE or DEVICE) (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional String value representing entity name (optional) + * @param currentEntityId Optional id of the entity currently linked to the edited application; it is kept in the result even though it is managed (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<PageDataEntityInfo> + * @throws ApiException if fails to make API call + */ + public ApiResponse getRelatedEntityCandidatesWithHttpInfo(@Nonnull String entityType, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String currentEntityId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getRelatedEntityCandidatesRequestBuilder(entityType, pageSize, page, textSearch, currentEntityId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getRelatedEntityCandidates", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + PageDataEntityInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getRelatedEntityCandidatesRequestBuilder(@Nonnull String entityType, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String currentEntityId, Map headers) throws ApiException { + // verify the required parameter 'entityType' is set + if (entityType == null) { + throw new ApiException(400, "Missing the required parameter 'entityType' when calling getRelatedEntityCandidates"); + } + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getRelatedEntityCandidates"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getRelatedEntityCandidates"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/relatedEntityCandidates"; + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "entityType"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("entityType", entityType)); + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "currentEntityId"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("currentEntityId", currentEntityId)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Get Relation (getRelation) * Returns relation object between two specified entities if present. Otherwise throws exception. If the user has the authority of 'System Administrator', the server checks that 'from' and 'to' entities are owned by the sysadmin. If the user has the authority of 'Tenant Administrator', the server checks that 'from' and 'to' entities are owned by the same tenant. If the user has the authority of 'Customer User', the server checks that the 'from' and 'to' entities are assigned to the same customer. @@ -42021,27 +46326,459 @@ private HttpRequest.Builder getSignUpSelfRegistrationParamsRequestBuilder(@Nulla } /** - * getSolution - * - * @param solutionId (required) - * @return com.fasterxml.jackson.databind.JsonNode + * getSolution + * + * @param solutionId (required) + * @return com.fasterxml.jackson.databind.JsonNode + * @throws ApiException if fails to make API call + */ + public com.fasterxml.jackson.databind.JsonNode getSolution(@Nonnull UUID solutionId) throws ApiException { + ApiResponse localVarResponse = getSolutionWithHttpInfo(solutionId, null); + return localVarResponse.getData(); + } + + /** + * getSolution + * + * @param solutionId (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<com.fasterxml.jackson.databind.JsonNode> + * @throws ApiException if fails to make API call + */ + public ApiResponse getSolutionWithHttpInfo(@Nonnull UUID solutionId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getSolutionRequestBuilder(solutionId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getSolution", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + com.fasterxml.jackson.databind.JsonNode responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getSolutionRequestBuilder(@Nonnull UUID solutionId, Map headers) throws ApiException { + // verify the required parameter 'solutionId' is set + if (solutionId == null) { + throw new ApiException(400, "Missing the required parameter 'solutionId' when calling getSolution"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/ai/solution/{solutionId}" + .replace("{solutionId}", ApiClient.urlEncode(solutionId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * getSolutions + * + * @return com.fasterxml.jackson.databind.JsonNode + * @throws ApiException if fails to make API call + */ + public com.fasterxml.jackson.databind.JsonNode getSolutions() throws ApiException { + ApiResponse localVarResponse = getSolutionsWithHttpInfo(null); + return localVarResponse.getData(); + } + + /** + * getSolutions + * + * @param headers Optional headers to include in the request + * @return ApiResponse<com.fasterxml.jackson.databind.JsonNode> + * @throws ApiException if fails to make API call + */ + public ApiResponse getSolutionsWithHttpInfo(Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getSolutionsRequestBuilder(headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getSolutions", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + com.fasterxml.jackson.databind.JsonNode responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getSolutionsRequestBuilder(Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/ai/solution/infos"; + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get system info (getSystemInfo) + * Get main information about system. Available for users with 'SYS_ADMIN' authority. + * @return SystemInfo + * @throws ApiException if fails to make API call + */ + public SystemInfo getSystemInfo() throws ApiException { + ApiResponse localVarResponse = getSystemInfoWithHttpInfo(null); + return localVarResponse.getData(); + } + + /** + * Get system info (getSystemInfo) + * Get main information about system. Available for users with 'SYS_ADMIN' authority. + * @param headers Optional headers to include in the request + * @return ApiResponse<SystemInfo> + * @throws ApiException if fails to make API call + */ + public ApiResponse getSystemInfoWithHttpInfo(Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getSystemInfoRequestBuilder(headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getSystemInfo", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + SystemInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getSystemInfoRequestBuilder(Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/admin/systemInfo"; + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Resource Infos by ids (getSystemOrTenantResourcesByIds) + * + * @param resourceIds A list of resource ids, separated by comma ',' (required) + * @return List<TbResourceInfo> + * @throws ApiException if fails to make API call + */ + public List getSystemOrTenantResourcesByIds(@Nonnull List resourceIds) throws ApiException { + ApiResponse> localVarResponse = getSystemOrTenantResourcesByIdsWithHttpInfo(resourceIds, null); + return localVarResponse.getData(); + } + + /** + * Get Resource Infos by ids (getSystemOrTenantResourcesByIds) + * + * @param resourceIds A list of resource ids, separated by comma ',' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<List<TbResourceInfo>> + * @throws ApiException if fails to make API call + */ + public ApiResponse> getSystemOrTenantResourcesByIdsWithHttpInfo(@Nonnull List resourceIds, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getSystemOrTenantResourcesByIdsRequestBuilder(resourceIds, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getSystemOrTenantResourcesByIds", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + List responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference>() {}); + return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getSystemOrTenantResourcesByIdsRequestBuilder(@Nonnull List resourceIds, Map headers) throws ApiException { + // verify the required parameter 'resourceIds' is set + if (resourceIds == null) { + throw new ApiException(400, "Missing the required parameter 'resourceIds' when calling getSystemOrTenantResourcesByIds"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/resource/list"; + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "resourceIds"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("multi", "resourceIds", resourceIds)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Tenant Users (getTenantAdmins) + * Returns a page of users owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'SYS_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). + * @param tenantId A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch The case insensitive 'substring' filter based on the user email. (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataUser + * @throws ApiException if fails to make API call + */ + public PageDataUser getTenantAdmins(@Nonnull String tenantId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getTenantAdminsWithHttpInfo(tenantId, pageSize, page, textSearch, sortProperty, sortOrder, null); + return localVarResponse.getData(); + } + + /** + * Get Tenant Users (getTenantAdmins) + * Returns a page of users owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'SYS_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). + * @param tenantId A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch The case insensitive 'substring' filter based on the user email. (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<PageDataUser> + * @throws ApiException if fails to make API call + */ + public ApiResponse getTenantAdminsWithHttpInfo(@Nonnull String tenantId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getTenantAdminsRequestBuilder(tenantId, pageSize, page, textSearch, sortProperty, sortOrder, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("getTenantAdmins", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + PageDataUser responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder getTenantAdminsRequestBuilder(@Nonnull String tenantId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'tenantId' is set + if (tenantId == null) { + throw new ApiException(400, "Missing the required parameter 'tenantId' when calling getTenantAdmins"); + } + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getTenantAdmins"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getTenantAdmins"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/tenant/{tenantId}/users" + .replace("{tenantId}", ApiClient.urlEncode(tenantId.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Get Tenant Agent Application Profiles (getTenantAgentAppProfiles) + * Returns a page of agent application profiles owned by tenant.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional search text (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAgentAppProfile * @throws ApiException if fails to make API call */ - public com.fasterxml.jackson.databind.JsonNode getSolution(@Nonnull UUID solutionId) throws ApiException { - ApiResponse localVarResponse = getSolutionWithHttpInfo(solutionId, null); + public PageDataAgentAppProfile getTenantAgentAppProfiles(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getTenantAgentAppProfilesWithHttpInfo(pageSize, page, textSearch, sortProperty, sortOrder, null); return localVarResponse.getData(); } /** - * getSolution - * - * @param solutionId (required) + * Get Tenant Agent Application Profiles (getTenantAgentAppProfiles) + * Returns a page of agent application profiles owned by tenant.You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional search text (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) * @param headers Optional headers to include in the request - * @return ApiResponse<com.fasterxml.jackson.databind.JsonNode> + * @return ApiResponse<PageDataAgentAppProfile> * @throws ApiException if fails to make API call */ - public ApiResponse getSolutionWithHttpInfo(@Nonnull UUID solutionId, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getSolutionRequestBuilder(solutionId, headers); + public ApiResponse getTenantAgentAppProfilesWithHttpInfo(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getTenantAgentAppProfilesRequestBuilder(pageSize, page, textSearch, sortProperty, sortOrder, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -42052,15 +46789,15 @@ public ApiResponse getSolutionWithHttpI InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getSolution", localVarResponse); + throw getApiException("getTenantAgentAppProfiles", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - com.fasterxml.jackson.databind.JsonNode responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + PageDataAgentAppProfile responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -42075,15 +46812,40 @@ public ApiResponse getSolutionWithHttpI } } - private HttpRequest.Builder getSolutionRequestBuilder(@Nonnull UUID solutionId, Map headers) throws ApiException { - // verify the required parameter 'solutionId' is set - if (solutionId == null) { - throw new ApiException(400, "Missing the required parameter 'solutionId' when calling getSolution"); + private HttpRequest.Builder getTenantAgentAppProfilesRequestBuilder(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getTenantAgentAppProfiles"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getTenantAgentAppProfiles"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/ai/solution/{solutionId}" - .replace("{solutionId}", ApiClient.urlEncode(solutionId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + String localVarPath = "/api/tenant/agent/app/profiles"; + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); if (memberVarReadTimeout != null) { @@ -42098,25 +46860,35 @@ private HttpRequest.Builder getSolutionRequestBuilder(@Nonnull UUID solutionId, } /** - * getSolutions - * - * @return com.fasterxml.jackson.databind.JsonNode + * Get Tenant Agent Infos (getTenantAgentInfos) + * Returns a page of agent info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional String value representing agent name (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAgentInfo * @throws ApiException if fails to make API call */ - public com.fasterxml.jackson.databind.JsonNode getSolutions() throws ApiException { - ApiResponse localVarResponse = getSolutionsWithHttpInfo(null); + public PageDataAgentInfo getTenantAgentInfos(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getTenantAgentInfosWithHttpInfo(pageSize, page, textSearch, sortProperty, sortOrder, null); return localVarResponse.getData(); } /** - * getSolutions - * + * Get Tenant Agent Infos (getTenantAgentInfos) + * Returns a page of agent info objects owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch Optional String value representing agent name (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) * @param headers Optional headers to include in the request - * @return ApiResponse<com.fasterxml.jackson.databind.JsonNode> + * @return ApiResponse<PageDataAgentInfo> * @throws ApiException if fails to make API call */ - public ApiResponse getSolutionsWithHttpInfo(Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getSolutionsRequestBuilder(headers); + public ApiResponse getTenantAgentInfosWithHttpInfo(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getTenantAgentInfosRequestBuilder(pageSize, page, textSearch, sortProperty, sortOrder, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -42127,15 +46899,15 @@ public ApiResponse getSolutionsWithHttp InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getSolutions", localVarResponse); + throw getApiException("getTenantAgentInfos", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - com.fasterxml.jackson.databind.JsonNode responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + PageDataAgentInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -42150,10 +46922,40 @@ public ApiResponse getSolutionsWithHttp } } - private HttpRequest.Builder getSolutionsRequestBuilder(Map headers) throws ApiException { + private HttpRequest.Builder getTenantAgentInfosRequestBuilder(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getTenantAgentInfos"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getTenantAgentInfos"); + } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/ai/solution/infos"; - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + String localVarPath = "/api/tenant/agentInfos"; + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); if (memberVarReadTimeout != null) { @@ -42168,25 +46970,35 @@ private HttpRequest.Builder getSolutionsRequestBuilder(Map heade } /** - * Get system info (getSystemInfo) - * Get main information about system. Available for users with 'SYS_ADMIN' authority. - * @return SystemInfo + * Get Tenant Agent Profile Infos (getTenantAgentProfileInfos) + * Returns a page of Agent Profile Info objects owned by the current tenant. Agent Profile Info is a lightweight object that contains only id and name of the profile. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAgentProfileInfo * @throws ApiException if fails to make API call */ - public SystemInfo getSystemInfo() throws ApiException { - ApiResponse localVarResponse = getSystemInfoWithHttpInfo(null); + public PageDataAgentProfileInfo getTenantAgentProfileInfos(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getTenantAgentProfileInfosWithHttpInfo(pageSize, page, textSearch, sortProperty, sortOrder, null); return localVarResponse.getData(); } /** - * Get system info (getSystemInfo) - * Get main information about system. Available for users with 'SYS_ADMIN' authority. + * Get Tenant Agent Profile Infos (getTenantAgentProfileInfos) + * Returns a page of Agent Profile Info objects owned by the current tenant. Agent Profile Info is a lightweight object that contains only id and name of the profile. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) * @param headers Optional headers to include in the request - * @return ApiResponse<SystemInfo> + * @return ApiResponse<PageDataAgentProfileInfo> * @throws ApiException if fails to make API call */ - public ApiResponse getSystemInfoWithHttpInfo(Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getSystemInfoRequestBuilder(headers); + public ApiResponse getTenantAgentProfileInfosWithHttpInfo(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getTenantAgentProfileInfosRequestBuilder(pageSize, page, textSearch, sortProperty, sortOrder, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -42197,15 +47009,15 @@ public ApiResponse getSystemInfoWithHttpInfo(Map hea InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getSystemInfo", localVarResponse); + throw getApiException("getTenantAgentProfileInfos", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - SystemInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + PageDataAgentProfileInfo responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -42220,10 +47032,40 @@ public ApiResponse getSystemInfoWithHttpInfo(Map hea } } - private HttpRequest.Builder getSystemInfoRequestBuilder(Map headers) throws ApiException { + private HttpRequest.Builder getTenantAgentProfileInfosRequestBuilder(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getTenantAgentProfileInfos"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getTenantAgentProfileInfos"); + } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/admin/systemInfo"; - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + String localVarPath = "/api/tenant/agent/profileInfos"; + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); if (memberVarReadTimeout != null) { @@ -42238,27 +47080,35 @@ private HttpRequest.Builder getSystemInfoRequestBuilder(Map head } /** - * Get Resource Infos by ids (getSystemOrTenantResourcesByIds) - * - * @param resourceIds A list of resource ids, separated by comma ',' (required) - * @return List<TbResourceInfo> + * Get Tenant Agent Profiles (getTenantAgentProfiles) + * Returns a page of Agent Profile objects owned by the current tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) + * @return PageDataAgentProfile * @throws ApiException if fails to make API call */ - public List getSystemOrTenantResourcesByIds(@Nonnull List resourceIds) throws ApiException { - ApiResponse> localVarResponse = getSystemOrTenantResourcesByIdsWithHttpInfo(resourceIds, null); + public PageDataAgentProfile getTenantAgentProfiles(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getTenantAgentProfilesWithHttpInfo(pageSize, page, textSearch, sortProperty, sortOrder, null); return localVarResponse.getData(); } /** - * Get Resource Infos by ids (getSystemOrTenantResourcesByIds) - * - * @param resourceIds A list of resource ids, separated by comma ',' (required) + * Get Tenant Agent Profiles (getTenantAgentProfiles) + * Returns a page of Agent Profile objects owned by the current tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. + * @param pageSize Maximum amount of entities in a one page (required) + * @param page Sequence number of page starting from 0 (required) + * @param textSearch (optional) + * @param sortProperty Property of entity to sort by (optional) + * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) * @param headers Optional headers to include in the request - * @return ApiResponse<List<TbResourceInfo>> + * @return ApiResponse<PageDataAgentProfile> * @throws ApiException if fails to make API call */ - public ApiResponse> getSystemOrTenantResourcesByIdsWithHttpInfo(@Nonnull List resourceIds, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getSystemOrTenantResourcesByIdsRequestBuilder(resourceIds, headers); + public ApiResponse getTenantAgentProfilesWithHttpInfo(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getTenantAgentProfilesRequestBuilder(pageSize, page, textSearch, sortProperty, sortOrder, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -42269,15 +47119,15 @@ public ApiResponse> getSystemOrTenantResourcesByIdsWithHttp InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getSystemOrTenantResourcesByIds", localVarResponse); + throw getApiException("getTenantAgentProfiles", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - List responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference>() {}); - return new ApiResponse>(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + PageDataAgentProfile responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -42292,18 +47142,30 @@ public ApiResponse> getSystemOrTenantResourcesByIdsWithHttp } } - private HttpRequest.Builder getSystemOrTenantResourcesByIdsRequestBuilder(@Nonnull List resourceIds, Map headers) throws ApiException { - // verify the required parameter 'resourceIds' is set - if (resourceIds == null) { - throw new ApiException(400, "Missing the required parameter 'resourceIds' when calling getSystemOrTenantResourcesByIds"); + private HttpRequest.Builder getTenantAgentProfilesRequestBuilder(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + // verify the required parameter 'pageSize' is set + if (pageSize == null) { + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getTenantAgentProfiles"); + } + // verify the required parameter 'page' is set + if (page == null) { + throw new ApiException(400, "Missing the required parameter 'page' when calling getTenantAgentProfiles"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/resource/list"; + String localVarPath = "/api/tenant/agent/profiles"; List localVarQueryParams = new ArrayList<>(); StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); String localVarQueryParameterBaseName; - localVarQueryParameterBaseName = "resourceIds"; - localVarQueryParams.addAll(ApiClient.parameterToPairs("multi", "resourceIds", resourceIds)); + localVarQueryParameterBaseName = "pageSize"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("pageSize", pageSize)); + localVarQueryParameterBaseName = "page"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("page", page)); + localVarQueryParameterBaseName = "textSearch"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("textSearch", textSearch)); + localVarQueryParameterBaseName = "sortProperty"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortProperty", sortProperty)); + localVarQueryParameterBaseName = "sortOrder"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("sortOrder", sortOrder)); if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { StringJoiner queryJoiner = new StringJoiner("&"); localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); @@ -42328,37 +47190,35 @@ private HttpRequest.Builder getSystemOrTenantResourcesByIdsRequestBuilder(@Nonnu } /** - * Get Tenant Users (getTenantAdmins) - * Returns a page of users owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'SYS_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). - * @param tenantId A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * Get Tenant Agents (getTenantAgents) + * Returns a page of agents owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. * @param pageSize Maximum amount of entities in a one page (required) * @param page Sequence number of page starting from 0 (required) - * @param textSearch The case insensitive 'substring' filter based on the user email. (optional) + * @param textSearch Optional String value representing agent name (optional) * @param sortProperty Property of entity to sort by (optional) * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) - * @return PageDataUser + * @return PageDataAgent * @throws ApiException if fails to make API call */ - public PageDataUser getTenantAdmins(@Nonnull String tenantId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { - ApiResponse localVarResponse = getTenantAdminsWithHttpInfo(tenantId, pageSize, page, textSearch, sortProperty, sortOrder, null); + public PageDataAgent getTenantAgents(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder) throws ApiException { + ApiResponse localVarResponse = getTenantAgentsWithHttpInfo(pageSize, page, textSearch, sortProperty, sortOrder, null); return localVarResponse.getData(); } /** - * Get Tenant Users (getTenantAdmins) - * Returns a page of users owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'SYS_ADMIN' authority. Security check is performed to verify that the user has 'READ' permission for the entity (entities). - * @param tenantId A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * Get Tenant Agents (getTenantAgents) + * Returns a page of agents owned by tenant. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See response schema for more details. Available for users with 'TENANT_ADMIN' authority. * @param pageSize Maximum amount of entities in a one page (required) * @param page Sequence number of page starting from 0 (required) - * @param textSearch The case insensitive 'substring' filter based on the user email. (optional) + * @param textSearch Optional String value representing agent name (optional) * @param sortProperty Property of entity to sort by (optional) * @param sortOrder Sort order. ASC (ASCENDING) or DESC (DESCENDING) (optional) * @param headers Optional headers to include in the request - * @return ApiResponse<PageDataUser> + * @return ApiResponse<PageDataAgent> * @throws ApiException if fails to make API call */ - public ApiResponse getTenantAdminsWithHttpInfo(@Nonnull String tenantId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = getTenantAdminsRequestBuilder(tenantId, pageSize, page, textSearch, sortProperty, sortOrder, headers); + public ApiResponse getTenantAgentsWithHttpInfo(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = getTenantAgentsRequestBuilder(pageSize, page, textSearch, sortProperty, sortOrder, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -42369,15 +47229,15 @@ public ApiResponse getTenantAdminsWithHttpInfo(@Nonnull String ten InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("getTenantAdmins", localVarResponse); + throw getApiException("getTenantAgents", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - PageDataUser responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + PageDataAgent responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -42392,22 +47252,17 @@ public ApiResponse getTenantAdminsWithHttpInfo(@Nonnull String ten } } - private HttpRequest.Builder getTenantAdminsRequestBuilder(@Nonnull String tenantId, @Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { - // verify the required parameter 'tenantId' is set - if (tenantId == null) { - throw new ApiException(400, "Missing the required parameter 'tenantId' when calling getTenantAdmins"); - } + private HttpRequest.Builder getTenantAgentsRequestBuilder(@Nonnull Integer pageSize, @Nonnull Integer page, @Nullable String textSearch, @Nullable String sortProperty, @Nullable String sortOrder, Map headers) throws ApiException { // verify the required parameter 'pageSize' is set if (pageSize == null) { - throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getTenantAdmins"); + throw new ApiException(400, "Missing the required parameter 'pageSize' when calling getTenantAgents"); } // verify the required parameter 'page' is set if (page == null) { - throw new ApiException(400, "Missing the required parameter 'page' when calling getTenantAdmins"); + throw new ApiException(400, "Missing the required parameter 'page' when calling getTenantAgents"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/tenant/{tenantId}/users" - .replace("{tenantId}", ApiClient.urlEncode(tenantId.toString())); + String localVarPath = "/api/tenant/agents"; List localVarQueryParams = new ArrayList<>(); StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); String localVarQueryParameterBaseName; @@ -51454,6 +56309,88 @@ private HttpRequest.Builder importSolutionRequestBuilder(@Nonnull SolutionData s return localVarRequestBuilder; } + /** + * Install Agent Application (installAgentApp) + * Creates a new agent application and an INSTALL event in a single operation. Returns both the created application and the INSTALL event so the caller can open a progress view without a second round-trip. The request body must include the application object. Available for users with 'TENANT_ADMIN' authority. + * @param agentAppEventRequest A JSON value representing the install event request with the application. (required) + * @return AgentAppInstallResponse + * @throws ApiException if fails to make API call + */ + public AgentAppInstallResponse installAgentApp(@Nonnull AgentAppEventRequest agentAppEventRequest) throws ApiException { + ApiResponse localVarResponse = installAgentAppWithHttpInfo(agentAppEventRequest, null); + return localVarResponse.getData(); + } + + /** + * Install Agent Application (installAgentApp) + * Creates a new agent application and an INSTALL event in a single operation. Returns both the created application and the INSTALL event so the caller can open a progress view without a second round-trip. The request body must include the application object. Available for users with 'TENANT_ADMIN' authority. + * @param agentAppEventRequest A JSON value representing the install event request with the application. (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentAppInstallResponse> + * @throws ApiException if fails to make API call + */ + public ApiResponse installAgentAppWithHttpInfo(@Nonnull AgentAppEventRequest agentAppEventRequest, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = installAgentAppRequestBuilder(agentAppEventRequest, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("installAgentApp", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentAppInstallResponse responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder installAgentAppRequestBuilder(@Nonnull AgentAppEventRequest agentAppEventRequest, Map headers) throws ApiException { + // verify the required parameter 'agentAppEventRequest' is set + if (agentAppEventRequest == null) { + throw new ApiException(400, "Missing the required parameter 'agentAppEventRequest' when calling installAgentApp"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/event"; + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(agentAppEventRequest); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * installSolution * @@ -51540,6 +56477,83 @@ private HttpRequest.Builder installSolutionRequestBuilder(@Nonnull UUID solution return localVarRequestBuilder; } + /** + * Is agent upgrade available (isAgentUpgradeAvailable) + * Returns 'true' when the agent reports an image older than the newest published one, 'false' otherwise — including when the agent runs a floating tag such as 'latest', whose current content cannot be told from the tag. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @return Boolean + * @throws ApiException if fails to make API call + */ + public Boolean isAgentUpgradeAvailable(@Nonnull String agentId) throws ApiException { + ApiResponse localVarResponse = isAgentUpgradeAvailableWithHttpInfo(agentId, null); + return localVarResponse.getData(); + } + + /** + * Is agent upgrade available (isAgentUpgradeAvailable) + * Returns 'true' when the agent reports an image older than the newest published one, 'false' otherwise — including when the agent runs a floating tag such as 'latest', whose current content cannot be told from the tag. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<Boolean> + * @throws ApiException if fails to make API call + */ + public ApiResponse isAgentUpgradeAvailableWithHttpInfo(@Nonnull String agentId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = isAgentUpgradeAvailableRequestBuilder(agentId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("isAgentUpgradeAvailable", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + Boolean responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder isAgentUpgradeAvailableRequestBuilder(@Nonnull String agentId, Map headers) throws ApiException { + // verify the required parameter 'agentId' is set + if (agentId == null) { + throw new ApiException(400, "Missing the required parameter 'agentId' when calling isAgentUpgradeAvailable"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/{agentId}/upgrade/available" + .replace("{agentId}", ApiClient.urlEncode(agentId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Check Customer White Labeling Allowed * Check if the White Labeling is enabled for the customers of the current tenant Security check is performed to verify that the user has 'WRITE' permission for the white labeling resource. Available for users with 'TENANT_ADMIN' authority. @@ -52187,25 +57201,23 @@ private HttpRequest.Builder listBranchesRequestBuilder(Map heade /** * listChats * - * @param chatType (required) * @return com.fasterxml.jackson.databind.JsonNode * @throws ApiException if fails to make API call */ - public com.fasterxml.jackson.databind.JsonNode listChats(@Nonnull ChatType chatType) throws ApiException { - ApiResponse localVarResponse = listChatsWithHttpInfo(chatType, null); + public com.fasterxml.jackson.databind.JsonNode listChats() throws ApiException { + ApiResponse localVarResponse = listChatsWithHttpInfo(null); return localVarResponse.getData(); } /** * listChats * - * @param chatType (required) * @param headers Optional headers to include in the request * @return ApiResponse<com.fasterxml.jackson.databind.JsonNode> * @throws ApiException if fails to make API call */ - public ApiResponse listChatsWithHttpInfo(@Nonnull ChatType chatType, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = listChatsRequestBuilder(chatType, headers); + public ApiResponse listChatsWithHttpInfo(Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = listChatsRequestBuilder(headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -52239,14 +57251,9 @@ public ApiResponse listChatsWithHttpInf } } - private HttpRequest.Builder listChatsRequestBuilder(@Nonnull ChatType chatType, Map headers) throws ApiException { - // verify the required parameter 'chatType' is set - if (chatType == null) { - throw new ApiException(400, "Missing the required parameter 'chatType' when calling listChats"); - } + private HttpRequest.Builder listChatsRequestBuilder(Map headers) throws ApiException { HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/ai/chats/{chatType}" - .replace("{chatType}", ApiClient.urlEncode(chatType.toString())); + String localVarPath = "/api/ai/chats"; localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); localVarRequestBuilder.header("Accept", "application/json"); localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody()); @@ -53427,6 +58434,340 @@ private HttpRequest.Builder markNotificationAsReadRequestBuilder(@Nonnull UUID i return localVarRequestBuilder; } + /** + * Create Agent Application Profile from template (materializeAgentAppProfile) + * Creates an agent application profile from the default configuration of the template with the given app type and version. Used to materialize a predefined (virtual) profile shown in the UI into a real profile on first use. If a profile with the given app type and template version already exists, the existing profile is returned (the oldest one by created time) instead of creating a new one. Available for users with 'TENANT_ADMIN' authority. + * @param appType Application type, e.g. 'EDGE', 'GATEWAY', 'GENERIC' (required) + * @param templateVersion The template version to materialize (e.g. '4.3.1.2EDGEPE') (required) + * @param composeType The compose type to select from the template (e.g. 'in_memory', 'kafka'). Defaults to the template's first compose type. (optional) + * @return AgentAppProfile + * @throws ApiException if fails to make API call + */ + public AgentAppProfile materializeAgentAppProfile(@Nonnull AgentApplicationType appType, @Nonnull String templateVersion, @Nullable String composeType) throws ApiException { + ApiResponse localVarResponse = materializeAgentAppProfileWithHttpInfo(appType, templateVersion, composeType, null); + return localVarResponse.getData(); + } + + /** + * Create Agent Application Profile from template (materializeAgentAppProfile) + * Creates an agent application profile from the default configuration of the template with the given app type and version. Used to materialize a predefined (virtual) profile shown in the UI into a real profile on first use. If a profile with the given app type and template version already exists, the existing profile is returned (the oldest one by created time) instead of creating a new one. Available for users with 'TENANT_ADMIN' authority. + * @param appType Application type, e.g. 'EDGE', 'GATEWAY', 'GENERIC' (required) + * @param templateVersion The template version to materialize (e.g. '4.3.1.2EDGEPE') (required) + * @param composeType The compose type to select from the template (e.g. 'in_memory', 'kafka'). Defaults to the template's first compose type. (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentAppProfile> + * @throws ApiException if fails to make API call + */ + public ApiResponse materializeAgentAppProfileWithHttpInfo(@Nonnull AgentApplicationType appType, @Nonnull String templateVersion, @Nullable String composeType, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = materializeAgentAppProfileRequestBuilder(appType, templateVersion, composeType, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("materializeAgentAppProfile", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentAppProfile responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder materializeAgentAppProfileRequestBuilder(@Nonnull AgentApplicationType appType, @Nonnull String templateVersion, @Nullable String composeType, Map headers) throws ApiException { + // verify the required parameter 'appType' is set + if (appType == null) { + throw new ApiException(400, "Missing the required parameter 'appType' when calling materializeAgentAppProfile"); + } + // verify the required parameter 'templateVersion' is set + if (templateVersion == null) { + throw new ApiException(400, "Missing the required parameter 'templateVersion' when calling materializeAgentAppProfile"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/profile/materialize/{appType}/{templateVersion}" + .replace("{appType}", ApiClient.urlEncode(appType.toString())) + .replace("{templateVersion}", ApiClient.urlEncode(templateVersion.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "composeType"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("composeType", composeType)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Merge template into application profile for preview (mergeAgentAppProfileForPreview) + * Merges the specified template into an agent application profile for preview purposes. The compose type determines which compose configuration variant from the template is used. Available for users with 'TENANT_ADMIN' authority. + * @param templateVersion The template version to merge (e.g. '4.3.1.2EDGEPE') (required) + * @param agentAppProfile Agent application profile to merge template with (required) + * @param composeType The compose type to select from the template (e.g. 'monolith', 'microservices') (optional) + * @param actionType The event action this merge previews (e.g. UPGRADE). Drives action-specific merge rules. (optional) + * @param setHostValues Whether to auto-fill host values (e.g. CLOUD_RPC_HOST) from the platform base URL. Should be true only for the install preview; keep false when previewing the saved compose of an existing profile to preserve user-configured host values. (optional, default to false) + * @return AgentAppProfile + * @throws ApiException if fails to make API call + */ + public AgentAppProfile mergeAgentAppProfileForPreview(@Nonnull String templateVersion, @Nonnull AgentAppProfile agentAppProfile, @Nullable String composeType, @Nullable AgentAppEventActionType actionType, @Nullable Boolean setHostValues) throws ApiException { + ApiResponse localVarResponse = mergeAgentAppProfileForPreviewWithHttpInfo(templateVersion, agentAppProfile, composeType, actionType, setHostValues, null); + return localVarResponse.getData(); + } + + /** + * Merge template into application profile for preview (mergeAgentAppProfileForPreview) + * Merges the specified template into an agent application profile for preview purposes. The compose type determines which compose configuration variant from the template is used. Available for users with 'TENANT_ADMIN' authority. + * @param templateVersion The template version to merge (e.g. '4.3.1.2EDGEPE') (required) + * @param agentAppProfile Agent application profile to merge template with (required) + * @param composeType The compose type to select from the template (e.g. 'monolith', 'microservices') (optional) + * @param actionType The event action this merge previews (e.g. UPGRADE). Drives action-specific merge rules. (optional) + * @param setHostValues Whether to auto-fill host values (e.g. CLOUD_RPC_HOST) from the platform base URL. Should be true only for the install preview; keep false when previewing the saved compose of an existing profile to preserve user-configured host values. (optional, default to false) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentAppProfile> + * @throws ApiException if fails to make API call + */ + public ApiResponse mergeAgentAppProfileForPreviewWithHttpInfo(@Nonnull String templateVersion, @Nonnull AgentAppProfile agentAppProfile, @Nullable String composeType, @Nullable AgentAppEventActionType actionType, @Nullable Boolean setHostValues, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = mergeAgentAppProfileForPreviewRequestBuilder(templateVersion, agentAppProfile, composeType, actionType, setHostValues, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("mergeAgentAppProfileForPreview", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentAppProfile responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder mergeAgentAppProfileForPreviewRequestBuilder(@Nonnull String templateVersion, @Nonnull AgentAppProfile agentAppProfile, @Nullable String composeType, @Nullable AgentAppEventActionType actionType, @Nullable Boolean setHostValues, Map headers) throws ApiException { + // verify the required parameter 'templateVersion' is set + if (templateVersion == null) { + throw new ApiException(400, "Missing the required parameter 'templateVersion' when calling mergeAgentAppProfileForPreview"); + } + // verify the required parameter 'agentAppProfile' is set + if (agentAppProfile == null) { + throw new ApiException(400, "Missing the required parameter 'agentAppProfile' when calling mergeAgentAppProfileForPreview"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/profiles/merge/{templateVersion}/preview" + .replace("{templateVersion}", ApiClient.urlEncode(templateVersion.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "composeType"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("composeType", composeType)); + localVarQueryParameterBaseName = "actionType"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("actionType", actionType)); + localVarQueryParameterBaseName = "setHostValues"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("setHostValues", setHostValues)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(agentAppProfile); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Merge template into application for preview (mergeAgentApplicationForPreview) + * Merges the specified template into an agent application for preview purposes. If no application is provided in the body, a new one is created from the template. The compose type determines which compose configuration variant from the template is used. Optionally provide relatedEntityType and relatedEntityId to auto-fill entity credentials (Edge routing key/secret or Gateway access token) into the compose. Available for users with 'TENANT_ADMIN' authority. + * @param templateVersion The template version to merge (e.g. '4.3.1.2EDGEPE') (required) + * @param appType Application type (EDGE, GATEWAY, GENERIC). Required when no application body is supplied. (optional) + * @param composeType The compose type to select from the template (e.g. 'monolith', 'microservices') (optional) + * @param actionType The event action this merge previews (e.g. UPGRADE). Drives action-specific merge rules. (optional) + * @param setHostValues Whether to auto-fill host values (e.g. CLOUD_RPC_HOST) from the platform base URL. Should be true only for the install preview; keep false when previewing the saved compose of an existing application to preserve user-configured host values. (optional, default to false) + * @param relatedEntityType Related entity type (EDGE or DEVICE) (optional) + * @param relatedEntityId Related entity id (optional) + * @param agentApplication Optional agent application to merge with. If null, a new application is created from the template. (optional) + * @return AgentApplication + * @throws ApiException if fails to make API call + */ + public AgentApplication mergeAgentApplicationForPreview(@Nonnull String templateVersion, @Nullable AgentApplicationType appType, @Nullable String composeType, @Nullable AgentAppEventActionType actionType, @Nullable Boolean setHostValues, @Nullable String relatedEntityType, @Nullable String relatedEntityId, @Nullable AgentApplication agentApplication) throws ApiException { + ApiResponse localVarResponse = mergeAgentApplicationForPreviewWithHttpInfo(templateVersion, appType, composeType, actionType, setHostValues, relatedEntityType, relatedEntityId, agentApplication, null); + return localVarResponse.getData(); + } + + /** + * Merge template into application for preview (mergeAgentApplicationForPreview) + * Merges the specified template into an agent application for preview purposes. If no application is provided in the body, a new one is created from the template. The compose type determines which compose configuration variant from the template is used. Optionally provide relatedEntityType and relatedEntityId to auto-fill entity credentials (Edge routing key/secret or Gateway access token) into the compose. Available for users with 'TENANT_ADMIN' authority. + * @param templateVersion The template version to merge (e.g. '4.3.1.2EDGEPE') (required) + * @param appType Application type (EDGE, GATEWAY, GENERIC). Required when no application body is supplied. (optional) + * @param composeType The compose type to select from the template (e.g. 'monolith', 'microservices') (optional) + * @param actionType The event action this merge previews (e.g. UPGRADE). Drives action-specific merge rules. (optional) + * @param setHostValues Whether to auto-fill host values (e.g. CLOUD_RPC_HOST) from the platform base URL. Should be true only for the install preview; keep false when previewing the saved compose of an existing application to preserve user-configured host values. (optional, default to false) + * @param relatedEntityType Related entity type (EDGE or DEVICE) (optional) + * @param relatedEntityId Related entity id (optional) + * @param agentApplication Optional agent application to merge with. If null, a new application is created from the template. (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentApplication> + * @throws ApiException if fails to make API call + */ + public ApiResponse mergeAgentApplicationForPreviewWithHttpInfo(@Nonnull String templateVersion, @Nullable AgentApplicationType appType, @Nullable String composeType, @Nullable AgentAppEventActionType actionType, @Nullable Boolean setHostValues, @Nullable String relatedEntityType, @Nullable String relatedEntityId, @Nullable AgentApplication agentApplication, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = mergeAgentApplicationForPreviewRequestBuilder(templateVersion, appType, composeType, actionType, setHostValues, relatedEntityType, relatedEntityId, agentApplication, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("mergeAgentApplicationForPreview", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentApplication responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder mergeAgentApplicationForPreviewRequestBuilder(@Nonnull String templateVersion, @Nullable AgentApplicationType appType, @Nullable String composeType, @Nullable AgentAppEventActionType actionType, @Nullable Boolean setHostValues, @Nullable String relatedEntityType, @Nullable String relatedEntityId, @Nullable AgentApplication agentApplication, Map headers) throws ApiException { + // verify the required parameter 'templateVersion' is set + if (templateVersion == null) { + throw new ApiException(400, "Missing the required parameter 'templateVersion' when calling mergeAgentApplicationForPreview"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/merge/{templateVersion}/preview" + .replace("{templateVersion}", ApiClient.urlEncode(templateVersion.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "appType"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("appType", appType)); + localVarQueryParameterBaseName = "composeType"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("composeType", composeType)); + localVarQueryParameterBaseName = "actionType"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("actionType", actionType)); + localVarQueryParameterBaseName = "setHostValues"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("setHostValues", setHostValues)); + localVarQueryParameterBaseName = "relatedEntityType"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("relatedEntityType", relatedEntityType)); + localVarQueryParameterBaseName = "relatedEntityId"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("relatedEntityId", relatedEntityId)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(agentApplication); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Mobile Login redirect (mobileLogin) * This method generates redirect to the special link that is handled by mobile application. Useful for email verification flow on mobile app. @@ -53914,6 +59255,102 @@ private HttpRequest.Builder performTrendzHealthcheckRequestBuilder(Map localVarResponse = previewBulkOperationWithHttpInfo(agentProfileId, applicationProfileId, bulkOperationRequest, null); + return localVarResponse.getData(); + } + + /** + * Preview Bulk Operation (previewBulkOperation) + * Previews the effect of a bulk operation over the applications of the given agent profile and application profile without enqueuing it, returning the set of affected applications and the resulting actions. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param applicationProfileId Agent Application Profile Id (required) + * @param bulkOperationRequest (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<BulkOperationPreview> + * @throws ApiException if fails to make API call + */ + public ApiResponse previewBulkOperationWithHttpInfo(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull BulkOperationRequest bulkOperationRequest, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = previewBulkOperationRequestBuilder(agentProfileId, applicationProfileId, bulkOperationRequest, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("previewBulkOperation", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + BulkOperationPreview responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder previewBulkOperationRequestBuilder(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull BulkOperationRequest bulkOperationRequest, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling previewBulkOperation"); + } + // verify the required parameter 'applicationProfileId' is set + if (applicationProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'applicationProfileId' when calling previewBulkOperation"); + } + // verify the required parameter 'bulkOperationRequest' is set + if (bulkOperationRequest == null) { + throw new ApiException(400, "Missing the required parameter 'bulkOperationRequest' when calling previewBulkOperation"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}/bulk/preview" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())) + .replace("{applicationProfileId}", ApiClient.urlEncode(applicationProfileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(bulkOperationRequest); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Preview Login White Labeling configuration (saveWhiteLabelParams) * Merge the White Labeling configuration with the parent configuration and return the result. Security check is performed to verify that the user has 'WRITE' permission for the white labeling resource. @@ -54232,7 +59669,7 @@ private HttpRequest.Builder processDevicesBulkImportRequestBuilder(@Nonnull Bulk /** * Import the bulk of edges (processEdgesBulkImport) - * There's an ability to import the bulk of edges using the only .csv file. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. + * There's an ability to import the bulk of edges using the only .csv file. Available for users with 'TENANT_ADMIN' authority. * @param bulkImportRequest (required) * @return BulkImportResultEdge * @throws ApiException if fails to make API call @@ -54244,7 +59681,7 @@ public BulkImportResultEdge processEdgesBulkImport(@Nonnull BulkImportRequest bu /** * Import the bulk of edges (processEdgesBulkImport) - * There's an ability to import the bulk of edges using the only .csv file. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. + * There's an ability to import the bulk of edges using the only .csv file. Available for users with 'TENANT_ADMIN' authority. * @param bulkImportRequest (required) * @param headers Optional headers to include in the request * @return ApiResponse<BulkImportResultEdge> @@ -56043,6 +61480,288 @@ private HttpRequest.Builder saveAdminSettingsRequestBuilder(@Nonnull AdminSettin return localVarRequestBuilder; } + /** + * Create Or Update Agent (saveAgent) + * Creates or Updates the Agent. When creating agent, platform generates Agent Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Agent id will be present in the response. Specify existing Agent id to update the agent. Referencing non-existing Agent Id will cause 'Not Found' error. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Agent entity. Available for users with 'TENANT_ADMIN' authority. + * @param agent A JSON value representing the agent. (required) + * @param entityGroupId (optional) + * @param entityGroupIds A list of entity group ids, separated by comma ',' (optional) + * @return Agent + * @throws ApiException if fails to make API call + */ + public Agent saveAgent(@Nonnull Agent agent, @Nullable String entityGroupId, @Nullable List entityGroupIds) throws ApiException { + ApiResponse localVarResponse = saveAgentWithHttpInfo(agent, entityGroupId, entityGroupIds, null); + return localVarResponse.getData(); + } + + /** + * Create Or Update Agent (saveAgent) + * Creates or Updates the Agent. When creating agent, platform generates Agent Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Agent id will be present in the response. Specify existing Agent id to update the agent. Referencing non-existing Agent Id will cause 'Not Found' error. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Agent entity. Available for users with 'TENANT_ADMIN' authority. + * @param agent A JSON value representing the agent. (required) + * @param entityGroupId (optional) + * @param entityGroupIds A list of entity group ids, separated by comma ',' (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<Agent> + * @throws ApiException if fails to make API call + */ + public ApiResponse saveAgentWithHttpInfo(@Nonnull Agent agent, @Nullable String entityGroupId, @Nullable List entityGroupIds, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = saveAgentRequestBuilder(agent, entityGroupId, entityGroupIds, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("saveAgent", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + Agent responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder saveAgentRequestBuilder(@Nonnull Agent agent, @Nullable String entityGroupId, @Nullable List entityGroupIds, Map headers) throws ApiException { + // verify the required parameter 'agent' is set + if (agent == null) { + throw new ApiException(400, "Missing the required parameter 'agent' when calling saveAgent"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent"; + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "entityGroupId"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("entityGroupId", entityGroupId)); + localVarQueryParameterBaseName = "entityGroupIds"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("multi", "entityGroupIds", entityGroupIds)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(agent); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Create or Update Agent Application Profile (saveAgentAppProfile) + * Creates or updates an agent application profile. Available for users with 'TENANT_ADMIN' authority. + * @param agentAppProfile (required) + * @return AgentAppProfile + * @throws ApiException if fails to make API call + */ + public AgentAppProfile saveAgentAppProfile(@Nonnull AgentAppProfile agentAppProfile) throws ApiException { + ApiResponse localVarResponse = saveAgentAppProfileWithHttpInfo(agentAppProfile, null); + return localVarResponse.getData(); + } + + /** + * Create or Update Agent Application Profile (saveAgentAppProfile) + * Creates or updates an agent application profile. Available for users with 'TENANT_ADMIN' authority. + * @param agentAppProfile (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentAppProfile> + * @throws ApiException if fails to make API call + */ + public ApiResponse saveAgentAppProfileWithHttpInfo(@Nonnull AgentAppProfile agentAppProfile, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = saveAgentAppProfileRequestBuilder(agentAppProfile, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("saveAgentAppProfile", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentAppProfile responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder saveAgentAppProfileRequestBuilder(@Nonnull AgentAppProfile agentAppProfile, Map headers) throws ApiException { + // verify the required parameter 'agentAppProfile' is set + if (agentAppProfile == null) { + throw new ApiException(400, "Missing the required parameter 'agentAppProfile' when calling saveAgentAppProfile"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/profile"; + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(agentAppProfile); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Create or Update Agent Profile (saveAgentProfile) + * Creates or updates the Agent Profile. When an id is not present in the request, a new Agent Profile is created, otherwise the existing one is updated. Optionally synchronizes the agent application profile assignments in the same request: when the 'appProfileIds' parameter is absent, existing assignments are left untouched; when it is present, the assignment set is replaced with the given ids — including an explicitly empty value (e.g. 'appProfileIds='), which removes all assignments. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfile (required) + * @param appProfileIds Agent application profile ids to assign to this agent profile. Absent: assignments are not modified. Present: assignments are replaced with the given ids; an explicitly empty value removes all assignments. (optional) + * @return AgentProfile + * @throws ApiException if fails to make API call + */ + public AgentProfile saveAgentProfile(@Nonnull AgentProfile agentProfile, @Nullable List appProfileIds) throws ApiException { + ApiResponse localVarResponse = saveAgentProfileWithHttpInfo(agentProfile, appProfileIds, null); + return localVarResponse.getData(); + } + + /** + * Create or Update Agent Profile (saveAgentProfile) + * Creates or updates the Agent Profile. When an id is not present in the request, a new Agent Profile is created, otherwise the existing one is updated. Optionally synchronizes the agent application profile assignments in the same request: when the 'appProfileIds' parameter is absent, existing assignments are left untouched; when it is present, the assignment set is replaced with the given ids — including an explicitly empty value (e.g. 'appProfileIds='), which removes all assignments. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfile (required) + * @param appProfileIds Agent application profile ids to assign to this agent profile. Absent: assignments are not modified. Present: assignments are replaced with the given ids; an explicitly empty value removes all assignments. (optional) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentProfile> + * @throws ApiException if fails to make API call + */ + public ApiResponse saveAgentProfileWithHttpInfo(@Nonnull AgentProfile agentProfile, @Nullable List appProfileIds, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = saveAgentProfileRequestBuilder(agentProfile, appProfileIds, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("saveAgentProfile", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentProfile responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder saveAgentProfileRequestBuilder(@Nonnull AgentProfile agentProfile, @Nullable List appProfileIds, Map headers) throws ApiException { + // verify the required parameter 'agentProfile' is set + if (agentProfile == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfile' when calling saveAgentProfile"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile"; + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "appProfileIds"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("multi", "appProfileIds", appProfileIds)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(agentProfile); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Create or update AI model (saveAiModel) * Creates or updates an AI model record. • **Create:** Omit the `id` to create a new record. The platform assigns a UUID to the new record and returns it in the `id` field of the response. • **Update:** Include an existing `id` to modify that record. If no matching record exists, the API responds with **404 Not Found**. Tenant ID for the AI model will be taken from the authenticated user making the request, regardless of any value provided in the request body. Available for users with 'TENANT_ADMIN' authority. @@ -63091,6 +68810,106 @@ private HttpRequest.Builder sendTestSmsRequestBuilder(@Nonnull TestSmsRequest te return localVarRequestBuilder; } + /** + * Set App Profile Relates On Auto-Discovery (setAppProfileRelatesOnAutoDiscovery) + * Enables or disables automatic assignment of the app profile to new auto-discovered applications with a matching template. Only one app profile per agent profile and template pair may relate on auto-discovery. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param applicationProfileId Agent Application Profile Id (required) + * @param relate Whether the app profile should be auto-assigned to new auto-discovered applications with a matching template (required) + * @throws ApiException if fails to make API call + */ + public void setAppProfileRelatesOnAutoDiscovery(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull Boolean relate) throws ApiException { + setAppProfileRelatesOnAutoDiscoveryWithHttpInfo(agentProfileId, applicationProfileId, relate, null); + } + + /** + * Set App Profile Relates On Auto-Discovery (setAppProfileRelatesOnAutoDiscovery) + * Enables or disables automatic assignment of the app profile to new auto-discovered applications with a matching template. Only one app profile per agent profile and template pair may relate on auto-discovery. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param applicationProfileId Agent Application Profile Id (required) + * @param relate Whether the app profile should be auto-assigned to new auto-discovered applications with a matching template (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<Void> + * @throws ApiException if fails to make API call + */ + public ApiResponse setAppProfileRelatesOnAutoDiscoveryWithHttpInfo(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull Boolean relate, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = setAppProfileRelatesOnAutoDiscoveryRequestBuilder(agentProfileId, applicationProfileId, relate, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("setAppProfileRelatesOnAutoDiscovery", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody != null) { + localVarResponseBody.readAllBytes(); + } + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder setAppProfileRelatesOnAutoDiscoveryRequestBuilder(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, @Nonnull Boolean relate, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling setAppProfileRelatesOnAutoDiscovery"); + } + // verify the required parameter 'applicationProfileId' is set + if (applicationProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'applicationProfileId' when calling setAppProfileRelatesOnAutoDiscovery"); + } + // verify the required parameter 'relate' is set + if (relate == null) { + throw new ApiException(400, "Missing the required parameter 'relate' when calling setAppProfileRelatesOnAutoDiscovery"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}/autoDiscovery" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())) + .replace("{applicationProfileId}", ApiClient.urlEncode(applicationProfileId.toString())); + List localVarQueryParams = new ArrayList<>(); + StringJoiner localVarQueryStringJoiner = new StringJoiner("&"); + String localVarQueryParameterBaseName; + localVarQueryParameterBaseName = "relate"; + localVarQueryParams.addAll(ApiClient.parameterToPairs("relate", relate)); + if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { + StringJoiner queryJoiner = new StringJoiner("&"); + localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue())); + if (localVarQueryStringJoiner.length() != 0) { + queryJoiner.add(localVarQueryStringJoiner.toString()); + } + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString())); + } else { + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Set Auto Assign To Edge Rule Chain (setAutoAssignToEdgeRuleChain) * Makes the rule chain to be automatically assigned for any new edge that will be created. Does not assign this rule chain for already created edges. Available for users with 'TENANT_ADMIN' authority. @@ -63246,6 +69065,83 @@ private HttpRequest.Builder setCustomerHomeDashboardInfoRequestBuilder(@Nonnull return localVarRequestBuilder; } + /** + * Make Agent Profile Default (setDefaultAgentProfile) + * Marks agent profile as default within a tenant scope. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @return AgentProfile + * @throws ApiException if fails to make API call + */ + public AgentProfile setDefaultAgentProfile(@Nonnull String agentProfileId) throws ApiException { + ApiResponse localVarResponse = setDefaultAgentProfileWithHttpInfo(agentProfileId, null); + return localVarResponse.getData(); + } + + /** + * Make Agent Profile Default (setDefaultAgentProfile) + * Marks agent profile as default within a tenant scope. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentProfile> + * @throws ApiException if fails to make API call + */ + public ApiResponse setDefaultAgentProfileWithHttpInfo(@Nonnull String agentProfileId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = setDefaultAgentProfileRequestBuilder(agentProfileId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("setDefaultAgentProfile", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentProfile responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder setDefaultAgentProfileRequestBuilder(@Nonnull String agentProfileId, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling setDefaultAgentProfile"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/{agentProfileId}/default" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Make Asset Profile Default (setDefaultAssetProfile) * Marks asset profile as default within a tenant scope. Available for users with 'TENANT_ADMIN' authority. @@ -65766,6 +71662,86 @@ private HttpRequest.Builder unassignAlarmRequestBuilder(@Nonnull String alarmId, return localVarRequestBuilder; } + /** + * Unassign App Profile from Agent Profile (unassignAppProfileFromAgentProfile) + * Removes the assignment of the given agent application profile from the agent profile. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param applicationProfileId Agent Application Profile Id (required) + * @throws ApiException if fails to make API call + */ + public void unassignAppProfileFromAgentProfile(@Nonnull String agentProfileId, @Nonnull String applicationProfileId) throws ApiException { + unassignAppProfileFromAgentProfileWithHttpInfo(agentProfileId, applicationProfileId, null); + } + + /** + * Unassign App Profile from Agent Profile (unassignAppProfileFromAgentProfile) + * Removes the assignment of the given agent application profile from the agent profile. Available for users with 'TENANT_ADMIN' authority. + * @param agentProfileId Agent Profile Id (required) + * @param applicationProfileId Agent Application Profile Id (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<Void> + * @throws ApiException if fails to make API call + */ + public ApiResponse unassignAppProfileFromAgentProfileWithHttpInfo(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = unassignAppProfileFromAgentProfileRequestBuilder(agentProfileId, applicationProfileId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("unassignAppProfileFromAgentProfile", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody != null) { + localVarResponseBody.readAllBytes(); + } + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder unassignAppProfileFromAgentProfileRequestBuilder(@Nonnull String agentProfileId, @Nonnull String applicationProfileId, Map headers) throws ApiException { + // verify the required parameter 'agentProfileId' is set + if (agentProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'agentProfileId' when calling unassignAppProfileFromAgentProfile"); + } + // verify the required parameter 'applicationProfileId' is set + if (applicationProfileId == null) { + throw new ApiException(400, "Missing the required parameter 'applicationProfileId' when calling unassignAppProfileFromAgentProfile"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/profile/{agentProfileId}/appProfile/{applicationProfileId}" + .replace("{agentProfileId}", ApiClient.urlEncode(agentProfileId.toString())) + .replace("{applicationProfileId}", ApiClient.urlEncode(applicationProfileId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Unassign entity group from edge (unassignEntityGroupFromEdge) * Clears assignment of the entity group to the edge. Unassignment works in async way - first, 'unassign' notification event pushed to edge queue on platform. Second, remote edge service will receive an 'unassign' command to remove entity group (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once 'unassign' command will be delivered to edge service, it's going to remove entity group and entities inside this group locally. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities). @@ -65941,6 +71917,83 @@ private HttpRequest.Builder unassignIntegrationFromEdgeRequestBuilder(@Nonnull S return localVarRequestBuilder; } + /** + * Unassign Related Entity from Agent Application (unassignRelatedEntityFromAgentApp) + * Removes the link between an agent application and its related Edge or Gateway Device. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @return AgentApplication + * @throws ApiException if fails to make API call + */ + public AgentApplication unassignRelatedEntityFromAgentApp(@Nonnull String agentApplicationId) throws ApiException { + ApiResponse localVarResponse = unassignRelatedEntityFromAgentAppWithHttpInfo(agentApplicationId, null); + return localVarResponse.getData(); + } + + /** + * Unassign Related Entity from Agent Application (unassignRelatedEntityFromAgentApp) + * Removes the link between an agent application and its related Edge or Gateway Device. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplicationId A string value representing the agent application id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentApplication> + * @throws ApiException if fails to make API call + */ + public ApiResponse unassignRelatedEntityFromAgentAppWithHttpInfo(@Nonnull String agentApplicationId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = unassignRelatedEntityFromAgentAppRequestBuilder(agentApplicationId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("unassignRelatedEntityFromAgentApp", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentApplication responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder unassignRelatedEntityFromAgentAppRequestBuilder(@Nonnull String agentApplicationId, Map headers) throws ApiException { + // verify the required parameter 'agentApplicationId' is set + if (agentApplicationId == null) { + throw new ApiException(400, "Missing the required parameter 'agentApplicationId' when calling unassignRelatedEntityFromAgentApp"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/app/{agentApplicationId}/relatedEntity" + .replace("{agentApplicationId}", ApiClient.urlEncode(agentApplicationId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Unassign rule chain from edge (unassignRuleChainFromEdge) * Clears assignment of the rule chain to the edge. Unassignment works in async way - first, 'unassign' notification event pushed to edge queue on platform. Second, remote edge service will receive an 'unassign' command to remove rule chain (Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform). Third, once 'unassign' command will be delivered to edge service, it's going to remove rule chain locally. Available for users with 'TENANT_ADMIN' authority. @@ -66166,101 +72219,190 @@ public ApiResponse uninstallSolutionWit } } - private HttpRequest.Builder uninstallSolutionRequestBuilder(@Nonnull UUID solutionId, @Nonnull String xAuthorization, Map headers) throws ApiException { - // verify the required parameter 'solutionId' is set - if (solutionId == null) { - throw new ApiException(400, "Missing the required parameter 'solutionId' when calling uninstallSolution"); + private HttpRequest.Builder uninstallSolutionRequestBuilder(@Nonnull UUID solutionId, @Nonnull String xAuthorization, Map headers) throws ApiException { + // verify the required parameter 'solutionId' is set + if (solutionId == null) { + throw new ApiException(400, "Missing the required parameter 'solutionId' when calling uninstallSolution"); + } + // verify the required parameter 'xAuthorization' is set + if (xAuthorization == null) { + throw new ApiException(400, "Missing the required parameter 'xAuthorization' when calling uninstallSolution"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/ai/solution/{solutionId}/uninstall" + .replace("{solutionId}", ApiClient.urlEncode(solutionId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + if (xAuthorization != null) { + localVarRequestBuilder.header("X-Authorization", xAuthorization.toString()); + } + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Unset Auto Assign To Edge Rule Chain (unsetAutoAssignToEdgeRuleChain) + * Removes the rule chain from the list of rule chains that are going to be automatically assigned for any new edge that will be created. Does not unassign this rule chain for already assigned edges. Available for users with 'TENANT_ADMIN' authority. + * @param ruleChainId A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @return RuleChain + * @throws ApiException if fails to make API call + */ + public RuleChain unsetAutoAssignToEdgeRuleChain(@Nonnull String ruleChainId) throws ApiException { + ApiResponse localVarResponse = unsetAutoAssignToEdgeRuleChainWithHttpInfo(ruleChainId, null); + return localVarResponse.getData(); + } + + /** + * Unset Auto Assign To Edge Rule Chain (unsetAutoAssignToEdgeRuleChain) + * Removes the rule chain from the list of rule chains that are going to be automatically assigned for any new edge that will be created. Does not unassign this rule chain for already assigned edges. Available for users with 'TENANT_ADMIN' authority. + * @param ruleChainId A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<RuleChain> + * @throws ApiException if fails to make API call + */ + public ApiResponse unsetAutoAssignToEdgeRuleChainWithHttpInfo(@Nonnull String ruleChainId, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = unsetAutoAssignToEdgeRuleChainRequestBuilder(ruleChainId, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("unsetAutoAssignToEdgeRuleChain", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + RuleChain responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder unsetAutoAssignToEdgeRuleChainRequestBuilder(@Nonnull String ruleChainId, Map headers) throws ApiException { + // verify the required parameter 'ruleChainId' is set + if (ruleChainId == null) { + throw new ApiException(400, "Missing the required parameter 'ruleChainId' when calling unsetAutoAssignToEdgeRuleChain"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/ruleChain/{ruleChainId}/autoAssignToEdge" + .replace("{ruleChainId}", ApiClient.urlEncode(ruleChainId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + + /** + * Transform input raw payload to the dedicated converter data (unwrapRawPayload) + * Returns a JSON object representing the result of the unwrapped incoming raw message. ## Request Body Example ```json { \"metadata\":{ }, \"payload\":\"ewogICAgImRhdGEiOiAiZGF0YSIKfQ==\", } ``` * 'metadata' - integration metadata; * 'payload' - JSON object representing the input raw message. ## Response Body Example * 'metadata' - integration metadata enriched with the data from the input message; * 'payload' - base64 string representation of the payload from the unwrapped input message; * 'contentType' - string representation payload contentType. + * @param integrationType A string value representing the integration type. One of the following: APACHE_PULSAR, AWS_IOT, AWS_KINESIS, AWS_SQS, AZURE_EVENT_HUB, AZURE_IOT_HUB, AZURE_SERVICE_BUS, CHIRPSTACK, COAP, CUSTOM, HTTP, IBM_WATSON_IOT, KAFKA, LORIOT, MQTT, OCEANCONNECT, OPC_UA, PUB_SUB, RABBITMQ, SIGFOX, TCP, THINGPARK, TMOBILE_IOT_CDP, TPE, TTI, TTN, TUYA, UDP (required) + * @param body A JSON value representing the input message. (required) + * @return com.fasterxml.jackson.databind.JsonNode + * @throws ApiException if fails to make API call + */ + public com.fasterxml.jackson.databind.JsonNode unwrapRawPayload(@Nonnull IntegrationType integrationType, @Nullable Object body) throws ApiException { + ApiResponse localVarResponse = unwrapRawPayloadWithHttpInfo(integrationType, body, null); + return localVarResponse.getData(); + } + + /** + * Transform input raw payload to the dedicated converter data (unwrapRawPayload) + * Returns a JSON object representing the result of the unwrapped incoming raw message. ## Request Body Example ```json { \"metadata\":{ }, \"payload\":\"ewogICAgImRhdGEiOiAiZGF0YSIKfQ==\", } ``` * 'metadata' - integration metadata; * 'payload' - JSON object representing the input raw message. ## Response Body Example * 'metadata' - integration metadata enriched with the data from the input message; * 'payload' - base64 string representation of the payload from the unwrapped input message; * 'contentType' - string representation payload contentType. + * @param integrationType A string value representing the integration type. One of the following: APACHE_PULSAR, AWS_IOT, AWS_KINESIS, AWS_SQS, AZURE_EVENT_HUB, AZURE_IOT_HUB, AZURE_SERVICE_BUS, CHIRPSTACK, COAP, CUSTOM, HTTP, IBM_WATSON_IOT, KAFKA, LORIOT, MQTT, OCEANCONNECT, OPC_UA, PUB_SUB, RABBITMQ, SIGFOX, TCP, THINGPARK, TMOBILE_IOT_CDP, TPE, TTI, TTN, TUYA, UDP (required) + * @param body A JSON value representing the input message. (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<com.fasterxml.jackson.databind.JsonNode> + * @throws ApiException if fails to make API call + */ + public ApiResponse unwrapRawPayloadWithHttpInfo(@Nonnull IntegrationType integrationType, @Nullable Object body, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = unwrapRawPayloadRequestBuilder(integrationType, body, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("unwrapRawPayload", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + com.fasterxml.jackson.databind.JsonNode responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder unwrapRawPayloadRequestBuilder(@Nonnull IntegrationType integrationType, @Nullable Object body, Map headers) throws ApiException { + // verify the required parameter 'integrationType' is set + if (integrationType == null) { + throw new ApiException(400, "Missing the required parameter 'integrationType' when calling unwrapRawPayload"); } - // verify the required parameter 'xAuthorization' is set - if (xAuthorization == null) { - throw new ApiException(400, "Missing the required parameter 'xAuthorization' when calling uninstallSolution"); + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException(400, "Missing the required parameter 'body' when calling unwrapRawPayload"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/ai/solution/{solutionId}/uninstall" - .replace("{solutionId}", ApiClient.urlEncode(solutionId.toString())); + String localVarPath = "/api/converter/unwrap/{integrationType}" + .replace("{integrationType}", ApiClient.urlEncode(integrationType.toString())); localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); - if (xAuthorization != null) { - localVarRequestBuilder.header("X-Authorization", xAuthorization.toString()); - } + localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); - localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); - if (memberVarReadTimeout != null) { - localVarRequestBuilder.timeout(memberVarReadTimeout); - } - // Add custom headers if provided - localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); - if (memberVarInterceptor != null) { - memberVarInterceptor.accept(localVarRequestBuilder); - } - return localVarRequestBuilder; - } - - /** - * Unset Auto Assign To Edge Rule Chain (unsetAutoAssignToEdgeRuleChain) - * Removes the rule chain from the list of rule chains that are going to be automatically assigned for any new edge that will be created. Does not unassign this rule chain for already assigned edges. Available for users with 'TENANT_ADMIN' authority. - * @param ruleChainId A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) - * @return RuleChain - * @throws ApiException if fails to make API call - */ - public RuleChain unsetAutoAssignToEdgeRuleChain(@Nonnull String ruleChainId) throws ApiException { - ApiResponse localVarResponse = unsetAutoAssignToEdgeRuleChainWithHttpInfo(ruleChainId, null); - return localVarResponse.getData(); - } - - /** - * Unset Auto Assign To Edge Rule Chain (unsetAutoAssignToEdgeRuleChain) - * Removes the rule chain from the list of rule chains that are going to be automatically assigned for any new edge that will be created. Does not unassign this rule chain for already assigned edges. Available for users with 'TENANT_ADMIN' authority. - * @param ruleChainId A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) - * @param headers Optional headers to include in the request - * @return ApiResponse<RuleChain> - * @throws ApiException if fails to make API call - */ - public ApiResponse unsetAutoAssignToEdgeRuleChainWithHttpInfo(@Nonnull String ruleChainId, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = unsetAutoAssignToEdgeRuleChainRequestBuilder(ruleChainId, headers); try { - HttpResponse localVarResponse = memberVarHttpClient.send( - localVarRequestBuilder.build(), - HttpResponse.BodyHandlers.ofInputStream()); - if (memberVarResponseInterceptor != null) { - memberVarResponseInterceptor.accept(localVarResponse); - } - InputStream localVarResponseBody = null; - try { - if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("unsetAutoAssignToEdgeRuleChain", localVarResponse); - } - localVarResponseBody = ApiClient.getResponseBody(localVarResponse); - if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); - } - String responseBody = new String(localVarResponseBody.readAllBytes()); - RuleChain responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); - } finally { - if (localVarResponseBody != null) { - localVarResponseBody.close(); - } - } + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(body); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); } catch (IOException e) { throw new ApiException(e); } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new ApiException(e); - } - } - - private HttpRequest.Builder unsetAutoAssignToEdgeRuleChainRequestBuilder(@Nonnull String ruleChainId, Map headers) throws ApiException { - // verify the required parameter 'ruleChainId' is set - if (ruleChainId == null) { - throw new ApiException(400, "Missing the required parameter 'ruleChainId' when calling unsetAutoAssignToEdgeRuleChain"); - } - HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/ruleChain/{ruleChainId}/autoAssignToEdge" - .replace("{ruleChainId}", ApiClient.urlEncode(ruleChainId.toString())); - localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); - localVarRequestBuilder.header("Accept", "application/json"); - localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody()); if (memberVarReadTimeout != null) { localVarRequestBuilder.timeout(memberVarReadTimeout); } @@ -66273,29 +72415,27 @@ private HttpRequest.Builder unsetAutoAssignToEdgeRuleChainRequestBuilder(@Nonnul } /** - * Transform input raw payload to the dedicated converter data (unwrapRawPayload) - * Returns a JSON object representing the result of the unwrapped incoming raw message. ## Request Body Example ```json { \"metadata\":{ }, \"payload\":\"ewogICAgImRhdGEiOiAiZGF0YSIKfQ==\", } ``` * 'metadata' - integration metadata; * 'payload' - JSON object representing the input raw message. ## Response Body Example * 'metadata' - integration metadata enriched with the data from the input message; * 'payload' - base64 string representation of the payload from the unwrapped input message; * 'contentType' - string representation payload contentType. - * @param integrationType A string value representing the integration type. One of the following: APACHE_PULSAR, AWS_IOT, AWS_KINESIS, AWS_SQS, AZURE_EVENT_HUB, AZURE_IOT_HUB, AZURE_SERVICE_BUS, CHIRPSTACK, COAP, CUSTOM, HTTP, IBM_WATSON_IOT, KAFKA, LORIOT, MQTT, OCEANCONNECT, OPC_UA, PUB_SUB, RABBITMQ, SIGFOX, TCP, THINGPARK, TMOBILE_IOT_CDP, TPE, TTI, TTN, TUYA, UDP (required) - * @param body A JSON value representing the input message. (required) - * @return com.fasterxml.jackson.databind.JsonNode + * Update Agent Application (saveAgentApplication) + * Updates the Agent Application. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplication A JSON value representing the agent application. (required) + * @return AgentApplication * @throws ApiException if fails to make API call */ - public com.fasterxml.jackson.databind.JsonNode unwrapRawPayload(@Nonnull IntegrationType integrationType, @Nullable Object body) throws ApiException { - ApiResponse localVarResponse = unwrapRawPayloadWithHttpInfo(integrationType, body, null); + public AgentApplication updateAgentApplication(@Nonnull AgentApplication agentApplication) throws ApiException { + ApiResponse localVarResponse = updateAgentApplicationWithHttpInfo(agentApplication, null); return localVarResponse.getData(); } /** - * Transform input raw payload to the dedicated converter data (unwrapRawPayload) - * Returns a JSON object representing the result of the unwrapped incoming raw message. ## Request Body Example ```json { \"metadata\":{ }, \"payload\":\"ewogICAgImRhdGEiOiAiZGF0YSIKfQ==\", } ``` * 'metadata' - integration metadata; * 'payload' - JSON object representing the input raw message. ## Response Body Example * 'metadata' - integration metadata enriched with the data from the input message; * 'payload' - base64 string representation of the payload from the unwrapped input message; * 'contentType' - string representation payload contentType. - * @param integrationType A string value representing the integration type. One of the following: APACHE_PULSAR, AWS_IOT, AWS_KINESIS, AWS_SQS, AZURE_EVENT_HUB, AZURE_IOT_HUB, AZURE_SERVICE_BUS, CHIRPSTACK, COAP, CUSTOM, HTTP, IBM_WATSON_IOT, KAFKA, LORIOT, MQTT, OCEANCONNECT, OPC_UA, PUB_SUB, RABBITMQ, SIGFOX, TCP, THINGPARK, TMOBILE_IOT_CDP, TPE, TTI, TTN, TUYA, UDP (required) - * @param body A JSON value representing the input message. (required) + * Update Agent Application (saveAgentApplication) + * Updates the Agent Application. Available for users with 'TENANT_ADMIN' authority. + * @param agentApplication A JSON value representing the agent application. (required) * @param headers Optional headers to include in the request - * @return ApiResponse<com.fasterxml.jackson.databind.JsonNode> + * @return ApiResponse<AgentApplication> * @throws ApiException if fails to make API call */ - public ApiResponse unwrapRawPayloadWithHttpInfo(@Nonnull IntegrationType integrationType, @Nullable Object body, Map headers) throws ApiException { - HttpRequest.Builder localVarRequestBuilder = unwrapRawPayloadRequestBuilder(integrationType, body, headers); + public ApiResponse updateAgentApplicationWithHttpInfo(@Nonnull AgentApplication agentApplication, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = updateAgentApplicationRequestBuilder(agentApplication, headers); try { HttpResponse localVarResponse = memberVarHttpClient.send( localVarRequestBuilder.build(), @@ -66306,15 +72446,15 @@ public ApiResponse unwrapRawPayloadWith InputStream localVarResponseBody = null; try { if (localVarResponse.statusCode()/ 100 != 2) { - throw getApiException("unwrapRawPayload", localVarResponse); + throw getApiException("updateAgentApplication", localVarResponse); } localVarResponseBody = ApiClient.getResponseBody(localVarResponse); if (localVarResponseBody == null) { - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); } String responseBody = new String(localVarResponseBody.readAllBytes()); - com.fasterxml.jackson.databind.JsonNode responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); - return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + AgentApplication responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); } finally { if (localVarResponseBody != null) { localVarResponseBody.close(); @@ -66329,24 +72469,19 @@ public ApiResponse unwrapRawPayloadWith } } - private HttpRequest.Builder unwrapRawPayloadRequestBuilder(@Nonnull IntegrationType integrationType, @Nullable Object body, Map headers) throws ApiException { - // verify the required parameter 'integrationType' is set - if (integrationType == null) { - throw new ApiException(400, "Missing the required parameter 'integrationType' when calling unwrapRawPayload"); - } - // verify the required parameter 'body' is set - if (body == null) { - throw new ApiException(400, "Missing the required parameter 'body' when calling unwrapRawPayload"); + private HttpRequest.Builder updateAgentApplicationRequestBuilder(@Nonnull AgentApplication agentApplication, Map headers) throws ApiException { + // verify the required parameter 'agentApplication' is set + if (agentApplication == null) { + throw new ApiException(400, "Missing the required parameter 'agentApplication' when calling updateAgentApplication"); } HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); - String localVarPath = "/api/converter/unwrap/{integrationType}" - .replace("{integrationType}", ApiClient.urlEncode(integrationType.toString())); + String localVarPath = "/api/agent/app"; localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); localVarRequestBuilder.header("Content-Type", "application/json"); localVarRequestBuilder.header("Accept", "application/json"); try { - byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(body); - localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(agentApplication); + localVarRequestBuilder.method("PUT", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); } catch (IOException e) { throw new ApiException(e); } @@ -67458,6 +73593,90 @@ private HttpRequest.Builder updateMobileAppBundleOauth2ClientsRequestBuilder(@No return localVarRequestBuilder; } + /** + * Update Report public status (updateReportPublicStatus) + * Updates the public status of the report. When public, the report can be downloaded without authentication via the public link. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. + * @param reportId A string value representing the report id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param isPublic Whether the report should be publicly downloadable without authentication (required) + * @return Report + * @throws ApiException if fails to make API call + */ + public Report updateReportPublicStatus(@Nonnull UUID reportId, @Nonnull Boolean isPublic) throws ApiException { + ApiResponse localVarResponse = updateReportPublicStatusWithHttpInfo(reportId, isPublic, null); + return localVarResponse.getData(); + } + + /** + * Update Report public status (updateReportPublicStatus) + * Updates the public status of the report. When public, the report can be downloaded without authentication via the public link. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. + * @param reportId A string value representing the report id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param isPublic Whether the report should be publicly downloadable without authentication (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<Report> + * @throws ApiException if fails to make API call + */ + public ApiResponse updateReportPublicStatusWithHttpInfo(@Nonnull UUID reportId, @Nonnull Boolean isPublic, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = updateReportPublicStatusRequestBuilder(reportId, isPublic, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("updateReportPublicStatus", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + Report responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder updateReportPublicStatusRequestBuilder(@Nonnull UUID reportId, @Nonnull Boolean isPublic, Map headers) throws ApiException { + // verify the required parameter 'reportId' is set + if (reportId == null) { + throw new ApiException(400, "Missing the required parameter 'reportId' when calling updateReportPublicStatus"); + } + // verify the required parameter 'isPublic' is set + if (isPublic == null) { + throw new ApiException(400, "Missing the required parameter 'isPublic' when calling updateReportPublicStatus"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/v2/report/{reportId}/public/{isPublic}" + .replace("{reportId}", ApiClient.urlEncode(reportId.toString())) + .replace("{isPublic}", ApiClient.urlEncode(isPublic.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Accept", "application/json"); + localVarRequestBuilder.method("PUT", HttpRequest.BodyPublishers.noBody()); + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * updateResourceData * @@ -68100,6 +74319,95 @@ private HttpRequest.Builder updateWidgetsBundleWidgetTypesRequestBuilder(@Nonnul return localVarRequestBuilder; } + /** + * Upgrade Agent (upgradeAgent) + * Creates an agent-scoped upgrade event that makes the agent replace its own container with the given image. At most one agent upgrade can be active per agent, and it blocks all application events for that agent until it completes. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param agentUpgradeRequest (required) + * @return AgentAppEvent + * @throws ApiException if fails to make API call + */ + public AgentAppEvent upgradeAgent(@Nonnull String agentId, @Nonnull AgentUpgradeRequest agentUpgradeRequest) throws ApiException { + ApiResponse localVarResponse = upgradeAgentWithHttpInfo(agentId, agentUpgradeRequest, null); + return localVarResponse.getData(); + } + + /** + * Upgrade Agent (upgradeAgent) + * Creates an agent-scoped upgrade event that makes the agent replace its own container with the given image. At most one agent upgrade can be active per agent, and it blocks all application events for that agent until it completes. Available for users with 'TENANT_ADMIN' authority. + * @param agentId A string value representing the agent id. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + * @param agentUpgradeRequest (required) + * @param headers Optional headers to include in the request + * @return ApiResponse<AgentAppEvent> + * @throws ApiException if fails to make API call + */ + public ApiResponse upgradeAgentWithHttpInfo(@Nonnull String agentId, @Nonnull AgentUpgradeRequest agentUpgradeRequest, Map headers) throws ApiException { + HttpRequest.Builder localVarRequestBuilder = upgradeAgentRequestBuilder(agentId, agentUpgradeRequest, headers); + try { + HttpResponse localVarResponse = memberVarHttpClient.send( + localVarRequestBuilder.build(), + HttpResponse.BodyHandlers.ofInputStream()); + if (memberVarResponseInterceptor != null) { + memberVarResponseInterceptor.accept(localVarResponse); + } + InputStream localVarResponseBody = null; + try { + if (localVarResponse.statusCode()/ 100 != 2) { + throw getApiException("upgradeAgent", localVarResponse); + } + localVarResponseBody = ApiClient.getResponseBody(localVarResponse); + if (localVarResponseBody == null) { + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), null); + } + String responseBody = new String(localVarResponseBody.readAllBytes()); + AgentAppEvent responseValue = responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference() {}); + return new ApiResponse(localVarResponse.statusCode(), localVarResponse.headers().map(), responseValue); + } finally { + if (localVarResponseBody != null) { + localVarResponseBody.close(); + } + } + } catch (IOException e) { + throw new ApiException(e); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ApiException(e); + } + } + + private HttpRequest.Builder upgradeAgentRequestBuilder(@Nonnull String agentId, @Nonnull AgentUpgradeRequest agentUpgradeRequest, Map headers) throws ApiException { + // verify the required parameter 'agentId' is set + if (agentId == null) { + throw new ApiException(400, "Missing the required parameter 'agentId' when calling upgradeAgent"); + } + // verify the required parameter 'agentUpgradeRequest' is set + if (agentUpgradeRequest == null) { + throw new ApiException(400, "Missing the required parameter 'agentUpgradeRequest' when calling upgradeAgent"); + } + HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder(); + String localVarPath = "/api/agent/{agentId}/upgrade" + .replace("{agentId}", ApiClient.urlEncode(agentId.toString())); + localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath)); + localVarRequestBuilder.header("Content-Type", "application/json"); + localVarRequestBuilder.header("Accept", "application/json"); + try { + byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(agentUpgradeRequest); + localVarRequestBuilder.method("POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody)); + } catch (IOException e) { + throw new ApiException(e); + } + if (memberVarReadTimeout != null) { + localVarRequestBuilder.timeout(memberVarReadTimeout); + } + // Add custom headers if provided + localVarRequestBuilder = HttpRequestBuilderExtensions.withAdditionalHeaders(localVarRequestBuilder, headers); + if (memberVarInterceptor != null) { + memberVarInterceptor.accept(localVarRequestBuilder); + } + return localVarRequestBuilder; + } + /** * Upload Custom Translation (uploadCustomTranslation) * Upload the Custom Translation for specified locale. Request example: ```json {\"home\":\"MyHome\"} ``` Security check is performed to verify that the user has 'WRITE' permission for the white labeling resource. diff --git a/paas/src/main/java/org/thingsboard/client/model/Agent.java b/paas/src/main/java/org/thingsboard/client/model/Agent.java new file mode 100644 index 00000000..84e04c78 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/Agent.java @@ -0,0 +1,531 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentId; +import org.thingsboard.client.model.AgentProfileId; +import org.thingsboard.client.model.CustomerId; +import org.thingsboard.client.model.EntityId; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * Agent + */ +@JsonPropertyOrder({ + Agent.JSON_PROPERTY_ID, + Agent.JSON_PROPERTY_CREATED_TIME, + Agent.JSON_PROPERTY_ADDITIONAL_INFO, + Agent.JSON_PROPERTY_TENANT_ID, + Agent.JSON_PROPERTY_CUSTOMER_ID, + Agent.JSON_PROPERTY_NAME, + Agent.JSON_PROPERTY_DESCRIPTION, + Agent.JSON_PROPERTY_ROUTING_KEY, + Agent.JSON_PROPERTY_SECRET, + Agent.JSON_PROPERTY_AGENT_PROFILE_ID, + Agent.JSON_PROPERTY_VERSION, + Agent.JSON_PROPERTY_OWNER_ID +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class Agent { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_ADDITIONAL_INFO = "additionalInfo"; + @Nullable + private com.fasterxml.jackson.databind.JsonNode additionalInfo = null; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_CUSTOMER_ID = "customerId"; + @Nullable + private CustomerId customerId; + + public static final String JSON_PROPERTY_NAME = "name"; + @Nonnull + private String name; + + public static final String JSON_PROPERTY_DESCRIPTION = "description"; + @Nullable + private String description; + + public static final String JSON_PROPERTY_ROUTING_KEY = "routingKey"; + @Nonnull + private String routingKey; + + public static final String JSON_PROPERTY_SECRET = "secret"; + @Nonnull + private String secret; + + public static final String JSON_PROPERTY_AGENT_PROFILE_ID = "agentProfileId"; + @Nullable + private AgentProfileId agentProfileId; + + public static final String JSON_PROPERTY_VERSION = "version"; + @Nullable + private Long version; + + public static final String JSON_PROPERTY_OWNER_ID = "ownerId"; + @Nullable + private EntityId ownerId; + + public Agent() { + } + + @JsonCreator + public Agent( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime, + @JsonProperty(JSON_PROPERTY_TENANT_ID) TenantId tenantId, + @JsonProperty(JSON_PROPERTY_CUSTOMER_ID) CustomerId customerId, + @JsonProperty(JSON_PROPERTY_OWNER_ID) EntityId ownerId + ) { + this(); + this.createdTime = createdTime; + this.tenantId = tenantId; + this.customerId = customerId; + this.ownerId = ownerId; + } + + public Agent id(@Nullable AgentId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent Id. Specify this field to update the Agent. Referencing non-existing Agent Id will cause error. Omit this field to create new Agent. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentId id) { + this.id = id; + } + + + /** + * Timestamp of the agent creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + public Agent additionalInfo(@Nullable com.fasterxml.jackson.databind.JsonNode additionalInfo) { + this.additionalInfo = additionalInfo; + return this; + } + + /** + * Get additionalInfo + * @return additionalInfo + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ADDITIONAL_INFO, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public com.fasterxml.jackson.databind.JsonNode getAdditionalInfo() { + return additionalInfo; + } + + + @JsonProperty(value = JSON_PROPERTY_ADDITIONAL_INFO, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAdditionalInfo(@Nullable com.fasterxml.jackson.databind.JsonNode additionalInfo) { + this.additionalInfo = additionalInfo; + } + + + /** + * JSON object with Tenant Id. Use 'assignAgentToTenant' to change the Tenant Id. + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + + + /** + * JSON object with Customer Id. + * @return customerId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CUSTOMER_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public CustomerId getCustomerId() { + return customerId; + } + + + + + public Agent name(@Nonnull String name) { + this.name = name; + return this; + } + + /** + * Unique Agent Name in scope of Tenant + * @return name + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getName() { + return name; + } + + + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setName(@Nonnull String name) { + this.name = name; + } + + + public Agent description(@Nullable String description) { + this.description = description; + return this; + } + + /** + * Agent description + * @return description + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDescription() { + return description; + } + + + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDescription(@Nullable String description) { + this.description = description; + } + + + public Agent routingKey(@Nonnull String routingKey) { + this.routingKey = routingKey; + return this; + } + + /** + * Agent routing key used for authentication + * @return routingKey + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_ROUTING_KEY, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getRoutingKey() { + return routingKey; + } + + + @JsonProperty(value = JSON_PROPERTY_ROUTING_KEY, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setRoutingKey(@Nonnull String routingKey) { + this.routingKey = routingKey; + } + + + public Agent secret(@Nonnull String secret) { + this.secret = secret; + return this; + } + + /** + * Agent secret used for authentication + * @return secret + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_SECRET, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getSecret() { + return secret; + } + + + @JsonProperty(value = JSON_PROPERTY_SECRET, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setSecret(@Nonnull String secret) { + this.secret = secret; + } + + + public Agent agentProfileId(@Nullable AgentProfileId agentProfileId) { + this.agentProfileId = agentProfileId; + return this; + } + + /** + * JSON object with Agent Profile Id. Nullable. + * @return agentProfileId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentProfileId getAgentProfileId() { + return agentProfileId; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAgentProfileId(@Nullable AgentProfileId agentProfileId) { + this.agentProfileId = agentProfileId; + } + + + public Agent version(@Nullable Long version) { + this.version = version; + return this; + } + + /** + * Get version + * @return version + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getVersion() { + return version; + } + + + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVersion(@Nullable Long version) { + this.version = version; + } + + + /** + * JSON object with Customer or Tenant Id + * @return ownerId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_OWNER_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public EntityId getOwnerId() { + return ownerId; + } + + + + + /** + * Return true if this Agent object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Agent agent = (Agent) o; + return Objects.equals(this.id, agent.id) && + Objects.equals(this.createdTime, agent.createdTime) && + Objects.equals(this.additionalInfo, agent.additionalInfo) && + Objects.equals(this.tenantId, agent.tenantId) && + Objects.equals(this.customerId, agent.customerId) && + Objects.equals(this.name, agent.name) && + Objects.equals(this.description, agent.description) && + Objects.equals(this.routingKey, agent.routingKey) && + Objects.equals(this.secret, agent.secret) && + Objects.equals(this.agentProfileId, agent.agentProfileId) && + Objects.equals(this.version, agent.version) && + Objects.equals(this.ownerId, agent.ownerId); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, additionalInfo, tenantId, customerId, name, description, routingKey, secret, agentProfileId, version, ownerId); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Agent {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" additionalInfo: ").append(toIndentedString(additionalInfo)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" customerId: ").append(toIndentedString(customerId)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" description: ").append(toIndentedString(description)).append("\n"); + sb.append(" routingKey: ").append(toIndentedString(routingKey)).append("\n"); + sb.append(" secret: ").append(toIndentedString(secret)).append("\n"); + sb.append(" agentProfileId: ").append(toIndentedString(agentProfileId)).append("\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" ownerId: ").append(toIndentedString(ownerId)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `additionalInfo` to the URL query string + if (getAdditionalInfo() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sadditionalInfo%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAdditionalInfo())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `customerId` to the URL query string + if (getCustomerId() != null) { + joiner.add(getCustomerId().toUrlQueryString(prefix + "customerId" + suffix)); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sname%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `description` to the URL query string + if (getDescription() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sdescription%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDescription())))); + } + + // add `routingKey` to the URL query string + if (getRoutingKey() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sroutingKey%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getRoutingKey())))); + } + + // add `secret` to the URL query string + if (getSecret() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%ssecret%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getSecret())))); + } + + // add `agentProfileId` to the URL query string + if (getAgentProfileId() != null) { + joiner.add(getAgentProfileId().toUrlQueryString(prefix + "agentProfileId" + suffix)); + } + + // add `version` to the URL query string + if (getVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sversion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getVersion())))); + } + + // add `ownerId` to the URL query string + if (getOwnerId() != null) { + joiner.add(getOwnerId().toUrlQueryString(prefix + "ownerId" + suffix)); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppArgument.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppArgument.java new file mode 100644 index 00000000..f97bd893 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppArgument.java @@ -0,0 +1,412 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppArgumentFormat; +import org.thingsboard.client.model.AgentAppArgumentSource; +import org.thingsboard.client.model.AgentAppArgumentValueType; +import org.thingsboard.client.model.AttributeScope; +import org.thingsboard.client.model.EntityId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentAppArgument + */ +@JsonPropertyOrder({ + AgentAppArgument.JSON_PROPERTY_NAME, + AgentAppArgument.JSON_PROPERTY_SOURCE_TYPE, + AgentAppArgument.JSON_PROPERTY_SOURCE_ENTITY_ID, + AgentAppArgument.JSON_PROPERTY_VALUE_TYPE, + AgentAppArgument.JSON_PROPERTY_SCOPE, + AgentAppArgument.JSON_PROPERTY_KEY, + AgentAppArgument.JSON_PROPERTY_DEFAULT_VALUE, + AgentAppArgument.JSON_PROPERTY_FORMAT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentAppArgument { + public static final String JSON_PROPERTY_NAME = "name"; + @Nullable + private String name; + + public static final String JSON_PROPERTY_SOURCE_TYPE = "sourceType"; + @Nullable + private AgentAppArgumentSource sourceType; + + public static final String JSON_PROPERTY_SOURCE_ENTITY_ID = "sourceEntityId"; + @Nullable + private EntityId sourceEntityId; + + public static final String JSON_PROPERTY_VALUE_TYPE = "valueType"; + @Nullable + private AgentAppArgumentValueType valueType; + + public static final String JSON_PROPERTY_SCOPE = "scope"; + @Nullable + private AttributeScope scope; + + public static final String JSON_PROPERTY_KEY = "key"; + @Nullable + private String key; + + public static final String JSON_PROPERTY_DEFAULT_VALUE = "defaultValue"; + @Nullable + private String defaultValue; + + public static final String JSON_PROPERTY_FORMAT = "format"; + @Nullable + private AgentAppArgumentFormat format; + + public AgentAppArgument() { + } + + public AgentAppArgument name(@Nullable String name) { + this.name = name; + return this; + } + + /** + * Argument name, referenced in the compose as ${tb.<name>}. + * @return name + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + + @JsonProperty(value = JSON_PROPERTY_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setName(@Nullable String name) { + this.name = name; + } + + + public AgentAppArgument sourceType(@Nullable AgentAppArgumentSource sourceType) { + this.sourceType = sourceType; + return this; + } + + /** + * Source entity the value is resolved from. + * @return sourceType + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_SOURCE_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppArgumentSource getSourceType() { + return sourceType; + } + + + @JsonProperty(value = JSON_PROPERTY_SOURCE_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSourceType(@Nullable AgentAppArgumentSource sourceType) { + this.sourceType = sourceType; + } + + + public AgentAppArgument sourceEntityId(@Nullable EntityId sourceEntityId) { + this.sourceEntityId = sourceEntityId; + return this; + } + + /** + * Concrete source entity id. Required when sourceType references a specific entity (DEVICE, ASSET, CUSTOMER, EDGE); ignored for the context-derived sources. + * @return sourceEntityId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_SOURCE_ENTITY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public EntityId getSourceEntityId() { + return sourceEntityId; + } + + + @JsonProperty(value = JSON_PROPERTY_SOURCE_ENTITY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSourceEntityId(@Nullable EntityId sourceEntityId) { + this.sourceEntityId = sourceEntityId; + } + + + public AgentAppArgument valueType(@Nullable AgentAppArgumentValueType valueType) { + this.valueType = valueType; + return this; + } + + /** + * Whether the value is read from an attribute or the latest telemetry. + * @return valueType + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VALUE_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppArgumentValueType getValueType() { + return valueType; + } + + + @JsonProperty(value = JSON_PROPERTY_VALUE_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setValueType(@Nullable AgentAppArgumentValueType valueType) { + this.valueType = valueType; + } + + + public AgentAppArgument scope(@Nullable AttributeScope scope) { + this.scope = scope; + return this; + } + + /** + * Attribute scope. Applicable only when valueType is ATTRIBUTE. Defaults to SERVER_SCOPE. + * @return scope + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_SCOPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AttributeScope getScope() { + return scope; + } + + + @JsonProperty(value = JSON_PROPERTY_SCOPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setScope(@Nullable AttributeScope scope) { + this.scope = scope; + } + + + public AgentAppArgument key(@Nullable String key) { + this.key = key; + return this; + } + + /** + * Attribute or latest telemetry key to read. + * @return key + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_KEY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getKey() { + return key; + } + + + @JsonProperty(value = JSON_PROPERTY_KEY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setKey(@Nullable String key) { + this.key = key; + } + + + public AgentAppArgument defaultValue(@Nullable String defaultValue) { + this.defaultValue = defaultValue; + return this; + } + + /** + * Optional fallback value used when the source has no value for the key. + * @return defaultValue + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DEFAULT_VALUE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDefaultValue() { + return defaultValue; + } + + + @JsonProperty(value = JSON_PROPERTY_DEFAULT_VALUE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDefaultValue(@Nullable String defaultValue) { + this.defaultValue = defaultValue; + } + + + public AgentAppArgument format(@Nullable AgentAppArgumentFormat format) { + this.format = format; + return this; + } + + /** + * How the resolved value is injected into the compose: STRING (quoted) or JSON (raw, for arrays/objects/numbers when the placeholder is the whole value). Defaults to STRING. + * @return format + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_FORMAT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppArgumentFormat getFormat() { + return format; + } + + + @JsonProperty(value = JSON_PROPERTY_FORMAT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setFormat(@Nullable AgentAppArgumentFormat format) { + this.format = format; + } + + + /** + * Return true if this AgentAppArgument object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppArgument agentAppArgument = (AgentAppArgument) o; + return Objects.equals(this.name, agentAppArgument.name) && + Objects.equals(this.sourceType, agentAppArgument.sourceType) && + Objects.equals(this.sourceEntityId, agentAppArgument.sourceEntityId) && + Objects.equals(this.valueType, agentAppArgument.valueType) && + Objects.equals(this.scope, agentAppArgument.scope) && + Objects.equals(this.key, agentAppArgument.key) && + Objects.equals(this.defaultValue, agentAppArgument.defaultValue) && + Objects.equals(this.format, agentAppArgument.format); + } + + @Override + public int hashCode() { + return Objects.hash(name, sourceType, sourceEntityId, valueType, scope, key, defaultValue, format); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppArgument {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" sourceType: ").append(toIndentedString(sourceType)).append("\n"); + sb.append(" sourceEntityId: ").append(toIndentedString(sourceEntityId)).append("\n"); + sb.append(" valueType: ").append(toIndentedString(valueType)).append("\n"); + sb.append(" scope: ").append(toIndentedString(scope)).append("\n"); + sb.append(" key: ").append(toIndentedString(key)).append("\n"); + sb.append(" defaultValue: ").append(toIndentedString(defaultValue)).append("\n"); + sb.append(" format: ").append(toIndentedString(format)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sname%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `sourceType` to the URL query string + if (getSourceType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%ssourceType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getSourceType())))); + } + + // add `sourceEntityId` to the URL query string + if (getSourceEntityId() != null) { + joiner.add(getSourceEntityId().toUrlQueryString(prefix + "sourceEntityId" + suffix)); + } + + // add `valueType` to the URL query string + if (getValueType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%svalueType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getValueType())))); + } + + // add `scope` to the URL query string + if (getScope() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sscope%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getScope())))); + } + + // add `key` to the URL query string + if (getKey() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%skey%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getKey())))); + } + + // add `defaultValue` to the URL query string + if (getDefaultValue() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sdefaultValue%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDefaultValue())))); + } + + // add `format` to the URL query string + if (getFormat() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sformat%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getFormat())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppArgumentFormat.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppArgumentFormat.java new file mode 100644 index 00000000..a527f3c3 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppArgumentFormat.java @@ -0,0 +1,80 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets AgentAppArgumentFormat + */ +public enum AgentAppArgumentFormat { + + STRING("STRING"), + + JSON("JSON"); + + private String value; + + AgentAppArgumentFormat(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static AgentAppArgumentFormat fromValue(String value) { + for (AgentAppArgumentFormat b : AgentAppArgumentFormat.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppArgumentSource.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppArgumentSource.java new file mode 100644 index 00000000..1fc95c4e --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppArgumentSource.java @@ -0,0 +1,92 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets AgentAppArgumentSource + */ +public enum AgentAppArgumentSource { + + AGENT("AGENT"), + + OWNER("OWNER"), + + RELATED_ENTITY("RELATED_ENTITY"), + + TENANT("TENANT"), + + DEVICE("DEVICE"), + + ASSET("ASSET"), + + CUSTOMER("CUSTOMER"), + + EDGE("EDGE"); + + private String value; + + AgentAppArgumentSource(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static AgentAppArgumentSource fromValue(String value) { + for (AgentAppArgumentSource b : AgentAppArgumentSource.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppArgumentValueType.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppArgumentValueType.java new file mode 100644 index 00000000..ccb876f6 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppArgumentValueType.java @@ -0,0 +1,80 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets AgentAppArgumentValueType + */ +public enum AgentAppArgumentValueType { + + ATTRIBUTE("ATTRIBUTE"), + + LATEST_TELEMETRY("LATEST_TELEMETRY"); + + private String value; + + AgentAppArgumentValueType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static AgentAppArgumentValueType fromValue(String value) { + for (AgentAppArgumentValueType b : AgentAppArgumentValueType.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppConfig.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppConfig.java new file mode 100644 index 00000000..2d029838 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppConfig.java @@ -0,0 +1,264 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentAppArgument; +import org.thingsboard.client.model.AgentAppConfigType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * AgentAppConfig + */ +@JsonPropertyOrder({ + AgentAppConfig.JSON_PROPERTY_ARGUMENTS, + AgentAppConfig.JSON_PROPERTY_EDGE_ROUTING_KEY, + AgentAppConfig.JSON_PROPERTY_TYPE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) +@JsonSubTypes({ + @JsonSubTypes.Type(value = DockerComposeConfig.class, name = "DockerComposeConfig"), +}) + +public class AgentAppConfig { + public static final String JSON_PROPERTY_ARGUMENTS = "arguments"; + @Nullable + private List arguments = new ArrayList<>(); + + public static final String JSON_PROPERTY_EDGE_ROUTING_KEY = "edgeRoutingKey"; + @Nullable + private String edgeRoutingKey; + + public static final String JSON_PROPERTY_TYPE = "type"; + @Nullable + private AgentAppConfigType type; + + public AgentAppConfig() { + } + + public AgentAppConfig arguments(@Nullable List arguments) { + this.arguments = arguments; + return this; + } + + public AgentAppConfig addArgumentsItem(AgentAppArgument argumentsItem) { + if (this.arguments == null) { + this.arguments = new ArrayList<>(); + } + this.arguments.add(argumentsItem); + return this; + } + + /** + * Get arguments + * @return arguments + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ARGUMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getArguments() { + return arguments; + } + + + @JsonProperty(value = JSON_PROPERTY_ARGUMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setArguments(@Nullable List arguments) { + this.arguments = arguments; + } + + + public AgentAppConfig edgeRoutingKey(@Nullable String edgeRoutingKey) { + this.edgeRoutingKey = edgeRoutingKey; + return this; + } + + /** + * Get edgeRoutingKey + * @return edgeRoutingKey + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_EDGE_ROUTING_KEY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getEdgeRoutingKey() { + return edgeRoutingKey; + } + + + @JsonProperty(value = JSON_PROPERTY_EDGE_ROUTING_KEY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setEdgeRoutingKey(@Nullable String edgeRoutingKey) { + this.edgeRoutingKey = edgeRoutingKey; + } + + + public AgentAppConfig type(@Nullable AgentAppConfigType type) { + this.type = type; + return this; + } + + /** + * Get type + * @return type + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppConfigType getType() { + return type; + } + + + @JsonProperty(value = JSON_PROPERTY_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setType(@Nullable AgentAppConfigType type) { + this.type = type; + } + + + /** + * Return true if this AgentAppConfig object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppConfig agentAppConfig = (AgentAppConfig) o; + return Objects.equals(this.arguments, agentAppConfig.arguments) && + Objects.equals(this.edgeRoutingKey, agentAppConfig.edgeRoutingKey) && + Objects.equals(this.type, agentAppConfig.type); + } + + @Override + public int hashCode() { + return Objects.hash(arguments, edgeRoutingKey, type); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppConfig {\n"); + sb.append(" arguments: ").append(toIndentedString(arguments)).append("\n"); + sb.append(" edgeRoutingKey: ").append(toIndentedString(edgeRoutingKey)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `arguments` to the URL query string + if (getArguments() != null) { + for (int i = 0; i < getArguments().size(); i++) { + if (getArguments().get(i) != null) { + joiner.add(getArguments().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sarguments%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `edgeRoutingKey` to the URL query string + if (getEdgeRoutingKey() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sedgeRoutingKey%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getEdgeRoutingKey())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("DockerComposeConfig", DockerComposeConfig.class); + mappings.put("AgentAppConfig", AgentAppConfig.class); + JSON.registerDiscriminator(AgentAppConfig.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/ChatType.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppConfigType.java similarity index 86% rename from paas/src/main/java/org/thingsboard/client/model/ChatType.java rename to paas/src/main/java/org/thingsboard/client/model/AgentAppConfigType.java index d207f22f..bb93f5c3 100644 --- a/paas/src/main/java/org/thingsboard/client/model/ChatType.java +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppConfigType.java @@ -28,17 +28,15 @@ import com.fasterxml.jackson.annotation.JsonValue; /** - * Gets or Sets ChatType + * Gets or Sets AgentAppConfigType */ -public enum ChatType { +public enum AgentAppConfigType { - GENERIC("GENERIC"), - - SOLUTION_BUILDER("SOLUTION_BUILDER"); + DOCKER_COMPOSE("DOCKER_COMPOSE"); private String value; - ChatType(String value) { + AgentAppConfigType(String value) { this.value = value; } @@ -53,8 +51,8 @@ public String toString() { } @JsonCreator - public static ChatType fromValue(String value) { - for (ChatType b : ChatType.values()) { + public static AgentAppConfigType fromValue(String value) { + for (AgentAppConfigType b : AgentAppConfigType.values()) { if (b.value.equals(value)) { return b; } diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppEvent.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppEvent.java new file mode 100644 index 00000000..1cf57154 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppEvent.java @@ -0,0 +1,849 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppEventActionType; +import org.thingsboard.client.model.AgentAppEventId; +import org.thingsboard.client.model.AgentAppEventStepStatesValue; +import org.thingsboard.client.model.AgentApplicationId; +import org.thingsboard.client.model.AgentId; +import org.thingsboard.client.model.AgentProcessingStatus; +import org.thingsboard.client.model.ProcessingStartStatus; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentAppEvent + */ +@JsonPropertyOrder({ + AgentAppEvent.JSON_PROPERTY_ID, + AgentAppEvent.JSON_PROPERTY_CREATED_TIME, + AgentAppEvent.JSON_PROPERTY_TENANT_ID, + AgentAppEvent.JSON_PROPERTY_APPLICATION_ID, + AgentAppEvent.JSON_PROPERTY_AGENT_ID, + AgentAppEvent.JSON_PROPERTY_APPLICATION_NAME, + AgentAppEvent.JSON_PROPERTY_ACTION_TYPE, + AgentAppEvent.JSON_PROPERTY_START_STATUS, + AgentAppEvent.JSON_PROPERTY_PROCESSING_STATUS, + AgentAppEvent.JSON_PROPERTY_CURRENT_STEP_ID, + AgentAppEvent.JSON_PROPERTY_CURRENT_ACTIVITY, + AgentAppEvent.JSON_PROPERTY_ERROR_MESSAGE, + AgentAppEvent.JSON_PROPERTY_UPDATED_TIME, + AgentAppEvent.JSON_PROPERTY_STEP_STATES, + AgentAppEvent.JSON_PROPERTY_BULK_ACTION_ID, + AgentAppEvent.JSON_PROPERTY_RESOLVED_ARGUMENTS, + AgentAppEvent.JSON_PROPERTY_WINNER_CONTAINER_ID, + AgentAppEvent.JSON_PROPERTY_FINALIZE_DEADLINE_TS, + AgentAppEvent.JSON_PROPERTY_CONTEXT_METADATA +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentAppEvent { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentAppEventId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_APPLICATION_ID = "applicationId"; + @Nullable + private AgentApplicationId applicationId; + + public static final String JSON_PROPERTY_AGENT_ID = "agentId"; + @Nullable + private AgentId agentId; + + public static final String JSON_PROPERTY_APPLICATION_NAME = "applicationName"; + @Nullable + private String applicationName; + + public static final String JSON_PROPERTY_ACTION_TYPE = "actionType"; + @Nullable + private AgentAppEventActionType actionType; + + public static final String JSON_PROPERTY_START_STATUS = "startStatus"; + @Nullable + private ProcessingStartStatus startStatus; + + public static final String JSON_PROPERTY_PROCESSING_STATUS = "processingStatus"; + @Nullable + private AgentProcessingStatus processingStatus; + + public static final String JSON_PROPERTY_CURRENT_STEP_ID = "currentStepId"; + @Nullable + private UUID currentStepId; + + public static final String JSON_PROPERTY_CURRENT_ACTIVITY = "currentActivity"; + @Nullable + private String currentActivity; + + public static final String JSON_PROPERTY_ERROR_MESSAGE = "errorMessage"; + @Nullable + private String errorMessage; + + public static final String JSON_PROPERTY_UPDATED_TIME = "updatedTime"; + @Nullable + private Long updatedTime; + + public static final String JSON_PROPERTY_STEP_STATES = "stepStates"; + @Nullable + private Map stepStates = new HashMap<>(); + + public static final String JSON_PROPERTY_BULK_ACTION_ID = "bulkActionId"; + @Nullable + private UUID bulkActionId; + + public static final String JSON_PROPERTY_RESOLVED_ARGUMENTS = "resolvedArguments"; + @Nullable + private Map resolvedArguments = new HashMap<>(); + + public static final String JSON_PROPERTY_WINNER_CONTAINER_ID = "winnerContainerId"; + @Nullable + private String winnerContainerId; + + public static final String JSON_PROPERTY_FINALIZE_DEADLINE_TS = "finalizeDeadlineTs"; + @Nullable + private Long finalizeDeadlineTs; + + public static final String JSON_PROPERTY_CONTEXT_METADATA = "contextMetadata"; + @Nullable + private Map contextMetadata = new HashMap<>(); + + public AgentAppEvent() { + } + + @JsonCreator + public AgentAppEvent( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime + ) { + this(); + this.createdTime = createdTime; + } + + public AgentAppEvent id(@Nullable AgentAppEventId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent App Event Id. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppEventId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentAppEventId id) { + this.id = id; + } + + + /** + * Timestamp of the event creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + public AgentAppEvent tenantId(@Nullable TenantId tenantId) { + this.tenantId = tenantId; + return this; + } + + /** + * Get tenantId + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTenantId(@Nullable TenantId tenantId) { + this.tenantId = tenantId; + } + + + public AgentAppEvent applicationId(@Nullable AgentApplicationId applicationId) { + this.applicationId = applicationId; + return this; + } + + /** + * Get applicationId + * @return applicationId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_APPLICATION_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentApplicationId getApplicationId() { + return applicationId; + } + + + @JsonProperty(value = JSON_PROPERTY_APPLICATION_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setApplicationId(@Nullable AgentApplicationId applicationId) { + this.applicationId = applicationId; + } + + + public AgentAppEvent agentId(@Nullable AgentId agentId) { + this.agentId = agentId; + return this; + } + + /** + * Get agentId + * @return agentId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentId getAgentId() { + return agentId; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAgentId(@Nullable AgentId agentId) { + this.agentId = agentId; + } + + + public AgentAppEvent applicationName(@Nullable String applicationName) { + this.applicationName = applicationName; + return this; + } + + /** + * Get applicationName + * @return applicationName + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_APPLICATION_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getApplicationName() { + return applicationName; + } + + + @JsonProperty(value = JSON_PROPERTY_APPLICATION_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setApplicationName(@Nullable String applicationName) { + this.applicationName = applicationName; + } + + + public AgentAppEvent actionType(@Nullable AgentAppEventActionType actionType) { + this.actionType = actionType; + return this; + } + + /** + * Get actionType + * @return actionType + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ACTION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppEventActionType getActionType() { + return actionType; + } + + + @JsonProperty(value = JSON_PROPERTY_ACTION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setActionType(@Nullable AgentAppEventActionType actionType) { + this.actionType = actionType; + } + + + public AgentAppEvent startStatus(@Nullable ProcessingStartStatus startStatus) { + this.startStatus = startStatus; + return this; + } + + /** + * Get startStatus + * @return startStatus + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_START_STATUS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ProcessingStartStatus getStartStatus() { + return startStatus; + } + + + @JsonProperty(value = JSON_PROPERTY_START_STATUS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setStartStatus(@Nullable ProcessingStartStatus startStatus) { + this.startStatus = startStatus; + } + + + public AgentAppEvent processingStatus(@Nullable AgentProcessingStatus processingStatus) { + this.processingStatus = processingStatus; + return this; + } + + /** + * Get processingStatus + * @return processingStatus + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROCESSING_STATUS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentProcessingStatus getProcessingStatus() { + return processingStatus; + } + + + @JsonProperty(value = JSON_PROPERTY_PROCESSING_STATUS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProcessingStatus(@Nullable AgentProcessingStatus processingStatus) { + this.processingStatus = processingStatus; + } + + + public AgentAppEvent currentStepId(@Nullable UUID currentStepId) { + this.currentStepId = currentStepId; + return this; + } + + /** + * Get currentStepId + * @return currentStepId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CURRENT_STEP_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UUID getCurrentStepId() { + return currentStepId; + } + + + @JsonProperty(value = JSON_PROPERTY_CURRENT_STEP_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCurrentStepId(@Nullable UUID currentStepId) { + this.currentStepId = currentStepId; + } + + + public AgentAppEvent currentActivity(@Nullable String currentActivity) { + this.currentActivity = currentActivity; + return this; + } + + /** + * Get currentActivity + * @return currentActivity + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CURRENT_ACTIVITY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getCurrentActivity() { + return currentActivity; + } + + + @JsonProperty(value = JSON_PROPERTY_CURRENT_ACTIVITY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCurrentActivity(@Nullable String currentActivity) { + this.currentActivity = currentActivity; + } + + + public AgentAppEvent errorMessage(@Nullable String errorMessage) { + this.errorMessage = errorMessage; + return this; + } + + /** + * Get errorMessage + * @return errorMessage + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ERROR_MESSAGE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getErrorMessage() { + return errorMessage; + } + + + @JsonProperty(value = JSON_PROPERTY_ERROR_MESSAGE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setErrorMessage(@Nullable String errorMessage) { + this.errorMessage = errorMessage; + } + + + public AgentAppEvent updatedTime(@Nullable Long updatedTime) { + this.updatedTime = updatedTime; + return this; + } + + /** + * Get updatedTime + * @return updatedTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_UPDATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getUpdatedTime() { + return updatedTime; + } + + + @JsonProperty(value = JSON_PROPERTY_UPDATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUpdatedTime(@Nullable Long updatedTime) { + this.updatedTime = updatedTime; + } + + + public AgentAppEvent stepStates(@Nullable Map stepStates) { + this.stepStates = stepStates; + return this; + } + + public AgentAppEvent putStepStatesItem(String key, AgentAppEventStepStatesValue stepStatesItem) { + if (this.stepStates == null) { + this.stepStates = new HashMap<>(); + } + this.stepStates.put(key, stepStatesItem); + return this; + } + + /** + * Get stepStates + * @return stepStates + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_STEP_STATES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getStepStates() { + return stepStates; + } + + + @JsonProperty(value = JSON_PROPERTY_STEP_STATES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setStepStates(@Nullable Map stepStates) { + this.stepStates = stepStates; + } + + + public AgentAppEvent bulkActionId(@Nullable UUID bulkActionId) { + this.bulkActionId = bulkActionId; + return this; + } + + /** + * Get bulkActionId + * @return bulkActionId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_BULK_ACTION_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UUID getBulkActionId() { + return bulkActionId; + } + + + @JsonProperty(value = JSON_PROPERTY_BULK_ACTION_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBulkActionId(@Nullable UUID bulkActionId) { + this.bulkActionId = bulkActionId; + } + + + public AgentAppEvent resolvedArguments(@Nullable Map resolvedArguments) { + this.resolvedArguments = resolvedArguments; + return this; + } + + public AgentAppEvent putResolvedArgumentsItem(String key, String resolvedArgumentsItem) { + if (this.resolvedArguments == null) { + this.resolvedArguments = new HashMap<>(); + } + this.resolvedArguments.put(key, resolvedArgumentsItem); + return this; + } + + /** + * Get resolvedArguments + * @return resolvedArguments + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_RESOLVED_ARGUMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getResolvedArguments() { + return resolvedArguments; + } + + + @JsonProperty(value = JSON_PROPERTY_RESOLVED_ARGUMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setResolvedArguments(@Nullable Map resolvedArguments) { + this.resolvedArguments = resolvedArguments; + } + + + public AgentAppEvent winnerContainerId(@Nullable String winnerContainerId) { + this.winnerContainerId = winnerContainerId; + return this; + } + + /** + * Get winnerContainerId + * @return winnerContainerId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_WINNER_CONTAINER_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getWinnerContainerId() { + return winnerContainerId; + } + + + @JsonProperty(value = JSON_PROPERTY_WINNER_CONTAINER_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setWinnerContainerId(@Nullable String winnerContainerId) { + this.winnerContainerId = winnerContainerId; + } + + + public AgentAppEvent finalizeDeadlineTs(@Nullable Long finalizeDeadlineTs) { + this.finalizeDeadlineTs = finalizeDeadlineTs; + return this; + } + + /** + * Get finalizeDeadlineTs + * @return finalizeDeadlineTs + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_FINALIZE_DEADLINE_TS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getFinalizeDeadlineTs() { + return finalizeDeadlineTs; + } + + + @JsonProperty(value = JSON_PROPERTY_FINALIZE_DEADLINE_TS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setFinalizeDeadlineTs(@Nullable Long finalizeDeadlineTs) { + this.finalizeDeadlineTs = finalizeDeadlineTs; + } + + + public AgentAppEvent contextMetadata(@Nullable Map contextMetadata) { + this.contextMetadata = contextMetadata; + return this; + } + + public AgentAppEvent putContextMetadataItem(String key, String contextMetadataItem) { + if (this.contextMetadata == null) { + this.contextMetadata = new HashMap<>(); + } + this.contextMetadata.put(key, contextMetadataItem); + return this; + } + + /** + * Get contextMetadata + * @return contextMetadata + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CONTEXT_METADATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getContextMetadata() { + return contextMetadata; + } + + + @JsonProperty(value = JSON_PROPERTY_CONTEXT_METADATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setContextMetadata(@Nullable Map contextMetadata) { + this.contextMetadata = contextMetadata; + } + + + /** + * Return true if this AgentAppEvent object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppEvent agentAppEvent = (AgentAppEvent) o; + return Objects.equals(this.id, agentAppEvent.id) && + Objects.equals(this.createdTime, agentAppEvent.createdTime) && + Objects.equals(this.tenantId, agentAppEvent.tenantId) && + Objects.equals(this.applicationId, agentAppEvent.applicationId) && + Objects.equals(this.agentId, agentAppEvent.agentId) && + Objects.equals(this.applicationName, agentAppEvent.applicationName) && + Objects.equals(this.actionType, agentAppEvent.actionType) && + Objects.equals(this.startStatus, agentAppEvent.startStatus) && + Objects.equals(this.processingStatus, agentAppEvent.processingStatus) && + Objects.equals(this.currentStepId, agentAppEvent.currentStepId) && + Objects.equals(this.currentActivity, agentAppEvent.currentActivity) && + Objects.equals(this.errorMessage, agentAppEvent.errorMessage) && + Objects.equals(this.updatedTime, agentAppEvent.updatedTime) && + Objects.equals(this.stepStates, agentAppEvent.stepStates) && + Objects.equals(this.bulkActionId, agentAppEvent.bulkActionId) && + Objects.equals(this.resolvedArguments, agentAppEvent.resolvedArguments) && + Objects.equals(this.winnerContainerId, agentAppEvent.winnerContainerId) && + Objects.equals(this.finalizeDeadlineTs, agentAppEvent.finalizeDeadlineTs) && + Objects.equals(this.contextMetadata, agentAppEvent.contextMetadata); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, tenantId, applicationId, agentId, applicationName, actionType, startStatus, processingStatus, currentStepId, currentActivity, errorMessage, updatedTime, stepStates, bulkActionId, resolvedArguments, winnerContainerId, finalizeDeadlineTs, contextMetadata); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppEvent {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" applicationId: ").append(toIndentedString(applicationId)).append("\n"); + sb.append(" agentId: ").append(toIndentedString(agentId)).append("\n"); + sb.append(" applicationName: ").append(toIndentedString(applicationName)).append("\n"); + sb.append(" actionType: ").append(toIndentedString(actionType)).append("\n"); + sb.append(" startStatus: ").append(toIndentedString(startStatus)).append("\n"); + sb.append(" processingStatus: ").append(toIndentedString(processingStatus)).append("\n"); + sb.append(" currentStepId: ").append(toIndentedString(currentStepId)).append("\n"); + sb.append(" currentActivity: ").append(toIndentedString(currentActivity)).append("\n"); + sb.append(" errorMessage: ").append(toIndentedString(errorMessage)).append("\n"); + sb.append(" updatedTime: ").append(toIndentedString(updatedTime)).append("\n"); + sb.append(" stepStates: ").append(toIndentedString(stepStates)).append("\n"); + sb.append(" bulkActionId: ").append(toIndentedString(bulkActionId)).append("\n"); + sb.append(" resolvedArguments: ").append(toIndentedString(resolvedArguments)).append("\n"); + sb.append(" winnerContainerId: ").append(toIndentedString(winnerContainerId)).append("\n"); + sb.append(" finalizeDeadlineTs: ").append(toIndentedString(finalizeDeadlineTs)).append("\n"); + sb.append(" contextMetadata: ").append(toIndentedString(contextMetadata)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `applicationId` to the URL query string + if (getApplicationId() != null) { + joiner.add(getApplicationId().toUrlQueryString(prefix + "applicationId" + suffix)); + } + + // add `agentId` to the URL query string + if (getAgentId() != null) { + joiner.add(getAgentId().toUrlQueryString(prefix + "agentId" + suffix)); + } + + // add `applicationName` to the URL query string + if (getApplicationName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sapplicationName%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getApplicationName())))); + } + + // add `actionType` to the URL query string + if (getActionType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sactionType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getActionType())))); + } + + // add `startStatus` to the URL query string + if (getStartStatus() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstartStatus%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStartStatus())))); + } + + // add `processingStatus` to the URL query string + if (getProcessingStatus() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprocessingStatus%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProcessingStatus())))); + } + + // add `currentStepId` to the URL query string + if (getCurrentStepId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scurrentStepId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCurrentStepId())))); + } + + // add `currentActivity` to the URL query string + if (getCurrentActivity() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scurrentActivity%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCurrentActivity())))); + } + + // add `errorMessage` to the URL query string + if (getErrorMessage() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%serrorMessage%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getErrorMessage())))); + } + + // add `updatedTime` to the URL query string + if (getUpdatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%supdatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getUpdatedTime())))); + } + + // add `stepStates` to the URL query string + if (getStepStates() != null) { + for (String _key : getStepStates().keySet()) { + if (getStepStates().get(_key) != null) { + joiner.add(getStepStates().get(_key).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sstepStates%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, _key, containerSuffix)))); + } + } + } + + // add `bulkActionId` to the URL query string + if (getBulkActionId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sbulkActionId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getBulkActionId())))); + } + + // add `resolvedArguments` to the URL query string + if (getResolvedArguments() != null) { + for (String _key : getResolvedArguments().keySet()) { + joiner.add(String.format(java.util.Locale.ROOT, "%sresolvedArguments%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, _key, containerSuffix), + getResolvedArguments().get(_key), ApiClient.urlEncode(ApiClient.valueToString(getResolvedArguments().get(_key))))); + } + } + + // add `winnerContainerId` to the URL query string + if (getWinnerContainerId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%swinnerContainerId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getWinnerContainerId())))); + } + + // add `finalizeDeadlineTs` to the URL query string + if (getFinalizeDeadlineTs() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sfinalizeDeadlineTs%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getFinalizeDeadlineTs())))); + } + + // add `contextMetadata` to the URL query string + if (getContextMetadata() != null) { + for (String _key : getContextMetadata().keySet()) { + joiner.add(String.format(java.util.Locale.ROOT, "%scontextMetadata%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, _key, containerSuffix), + getContextMetadata().get(_key), ApiClient.urlEncode(ApiClient.valueToString(getContextMetadata().get(_key))))); + } + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppEventActionType.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppEventActionType.java new file mode 100644 index 00000000..c09799e1 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppEventActionType.java @@ -0,0 +1,90 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets AgentAppEventActionType + */ +public enum AgentAppEventActionType { + + INSTALL("INSTALL"), + + UPDATE("UPDATE"), + + DELETE("DELETE"), + + RESTART("RESTART"), + + ROLLBACK("ROLLBACK"), + + UPGRADE("UPGRADE"), + + AGENT_UPGRADE("AGENT_UPGRADE"); + + private String value; + + AgentAppEventActionType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static AgentAppEventActionType fromValue(String value) { + for (AgentAppEventActionType b : AgentAppEventActionType.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppEventId.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppEventId.java new file mode 100644 index 00000000..542dc3af --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppEventId.java @@ -0,0 +1,155 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.EntityId; +import org.thingsboard.client.model.EntityType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * AgentAppEventId + */ +@JsonPropertyOrder({ +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "entityType", // ignore manually set entityType, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the entityType to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "entityType", visible = true) + +public class AgentAppEventId extends EntityId { + public AgentAppEventId() { + } + + @Override + public AgentAppEventId id(@Nonnull UUID id) { + this.setId(id); + return this; + } + + /** + * Return true if this AgentAppEventId object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppEventId {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `entityType` to the URL query string + if (getEntityType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sentityType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getEntityType())))); + } + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("AgentAppEventId", AgentAppEventId.class); + JSON.registerDiscriminator(AgentAppEventId.class, "entityType", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppEventInfo.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppEventInfo.java new file mode 100644 index 00000000..6fa466d5 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppEventInfo.java @@ -0,0 +1,877 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppEventActionType; +import org.thingsboard.client.model.AgentAppEventId; +import org.thingsboard.client.model.AgentAppEventStepStatesValue; +import org.thingsboard.client.model.AgentApplicationId; +import org.thingsboard.client.model.AgentId; +import org.thingsboard.client.model.AgentProcessingStatus; +import org.thingsboard.client.model.ProcessingStartStatus; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentAppEventInfo + */ +@JsonPropertyOrder({ + AgentAppEventInfo.JSON_PROPERTY_ID, + AgentAppEventInfo.JSON_PROPERTY_CREATED_TIME, + AgentAppEventInfo.JSON_PROPERTY_TENANT_ID, + AgentAppEventInfo.JSON_PROPERTY_APPLICATION_ID, + AgentAppEventInfo.JSON_PROPERTY_AGENT_ID, + AgentAppEventInfo.JSON_PROPERTY_APPLICATION_NAME, + AgentAppEventInfo.JSON_PROPERTY_ACTION_TYPE, + AgentAppEventInfo.JSON_PROPERTY_START_STATUS, + AgentAppEventInfo.JSON_PROPERTY_PROCESSING_STATUS, + AgentAppEventInfo.JSON_PROPERTY_CURRENT_STEP_ID, + AgentAppEventInfo.JSON_PROPERTY_CURRENT_ACTIVITY, + AgentAppEventInfo.JSON_PROPERTY_ERROR_MESSAGE, + AgentAppEventInfo.JSON_PROPERTY_UPDATED_TIME, + AgentAppEventInfo.JSON_PROPERTY_STEP_STATES, + AgentAppEventInfo.JSON_PROPERTY_BULK_ACTION_ID, + AgentAppEventInfo.JSON_PROPERTY_RESOLVED_ARGUMENTS, + AgentAppEventInfo.JSON_PROPERTY_WINNER_CONTAINER_ID, + AgentAppEventInfo.JSON_PROPERTY_FINALIZE_DEADLINE_TS, + AgentAppEventInfo.JSON_PROPERTY_CONTEXT_METADATA, + AgentAppEventInfo.JSON_PROPERTY_AGENT_NAME +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentAppEventInfo { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentAppEventId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_APPLICATION_ID = "applicationId"; + @Nullable + private AgentApplicationId applicationId; + + public static final String JSON_PROPERTY_AGENT_ID = "agentId"; + @Nullable + private AgentId agentId; + + public static final String JSON_PROPERTY_APPLICATION_NAME = "applicationName"; + @Nullable + private String applicationName; + + public static final String JSON_PROPERTY_ACTION_TYPE = "actionType"; + @Nullable + private AgentAppEventActionType actionType; + + public static final String JSON_PROPERTY_START_STATUS = "startStatus"; + @Nullable + private ProcessingStartStatus startStatus; + + public static final String JSON_PROPERTY_PROCESSING_STATUS = "processingStatus"; + @Nullable + private AgentProcessingStatus processingStatus; + + public static final String JSON_PROPERTY_CURRENT_STEP_ID = "currentStepId"; + @Nullable + private UUID currentStepId; + + public static final String JSON_PROPERTY_CURRENT_ACTIVITY = "currentActivity"; + @Nullable + private String currentActivity; + + public static final String JSON_PROPERTY_ERROR_MESSAGE = "errorMessage"; + @Nullable + private String errorMessage; + + public static final String JSON_PROPERTY_UPDATED_TIME = "updatedTime"; + @Nullable + private Long updatedTime; + + public static final String JSON_PROPERTY_STEP_STATES = "stepStates"; + @Nullable + private Map stepStates = new HashMap<>(); + + public static final String JSON_PROPERTY_BULK_ACTION_ID = "bulkActionId"; + @Nullable + private UUID bulkActionId; + + public static final String JSON_PROPERTY_RESOLVED_ARGUMENTS = "resolvedArguments"; + @Nullable + private Map resolvedArguments = new HashMap<>(); + + public static final String JSON_PROPERTY_WINNER_CONTAINER_ID = "winnerContainerId"; + @Nullable + private String winnerContainerId; + + public static final String JSON_PROPERTY_FINALIZE_DEADLINE_TS = "finalizeDeadlineTs"; + @Nullable + private Long finalizeDeadlineTs; + + public static final String JSON_PROPERTY_CONTEXT_METADATA = "contextMetadata"; + @Nullable + private Map contextMetadata = new HashMap<>(); + + public static final String JSON_PROPERTY_AGENT_NAME = "agentName"; + @Nullable + private String agentName; + + public AgentAppEventInfo() { + } + + @JsonCreator + public AgentAppEventInfo( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime, + @JsonProperty(JSON_PROPERTY_AGENT_NAME) String agentName + ) { + this(); + this.createdTime = createdTime; + this.agentName = agentName; + } + + public AgentAppEventInfo id(@Nullable AgentAppEventId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent App Event Id. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppEventId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentAppEventId id) { + this.id = id; + } + + + /** + * Timestamp of the event creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + public AgentAppEventInfo tenantId(@Nullable TenantId tenantId) { + this.tenantId = tenantId; + return this; + } + + /** + * Get tenantId + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTenantId(@Nullable TenantId tenantId) { + this.tenantId = tenantId; + } + + + public AgentAppEventInfo applicationId(@Nullable AgentApplicationId applicationId) { + this.applicationId = applicationId; + return this; + } + + /** + * Get applicationId + * @return applicationId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_APPLICATION_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentApplicationId getApplicationId() { + return applicationId; + } + + + @JsonProperty(value = JSON_PROPERTY_APPLICATION_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setApplicationId(@Nullable AgentApplicationId applicationId) { + this.applicationId = applicationId; + } + + + public AgentAppEventInfo agentId(@Nullable AgentId agentId) { + this.agentId = agentId; + return this; + } + + /** + * Get agentId + * @return agentId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentId getAgentId() { + return agentId; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAgentId(@Nullable AgentId agentId) { + this.agentId = agentId; + } + + + public AgentAppEventInfo applicationName(@Nullable String applicationName) { + this.applicationName = applicationName; + return this; + } + + /** + * Get applicationName + * @return applicationName + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_APPLICATION_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getApplicationName() { + return applicationName; + } + + + @JsonProperty(value = JSON_PROPERTY_APPLICATION_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setApplicationName(@Nullable String applicationName) { + this.applicationName = applicationName; + } + + + public AgentAppEventInfo actionType(@Nullable AgentAppEventActionType actionType) { + this.actionType = actionType; + return this; + } + + /** + * Get actionType + * @return actionType + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ACTION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppEventActionType getActionType() { + return actionType; + } + + + @JsonProperty(value = JSON_PROPERTY_ACTION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setActionType(@Nullable AgentAppEventActionType actionType) { + this.actionType = actionType; + } + + + public AgentAppEventInfo startStatus(@Nullable ProcessingStartStatus startStatus) { + this.startStatus = startStatus; + return this; + } + + /** + * Get startStatus + * @return startStatus + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_START_STATUS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ProcessingStartStatus getStartStatus() { + return startStatus; + } + + + @JsonProperty(value = JSON_PROPERTY_START_STATUS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setStartStatus(@Nullable ProcessingStartStatus startStatus) { + this.startStatus = startStatus; + } + + + public AgentAppEventInfo processingStatus(@Nullable AgentProcessingStatus processingStatus) { + this.processingStatus = processingStatus; + return this; + } + + /** + * Get processingStatus + * @return processingStatus + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROCESSING_STATUS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentProcessingStatus getProcessingStatus() { + return processingStatus; + } + + + @JsonProperty(value = JSON_PROPERTY_PROCESSING_STATUS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProcessingStatus(@Nullable AgentProcessingStatus processingStatus) { + this.processingStatus = processingStatus; + } + + + public AgentAppEventInfo currentStepId(@Nullable UUID currentStepId) { + this.currentStepId = currentStepId; + return this; + } + + /** + * Get currentStepId + * @return currentStepId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CURRENT_STEP_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UUID getCurrentStepId() { + return currentStepId; + } + + + @JsonProperty(value = JSON_PROPERTY_CURRENT_STEP_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCurrentStepId(@Nullable UUID currentStepId) { + this.currentStepId = currentStepId; + } + + + public AgentAppEventInfo currentActivity(@Nullable String currentActivity) { + this.currentActivity = currentActivity; + return this; + } + + /** + * Get currentActivity + * @return currentActivity + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CURRENT_ACTIVITY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getCurrentActivity() { + return currentActivity; + } + + + @JsonProperty(value = JSON_PROPERTY_CURRENT_ACTIVITY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCurrentActivity(@Nullable String currentActivity) { + this.currentActivity = currentActivity; + } + + + public AgentAppEventInfo errorMessage(@Nullable String errorMessage) { + this.errorMessage = errorMessage; + return this; + } + + /** + * Get errorMessage + * @return errorMessage + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ERROR_MESSAGE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getErrorMessage() { + return errorMessage; + } + + + @JsonProperty(value = JSON_PROPERTY_ERROR_MESSAGE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setErrorMessage(@Nullable String errorMessage) { + this.errorMessage = errorMessage; + } + + + public AgentAppEventInfo updatedTime(@Nullable Long updatedTime) { + this.updatedTime = updatedTime; + return this; + } + + /** + * Get updatedTime + * @return updatedTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_UPDATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getUpdatedTime() { + return updatedTime; + } + + + @JsonProperty(value = JSON_PROPERTY_UPDATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUpdatedTime(@Nullable Long updatedTime) { + this.updatedTime = updatedTime; + } + + + public AgentAppEventInfo stepStates(@Nullable Map stepStates) { + this.stepStates = stepStates; + return this; + } + + public AgentAppEventInfo putStepStatesItem(String key, AgentAppEventStepStatesValue stepStatesItem) { + if (this.stepStates == null) { + this.stepStates = new HashMap<>(); + } + this.stepStates.put(key, stepStatesItem); + return this; + } + + /** + * Get stepStates + * @return stepStates + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_STEP_STATES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getStepStates() { + return stepStates; + } + + + @JsonProperty(value = JSON_PROPERTY_STEP_STATES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setStepStates(@Nullable Map stepStates) { + this.stepStates = stepStates; + } + + + public AgentAppEventInfo bulkActionId(@Nullable UUID bulkActionId) { + this.bulkActionId = bulkActionId; + return this; + } + + /** + * Get bulkActionId + * @return bulkActionId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_BULK_ACTION_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UUID getBulkActionId() { + return bulkActionId; + } + + + @JsonProperty(value = JSON_PROPERTY_BULK_ACTION_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBulkActionId(@Nullable UUID bulkActionId) { + this.bulkActionId = bulkActionId; + } + + + public AgentAppEventInfo resolvedArguments(@Nullable Map resolvedArguments) { + this.resolvedArguments = resolvedArguments; + return this; + } + + public AgentAppEventInfo putResolvedArgumentsItem(String key, String resolvedArgumentsItem) { + if (this.resolvedArguments == null) { + this.resolvedArguments = new HashMap<>(); + } + this.resolvedArguments.put(key, resolvedArgumentsItem); + return this; + } + + /** + * Get resolvedArguments + * @return resolvedArguments + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_RESOLVED_ARGUMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getResolvedArguments() { + return resolvedArguments; + } + + + @JsonProperty(value = JSON_PROPERTY_RESOLVED_ARGUMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setResolvedArguments(@Nullable Map resolvedArguments) { + this.resolvedArguments = resolvedArguments; + } + + + public AgentAppEventInfo winnerContainerId(@Nullable String winnerContainerId) { + this.winnerContainerId = winnerContainerId; + return this; + } + + /** + * Get winnerContainerId + * @return winnerContainerId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_WINNER_CONTAINER_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getWinnerContainerId() { + return winnerContainerId; + } + + + @JsonProperty(value = JSON_PROPERTY_WINNER_CONTAINER_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setWinnerContainerId(@Nullable String winnerContainerId) { + this.winnerContainerId = winnerContainerId; + } + + + public AgentAppEventInfo finalizeDeadlineTs(@Nullable Long finalizeDeadlineTs) { + this.finalizeDeadlineTs = finalizeDeadlineTs; + return this; + } + + /** + * Get finalizeDeadlineTs + * @return finalizeDeadlineTs + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_FINALIZE_DEADLINE_TS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getFinalizeDeadlineTs() { + return finalizeDeadlineTs; + } + + + @JsonProperty(value = JSON_PROPERTY_FINALIZE_DEADLINE_TS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setFinalizeDeadlineTs(@Nullable Long finalizeDeadlineTs) { + this.finalizeDeadlineTs = finalizeDeadlineTs; + } + + + public AgentAppEventInfo contextMetadata(@Nullable Map contextMetadata) { + this.contextMetadata = contextMetadata; + return this; + } + + public AgentAppEventInfo putContextMetadataItem(String key, String contextMetadataItem) { + if (this.contextMetadata == null) { + this.contextMetadata = new HashMap<>(); + } + this.contextMetadata.put(key, contextMetadataItem); + return this; + } + + /** + * Get contextMetadata + * @return contextMetadata + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CONTEXT_METADATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getContextMetadata() { + return contextMetadata; + } + + + @JsonProperty(value = JSON_PROPERTY_CONTEXT_METADATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setContextMetadata(@Nullable Map contextMetadata) { + this.contextMetadata = contextMetadata; + } + + + /** + * Name of the Agent that owns the Application. + * @return agentName + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAgentName() { + return agentName; + } + + + + + /** + * Return true if this AgentAppEventInfo object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppEventInfo agentAppEventInfo = (AgentAppEventInfo) o; + return Objects.equals(this.id, agentAppEventInfo.id) && + Objects.equals(this.createdTime, agentAppEventInfo.createdTime) && + Objects.equals(this.tenantId, agentAppEventInfo.tenantId) && + Objects.equals(this.applicationId, agentAppEventInfo.applicationId) && + Objects.equals(this.agentId, agentAppEventInfo.agentId) && + Objects.equals(this.applicationName, agentAppEventInfo.applicationName) && + Objects.equals(this.actionType, agentAppEventInfo.actionType) && + Objects.equals(this.startStatus, agentAppEventInfo.startStatus) && + Objects.equals(this.processingStatus, agentAppEventInfo.processingStatus) && + Objects.equals(this.currentStepId, agentAppEventInfo.currentStepId) && + Objects.equals(this.currentActivity, agentAppEventInfo.currentActivity) && + Objects.equals(this.errorMessage, agentAppEventInfo.errorMessage) && + Objects.equals(this.updatedTime, agentAppEventInfo.updatedTime) && + Objects.equals(this.stepStates, agentAppEventInfo.stepStates) && + Objects.equals(this.bulkActionId, agentAppEventInfo.bulkActionId) && + Objects.equals(this.resolvedArguments, agentAppEventInfo.resolvedArguments) && + Objects.equals(this.winnerContainerId, agentAppEventInfo.winnerContainerId) && + Objects.equals(this.finalizeDeadlineTs, agentAppEventInfo.finalizeDeadlineTs) && + Objects.equals(this.contextMetadata, agentAppEventInfo.contextMetadata) && + Objects.equals(this.agentName, agentAppEventInfo.agentName); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, tenantId, applicationId, agentId, applicationName, actionType, startStatus, processingStatus, currentStepId, currentActivity, errorMessage, updatedTime, stepStates, bulkActionId, resolvedArguments, winnerContainerId, finalizeDeadlineTs, contextMetadata, agentName); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppEventInfo {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" applicationId: ").append(toIndentedString(applicationId)).append("\n"); + sb.append(" agentId: ").append(toIndentedString(agentId)).append("\n"); + sb.append(" applicationName: ").append(toIndentedString(applicationName)).append("\n"); + sb.append(" actionType: ").append(toIndentedString(actionType)).append("\n"); + sb.append(" startStatus: ").append(toIndentedString(startStatus)).append("\n"); + sb.append(" processingStatus: ").append(toIndentedString(processingStatus)).append("\n"); + sb.append(" currentStepId: ").append(toIndentedString(currentStepId)).append("\n"); + sb.append(" currentActivity: ").append(toIndentedString(currentActivity)).append("\n"); + sb.append(" errorMessage: ").append(toIndentedString(errorMessage)).append("\n"); + sb.append(" updatedTime: ").append(toIndentedString(updatedTime)).append("\n"); + sb.append(" stepStates: ").append(toIndentedString(stepStates)).append("\n"); + sb.append(" bulkActionId: ").append(toIndentedString(bulkActionId)).append("\n"); + sb.append(" resolvedArguments: ").append(toIndentedString(resolvedArguments)).append("\n"); + sb.append(" winnerContainerId: ").append(toIndentedString(winnerContainerId)).append("\n"); + sb.append(" finalizeDeadlineTs: ").append(toIndentedString(finalizeDeadlineTs)).append("\n"); + sb.append(" contextMetadata: ").append(toIndentedString(contextMetadata)).append("\n"); + sb.append(" agentName: ").append(toIndentedString(agentName)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `applicationId` to the URL query string + if (getApplicationId() != null) { + joiner.add(getApplicationId().toUrlQueryString(prefix + "applicationId" + suffix)); + } + + // add `agentId` to the URL query string + if (getAgentId() != null) { + joiner.add(getAgentId().toUrlQueryString(prefix + "agentId" + suffix)); + } + + // add `applicationName` to the URL query string + if (getApplicationName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sapplicationName%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getApplicationName())))); + } + + // add `actionType` to the URL query string + if (getActionType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sactionType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getActionType())))); + } + + // add `startStatus` to the URL query string + if (getStartStatus() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstartStatus%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStartStatus())))); + } + + // add `processingStatus` to the URL query string + if (getProcessingStatus() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprocessingStatus%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProcessingStatus())))); + } + + // add `currentStepId` to the URL query string + if (getCurrentStepId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scurrentStepId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCurrentStepId())))); + } + + // add `currentActivity` to the URL query string + if (getCurrentActivity() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scurrentActivity%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCurrentActivity())))); + } + + // add `errorMessage` to the URL query string + if (getErrorMessage() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%serrorMessage%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getErrorMessage())))); + } + + // add `updatedTime` to the URL query string + if (getUpdatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%supdatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getUpdatedTime())))); + } + + // add `stepStates` to the URL query string + if (getStepStates() != null) { + for (String _key : getStepStates().keySet()) { + if (getStepStates().get(_key) != null) { + joiner.add(getStepStates().get(_key).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sstepStates%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, _key, containerSuffix)))); + } + } + } + + // add `bulkActionId` to the URL query string + if (getBulkActionId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sbulkActionId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getBulkActionId())))); + } + + // add `resolvedArguments` to the URL query string + if (getResolvedArguments() != null) { + for (String _key : getResolvedArguments().keySet()) { + joiner.add(String.format(java.util.Locale.ROOT, "%sresolvedArguments%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, _key, containerSuffix), + getResolvedArguments().get(_key), ApiClient.urlEncode(ApiClient.valueToString(getResolvedArguments().get(_key))))); + } + } + + // add `winnerContainerId` to the URL query string + if (getWinnerContainerId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%swinnerContainerId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getWinnerContainerId())))); + } + + // add `finalizeDeadlineTs` to the URL query string + if (getFinalizeDeadlineTs() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sfinalizeDeadlineTs%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getFinalizeDeadlineTs())))); + } + + // add `contextMetadata` to the URL query string + if (getContextMetadata() != null) { + for (String _key : getContextMetadata().keySet()) { + joiner.add(String.format(java.util.Locale.ROOT, "%scontextMetadata%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, _key, containerSuffix), + getContextMetadata().get(_key), ApiClient.urlEncode(ApiClient.valueToString(getContextMetadata().get(_key))))); + } + } + + // add `agentName` to the URL query string + if (getAgentName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sagentName%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAgentName())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppEventRequest.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppEventRequest.java new file mode 100644 index 00000000..6360ae4a --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppEventRequest.java @@ -0,0 +1,355 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppEventActionType; +import org.thingsboard.client.model.AgentAppEventStepStatesValue; +import org.thingsboard.client.model.AgentApplication; +import org.thingsboard.client.model.EntityId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * Request payload for creating an agent application event (install, update, upgrade, restart, delete, etc.). + */ +@JsonPropertyOrder({ + AgentAppEventRequest.JSON_PROPERTY_ACTION_TYPE, + AgentAppEventRequest.JSON_PROPERTY_APPLICATION, + AgentAppEventRequest.JSON_PROPERTY_STEP_INPUTS, + AgentAppEventRequest.JSON_PROPERTY_RELATED_ENTITY_ID, + AgentAppEventRequest.JSON_PROPERTY_BULK_ACTION_ID, + AgentAppEventRequest.JSON_PROPERTY_SKIP_PROFILE_REFETCH +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentAppEventRequest { + public static final String JSON_PROPERTY_ACTION_TYPE = "actionType"; + @Nullable + private AgentAppEventActionType actionType; + + public static final String JSON_PROPERTY_APPLICATION = "application"; + @Nullable + private AgentApplication application; + + public static final String JSON_PROPERTY_STEP_INPUTS = "stepInputs"; + @Nullable + private Map stepInputs = new HashMap<>(); + + public static final String JSON_PROPERTY_RELATED_ENTITY_ID = "relatedEntityId"; + @Nullable + private EntityId relatedEntityId; + + public static final String JSON_PROPERTY_BULK_ACTION_ID = "bulkActionId"; + @Nullable + private UUID bulkActionId; + + public static final String JSON_PROPERTY_SKIP_PROFILE_REFETCH = "skipProfileRefetch"; + @Nullable + private Boolean skipProfileRefetch; + + public AgentAppEventRequest() { + } + + public AgentAppEventRequest actionType(@Nullable AgentAppEventActionType actionType) { + this.actionType = actionType; + return this; + } + + /** + * Action to perform against the agent application. + * @return actionType + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ACTION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppEventActionType getActionType() { + return actionType; + } + + + @JsonProperty(value = JSON_PROPERTY_ACTION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setActionType(@Nullable AgentAppEventActionType actionType) { + this.actionType = actionType; + } + + + public AgentAppEventRequest application(@Nullable AgentApplication application) { + this.application = application; + return this; + } + + /** + * Agent application payload supplied by the caller. Used to carry name/config changes for UPDATE and the target state for INSTALL/UPGRADE. + * @return application + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_APPLICATION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentApplication getApplication() { + return application; + } + + + @JsonProperty(value = JSON_PROPERTY_APPLICATION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setApplication(@Nullable AgentApplication application) { + this.application = application; + } + + + public AgentAppEventRequest stepInputs(@Nullable Map stepInputs) { + this.stepInputs = stepInputs; + return this; + } + + public AgentAppEventRequest putStepInputsItem(String key, AgentAppEventStepStatesValue stepInputsItem) { + if (this.stepInputs == null) { + this.stepInputs = new HashMap<>(); + } + this.stepInputs.put(key, stepInputsItem); + return this; + } + + /** + * Per-step input overrides keyed by step id (e.g. pullImages flag, backup volume selection). + * @return stepInputs + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_STEP_INPUTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getStepInputs() { + return stepInputs; + } + + + @JsonProperty(value = JSON_PROPERTY_STEP_INPUTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setStepInputs(@Nullable Map stepInputs) { + this.stepInputs = stepInputs; + } + + + public AgentAppEventRequest relatedEntityId(@Nullable EntityId relatedEntityId) { + this.relatedEntityId = relatedEntityId; + return this; + } + + /** + * INSTALL-action optional related entity (Edge or Gateway Device) to link to the application in the same operation. When set, the application is created and the relation is assigned atomically. Ignored for non-INSTALL actions. + * @return relatedEntityId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_RELATED_ENTITY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public EntityId getRelatedEntityId() { + return relatedEntityId; + } + + + @JsonProperty(value = JSON_PROPERTY_RELATED_ENTITY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setRelatedEntityId(@Nullable EntityId relatedEntityId) { + this.relatedEntityId = relatedEntityId; + } + + + public AgentAppEventRequest bulkActionId(@Nullable UUID bulkActionId) { + this.bulkActionId = bulkActionId; + return this; + } + + /** + * Optional bulk-action correlation id. When the same value is used across multiple application events, duplicates are deduplicated server-side. + * @return bulkActionId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_BULK_ACTION_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UUID getBulkActionId() { + return bulkActionId; + } + + + @JsonProperty(value = JSON_PROPERTY_BULK_ACTION_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBulkActionId(@Nullable UUID bulkActionId) { + this.bulkActionId = bulkActionId; + } + + + public AgentAppEventRequest skipProfileRefetch(@Nullable Boolean skipProfileRefetch) { + this.skipProfileRefetch = skipProfileRefetch; + return this; + } + + /** + * UPDATE-action flag for profile-managed apps. When true, the compose is not re-resolved from the (possibly upgraded) profile — only the credentials carried by `application.config` are applied. Ignored for non-UPDATE actions and for non-profile-managed apps. + * @return skipProfileRefetch + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_SKIP_PROFILE_REFETCH, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getSkipProfileRefetch() { + return skipProfileRefetch; + } + + + @JsonProperty(value = JSON_PROPERTY_SKIP_PROFILE_REFETCH, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSkipProfileRefetch(@Nullable Boolean skipProfileRefetch) { + this.skipProfileRefetch = skipProfileRefetch; + } + + + /** + * Return true if this AgentAppEventRequest object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppEventRequest agentAppEventRequest = (AgentAppEventRequest) o; + return Objects.equals(this.actionType, agentAppEventRequest.actionType) && + Objects.equals(this.application, agentAppEventRequest.application) && + Objects.equals(this.stepInputs, agentAppEventRequest.stepInputs) && + Objects.equals(this.relatedEntityId, agentAppEventRequest.relatedEntityId) && + Objects.equals(this.bulkActionId, agentAppEventRequest.bulkActionId) && + Objects.equals(this.skipProfileRefetch, agentAppEventRequest.skipProfileRefetch); + } + + @Override + public int hashCode() { + return Objects.hash(actionType, application, stepInputs, relatedEntityId, bulkActionId, skipProfileRefetch); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppEventRequest {\n"); + sb.append(" actionType: ").append(toIndentedString(actionType)).append("\n"); + sb.append(" application: ").append(toIndentedString(application)).append("\n"); + sb.append(" stepInputs: ").append(toIndentedString(stepInputs)).append("\n"); + sb.append(" relatedEntityId: ").append(toIndentedString(relatedEntityId)).append("\n"); + sb.append(" bulkActionId: ").append(toIndentedString(bulkActionId)).append("\n"); + sb.append(" skipProfileRefetch: ").append(toIndentedString(skipProfileRefetch)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `actionType` to the URL query string + if (getActionType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sactionType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getActionType())))); + } + + // add `application` to the URL query string + if (getApplication() != null) { + joiner.add(getApplication().toUrlQueryString(prefix + "application" + suffix)); + } + + // add `stepInputs` to the URL query string + if (getStepInputs() != null) { + for (String _key : getStepInputs().keySet()) { + if (getStepInputs().get(_key) != null) { + joiner.add(getStepInputs().get(_key).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sstepInputs%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, _key, containerSuffix)))); + } + } + } + + // add `relatedEntityId` to the URL query string + if (getRelatedEntityId() != null) { + joiner.add(getRelatedEntityId().toUrlQueryString(prefix + "relatedEntityId" + suffix)); + } + + // add `bulkActionId` to the URL query string + if (getBulkActionId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sbulkActionId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getBulkActionId())))); + } + + // add `skipProfileRefetch` to the URL query string + if (getSkipProfileRefetch() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sskipProfileRefetch%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getSkipProfileRefetch())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppEventStepStatesValue.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppEventStepStatesValue.java new file mode 100644 index 00000000..45143eba --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppEventStepStatesValue.java @@ -0,0 +1,483 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppStepType; +import org.thingsboard.client.model.BackupVolumesStepState; +import org.thingsboard.client.model.ComposeDownStepState; +import org.thingsboard.client.model.ComposeStepState; +import org.thingsboard.client.model.RollBackStepState; +import org.thingsboard.client.model.RunJobStepState; +import org.thingsboard.client.model.StepFieldAgentAppEventId; +import org.thingsboard.client.model.StepFieldBoolean; +import org.thingsboard.client.model.StepFieldInteger; +import org.thingsboard.client.model.StepFieldListString; +import org.thingsboard.client.model.StepFieldString; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +import com.fasterxml.jackson.core.type.TypeReference; + +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import org.thingsboard.client.ApiClient; +import org.thingsboard.client.JSON; + +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonDeserialize(using = AgentAppEventStepStatesValue.AgentAppEventStepStatesValueDeserializer.class) +@JsonSerialize(using = AgentAppEventStepStatesValue.AgentAppEventStepStatesValueSerializer.class) +public class AgentAppEventStepStatesValue extends AbstractOpenApiSchema { + private static final Logger log = Logger.getLogger(AgentAppEventStepStatesValue.class.getName()); + + public static class AgentAppEventStepStatesValueSerializer extends StdSerializer { + public AgentAppEventStepStatesValueSerializer(Class t) { + super(t); + } + + public AgentAppEventStepStatesValueSerializer() { + this(null); + } + + @Override + public void serialize(AgentAppEventStepStatesValue value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { + jgen.writeObject(value.getActualInstance()); + } + } + + public static class AgentAppEventStepStatesValueDeserializer extends StdDeserializer { + public AgentAppEventStepStatesValueDeserializer() { + this(AgentAppEventStepStatesValue.class); + } + + public AgentAppEventStepStatesValueDeserializer(Class vc) { + super(vc); + } + + @Override + public AgentAppEventStepStatesValue deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { + JsonNode tree = jp.readValueAsTree(); + Object deserialized = null; + boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); + int match = 0; + JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize BackupVolumesStepState + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (BackupVolumesStepState.class.equals(Integer.class) || BackupVolumesStepState.class.equals(Long.class) || BackupVolumesStepState.class.equals(Float.class) || BackupVolumesStepState.class.equals(Double.class) || BackupVolumesStepState.class.equals(Boolean.class) || BackupVolumesStepState.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((BackupVolumesStepState.class.equals(Integer.class) || BackupVolumesStepState.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((BackupVolumesStepState.class.equals(Float.class) || BackupVolumesStepState.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (BackupVolumesStepState.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (BackupVolumesStepState.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(BackupVolumesStepState.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'BackupVolumesStepState'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'BackupVolumesStepState'", e); + } + + // deserialize ComposeDownStepState + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ComposeDownStepState.class.equals(Integer.class) || ComposeDownStepState.class.equals(Long.class) || ComposeDownStepState.class.equals(Float.class) || ComposeDownStepState.class.equals(Double.class) || ComposeDownStepState.class.equals(Boolean.class) || ComposeDownStepState.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ComposeDownStepState.class.equals(Integer.class) || ComposeDownStepState.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ComposeDownStepState.class.equals(Float.class) || ComposeDownStepState.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ComposeDownStepState.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ComposeDownStepState.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ComposeDownStepState.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ComposeDownStepState'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ComposeDownStepState'", e); + } + + // deserialize ComposeStepState + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ComposeStepState.class.equals(Integer.class) || ComposeStepState.class.equals(Long.class) || ComposeStepState.class.equals(Float.class) || ComposeStepState.class.equals(Double.class) || ComposeStepState.class.equals(Boolean.class) || ComposeStepState.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ComposeStepState.class.equals(Integer.class) || ComposeStepState.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ComposeStepState.class.equals(Float.class) || ComposeStepState.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ComposeStepState.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ComposeStepState.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ComposeStepState.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ComposeStepState'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ComposeStepState'", e); + } + + // deserialize RollBackStepState + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (RollBackStepState.class.equals(Integer.class) || RollBackStepState.class.equals(Long.class) || RollBackStepState.class.equals(Float.class) || RollBackStepState.class.equals(Double.class) || RollBackStepState.class.equals(Boolean.class) || RollBackStepState.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((RollBackStepState.class.equals(Integer.class) || RollBackStepState.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((RollBackStepState.class.equals(Float.class) || RollBackStepState.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (RollBackStepState.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (RollBackStepState.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(RollBackStepState.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'RollBackStepState'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'RollBackStepState'", e); + } + + // deserialize RunJobStepState + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (RunJobStepState.class.equals(Integer.class) || RunJobStepState.class.equals(Long.class) || RunJobStepState.class.equals(Float.class) || RunJobStepState.class.equals(Double.class) || RunJobStepState.class.equals(Boolean.class) || RunJobStepState.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((RunJobStepState.class.equals(Integer.class) || RunJobStepState.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((RunJobStepState.class.equals(Float.class) || RunJobStepState.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (RunJobStepState.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (RunJobStepState.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(RunJobStepState.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'RunJobStepState'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'RunJobStepState'", e); + } + + if (match == 1) { + AgentAppEventStepStatesValue ret = new AgentAppEventStepStatesValue(); + ret.setActualInstance(deserialized); + return ret; + } + throw new IOException(String.format(java.util.Locale.ROOT, "Failed deserialization for AgentAppEventStepStatesValue: %d classes match result, expected 1", match)); + } + + /** + * Handle deserialization of the 'null' value. + */ + @Override + public AgentAppEventStepStatesValue getNullValue(DeserializationContext ctxt) throws JsonMappingException { + throw new JsonMappingException(ctxt.getParser(), "AgentAppEventStepStatesValue cannot be null"); + } + } + + // store a list of schema names defined in oneOf + public static final Map> schemas = new HashMap<>(); + + public AgentAppEventStepStatesValue() { + super("oneOf", Boolean.FALSE); + } + + public AgentAppEventStepStatesValue(BackupVolumesStepState o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppEventStepStatesValue(ComposeDownStepState o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppEventStepStatesValue(ComposeStepState o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppEventStepStatesValue(RollBackStepState o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppEventStepStatesValue(RunJobStepState o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + static { + schemas.put("BackupVolumesStepState", BackupVolumesStepState.class); + schemas.put("ComposeDownStepState", ComposeDownStepState.class); + schemas.put("ComposeStepState", ComposeStepState.class); + schemas.put("RollBackStepState", RollBackStepState.class); + schemas.put("RunJobStepState", RunJobStepState.class); + JSON.registerDescendants(AgentAppEventStepStatesValue.class, Collections.unmodifiableMap(schemas)); + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("BackupVolumesStepState", BackupVolumesStepState.class); + mappings.put("ComposeDownStepState", ComposeDownStepState.class); + mappings.put("ComposeStepState", ComposeStepState.class); + mappings.put("RollBackStepState", RollBackStepState.class); + mappings.put("RunJobStepState", RunJobStepState.class); + mappings.put("AgentAppEvent_stepStates_value", AgentAppEventStepStatesValue.class); + JSON.registerDiscriminator(AgentAppEventStepStatesValue.class, "type", mappings); + } + + @Override + public Map> getSchemas() { + return AgentAppEventStepStatesValue.schemas; + } + + /** + * Set the instance that matches the oneOf child schema, check + * the instance parameter is valid against the oneOf child schemas: + * BackupVolumesStepState, ComposeDownStepState, ComposeStepState, RollBackStepState, RunJobStepState + * + * It could be an instance of the 'oneOf' schemas. + * The oneOf child schemas may themselves be a composed schema (allOf, anyOf, oneOf). + */ + @Override + public void setActualInstance(Object instance) { + if (JSON.isInstanceOf(BackupVolumesStepState.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ComposeDownStepState.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ComposeStepState.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(RollBackStepState.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(RunJobStepState.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + throw new RuntimeException("Invalid instance type. Must be BackupVolumesStepState, ComposeDownStepState, ComposeStepState, RollBackStepState, RunJobStepState"); + } + + /** + * Get the actual instance, which can be the following: + * BackupVolumesStepState, ComposeDownStepState, ComposeStepState, RollBackStepState, RunJobStepState + * + * @return The actual instance (BackupVolumesStepState, ComposeDownStepState, ComposeStepState, RollBackStepState, RunJobStepState) + */ + @Override + public Object getActualInstance() { + return super.getActualInstance(); + } + + /** + * Get the actual instance of `BackupVolumesStepState`. If the actual instance is not `BackupVolumesStepState`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `BackupVolumesStepState` + * @throws ClassCastException if the instance is not `BackupVolumesStepState` + */ + public BackupVolumesStepState getBackupVolumesStepState() throws ClassCastException { + return (BackupVolumesStepState)super.getActualInstance(); + } + + /** + * Get the actual instance of `ComposeDownStepState`. If the actual instance is not `ComposeDownStepState`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ComposeDownStepState` + * @throws ClassCastException if the instance is not `ComposeDownStepState` + */ + public ComposeDownStepState getComposeDownStepState() throws ClassCastException { + return (ComposeDownStepState)super.getActualInstance(); + } + + /** + * Get the actual instance of `ComposeStepState`. If the actual instance is not `ComposeStepState`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ComposeStepState` + * @throws ClassCastException if the instance is not `ComposeStepState` + */ + public ComposeStepState getComposeStepState() throws ClassCastException { + return (ComposeStepState)super.getActualInstance(); + } + + /** + * Get the actual instance of `RollBackStepState`. If the actual instance is not `RollBackStepState`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `RollBackStepState` + * @throws ClassCastException if the instance is not `RollBackStepState` + */ + public RollBackStepState getRollBackStepState() throws ClassCastException { + return (RollBackStepState)super.getActualInstance(); + } + + /** + * Get the actual instance of `RunJobStepState`. If the actual instance is not `RunJobStepState`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `RunJobStepState` + * @throws ClassCastException if the instance is not `RunJobStepState` + */ + public RunJobStepState getRunJobStepState() throws ClassCastException { + return (RunJobStepState)super.getActualInstance(); + } + + + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + if (getActualInstance() instanceof BackupVolumesStepState) { + if (getActualInstance() != null) { + joiner.add(((BackupVolumesStepState)getActualInstance()).toUrlQueryString(prefix + "one_of_0" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ComposeDownStepState) { + if (getActualInstance() != null) { + joiner.add(((ComposeDownStepState)getActualInstance()).toUrlQueryString(prefix + "one_of_1" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ComposeStepState) { + if (getActualInstance() != null) { + joiner.add(((ComposeStepState)getActualInstance()).toUrlQueryString(prefix + "one_of_2" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof RollBackStepState) { + if (getActualInstance() != null) { + joiner.add(((RollBackStepState)getActualInstance()).toUrlQueryString(prefix + "one_of_3" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof RunJobStepState) { + if (getActualInstance() != null) { + joiner.add(((RunJobStepState)getActualInstance()).toUrlQueryString(prefix + "one_of_4" + suffix)); + } + return joiner.toString(); + } + return null; + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppInstallResponse.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppInstallResponse.java new file mode 100644 index 00000000..7ae0cc27 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppInstallResponse.java @@ -0,0 +1,193 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppEvent; +import org.thingsboard.client.model.AgentApplication; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * Response payload for the install-agent-application endpoint. Carries both the created application and the INSTALL event so the caller can open a progress dialog without a second round-trip. + */ +@JsonPropertyOrder({ + AgentAppInstallResponse.JSON_PROPERTY_APPLICATION, + AgentAppInstallResponse.JSON_PROPERTY_EVENT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentAppInstallResponse { + public static final String JSON_PROPERTY_APPLICATION = "application"; + @Nullable + private AgentApplication application; + + public static final String JSON_PROPERTY_EVENT = "event"; + @Nullable + private AgentAppEvent event; + + public AgentAppInstallResponse() { + } + + public AgentAppInstallResponse application(@Nullable AgentApplication application) { + this.application = application; + return this; + } + + /** + * The newly created agent application. + * @return application + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_APPLICATION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentApplication getApplication() { + return application; + } + + + @JsonProperty(value = JSON_PROPERTY_APPLICATION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setApplication(@Nullable AgentApplication application) { + this.application = application; + } + + + public AgentAppInstallResponse event(@Nullable AgentAppEvent event) { + this.event = event; + return this; + } + + /** + * The INSTALL event created alongside the application. + * @return event + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_EVENT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppEvent getEvent() { + return event; + } + + + @JsonProperty(value = JSON_PROPERTY_EVENT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setEvent(@Nullable AgentAppEvent event) { + this.event = event; + } + + + /** + * Return true if this AgentAppInstallResponse object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppInstallResponse agentAppInstallResponse = (AgentAppInstallResponse) o; + return Objects.equals(this.application, agentAppInstallResponse.application) && + Objects.equals(this.event, agentAppInstallResponse.event); + } + + @Override + public int hashCode() { + return Objects.hash(application, event); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppInstallResponse {\n"); + sb.append(" application: ").append(toIndentedString(application)).append("\n"); + sb.append(" event: ").append(toIndentedString(event)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `application` to the URL query string + if (getApplication() != null) { + joiner.add(getApplication().toUrlQueryString(prefix + "application" + suffix)); + } + + // add `event` to the URL query string + if (getEvent() != null) { + joiner.add(getEvent().toUrlQueryString(prefix + "event" + suffix)); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppProfile.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppProfile.java new file mode 100644 index 00000000..d3e7b07a --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppProfile.java @@ -0,0 +1,438 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppProfileId; +import org.thingsboard.client.model.AgentApplicationType; +import org.thingsboard.client.model.DockerComposeConfig; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentAppProfile + */ +@JsonPropertyOrder({ + AgentAppProfile.JSON_PROPERTY_ID, + AgentAppProfile.JSON_PROPERTY_CREATED_TIME, + AgentAppProfile.JSON_PROPERTY_TENANT_ID, + AgentAppProfile.JSON_PROPERTY_NAME, + AgentAppProfile.JSON_PROPERTY_DESCRIPTION, + AgentAppProfile.JSON_PROPERTY_APP_TYPE, + AgentAppProfile.JSON_PROPERTY_TEMPLATE_VERSION, + AgentAppProfile.JSON_PROPERTY_CONFIG, + AgentAppProfile.JSON_PROPERTY_VERSION +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentAppProfile { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentAppProfileId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_NAME = "name"; + @Nonnull + private String name; + + public static final String JSON_PROPERTY_DESCRIPTION = "description"; + @Nullable + private String description; + + public static final String JSON_PROPERTY_APP_TYPE = "appType"; + @Nonnull + private AgentApplicationType appType; + + public static final String JSON_PROPERTY_TEMPLATE_VERSION = "templateVersion"; + @Nonnull + private String templateVersion; + + public static final String JSON_PROPERTY_CONFIG = "config"; + @Nullable + private DockerComposeConfig config; + + public static final String JSON_PROPERTY_VERSION = "version"; + @Nullable + private Long version; + + public AgentAppProfile() { + } + + @JsonCreator + public AgentAppProfile( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime, + @JsonProperty(JSON_PROPERTY_TENANT_ID) TenantId tenantId + ) { + this(); + this.createdTime = createdTime; + this.tenantId = tenantId; + } + + public AgentAppProfile id(@Nullable AgentAppProfileId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent Application Profile Id. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppProfileId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentAppProfileId id) { + this.id = id; + } + + + /** + * Timestamp of the profile creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + /** + * JSON object with Tenant Id. + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + + + public AgentAppProfile name(@Nonnull String name) { + this.name = name; + return this; + } + + /** + * Unique profile name within tenant + * @return name + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getName() { + return name; + } + + + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setName(@Nonnull String name) { + this.name = name; + } + + + public AgentAppProfile description(@Nullable String description) { + this.description = description; + return this; + } + + /** + * Profile description + * @return description + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDescription() { + return description; + } + + + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDescription(@Nullable String description) { + this.description = description; + } + + + public AgentAppProfile appType(@Nonnull AgentApplicationType appType) { + this.appType = appType; + return this; + } + + /** + * Application type: EDGE, GATEWAY, or GENERIC + * @return appType + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_APP_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public AgentApplicationType getAppType() { + return appType; + } + + + @JsonProperty(value = JSON_PROPERTY_APP_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setAppType(@Nonnull AgentApplicationType appType) { + this.appType = appType; + } + + + public AgentAppProfile templateVersion(@Nonnull String templateVersion) { + this.templateVersion = templateVersion; + return this; + } + + /** + * Template version this profile is based on + * @return templateVersion + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_VERSION, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getTemplateVersion() { + return templateVersion; + } + + + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_VERSION, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTemplateVersion(@Nonnull String templateVersion) { + this.templateVersion = templateVersion; + } + + + public AgentAppProfile config(@Nullable DockerComposeConfig config) { + this.config = config; + return this; + } + + /** + * Get config + * @return config + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CONFIG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public DockerComposeConfig getConfig() { + return config; + } + + + @JsonProperty(value = JSON_PROPERTY_CONFIG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setConfig(@Nullable DockerComposeConfig config) { + this.config = config; + } + + + public AgentAppProfile version(@Nullable Long version) { + this.version = version; + return this; + } + + /** + * Get version + * @return version + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getVersion() { + return version; + } + + + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVersion(@Nullable Long version) { + this.version = version; + } + + + /** + * Return true if this AgentAppProfile object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppProfile agentAppProfile = (AgentAppProfile) o; + return Objects.equals(this.id, agentAppProfile.id) && + Objects.equals(this.createdTime, agentAppProfile.createdTime) && + Objects.equals(this.tenantId, agentAppProfile.tenantId) && + Objects.equals(this.name, agentAppProfile.name) && + Objects.equals(this.description, agentAppProfile.description) && + Objects.equals(this.appType, agentAppProfile.appType) && + Objects.equals(this.templateVersion, agentAppProfile.templateVersion) && + Objects.equals(this.config, agentAppProfile.config) && + Objects.equals(this.version, agentAppProfile.version); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, tenantId, name, description, appType, templateVersion, config, version); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppProfile {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" description: ").append(toIndentedString(description)).append("\n"); + sb.append(" appType: ").append(toIndentedString(appType)).append("\n"); + sb.append(" templateVersion: ").append(toIndentedString(templateVersion)).append("\n"); + sb.append(" config: ").append(toIndentedString(config)).append("\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sname%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `description` to the URL query string + if (getDescription() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sdescription%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDescription())))); + } + + // add `appType` to the URL query string + if (getAppType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sappType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAppType())))); + } + + // add `templateVersion` to the URL query string + if (getTemplateVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateVersion())))); + } + + // add `config` to the URL query string + if (getConfig() != null) { + joiner.add(getConfig().toUrlQueryString(prefix + "config" + suffix)); + } + + // add `version` to the URL query string + if (getVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sversion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getVersion())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppProfileId.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppProfileId.java new file mode 100644 index 00000000..2975fe40 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppProfileId.java @@ -0,0 +1,155 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.EntityId; +import org.thingsboard.client.model.EntityType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * AgentAppProfileId + */ +@JsonPropertyOrder({ +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "entityType", // ignore manually set entityType, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the entityType to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "entityType", visible = true) + +public class AgentAppProfileId extends EntityId { + public AgentAppProfileId() { + } + + @Override + public AgentAppProfileId id(@Nonnull UUID id) { + this.setId(id); + return this; + } + + /** + * Return true if this AgentAppProfileId object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppProfileId {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `entityType` to the URL query string + if (getEntityType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sentityType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getEntityType())))); + } + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("AgentAppProfileId", AgentAppProfileId.class); + JSON.registerDiscriminator(AgentAppProfileId.class, "entityType", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppProfileInfo.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppProfileInfo.java new file mode 100644 index 00000000..cad8117b --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppProfileInfo.java @@ -0,0 +1,466 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppProfileId; +import org.thingsboard.client.model.AgentApplicationType; +import org.thingsboard.client.model.DockerComposeConfig; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentAppProfileInfo + */ +@JsonPropertyOrder({ + AgentAppProfileInfo.JSON_PROPERTY_ID, + AgentAppProfileInfo.JSON_PROPERTY_CREATED_TIME, + AgentAppProfileInfo.JSON_PROPERTY_TENANT_ID, + AgentAppProfileInfo.JSON_PROPERTY_NAME, + AgentAppProfileInfo.JSON_PROPERTY_DESCRIPTION, + AgentAppProfileInfo.JSON_PROPERTY_APP_TYPE, + AgentAppProfileInfo.JSON_PROPERTY_TEMPLATE_VERSION, + AgentAppProfileInfo.JSON_PROPERTY_CONFIG, + AgentAppProfileInfo.JSON_PROPERTY_VERSION, + AgentAppProfileInfo.JSON_PROPERTY_TEMPLATE_CURRENT_VERSION +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentAppProfileInfo { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentAppProfileId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_NAME = "name"; + @Nonnull + private String name; + + public static final String JSON_PROPERTY_DESCRIPTION = "description"; + @Nullable + private String description; + + public static final String JSON_PROPERTY_APP_TYPE = "appType"; + @Nonnull + private AgentApplicationType appType; + + public static final String JSON_PROPERTY_TEMPLATE_VERSION = "templateVersion"; + @Nonnull + private String templateVersion; + + public static final String JSON_PROPERTY_CONFIG = "config"; + @Nullable + private DockerComposeConfig config; + + public static final String JSON_PROPERTY_VERSION = "version"; + @Nullable + private Long version; + + public static final String JSON_PROPERTY_TEMPLATE_CURRENT_VERSION = "templateCurrentVersion"; + @Nullable + private String templateCurrentVersion; + + public AgentAppProfileInfo() { + } + + @JsonCreator + public AgentAppProfileInfo( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime, + @JsonProperty(JSON_PROPERTY_TENANT_ID) TenantId tenantId, + @JsonProperty(JSON_PROPERTY_TEMPLATE_CURRENT_VERSION) String templateCurrentVersion + ) { + this(); + this.createdTime = createdTime; + this.tenantId = tenantId; + this.templateCurrentVersion = templateCurrentVersion; + } + + public AgentAppProfileInfo id(@Nullable AgentAppProfileId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent Application Profile Id. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppProfileId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentAppProfileId id) { + this.id = id; + } + + + /** + * Timestamp of the profile creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + /** + * JSON object with Tenant Id. + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + + + public AgentAppProfileInfo name(@Nonnull String name) { + this.name = name; + return this; + } + + /** + * Unique profile name within tenant + * @return name + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getName() { + return name; + } + + + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setName(@Nonnull String name) { + this.name = name; + } + + + public AgentAppProfileInfo description(@Nullable String description) { + this.description = description; + return this; + } + + /** + * Profile description + * @return description + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDescription() { + return description; + } + + + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDescription(@Nullable String description) { + this.description = description; + } + + + public AgentAppProfileInfo appType(@Nonnull AgentApplicationType appType) { + this.appType = appType; + return this; + } + + /** + * Application type: EDGE, GATEWAY, or GENERIC + * @return appType + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_APP_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public AgentApplicationType getAppType() { + return appType; + } + + + @JsonProperty(value = JSON_PROPERTY_APP_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setAppType(@Nonnull AgentApplicationType appType) { + this.appType = appType; + } + + + public AgentAppProfileInfo templateVersion(@Nonnull String templateVersion) { + this.templateVersion = templateVersion; + return this; + } + + /** + * Template version this profile is based on + * @return templateVersion + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_VERSION, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getTemplateVersion() { + return templateVersion; + } + + + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_VERSION, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTemplateVersion(@Nonnull String templateVersion) { + this.templateVersion = templateVersion; + } + + + public AgentAppProfileInfo config(@Nullable DockerComposeConfig config) { + this.config = config; + return this; + } + + /** + * Get config + * @return config + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CONFIG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public DockerComposeConfig getConfig() { + return config; + } + + + @JsonProperty(value = JSON_PROPERTY_CONFIG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setConfig(@Nullable DockerComposeConfig config) { + this.config = config; + } + + + public AgentAppProfileInfo version(@Nullable Long version) { + this.version = version; + return this; + } + + /** + * Get version + * @return version + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getVersion() { + return version; + } + + + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVersion(@Nullable Long version) { + this.version = version; + } + + + /** + * Current version of the template this profile points to. + * @return templateCurrentVersion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_CURRENT_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getTemplateCurrentVersion() { + return templateCurrentVersion; + } + + + + + /** + * Return true if this AgentAppProfileInfo object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppProfileInfo agentAppProfileInfo = (AgentAppProfileInfo) o; + return Objects.equals(this.id, agentAppProfileInfo.id) && + Objects.equals(this.createdTime, agentAppProfileInfo.createdTime) && + Objects.equals(this.tenantId, agentAppProfileInfo.tenantId) && + Objects.equals(this.name, agentAppProfileInfo.name) && + Objects.equals(this.description, agentAppProfileInfo.description) && + Objects.equals(this.appType, agentAppProfileInfo.appType) && + Objects.equals(this.templateVersion, agentAppProfileInfo.templateVersion) && + Objects.equals(this.config, agentAppProfileInfo.config) && + Objects.equals(this.version, agentAppProfileInfo.version) && + Objects.equals(this.templateCurrentVersion, agentAppProfileInfo.templateCurrentVersion); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, tenantId, name, description, appType, templateVersion, config, version, templateCurrentVersion); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppProfileInfo {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" description: ").append(toIndentedString(description)).append("\n"); + sb.append(" appType: ").append(toIndentedString(appType)).append("\n"); + sb.append(" templateVersion: ").append(toIndentedString(templateVersion)).append("\n"); + sb.append(" config: ").append(toIndentedString(config)).append("\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" templateCurrentVersion: ").append(toIndentedString(templateCurrentVersion)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sname%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `description` to the URL query string + if (getDescription() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sdescription%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDescription())))); + } + + // add `appType` to the URL query string + if (getAppType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sappType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAppType())))); + } + + // add `templateVersion` to the URL query string + if (getTemplateVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateVersion())))); + } + + // add `config` to the URL query string + if (getConfig() != null) { + joiner.add(getConfig().toUrlQueryString(prefix + "config" + suffix)); + } + + // add `version` to the URL query string + if (getVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sversion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getVersion())))); + } + + // add `templateCurrentVersion` to the URL query string + if (getTemplateCurrentVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateCurrentVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateCurrentVersion())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppProfileRelationInfo.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppProfileRelationInfo.java new file mode 100644 index 00000000..b4ebba71 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppProfileRelationInfo.java @@ -0,0 +1,551 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppProfileId; +import org.thingsboard.client.model.AgentApplicationType; +import org.thingsboard.client.model.AgentProfileId; +import org.thingsboard.client.model.DockerComposeConfig; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentAppProfileRelationInfo + */ +@JsonPropertyOrder({ + AgentAppProfileRelationInfo.JSON_PROPERTY_ID, + AgentAppProfileRelationInfo.JSON_PROPERTY_CREATED_TIME, + AgentAppProfileRelationInfo.JSON_PROPERTY_TENANT_ID, + AgentAppProfileRelationInfo.JSON_PROPERTY_NAME, + AgentAppProfileRelationInfo.JSON_PROPERTY_DESCRIPTION, + AgentAppProfileRelationInfo.JSON_PROPERTY_APP_TYPE, + AgentAppProfileRelationInfo.JSON_PROPERTY_TEMPLATE_VERSION, + AgentAppProfileRelationInfo.JSON_PROPERTY_CONFIG, + AgentAppProfileRelationInfo.JSON_PROPERTY_VERSION, + AgentAppProfileRelationInfo.JSON_PROPERTY_TEMPLATE_CURRENT_VERSION, + AgentAppProfileRelationInfo.JSON_PROPERTY_AGENT_PROFILE_ID, + AgentAppProfileRelationInfo.JSON_PROPERTY_ASSIGNED_APPLICATIONS_COUNT, + AgentAppProfileRelationInfo.JSON_PROPERTY_ADDITIONAL_INFO +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentAppProfileRelationInfo { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentAppProfileId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_NAME = "name"; + @Nonnull + private String name; + + public static final String JSON_PROPERTY_DESCRIPTION = "description"; + @Nullable + private String description; + + public static final String JSON_PROPERTY_APP_TYPE = "appType"; + @Nonnull + private AgentApplicationType appType; + + public static final String JSON_PROPERTY_TEMPLATE_VERSION = "templateVersion"; + @Nonnull + private String templateVersion; + + public static final String JSON_PROPERTY_CONFIG = "config"; + @Nullable + private DockerComposeConfig config; + + public static final String JSON_PROPERTY_VERSION = "version"; + @Nullable + private Long version; + + public static final String JSON_PROPERTY_TEMPLATE_CURRENT_VERSION = "templateCurrentVersion"; + @Nullable + private String templateCurrentVersion; + + public static final String JSON_PROPERTY_AGENT_PROFILE_ID = "agentProfileId"; + @Nullable + private AgentProfileId agentProfileId; + + public static final String JSON_PROPERTY_ASSIGNED_APPLICATIONS_COUNT = "assignedApplicationsCount"; + @Nullable + private Long assignedApplicationsCount; + + public static final String JSON_PROPERTY_ADDITIONAL_INFO = "additionalInfo"; + @Nullable + private com.fasterxml.jackson.databind.JsonNode additionalInfo; + + public AgentAppProfileRelationInfo() { + } + + @JsonCreator + public AgentAppProfileRelationInfo( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime, + @JsonProperty(JSON_PROPERTY_TENANT_ID) TenantId tenantId, + @JsonProperty(JSON_PROPERTY_TEMPLATE_CURRENT_VERSION) String templateCurrentVersion, + @JsonProperty(JSON_PROPERTY_AGENT_PROFILE_ID) AgentProfileId agentProfileId, + @JsonProperty(JSON_PROPERTY_ASSIGNED_APPLICATIONS_COUNT) Long assignedApplicationsCount, + @JsonProperty(JSON_PROPERTY_ADDITIONAL_INFO) com.fasterxml.jackson.databind.JsonNode additionalInfo + ) { + this(); + this.createdTime = createdTime; + this.tenantId = tenantId; + this.templateCurrentVersion = templateCurrentVersion; + this.agentProfileId = agentProfileId; + this.assignedApplicationsCount = assignedApplicationsCount; + this.additionalInfo = additionalInfo; + } + + public AgentAppProfileRelationInfo id(@Nullable AgentAppProfileId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent Application Profile Id. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppProfileId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentAppProfileId id) { + this.id = id; + } + + + /** + * Timestamp of the profile creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + /** + * JSON object with Tenant Id. + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + + + public AgentAppProfileRelationInfo name(@Nonnull String name) { + this.name = name; + return this; + } + + /** + * Unique profile name within tenant + * @return name + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getName() { + return name; + } + + + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setName(@Nonnull String name) { + this.name = name; + } + + + public AgentAppProfileRelationInfo description(@Nullable String description) { + this.description = description; + return this; + } + + /** + * Profile description + * @return description + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDescription() { + return description; + } + + + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDescription(@Nullable String description) { + this.description = description; + } + + + public AgentAppProfileRelationInfo appType(@Nonnull AgentApplicationType appType) { + this.appType = appType; + return this; + } + + /** + * Application type: EDGE, GATEWAY, or GENERIC + * @return appType + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_APP_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public AgentApplicationType getAppType() { + return appType; + } + + + @JsonProperty(value = JSON_PROPERTY_APP_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setAppType(@Nonnull AgentApplicationType appType) { + this.appType = appType; + } + + + public AgentAppProfileRelationInfo templateVersion(@Nonnull String templateVersion) { + this.templateVersion = templateVersion; + return this; + } + + /** + * Template version this profile is based on + * @return templateVersion + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_VERSION, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getTemplateVersion() { + return templateVersion; + } + + + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_VERSION, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTemplateVersion(@Nonnull String templateVersion) { + this.templateVersion = templateVersion; + } + + + public AgentAppProfileRelationInfo config(@Nullable DockerComposeConfig config) { + this.config = config; + return this; + } + + /** + * Get config + * @return config + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CONFIG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public DockerComposeConfig getConfig() { + return config; + } + + + @JsonProperty(value = JSON_PROPERTY_CONFIG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setConfig(@Nullable DockerComposeConfig config) { + this.config = config; + } + + + public AgentAppProfileRelationInfo version(@Nullable Long version) { + this.version = version; + return this; + } + + /** + * Get version + * @return version + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getVersion() { + return version; + } + + + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVersion(@Nullable Long version) { + this.version = version; + } + + + /** + * Current version of the template this profile points to. + * @return templateCurrentVersion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_CURRENT_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getTemplateCurrentVersion() { + return templateCurrentVersion; + } + + + + + /** + * JSON object with the Agent Profile Id this app profile is assigned to. + * @return agentProfileId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentProfileId getAgentProfileId() { + return agentProfileId; + } + + + + + /** + * Number of AgentApplications using this app profile within the agent profile. + * @return assignedApplicationsCount + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ASSIGNED_APPLICATIONS_COUNT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getAssignedApplicationsCount() { + return assignedApplicationsCount; + } + + + + + /** + * Additional info of the assignment relation between the agent profile and this app profile. + * @return additionalInfo + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ADDITIONAL_INFO, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public com.fasterxml.jackson.databind.JsonNode getAdditionalInfo() { + return additionalInfo; + } + + + + + /** + * Return true if this AgentAppProfileRelationInfo object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppProfileRelationInfo agentAppProfileRelationInfo = (AgentAppProfileRelationInfo) o; + return Objects.equals(this.id, agentAppProfileRelationInfo.id) && + Objects.equals(this.createdTime, agentAppProfileRelationInfo.createdTime) && + Objects.equals(this.tenantId, agentAppProfileRelationInfo.tenantId) && + Objects.equals(this.name, agentAppProfileRelationInfo.name) && + Objects.equals(this.description, agentAppProfileRelationInfo.description) && + Objects.equals(this.appType, agentAppProfileRelationInfo.appType) && + Objects.equals(this.templateVersion, agentAppProfileRelationInfo.templateVersion) && + Objects.equals(this.config, agentAppProfileRelationInfo.config) && + Objects.equals(this.version, agentAppProfileRelationInfo.version) && + Objects.equals(this.templateCurrentVersion, agentAppProfileRelationInfo.templateCurrentVersion) && + Objects.equals(this.agentProfileId, agentAppProfileRelationInfo.agentProfileId) && + Objects.equals(this.assignedApplicationsCount, agentAppProfileRelationInfo.assignedApplicationsCount) && + Objects.equals(this.additionalInfo, agentAppProfileRelationInfo.additionalInfo); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, tenantId, name, description, appType, templateVersion, config, version, templateCurrentVersion, agentProfileId, assignedApplicationsCount, additionalInfo); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppProfileRelationInfo {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" description: ").append(toIndentedString(description)).append("\n"); + sb.append(" appType: ").append(toIndentedString(appType)).append("\n"); + sb.append(" templateVersion: ").append(toIndentedString(templateVersion)).append("\n"); + sb.append(" config: ").append(toIndentedString(config)).append("\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" templateCurrentVersion: ").append(toIndentedString(templateCurrentVersion)).append("\n"); + sb.append(" agentProfileId: ").append(toIndentedString(agentProfileId)).append("\n"); + sb.append(" assignedApplicationsCount: ").append(toIndentedString(assignedApplicationsCount)).append("\n"); + sb.append(" additionalInfo: ").append(toIndentedString(additionalInfo)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sname%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `description` to the URL query string + if (getDescription() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sdescription%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDescription())))); + } + + // add `appType` to the URL query string + if (getAppType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sappType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAppType())))); + } + + // add `templateVersion` to the URL query string + if (getTemplateVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateVersion())))); + } + + // add `config` to the URL query string + if (getConfig() != null) { + joiner.add(getConfig().toUrlQueryString(prefix + "config" + suffix)); + } + + // add `version` to the URL query string + if (getVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sversion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getVersion())))); + } + + // add `templateCurrentVersion` to the URL query string + if (getTemplateCurrentVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateCurrentVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateCurrentVersion())))); + } + + // add `agentProfileId` to the URL query string + if (getAgentProfileId() != null) { + joiner.add(getAgentProfileId().toUrlQueryString(prefix + "agentProfileId" + suffix)); + } + + // add `assignedApplicationsCount` to the URL query string + if (getAssignedApplicationsCount() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sassignedApplicationsCount%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAssignedApplicationsCount())))); + } + + // add `additionalInfo` to the URL query string + if (getAdditionalInfo() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sadditionalInfo%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAdditionalInfo())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppStep.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppStep.java new file mode 100644 index 00000000..f1a30564 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppStep.java @@ -0,0 +1,413 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStepType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * AgentAppStep + */ +@JsonPropertyOrder({ + AgentAppStep.JSON_PROPERTY_ID, + AgentAppStep.JSON_PROPERTY_NEXT_ID, + AgentAppStep.JSON_PROPERTY_TITLE, + AgentAppStep.JSON_PROPERTY_TEMPLATE_ONLY, + AgentAppStep.JSON_PROPERTY_CONDITION, + AgentAppStep.JSON_PROPERTY_STATEFUL, + AgentAppStep.JSON_PROPERTY_TYPE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) +@JsonSubTypes({ + @JsonSubTypes.Type(value = AgentFinalizeStep.class, name = "AgentFinalizeStep"), + @JsonSubTypes.Type(value = AgentPrepareStep.class, name = "AgentPrepareStep"), + @JsonSubTypes.Type(value = BackupVolumesRemoveStep.class, name = "BackupVolumesRemoveStep"), + @JsonSubTypes.Type(value = BackupVolumesStep.class, name = "BackupVolumesStep"), + @JsonSubTypes.Type(value = ComposeDownStep.class, name = "ComposeDownStep"), + @JsonSubTypes.Type(value = ComposeRestartStep.class, name = "ComposeRestartStep"), + @JsonSubTypes.Type(value = ComposeStartStep.class, name = "ComposeStartStep"), + @JsonSubTypes.Type(value = ComposeStep.class, name = "ComposeStep"), + @JsonSubTypes.Type(value = ComposeTypeChoiceStep.class, name = "ComposeTypeChoiceStep"), + @JsonSubTypes.Type(value = RollBackStep.class, name = "RollBackStep"), + @JsonSubTypes.Type(value = RunJobStep.class, name = "RunJobStep"), +}) + +public class AgentAppStep { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private UUID id; + + public static final String JSON_PROPERTY_NEXT_ID = "nextId"; + @Nullable + private UUID nextId; + + public static final String JSON_PROPERTY_TITLE = "title"; + @Nullable + private String title; + + public static final String JSON_PROPERTY_TEMPLATE_ONLY = "templateOnly"; + @Nullable + private Boolean templateOnly; + + public static final String JSON_PROPERTY_CONDITION = "condition"; + @Nullable + private String condition; + + public static final String JSON_PROPERTY_STATEFUL = "stateful"; + @Nullable + private Boolean stateful; + + public static final String JSON_PROPERTY_TYPE = "type"; + @Nullable + private AgentAppStepType type; + + public AgentAppStep() { + } + + public AgentAppStep id(@Nullable UUID id) { + this.id = id; + return this; + } + + /** + * Get id + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UUID getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable UUID id) { + this.id = id; + } + + + public AgentAppStep nextId(@Nullable UUID nextId) { + this.nextId = nextId; + return this; + } + + /** + * Get nextId + * @return nextId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_NEXT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UUID getNextId() { + return nextId; + } + + + @JsonProperty(value = JSON_PROPERTY_NEXT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNextId(@Nullable UUID nextId) { + this.nextId = nextId; + } + + + public AgentAppStep title(@Nullable String title) { + this.title = title; + return this; + } + + /** + * Get title + * @return title + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TITLE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getTitle() { + return title; + } + + + @JsonProperty(value = JSON_PROPERTY_TITLE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTitle(@Nullable String title) { + this.title = title; + } + + + public AgentAppStep templateOnly(@Nullable Boolean templateOnly) { + this.templateOnly = templateOnly; + return this; + } + + /** + * Get templateOnly + * @return templateOnly + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_ONLY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getTemplateOnly() { + return templateOnly; + } + + + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_ONLY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTemplateOnly(@Nullable Boolean templateOnly) { + this.templateOnly = templateOnly; + } + + + public AgentAppStep condition(@Nullable String condition) { + this.condition = condition; + return this; + } + + /** + * Get condition + * @return condition + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CONDITION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getCondition() { + return condition; + } + + + @JsonProperty(value = JSON_PROPERTY_CONDITION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCondition(@Nullable String condition) { + this.condition = condition; + } + + + public AgentAppStep stateful(@Nullable Boolean stateful) { + this.stateful = stateful; + return this; + } + + /** + * Get stateful + * @return stateful + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_STATEFUL, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getStateful() { + return stateful; + } + + + @JsonProperty(value = JSON_PROPERTY_STATEFUL, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setStateful(@Nullable Boolean stateful) { + this.stateful = stateful; + } + + + public AgentAppStep type(@Nullable AgentAppStepType type) { + this.type = type; + return this; + } + + /** + * Get type + * @return type + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppStepType getType() { + return type; + } + + + @JsonProperty(value = JSON_PROPERTY_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setType(@Nullable AgentAppStepType type) { + this.type = type; + } + + + /** + * Return true if this AgentAppStep object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppStep agentAppStep = (AgentAppStep) o; + return Objects.equals(this.id, agentAppStep.id) && + Objects.equals(this.nextId, agentAppStep.nextId) && + Objects.equals(this.title, agentAppStep.title) && + Objects.equals(this.templateOnly, agentAppStep.templateOnly) && + Objects.equals(this.condition, agentAppStep.condition) && + Objects.equals(this.stateful, agentAppStep.stateful) && + Objects.equals(this.type, agentAppStep.type); + } + + @Override + public int hashCode() { + return Objects.hash(id, nextId, title, templateOnly, condition, stateful, type); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppStep {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" nextId: ").append(toIndentedString(nextId)).append("\n"); + sb.append(" title: ").append(toIndentedString(title)).append("\n"); + sb.append(" templateOnly: ").append(toIndentedString(templateOnly)).append("\n"); + sb.append(" condition: ").append(toIndentedString(condition)).append("\n"); + sb.append(" stateful: ").append(toIndentedString(stateful)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `nextId` to the URL query string + if (getNextId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextId())))); + } + + // add `title` to the URL query string + if (getTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTitle())))); + } + + // add `templateOnly` to the URL query string + if (getTemplateOnly() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateOnly%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateOnly())))); + } + + // add `condition` to the URL query string + if (getCondition() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scondition%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCondition())))); + } + + // add `stateful` to the URL query string + if (getStateful() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstateful%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStateful())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("AgentFinalizeStep", AgentFinalizeStep.class); + mappings.put("AgentPrepareStep", AgentPrepareStep.class); + mappings.put("BackupVolumesRemoveStep", BackupVolumesRemoveStep.class); + mappings.put("BackupVolumesStep", BackupVolumesStep.class); + mappings.put("ComposeDownStep", ComposeDownStep.class); + mappings.put("ComposeRestartStep", ComposeRestartStep.class); + mappings.put("ComposeStartStep", ComposeStartStep.class); + mappings.put("ComposeStep", ComposeStep.class); + mappings.put("ComposeTypeChoiceStep", ComposeTypeChoiceStep.class); + mappings.put("RollBackStep", RollBackStep.class); + mappings.put("RunJobStep", RunJobStep.class); + mappings.put("AgentAppStep", AgentAppStep.class); + JSON.registerDiscriminator(AgentAppStep.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppStepState.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppStepState.java new file mode 100644 index 00000000..cc50b194 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppStepState.java @@ -0,0 +1,184 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppStepType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * AgentAppStepState + */ +@JsonPropertyOrder({ + AgentAppStepState.JSON_PROPERTY_TYPE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) +@JsonSubTypes({ + @JsonSubTypes.Type(value = BackupVolumesStepState.class, name = "BackupVolumesStepState"), + @JsonSubTypes.Type(value = ComposeDownStepState.class, name = "ComposeDownStepState"), + @JsonSubTypes.Type(value = ComposeStepState.class, name = "ComposeStepState"), + @JsonSubTypes.Type(value = RollBackStepState.class, name = "RollBackStepState"), + @JsonSubTypes.Type(value = RunJobStepState.class, name = "RunJobStepState"), +}) + +public class AgentAppStepState { + public static final String JSON_PROPERTY_TYPE = "type"; + @Nullable + private AgentAppStepType type; + + public AgentAppStepState() { + } + + public AgentAppStepState type(@Nullable AgentAppStepType type) { + this.type = type; + return this; + } + + /** + * Get type + * @return type + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppStepType getType() { + return type; + } + + + @JsonProperty(value = JSON_PROPERTY_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setType(@Nullable AgentAppStepType type) { + this.type = type; + } + + + /** + * Return true if this AgentAppStepState object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppStepState agentAppStepState = (AgentAppStepState) o; + return Objects.equals(this.type, agentAppStepState.type); + } + + @Override + public int hashCode() { + return Objects.hash(type); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppStepState {\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("BackupVolumesStepState", BackupVolumesStepState.class); + mappings.put("ComposeDownStepState", ComposeDownStepState.class); + mappings.put("ComposeStepState", ComposeStepState.class); + mappings.put("RollBackStepState", RollBackStepState.class); + mappings.put("RunJobStepState", RunJobStepState.class); + mappings.put("AgentAppStepState", AgentAppStepState.class); + JSON.registerDiscriminator(AgentAppStepState.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppStepType.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppStepType.java new file mode 100644 index 00000000..8657b06b --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppStepType.java @@ -0,0 +1,98 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets AgentAppStepType + */ +public enum AgentAppStepType { + + COMPOSE_TEMPLATE("COMPOSE_TEMPLATE"), + + COMPOSE("COMPOSE"), + + COMPOSE_START("COMPOSE_START"), + + COMPOSE_DOWN("COMPOSE_DOWN"), + + ROLLBACK("ROLLBACK"), + + BACKUP_VOLUME("BACKUP_VOLUME"), + + BACKUP_VOLUME_REMOVE("BACKUP_VOLUME_REMOVE"), + + COMPOSE_RESTART("COMPOSE_RESTART"), + + RUN_JOB("RUN_JOB"), + + AGENT_PREPARE("AGENT_PREPARE"), + + AGENT_FINALIZE("AGENT_FINALIZE"); + + private String value; + + AgentAppStepType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static AgentAppStepType fromValue(String value) { + for (AgentAppStepType b : AgentAppStepType.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppTemplate.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppTemplate.java new file mode 100644 index 00000000..62b48674 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppTemplate.java @@ -0,0 +1,549 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentAppConfigType; +import org.thingsboard.client.model.AgentAppTemplateStartStepsInner; +import org.thingsboard.client.model.AgentApplicationType; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentAppTemplate + */ +@JsonPropertyOrder({ + AgentAppTemplate.JSON_PROPERTY_TENANT_ID, + AgentAppTemplate.JSON_PROPERTY_APP_TYPE, + AgentAppTemplate.JSON_PROPERTY_CONFIG_TYPE, + AgentAppTemplate.JSON_PROPERTY_CURRENT_VERSION, + AgentAppTemplate.JSON_PROPERTY_NEXT_VERSION, + AgentAppTemplate.JSON_PROPERTY_START_STEPS, + AgentAppTemplate.JSON_PROPERTY_UPGRADE_STEPS, + AgentAppTemplate.JSON_PROPERTY_DELETE_STEPS, + AgentAppTemplate.JSON_PROPERTY_ROLLBACK_STEPS, + AgentAppTemplate.JSON_PROPERTY_RESTART_STEPS +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentAppTemplate { + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_APP_TYPE = "appType"; + @Nonnull + private AgentApplicationType appType; + + public static final String JSON_PROPERTY_CONFIG_TYPE = "configType"; + @Nullable + private AgentAppConfigType configType; + + public static final String JSON_PROPERTY_CURRENT_VERSION = "currentVersion"; + @Nonnull + private String currentVersion; + + public static final String JSON_PROPERTY_NEXT_VERSION = "nextVersion"; + @Nullable + private String nextVersion; + + public static final String JSON_PROPERTY_START_STEPS = "startSteps"; + @Nullable + private List startSteps = new ArrayList<>(); + + public static final String JSON_PROPERTY_UPGRADE_STEPS = "upgradeSteps"; + @Nullable + private List upgradeSteps = new ArrayList<>(); + + public static final String JSON_PROPERTY_DELETE_STEPS = "deleteSteps"; + @Nullable + private List deleteSteps = new ArrayList<>(); + + public static final String JSON_PROPERTY_ROLLBACK_STEPS = "rollbackSteps"; + @Nullable + private List rollbackSteps = new ArrayList<>(); + + public static final String JSON_PROPERTY_RESTART_STEPS = "restartSteps"; + @Nullable + private List restartSteps = new ArrayList<>(); + + public AgentAppTemplate() { + } + + @JsonCreator + public AgentAppTemplate( + @JsonProperty(JSON_PROPERTY_TENANT_ID) TenantId tenantId + ) { + this(); + this.tenantId = tenantId; + } + + /** + * JSON object with Tenant Id. + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + + + public AgentAppTemplate appType(@Nonnull AgentApplicationType appType) { + this.appType = appType; + return this; + } + + /** + * Application type + * @return appType + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_APP_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public AgentApplicationType getAppType() { + return appType; + } + + + @JsonProperty(value = JSON_PROPERTY_APP_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setAppType(@Nonnull AgentApplicationType appType) { + this.appType = appType; + } + + + public AgentAppTemplate configType(@Nullable AgentAppConfigType configType) { + this.configType = configType; + return this; + } + + /** + * Config type (e.g. 'DOCKER_COMPOSE'); the compose body lives in the template's compose-template step, not here + * @return configType + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CONFIG_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppConfigType getConfigType() { + return configType; + } + + + @JsonProperty(value = JSON_PROPERTY_CONFIG_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setConfigType(@Nullable AgentAppConfigType configType) { + this.configType = configType; + } + + + public AgentAppTemplate currentVersion(@Nonnull String currentVersion) { + this.currentVersion = currentVersion; + return this; + } + + /** + * Current template version + * @return currentVersion + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_CURRENT_VERSION, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getCurrentVersion() { + return currentVersion; + } + + + @JsonProperty(value = JSON_PROPERTY_CURRENT_VERSION, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setCurrentVersion(@Nonnull String currentVersion) { + this.currentVersion = currentVersion; + } + + + public AgentAppTemplate nextVersion(@Nullable String nextVersion) { + this.nextVersion = nextVersion; + return this; + } + + /** + * Next template version + * @return nextVersion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_NEXT_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getNextVersion() { + return nextVersion; + } + + + @JsonProperty(value = JSON_PROPERTY_NEXT_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNextVersion(@Nullable String nextVersion) { + this.nextVersion = nextVersion; + } + + + public AgentAppTemplate startSteps(@Nullable List startSteps) { + this.startSteps = startSteps; + return this; + } + + public AgentAppTemplate addStartStepsItem(AgentAppTemplateStartStepsInner startStepsItem) { + if (this.startSteps == null) { + this.startSteps = new ArrayList<>(); + } + this.startSteps.add(startStepsItem); + return this; + } + + /** + * Start steps + * @return startSteps + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_START_STEPS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getStartSteps() { + return startSteps; + } + + + @JsonProperty(value = JSON_PROPERTY_START_STEPS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setStartSteps(@Nullable List startSteps) { + this.startSteps = startSteps; + } + + + public AgentAppTemplate upgradeSteps(@Nullable List upgradeSteps) { + this.upgradeSteps = upgradeSteps; + return this; + } + + public AgentAppTemplate addUpgradeStepsItem(AgentAppTemplateStartStepsInner upgradeStepsItem) { + if (this.upgradeSteps == null) { + this.upgradeSteps = new ArrayList<>(); + } + this.upgradeSteps.add(upgradeStepsItem); + return this; + } + + /** + * Upgrade steps + * @return upgradeSteps + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_UPGRADE_STEPS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getUpgradeSteps() { + return upgradeSteps; + } + + + @JsonProperty(value = JSON_PROPERTY_UPGRADE_STEPS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUpgradeSteps(@Nullable List upgradeSteps) { + this.upgradeSteps = upgradeSteps; + } + + + public AgentAppTemplate deleteSteps(@Nullable List deleteSteps) { + this.deleteSteps = deleteSteps; + return this; + } + + public AgentAppTemplate addDeleteStepsItem(AgentAppTemplateStartStepsInner deleteStepsItem) { + if (this.deleteSteps == null) { + this.deleteSteps = new ArrayList<>(); + } + this.deleteSteps.add(deleteStepsItem); + return this; + } + + /** + * Delete steps + * @return deleteSteps + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DELETE_STEPS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getDeleteSteps() { + return deleteSteps; + } + + + @JsonProperty(value = JSON_PROPERTY_DELETE_STEPS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDeleteSteps(@Nullable List deleteSteps) { + this.deleteSteps = deleteSteps; + } + + + public AgentAppTemplate rollbackSteps(@Nullable List rollbackSteps) { + this.rollbackSteps = rollbackSteps; + return this; + } + + public AgentAppTemplate addRollbackStepsItem(AgentAppTemplateStartStepsInner rollbackStepsItem) { + if (this.rollbackSteps == null) { + this.rollbackSteps = new ArrayList<>(); + } + this.rollbackSteps.add(rollbackStepsItem); + return this; + } + + /** + * Rollback steps + * @return rollbackSteps + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ROLLBACK_STEPS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getRollbackSteps() { + return rollbackSteps; + } + + + @JsonProperty(value = JSON_PROPERTY_ROLLBACK_STEPS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setRollbackSteps(@Nullable List rollbackSteps) { + this.rollbackSteps = rollbackSteps; + } + + + public AgentAppTemplate restartSteps(@Nullable List restartSteps) { + this.restartSteps = restartSteps; + return this; + } + + public AgentAppTemplate addRestartStepsItem(AgentAppTemplateStartStepsInner restartStepsItem) { + if (this.restartSteps == null) { + this.restartSteps = new ArrayList<>(); + } + this.restartSteps.add(restartStepsItem); + return this; + } + + /** + * Restart steps + * @return restartSteps + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_RESTART_STEPS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getRestartSteps() { + return restartSteps; + } + + + @JsonProperty(value = JSON_PROPERTY_RESTART_STEPS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setRestartSteps(@Nullable List restartSteps) { + this.restartSteps = restartSteps; + } + + + /** + * Return true if this AgentAppTemplate object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppTemplate agentAppTemplate = (AgentAppTemplate) o; + return Objects.equals(this.tenantId, agentAppTemplate.tenantId) && + Objects.equals(this.appType, agentAppTemplate.appType) && + Objects.equals(this.configType, agentAppTemplate.configType) && + Objects.equals(this.currentVersion, agentAppTemplate.currentVersion) && + Objects.equals(this.nextVersion, agentAppTemplate.nextVersion) && + Objects.equals(this.startSteps, agentAppTemplate.startSteps) && + Objects.equals(this.upgradeSteps, agentAppTemplate.upgradeSteps) && + Objects.equals(this.deleteSteps, agentAppTemplate.deleteSteps) && + Objects.equals(this.rollbackSteps, agentAppTemplate.rollbackSteps) && + Objects.equals(this.restartSteps, agentAppTemplate.restartSteps); + } + + @Override + public int hashCode() { + return Objects.hash(tenantId, appType, configType, currentVersion, nextVersion, startSteps, upgradeSteps, deleteSteps, rollbackSteps, restartSteps); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppTemplate {\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" appType: ").append(toIndentedString(appType)).append("\n"); + sb.append(" configType: ").append(toIndentedString(configType)).append("\n"); + sb.append(" currentVersion: ").append(toIndentedString(currentVersion)).append("\n"); + sb.append(" nextVersion: ").append(toIndentedString(nextVersion)).append("\n"); + sb.append(" startSteps: ").append(toIndentedString(startSteps)).append("\n"); + sb.append(" upgradeSteps: ").append(toIndentedString(upgradeSteps)).append("\n"); + sb.append(" deleteSteps: ").append(toIndentedString(deleteSteps)).append("\n"); + sb.append(" rollbackSteps: ").append(toIndentedString(rollbackSteps)).append("\n"); + sb.append(" restartSteps: ").append(toIndentedString(restartSteps)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `appType` to the URL query string + if (getAppType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sappType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAppType())))); + } + + // add `configType` to the URL query string + if (getConfigType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sconfigType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getConfigType())))); + } + + // add `currentVersion` to the URL query string + if (getCurrentVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scurrentVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCurrentVersion())))); + } + + // add `nextVersion` to the URL query string + if (getNextVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextVersion())))); + } + + // add `startSteps` to the URL query string + if (getStartSteps() != null) { + for (int i = 0; i < getStartSteps().size(); i++) { + if (getStartSteps().get(i) != null) { + joiner.add(getStartSteps().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sstartSteps%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `upgradeSteps` to the URL query string + if (getUpgradeSteps() != null) { + for (int i = 0; i < getUpgradeSteps().size(); i++) { + if (getUpgradeSteps().get(i) != null) { + joiner.add(getUpgradeSteps().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%supgradeSteps%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `deleteSteps` to the URL query string + if (getDeleteSteps() != null) { + for (int i = 0; i < getDeleteSteps().size(); i++) { + if (getDeleteSteps().get(i) != null) { + joiner.add(getDeleteSteps().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sdeleteSteps%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `rollbackSteps` to the URL query string + if (getRollbackSteps() != null) { + for (int i = 0; i < getRollbackSteps().size(); i++) { + if (getRollbackSteps().get(i) != null) { + joiner.add(getRollbackSteps().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%srollbackSteps%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `restartSteps` to the URL query string + if (getRestartSteps() != null) { + for (int i = 0; i < getRestartSteps().size(); i++) { + if (getRestartSteps().get(i) != null) { + joiner.add(getRestartSteps().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%srestartSteps%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppTemplateStartStepsInner.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppTemplateStartStepsInner.java new file mode 100644 index 00000000..07044512 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppTemplateStartStepsInner.java @@ -0,0 +1,800 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStepType; +import org.thingsboard.client.model.AgentFinalizeStep; +import org.thingsboard.client.model.AgentPrepareStep; +import org.thingsboard.client.model.BackupVolumesRemoveStep; +import org.thingsboard.client.model.BackupVolumesStep; +import org.thingsboard.client.model.ComposeDownStep; +import org.thingsboard.client.model.ComposeRestartStep; +import org.thingsboard.client.model.ComposeStartStep; +import org.thingsboard.client.model.ComposeStep; +import org.thingsboard.client.model.ComposeTypeChoiceStep; +import org.thingsboard.client.model.RollBackStep; +import org.thingsboard.client.model.RunJobStep; +import org.thingsboard.client.model.RunJobStepState; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +import com.fasterxml.jackson.core.type.TypeReference; + +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import org.thingsboard.client.ApiClient; +import org.thingsboard.client.JSON; + +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonDeserialize(using = AgentAppTemplateStartStepsInner.AgentAppTemplateStartStepsInnerDeserializer.class) +@JsonSerialize(using = AgentAppTemplateStartStepsInner.AgentAppTemplateStartStepsInnerSerializer.class) +public class AgentAppTemplateStartStepsInner extends AbstractOpenApiSchema { + private static final Logger log = Logger.getLogger(AgentAppTemplateStartStepsInner.class.getName()); + + public static class AgentAppTemplateStartStepsInnerSerializer extends StdSerializer { + public AgentAppTemplateStartStepsInnerSerializer(Class t) { + super(t); + } + + public AgentAppTemplateStartStepsInnerSerializer() { + this(null); + } + + @Override + public void serialize(AgentAppTemplateStartStepsInner value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { + jgen.writeObject(value.getActualInstance()); + } + } + + public static class AgentAppTemplateStartStepsInnerDeserializer extends StdDeserializer { + public AgentAppTemplateStartStepsInnerDeserializer() { + this(AgentAppTemplateStartStepsInner.class); + } + + public AgentAppTemplateStartStepsInnerDeserializer(Class vc) { + super(vc); + } + + @Override + public AgentAppTemplateStartStepsInner deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { + JsonNode tree = jp.readValueAsTree(); + Object deserialized = null; + boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); + int match = 0; + JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize AgentFinalizeStep + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AgentFinalizeStep.class.equals(Integer.class) || AgentFinalizeStep.class.equals(Long.class) || AgentFinalizeStep.class.equals(Float.class) || AgentFinalizeStep.class.equals(Double.class) || AgentFinalizeStep.class.equals(Boolean.class) || AgentFinalizeStep.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AgentFinalizeStep.class.equals(Integer.class) || AgentFinalizeStep.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AgentFinalizeStep.class.equals(Float.class) || AgentFinalizeStep.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AgentFinalizeStep.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AgentFinalizeStep.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AgentFinalizeStep.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AgentFinalizeStep'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AgentFinalizeStep'", e); + } + + // deserialize AgentPrepareStep + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AgentPrepareStep.class.equals(Integer.class) || AgentPrepareStep.class.equals(Long.class) || AgentPrepareStep.class.equals(Float.class) || AgentPrepareStep.class.equals(Double.class) || AgentPrepareStep.class.equals(Boolean.class) || AgentPrepareStep.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AgentPrepareStep.class.equals(Integer.class) || AgentPrepareStep.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AgentPrepareStep.class.equals(Float.class) || AgentPrepareStep.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AgentPrepareStep.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AgentPrepareStep.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AgentPrepareStep.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AgentPrepareStep'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AgentPrepareStep'", e); + } + + // deserialize BackupVolumesRemoveStep + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (BackupVolumesRemoveStep.class.equals(Integer.class) || BackupVolumesRemoveStep.class.equals(Long.class) || BackupVolumesRemoveStep.class.equals(Float.class) || BackupVolumesRemoveStep.class.equals(Double.class) || BackupVolumesRemoveStep.class.equals(Boolean.class) || BackupVolumesRemoveStep.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((BackupVolumesRemoveStep.class.equals(Integer.class) || BackupVolumesRemoveStep.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((BackupVolumesRemoveStep.class.equals(Float.class) || BackupVolumesRemoveStep.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (BackupVolumesRemoveStep.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (BackupVolumesRemoveStep.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(BackupVolumesRemoveStep.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'BackupVolumesRemoveStep'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'BackupVolumesRemoveStep'", e); + } + + // deserialize BackupVolumesStep + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (BackupVolumesStep.class.equals(Integer.class) || BackupVolumesStep.class.equals(Long.class) || BackupVolumesStep.class.equals(Float.class) || BackupVolumesStep.class.equals(Double.class) || BackupVolumesStep.class.equals(Boolean.class) || BackupVolumesStep.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((BackupVolumesStep.class.equals(Integer.class) || BackupVolumesStep.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((BackupVolumesStep.class.equals(Float.class) || BackupVolumesStep.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (BackupVolumesStep.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (BackupVolumesStep.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(BackupVolumesStep.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'BackupVolumesStep'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'BackupVolumesStep'", e); + } + + // deserialize ComposeDownStep + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ComposeDownStep.class.equals(Integer.class) || ComposeDownStep.class.equals(Long.class) || ComposeDownStep.class.equals(Float.class) || ComposeDownStep.class.equals(Double.class) || ComposeDownStep.class.equals(Boolean.class) || ComposeDownStep.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ComposeDownStep.class.equals(Integer.class) || ComposeDownStep.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ComposeDownStep.class.equals(Float.class) || ComposeDownStep.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ComposeDownStep.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ComposeDownStep.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ComposeDownStep.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ComposeDownStep'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ComposeDownStep'", e); + } + + // deserialize ComposeRestartStep + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ComposeRestartStep.class.equals(Integer.class) || ComposeRestartStep.class.equals(Long.class) || ComposeRestartStep.class.equals(Float.class) || ComposeRestartStep.class.equals(Double.class) || ComposeRestartStep.class.equals(Boolean.class) || ComposeRestartStep.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ComposeRestartStep.class.equals(Integer.class) || ComposeRestartStep.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ComposeRestartStep.class.equals(Float.class) || ComposeRestartStep.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ComposeRestartStep.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ComposeRestartStep.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ComposeRestartStep.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ComposeRestartStep'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ComposeRestartStep'", e); + } + + // deserialize ComposeStartStep + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ComposeStartStep.class.equals(Integer.class) || ComposeStartStep.class.equals(Long.class) || ComposeStartStep.class.equals(Float.class) || ComposeStartStep.class.equals(Double.class) || ComposeStartStep.class.equals(Boolean.class) || ComposeStartStep.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ComposeStartStep.class.equals(Integer.class) || ComposeStartStep.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ComposeStartStep.class.equals(Float.class) || ComposeStartStep.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ComposeStartStep.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ComposeStartStep.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ComposeStartStep.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ComposeStartStep'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ComposeStartStep'", e); + } + + // deserialize ComposeStep + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ComposeStep.class.equals(Integer.class) || ComposeStep.class.equals(Long.class) || ComposeStep.class.equals(Float.class) || ComposeStep.class.equals(Double.class) || ComposeStep.class.equals(Boolean.class) || ComposeStep.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ComposeStep.class.equals(Integer.class) || ComposeStep.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ComposeStep.class.equals(Float.class) || ComposeStep.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ComposeStep.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ComposeStep.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ComposeStep.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ComposeStep'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ComposeStep'", e); + } + + // deserialize ComposeTypeChoiceStep + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ComposeTypeChoiceStep.class.equals(Integer.class) || ComposeTypeChoiceStep.class.equals(Long.class) || ComposeTypeChoiceStep.class.equals(Float.class) || ComposeTypeChoiceStep.class.equals(Double.class) || ComposeTypeChoiceStep.class.equals(Boolean.class) || ComposeTypeChoiceStep.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ComposeTypeChoiceStep.class.equals(Integer.class) || ComposeTypeChoiceStep.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ComposeTypeChoiceStep.class.equals(Float.class) || ComposeTypeChoiceStep.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ComposeTypeChoiceStep.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ComposeTypeChoiceStep.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ComposeTypeChoiceStep.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ComposeTypeChoiceStep'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ComposeTypeChoiceStep'", e); + } + + // deserialize RollBackStep + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (RollBackStep.class.equals(Integer.class) || RollBackStep.class.equals(Long.class) || RollBackStep.class.equals(Float.class) || RollBackStep.class.equals(Double.class) || RollBackStep.class.equals(Boolean.class) || RollBackStep.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((RollBackStep.class.equals(Integer.class) || RollBackStep.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((RollBackStep.class.equals(Float.class) || RollBackStep.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (RollBackStep.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (RollBackStep.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(RollBackStep.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'RollBackStep'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'RollBackStep'", e); + } + + // deserialize RunJobStep + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (RunJobStep.class.equals(Integer.class) || RunJobStep.class.equals(Long.class) || RunJobStep.class.equals(Float.class) || RunJobStep.class.equals(Double.class) || RunJobStep.class.equals(Boolean.class) || RunJobStep.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((RunJobStep.class.equals(Integer.class) || RunJobStep.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((RunJobStep.class.equals(Float.class) || RunJobStep.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (RunJobStep.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (RunJobStep.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(RunJobStep.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'RunJobStep'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'RunJobStep'", e); + } + + if (match == 1) { + AgentAppTemplateStartStepsInner ret = new AgentAppTemplateStartStepsInner(); + ret.setActualInstance(deserialized); + return ret; + } + throw new IOException(String.format(java.util.Locale.ROOT, "Failed deserialization for AgentAppTemplateStartStepsInner: %d classes match result, expected 1", match)); + } + + /** + * Handle deserialization of the 'null' value. + */ + @Override + public AgentAppTemplateStartStepsInner getNullValue(DeserializationContext ctxt) throws JsonMappingException { + throw new JsonMappingException(ctxt.getParser(), "AgentAppTemplateStartStepsInner cannot be null"); + } + } + + // store a list of schema names defined in oneOf + public static final Map> schemas = new HashMap<>(); + + public AgentAppTemplateStartStepsInner() { + super("oneOf", Boolean.FALSE); + } + + public AgentAppTemplateStartStepsInner(AgentFinalizeStep o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppTemplateStartStepsInner(AgentPrepareStep o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppTemplateStartStepsInner(BackupVolumesRemoveStep o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppTemplateStartStepsInner(BackupVolumesStep o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppTemplateStartStepsInner(ComposeDownStep o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppTemplateStartStepsInner(ComposeRestartStep o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppTemplateStartStepsInner(ComposeStartStep o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppTemplateStartStepsInner(ComposeStep o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppTemplateStartStepsInner(ComposeTypeChoiceStep o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppTemplateStartStepsInner(RollBackStep o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public AgentAppTemplateStartStepsInner(RunJobStep o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + static { + schemas.put("AgentFinalizeStep", AgentFinalizeStep.class); + schemas.put("AgentPrepareStep", AgentPrepareStep.class); + schemas.put("BackupVolumesRemoveStep", BackupVolumesRemoveStep.class); + schemas.put("BackupVolumesStep", BackupVolumesStep.class); + schemas.put("ComposeDownStep", ComposeDownStep.class); + schemas.put("ComposeRestartStep", ComposeRestartStep.class); + schemas.put("ComposeStartStep", ComposeStartStep.class); + schemas.put("ComposeStep", ComposeStep.class); + schemas.put("ComposeTypeChoiceStep", ComposeTypeChoiceStep.class); + schemas.put("RollBackStep", RollBackStep.class); + schemas.put("RunJobStep", RunJobStep.class); + JSON.registerDescendants(AgentAppTemplateStartStepsInner.class, Collections.unmodifiableMap(schemas)); + } + + @Override + public Map> getSchemas() { + return AgentAppTemplateStartStepsInner.schemas; + } + + /** + * Set the instance that matches the oneOf child schema, check + * the instance parameter is valid against the oneOf child schemas: + * AgentFinalizeStep, AgentPrepareStep, BackupVolumesRemoveStep, BackupVolumesStep, ComposeDownStep, ComposeRestartStep, ComposeStartStep, ComposeStep, ComposeTypeChoiceStep, RollBackStep, RunJobStep + * + * It could be an instance of the 'oneOf' schemas. + * The oneOf child schemas may themselves be a composed schema (allOf, anyOf, oneOf). + */ + @Override + public void setActualInstance(Object instance) { + if (JSON.isInstanceOf(AgentFinalizeStep.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(AgentPrepareStep.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(BackupVolumesRemoveStep.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(BackupVolumesStep.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ComposeDownStep.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ComposeRestartStep.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ComposeStartStep.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ComposeStep.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ComposeTypeChoiceStep.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(RollBackStep.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(RunJobStep.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + throw new RuntimeException("Invalid instance type. Must be AgentFinalizeStep, AgentPrepareStep, BackupVolumesRemoveStep, BackupVolumesStep, ComposeDownStep, ComposeRestartStep, ComposeStartStep, ComposeStep, ComposeTypeChoiceStep, RollBackStep, RunJobStep"); + } + + /** + * Get the actual instance, which can be the following: + * AgentFinalizeStep, AgentPrepareStep, BackupVolumesRemoveStep, BackupVolumesStep, ComposeDownStep, ComposeRestartStep, ComposeStartStep, ComposeStep, ComposeTypeChoiceStep, RollBackStep, RunJobStep + * + * @return The actual instance (AgentFinalizeStep, AgentPrepareStep, BackupVolumesRemoveStep, BackupVolumesStep, ComposeDownStep, ComposeRestartStep, ComposeStartStep, ComposeStep, ComposeTypeChoiceStep, RollBackStep, RunJobStep) + */ + @Override + public Object getActualInstance() { + return super.getActualInstance(); + } + + /** + * Get the actual instance of `AgentFinalizeStep`. If the actual instance is not `AgentFinalizeStep`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AgentFinalizeStep` + * @throws ClassCastException if the instance is not `AgentFinalizeStep` + */ + public AgentFinalizeStep getAgentFinalizeStep() throws ClassCastException { + return (AgentFinalizeStep)super.getActualInstance(); + } + + /** + * Get the actual instance of `AgentPrepareStep`. If the actual instance is not `AgentPrepareStep`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AgentPrepareStep` + * @throws ClassCastException if the instance is not `AgentPrepareStep` + */ + public AgentPrepareStep getAgentPrepareStep() throws ClassCastException { + return (AgentPrepareStep)super.getActualInstance(); + } + + /** + * Get the actual instance of `BackupVolumesRemoveStep`. If the actual instance is not `BackupVolumesRemoveStep`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `BackupVolumesRemoveStep` + * @throws ClassCastException if the instance is not `BackupVolumesRemoveStep` + */ + public BackupVolumesRemoveStep getBackupVolumesRemoveStep() throws ClassCastException { + return (BackupVolumesRemoveStep)super.getActualInstance(); + } + + /** + * Get the actual instance of `BackupVolumesStep`. If the actual instance is not `BackupVolumesStep`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `BackupVolumesStep` + * @throws ClassCastException if the instance is not `BackupVolumesStep` + */ + public BackupVolumesStep getBackupVolumesStep() throws ClassCastException { + return (BackupVolumesStep)super.getActualInstance(); + } + + /** + * Get the actual instance of `ComposeDownStep`. If the actual instance is not `ComposeDownStep`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ComposeDownStep` + * @throws ClassCastException if the instance is not `ComposeDownStep` + */ + public ComposeDownStep getComposeDownStep() throws ClassCastException { + return (ComposeDownStep)super.getActualInstance(); + } + + /** + * Get the actual instance of `ComposeRestartStep`. If the actual instance is not `ComposeRestartStep`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ComposeRestartStep` + * @throws ClassCastException if the instance is not `ComposeRestartStep` + */ + public ComposeRestartStep getComposeRestartStep() throws ClassCastException { + return (ComposeRestartStep)super.getActualInstance(); + } + + /** + * Get the actual instance of `ComposeStartStep`. If the actual instance is not `ComposeStartStep`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ComposeStartStep` + * @throws ClassCastException if the instance is not `ComposeStartStep` + */ + public ComposeStartStep getComposeStartStep() throws ClassCastException { + return (ComposeStartStep)super.getActualInstance(); + } + + /** + * Get the actual instance of `ComposeStep`. If the actual instance is not `ComposeStep`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ComposeStep` + * @throws ClassCastException if the instance is not `ComposeStep` + */ + public ComposeStep getComposeStep() throws ClassCastException { + return (ComposeStep)super.getActualInstance(); + } + + /** + * Get the actual instance of `ComposeTypeChoiceStep`. If the actual instance is not `ComposeTypeChoiceStep`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ComposeTypeChoiceStep` + * @throws ClassCastException if the instance is not `ComposeTypeChoiceStep` + */ + public ComposeTypeChoiceStep getComposeTypeChoiceStep() throws ClassCastException { + return (ComposeTypeChoiceStep)super.getActualInstance(); + } + + /** + * Get the actual instance of `RollBackStep`. If the actual instance is not `RollBackStep`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `RollBackStep` + * @throws ClassCastException if the instance is not `RollBackStep` + */ + public RollBackStep getRollBackStep() throws ClassCastException { + return (RollBackStep)super.getActualInstance(); + } + + /** + * Get the actual instance of `RunJobStep`. If the actual instance is not `RunJobStep`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `RunJobStep` + * @throws ClassCastException if the instance is not `RunJobStep` + */ + public RunJobStep getRunJobStep() throws ClassCastException { + return (RunJobStep)super.getActualInstance(); + } + + + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + if (getActualInstance() instanceof AgentFinalizeStep) { + if (getActualInstance() != null) { + joiner.add(((AgentFinalizeStep)getActualInstance()).toUrlQueryString(prefix + "one_of_0" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof AgentPrepareStep) { + if (getActualInstance() != null) { + joiner.add(((AgentPrepareStep)getActualInstance()).toUrlQueryString(prefix + "one_of_1" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof BackupVolumesRemoveStep) { + if (getActualInstance() != null) { + joiner.add(((BackupVolumesRemoveStep)getActualInstance()).toUrlQueryString(prefix + "one_of_2" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof BackupVolumesStep) { + if (getActualInstance() != null) { + joiner.add(((BackupVolumesStep)getActualInstance()).toUrlQueryString(prefix + "one_of_3" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ComposeDownStep) { + if (getActualInstance() != null) { + joiner.add(((ComposeDownStep)getActualInstance()).toUrlQueryString(prefix + "one_of_4" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ComposeRestartStep) { + if (getActualInstance() != null) { + joiner.add(((ComposeRestartStep)getActualInstance()).toUrlQueryString(prefix + "one_of_5" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ComposeStartStep) { + if (getActualInstance() != null) { + joiner.add(((ComposeStartStep)getActualInstance()).toUrlQueryString(prefix + "one_of_6" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ComposeStep) { + if (getActualInstance() != null) { + joiner.add(((ComposeStep)getActualInstance()).toUrlQueryString(prefix + "one_of_7" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ComposeTypeChoiceStep) { + if (getActualInstance() != null) { + joiner.add(((ComposeTypeChoiceStep)getActualInstance()).toUrlQueryString(prefix + "one_of_8" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof RollBackStep) { + if (getActualInstance() != null) { + joiner.add(((RollBackStep)getActualInstance()).toUrlQueryString(prefix + "one_of_9" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof RunJobStep) { + if (getActualInstance() != null) { + joiner.add(((RunJobStep)getActualInstance()).toUrlQueryString(prefix + "one_of_10" + suffix)); + } + return joiner.toString(); + } + return null; + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppUnit.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppUnit.java new file mode 100644 index 00000000..3013ffa5 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppUnit.java @@ -0,0 +1,338 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppUnitId; +import org.thingsboard.client.model.AgentAppUnitType; +import org.thingsboard.client.model.AgentApplicationId; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentAppUnit + */ +@JsonPropertyOrder({ + AgentAppUnit.JSON_PROPERTY_ID, + AgentAppUnit.JSON_PROPERTY_CREATED_TIME, + AgentAppUnit.JSON_PROPERTY_TENANT_ID, + AgentAppUnit.JSON_PROPERTY_AGENT_APPLICATION_ID, + AgentAppUnit.JSON_PROPERTY_IDENTIFIER, + AgentAppUnit.JSON_PROPERTY_TYPE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentAppUnit { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentAppUnitId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nonnull + private TenantId tenantId; + + public static final String JSON_PROPERTY_AGENT_APPLICATION_ID = "agentApplicationId"; + @Nonnull + private AgentApplicationId agentApplicationId; + + public static final String JSON_PROPERTY_IDENTIFIER = "identifier"; + @Nonnull + private String identifier; + + public static final String JSON_PROPERTY_TYPE = "type"; + @Nonnull + private AgentAppUnitType type; + + public AgentAppUnit() { + } + + @JsonCreator + public AgentAppUnit( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime + ) { + this(); + this.createdTime = createdTime; + } + + public AgentAppUnit id(@Nullable AgentAppUnitId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent App Unit Id. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppUnitId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentAppUnitId id) { + this.id = id; + } + + + /** + * Timestamp of the agent app unit creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + public AgentAppUnit tenantId(@Nonnull TenantId tenantId) { + this.tenantId = tenantId; + return this; + } + + /** + * Tenant this unit belongs to + * @return tenantId + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public TenantId getTenantId() { + return tenantId; + } + + + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTenantId(@Nonnull TenantId tenantId) { + this.tenantId = tenantId; + } + + + public AgentAppUnit agentApplicationId(@Nonnull AgentApplicationId agentApplicationId) { + this.agentApplicationId = agentApplicationId; + return this; + } + + /** + * Agent application this unit belongs to + * @return agentApplicationId + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_AGENT_APPLICATION_ID, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public AgentApplicationId getAgentApplicationId() { + return agentApplicationId; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_APPLICATION_ID, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setAgentApplicationId(@Nonnull AgentApplicationId agentApplicationId) { + this.agentApplicationId = agentApplicationId; + } + + + public AgentAppUnit identifier(@Nonnull String identifier) { + this.identifier = identifier; + return this; + } + + /** + * Unit identifier + * @return identifier + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_IDENTIFIER, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getIdentifier() { + return identifier; + } + + + @JsonProperty(value = JSON_PROPERTY_IDENTIFIER, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setIdentifier(@Nonnull String identifier) { + this.identifier = identifier; + } + + + public AgentAppUnit type(@Nonnull AgentAppUnitType type) { + this.type = type; + return this; + } + + /** + * Unit type + * @return type + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public AgentAppUnitType getType() { + return type; + } + + + @JsonProperty(value = JSON_PROPERTY_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setType(@Nonnull AgentAppUnitType type) { + this.type = type; + } + + + /** + * Return true if this AgentAppUnit object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentAppUnit agentAppUnit = (AgentAppUnit) o; + return Objects.equals(this.id, agentAppUnit.id) && + Objects.equals(this.createdTime, agentAppUnit.createdTime) && + Objects.equals(this.tenantId, agentAppUnit.tenantId) && + Objects.equals(this.agentApplicationId, agentAppUnit.agentApplicationId) && + Objects.equals(this.identifier, agentAppUnit.identifier) && + Objects.equals(this.type, agentAppUnit.type); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, tenantId, agentApplicationId, identifier, type); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppUnit {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" agentApplicationId: ").append(toIndentedString(agentApplicationId)).append("\n"); + sb.append(" identifier: ").append(toIndentedString(identifier)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `agentApplicationId` to the URL query string + if (getAgentApplicationId() != null) { + joiner.add(getAgentApplicationId().toUrlQueryString(prefix + "agentApplicationId" + suffix)); + } + + // add `identifier` to the URL query string + if (getIdentifier() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sidentifier%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getIdentifier())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppUnitId.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppUnitId.java new file mode 100644 index 00000000..a5ad6f65 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppUnitId.java @@ -0,0 +1,155 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.EntityId; +import org.thingsboard.client.model.EntityType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * AgentAppUnitId + */ +@JsonPropertyOrder({ +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "entityType", // ignore manually set entityType, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the entityType to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "entityType", visible = true) + +public class AgentAppUnitId extends EntityId { + public AgentAppUnitId() { + } + + @Override + public AgentAppUnitId id(@Nonnull UUID id) { + this.setId(id); + return this; + } + + /** + * Return true if this AgentAppUnitId object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentAppUnitId {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `entityType` to the URL query string + if (getEntityType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sentityType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getEntityType())))); + } + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("AgentAppUnitId", AgentAppUnitId.class); + JSON.registerDiscriminator(AgentAppUnitId.class, "entityType", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentAppUnitType.java b/paas/src/main/java/org/thingsboard/client/model/AgentAppUnitType.java new file mode 100644 index 00000000..f3924325 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentAppUnitType.java @@ -0,0 +1,82 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets AgentAppUnitType + */ +public enum AgentAppUnitType { + + CONTAINER("CONTAINER"), + + VOLUME("VOLUME"), + + NETWORK("NETWORK"); + + private String value; + + AgentAppUnitType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static AgentAppUnitType fromValue(String value) { + for (AgentAppUnitType b : AgentAppUnitType.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentApplication.java b/paas/src/main/java/org/thingsboard/client/model/AgentApplication.java new file mode 100644 index 00000000..ffa8bab4 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentApplication.java @@ -0,0 +1,657 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppProfileId; +import org.thingsboard.client.model.AgentApplicationId; +import org.thingsboard.client.model.AgentApplicationOrigin; +import org.thingsboard.client.model.AgentApplicationType; +import org.thingsboard.client.model.AgentId; +import org.thingsboard.client.model.DockerComposeConfig; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentApplication + */ +@JsonPropertyOrder({ + AgentApplication.JSON_PROPERTY_ID, + AgentApplication.JSON_PROPERTY_CREATED_TIME, + AgentApplication.JSON_PROPERTY_TENANT_ID, + AgentApplication.JSON_PROPERTY_AGENT_ID, + AgentApplication.JSON_PROPERTY_NAME, + AgentApplication.JSON_PROPERTY_TEMPLATE_VERSION, + AgentApplication.JSON_PROPERTY_DESIRED_TEMPLATE_VERSION, + AgentApplication.JSON_PROPERTY_APP_TYPE, + AgentApplication.JSON_PROPERTY_CONFIG, + AgentApplication.JSON_PROPERTY_VERSION, + AgentApplication.JSON_PROPERTY_PROJECT_NAME, + AgentApplication.JSON_PROPERTY_PENDING_DELETION, + AgentApplication.JSON_PROPERTY_ORIGIN, + AgentApplication.JSON_PROPERTY_APPLICATION_PROFILE_ID, + AgentApplication.JSON_PROPERTY_PROFILE_CONFIG_VERSION +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentApplication { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentApplicationId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_AGENT_ID = "agentId"; + @Nonnull + private AgentId agentId; + + public static final String JSON_PROPERTY_NAME = "name"; + @Nullable + private String name; + + public static final String JSON_PROPERTY_TEMPLATE_VERSION = "templateVersion"; + @Nonnull + private String templateVersion; + + public static final String JSON_PROPERTY_DESIRED_TEMPLATE_VERSION = "desiredTemplateVersion"; + @Nullable + private String desiredTemplateVersion; + + public static final String JSON_PROPERTY_APP_TYPE = "appType"; + @Nonnull + private AgentApplicationType appType; + + public static final String JSON_PROPERTY_CONFIG = "config"; + @Nullable + private DockerComposeConfig config; + + public static final String JSON_PROPERTY_VERSION = "version"; + @Nullable + private Long version; + + public static final String JSON_PROPERTY_PROJECT_NAME = "projectName"; + @Nullable + private String projectName; + + public static final String JSON_PROPERTY_PENDING_DELETION = "pendingDeletion"; + @Nullable + private Boolean pendingDeletion; + + public static final String JSON_PROPERTY_ORIGIN = "origin"; + @Nullable + private AgentApplicationOrigin origin; + + public static final String JSON_PROPERTY_APPLICATION_PROFILE_ID = "applicationProfileId"; + @Nullable + private AgentAppProfileId applicationProfileId; + + public static final String JSON_PROPERTY_PROFILE_CONFIG_VERSION = "profileConfigVersion"; + @Nullable + private Long profileConfigVersion; + + public AgentApplication() { + } + + @JsonCreator + public AgentApplication( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime, + @JsonProperty(JSON_PROPERTY_TENANT_ID) TenantId tenantId + ) { + this(); + this.createdTime = createdTime; + this.tenantId = tenantId; + } + + public AgentApplication id(@Nullable AgentApplicationId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent Application Id. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentApplicationId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentApplicationId id) { + this.id = id; + } + + + /** + * Timestamp of the agent application creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + /** + * JSON object with Tenant Id. + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + + + public AgentApplication agentId(@Nonnull AgentId agentId) { + this.agentId = agentId; + return this; + } + + /** + * Agent this application belongs to + * @return agentId + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_AGENT_ID, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public AgentId getAgentId() { + return agentId; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_ID, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setAgentId(@Nonnull AgentId agentId) { + this.agentId = agentId; + } + + + public AgentApplication name(@Nullable String name) { + this.name = name; + return this; + } + + /** + * Application name (not unique across tenant) + * @return name + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + + @JsonProperty(value = JSON_PROPERTY_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setName(@Nullable String name) { + this.name = name; + } + + + public AgentApplication templateVersion(@Nonnull String templateVersion) { + this.templateVersion = templateVersion; + return this; + } + + /** + * Template version this application is based on + * @return templateVersion + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_VERSION, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getTemplateVersion() { + return templateVersion; + } + + + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_VERSION, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTemplateVersion(@Nonnull String templateVersion) { + this.templateVersion = templateVersion; + } + + + public AgentApplication desiredTemplateVersion(@Nullable String desiredTemplateVersion) { + this.desiredTemplateVersion = desiredTemplateVersion; + return this; + } + + /** + * Get desiredTemplateVersion + * @return desiredTemplateVersion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DESIRED_TEMPLATE_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDesiredTemplateVersion() { + return desiredTemplateVersion; + } + + + @JsonProperty(value = JSON_PROPERTY_DESIRED_TEMPLATE_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDesiredTemplateVersion(@Nullable String desiredTemplateVersion) { + this.desiredTemplateVersion = desiredTemplateVersion; + } + + + public AgentApplication appType(@Nonnull AgentApplicationType appType) { + this.appType = appType; + return this; + } + + /** + * Application type + * @return appType + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_APP_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public AgentApplicationType getAppType() { + return appType; + } + + + @JsonProperty(value = JSON_PROPERTY_APP_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setAppType(@Nonnull AgentApplicationType appType) { + this.appType = appType; + } + + + public AgentApplication config(@Nullable DockerComposeConfig config) { + this.config = config; + return this; + } + + /** + * Get config + * @return config + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CONFIG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public DockerComposeConfig getConfig() { + return config; + } + + + @JsonProperty(value = JSON_PROPERTY_CONFIG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setConfig(@Nullable DockerComposeConfig config) { + this.config = config; + } + + + public AgentApplication version(@Nullable Long version) { + this.version = version; + return this; + } + + /** + * Get version + * @return version + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getVersion() { + return version; + } + + + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVersion(@Nullable Long version) { + this.version = version; + } + + + public AgentApplication projectName(@Nullable String projectName) { + this.projectName = projectName; + return this; + } + + /** + * Get projectName + * @return projectName + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROJECT_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getProjectName() { + return projectName; + } + + + @JsonProperty(value = JSON_PROPERTY_PROJECT_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProjectName(@Nullable String projectName) { + this.projectName = projectName; + } + + + public AgentApplication pendingDeletion(@Nullable Boolean pendingDeletion) { + this.pendingDeletion = pendingDeletion; + return this; + } + + /** + * Get pendingDeletion + * @return pendingDeletion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PENDING_DELETION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getPendingDeletion() { + return pendingDeletion; + } + + + @JsonProperty(value = JSON_PROPERTY_PENDING_DELETION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setPendingDeletion(@Nullable Boolean pendingDeletion) { + this.pendingDeletion = pendingDeletion; + } + + + public AgentApplication origin(@Nullable AgentApplicationOrigin origin) { + this.origin = origin; + return this; + } + + /** + * Origin of the application (INSTALLED or DISCOVERED) + * @return origin + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ORIGIN, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentApplicationOrigin getOrigin() { + return origin; + } + + + @JsonProperty(value = JSON_PROPERTY_ORIGIN, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setOrigin(@Nullable AgentApplicationOrigin origin) { + this.origin = origin; + } + + + public AgentApplication applicationProfileId(@Nullable AgentAppProfileId applicationProfileId) { + this.applicationProfileId = applicationProfileId; + return this; + } + + /** + * Application Profile Id. When set, config is read-only and inherited from the profile. + * @return applicationProfileId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_APPLICATION_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppProfileId getApplicationProfileId() { + return applicationProfileId; + } + + + @JsonProperty(value = JSON_PROPERTY_APPLICATION_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setApplicationProfileId(@Nullable AgentAppProfileId applicationProfileId) { + this.applicationProfileId = applicationProfileId; + } + + + public AgentApplication profileConfigVersion(@Nullable Long profileConfigVersion) { + this.profileConfigVersion = profileConfigVersion; + return this; + } + + /** + * Get profileConfigVersion + * @return profileConfigVersion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROFILE_CONFIG_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getProfileConfigVersion() { + return profileConfigVersion; + } + + + @JsonProperty(value = JSON_PROPERTY_PROFILE_CONFIG_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProfileConfigVersion(@Nullable Long profileConfigVersion) { + this.profileConfigVersion = profileConfigVersion; + } + + + /** + * Return true if this AgentApplication object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentApplication agentApplication = (AgentApplication) o; + return Objects.equals(this.id, agentApplication.id) && + Objects.equals(this.createdTime, agentApplication.createdTime) && + Objects.equals(this.tenantId, agentApplication.tenantId) && + Objects.equals(this.agentId, agentApplication.agentId) && + Objects.equals(this.name, agentApplication.name) && + Objects.equals(this.templateVersion, agentApplication.templateVersion) && + Objects.equals(this.desiredTemplateVersion, agentApplication.desiredTemplateVersion) && + Objects.equals(this.appType, agentApplication.appType) && + Objects.equals(this.config, agentApplication.config) && + Objects.equals(this.version, agentApplication.version) && + Objects.equals(this.projectName, agentApplication.projectName) && + Objects.equals(this.pendingDeletion, agentApplication.pendingDeletion) && + Objects.equals(this.origin, agentApplication.origin) && + Objects.equals(this.applicationProfileId, agentApplication.applicationProfileId) && + Objects.equals(this.profileConfigVersion, agentApplication.profileConfigVersion); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, tenantId, agentId, name, templateVersion, desiredTemplateVersion, appType, config, version, projectName, pendingDeletion, origin, applicationProfileId, profileConfigVersion); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentApplication {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" agentId: ").append(toIndentedString(agentId)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" templateVersion: ").append(toIndentedString(templateVersion)).append("\n"); + sb.append(" desiredTemplateVersion: ").append(toIndentedString(desiredTemplateVersion)).append("\n"); + sb.append(" appType: ").append(toIndentedString(appType)).append("\n"); + sb.append(" config: ").append(toIndentedString(config)).append("\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" projectName: ").append(toIndentedString(projectName)).append("\n"); + sb.append(" pendingDeletion: ").append(toIndentedString(pendingDeletion)).append("\n"); + sb.append(" origin: ").append(toIndentedString(origin)).append("\n"); + sb.append(" applicationProfileId: ").append(toIndentedString(applicationProfileId)).append("\n"); + sb.append(" profileConfigVersion: ").append(toIndentedString(profileConfigVersion)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `agentId` to the URL query string + if (getAgentId() != null) { + joiner.add(getAgentId().toUrlQueryString(prefix + "agentId" + suffix)); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sname%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `templateVersion` to the URL query string + if (getTemplateVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateVersion())))); + } + + // add `desiredTemplateVersion` to the URL query string + if (getDesiredTemplateVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sdesiredTemplateVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDesiredTemplateVersion())))); + } + + // add `appType` to the URL query string + if (getAppType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sappType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAppType())))); + } + + // add `config` to the URL query string + if (getConfig() != null) { + joiner.add(getConfig().toUrlQueryString(prefix + "config" + suffix)); + } + + // add `version` to the URL query string + if (getVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sversion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getVersion())))); + } + + // add `projectName` to the URL query string + if (getProjectName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprojectName%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProjectName())))); + } + + // add `pendingDeletion` to the URL query string + if (getPendingDeletion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%spendingDeletion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getPendingDeletion())))); + } + + // add `origin` to the URL query string + if (getOrigin() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sorigin%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getOrigin())))); + } + + // add `applicationProfileId` to the URL query string + if (getApplicationProfileId() != null) { + joiner.add(getApplicationProfileId().toUrlQueryString(prefix + "applicationProfileId" + suffix)); + } + + // add `profileConfigVersion` to the URL query string + if (getProfileConfigVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprofileConfigVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProfileConfigVersion())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentApplicationId.java b/paas/src/main/java/org/thingsboard/client/model/AgentApplicationId.java new file mode 100644 index 00000000..40bd261f --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentApplicationId.java @@ -0,0 +1,155 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.EntityId; +import org.thingsboard.client.model.EntityType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * AgentApplicationId + */ +@JsonPropertyOrder({ +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "entityType", // ignore manually set entityType, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the entityType to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "entityType", visible = true) + +public class AgentApplicationId extends EntityId { + public AgentApplicationId() { + } + + @Override + public AgentApplicationId id(@Nonnull UUID id) { + this.setId(id); + return this; + } + + /** + * Return true if this AgentApplicationId object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentApplicationId {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `entityType` to the URL query string + if (getEntityType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sentityType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getEntityType())))); + } + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("AgentApplicationId", AgentApplicationId.class); + JSON.registerDiscriminator(AgentApplicationId.class, "entityType", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentApplicationInfo.java b/paas/src/main/java/org/thingsboard/client/model/AgentApplicationInfo.java new file mode 100644 index 00000000..4b21342a --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentApplicationInfo.java @@ -0,0 +1,854 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppProfileId; +import org.thingsboard.client.model.AgentApplicationId; +import org.thingsboard.client.model.AgentApplicationOrigin; +import org.thingsboard.client.model.AgentApplicationType; +import org.thingsboard.client.model.AgentId; +import org.thingsboard.client.model.DockerComposeConfig; +import org.thingsboard.client.model.EntityId; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentApplicationInfo + */ +@JsonPropertyOrder({ + AgentApplicationInfo.JSON_PROPERTY_ID, + AgentApplicationInfo.JSON_PROPERTY_CREATED_TIME, + AgentApplicationInfo.JSON_PROPERTY_TENANT_ID, + AgentApplicationInfo.JSON_PROPERTY_AGENT_ID, + AgentApplicationInfo.JSON_PROPERTY_NAME, + AgentApplicationInfo.JSON_PROPERTY_TEMPLATE_VERSION, + AgentApplicationInfo.JSON_PROPERTY_DESIRED_TEMPLATE_VERSION, + AgentApplicationInfo.JSON_PROPERTY_APP_TYPE, + AgentApplicationInfo.JSON_PROPERTY_CONFIG, + AgentApplicationInfo.JSON_PROPERTY_VERSION, + AgentApplicationInfo.JSON_PROPERTY_PROJECT_NAME, + AgentApplicationInfo.JSON_PROPERTY_PENDING_DELETION, + AgentApplicationInfo.JSON_PROPERTY_ORIGIN, + AgentApplicationInfo.JSON_PROPERTY_APPLICATION_PROFILE_ID, + AgentApplicationInfo.JSON_PROPERTY_PROFILE_CONFIG_VERSION, + AgentApplicationInfo.JSON_PROPERTY_CURRENT_VERSION, + AgentApplicationInfo.JSON_PROPERTY_NEXT_VERSION, + AgentApplicationInfo.JSON_PROPERTY_PROFILE_CONFIG_OUTDATED, + AgentApplicationInfo.JSON_PROPERTY_PROFILE_NAME, + AgentApplicationInfo.JSON_PROPERTY_PROFILE_TEMPLATE_VERSION, + AgentApplicationInfo.JSON_PROPERTY_AGENT_NAME, + AgentApplicationInfo.JSON_PROPERTY_RELATED_ENTITY_ID +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentApplicationInfo { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentApplicationId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_AGENT_ID = "agentId"; + @Nonnull + private AgentId agentId; + + public static final String JSON_PROPERTY_NAME = "name"; + @Nullable + private String name; + + public static final String JSON_PROPERTY_TEMPLATE_VERSION = "templateVersion"; + @Nonnull + private String templateVersion; + + public static final String JSON_PROPERTY_DESIRED_TEMPLATE_VERSION = "desiredTemplateVersion"; + @Nullable + private String desiredTemplateVersion; + + public static final String JSON_PROPERTY_APP_TYPE = "appType"; + @Nonnull + private AgentApplicationType appType; + + public static final String JSON_PROPERTY_CONFIG = "config"; + @Nullable + private DockerComposeConfig config; + + public static final String JSON_PROPERTY_VERSION = "version"; + @Nullable + private Long version; + + public static final String JSON_PROPERTY_PROJECT_NAME = "projectName"; + @Nullable + private String projectName; + + public static final String JSON_PROPERTY_PENDING_DELETION = "pendingDeletion"; + @Nullable + private Boolean pendingDeletion; + + public static final String JSON_PROPERTY_ORIGIN = "origin"; + @Nullable + private AgentApplicationOrigin origin; + + public static final String JSON_PROPERTY_APPLICATION_PROFILE_ID = "applicationProfileId"; + @Nullable + private AgentAppProfileId applicationProfileId; + + public static final String JSON_PROPERTY_PROFILE_CONFIG_VERSION = "profileConfigVersion"; + @Nullable + private Long profileConfigVersion; + + public static final String JSON_PROPERTY_CURRENT_VERSION = "currentVersion"; + @Nullable + private String currentVersion; + + public static final String JSON_PROPERTY_NEXT_VERSION = "nextVersion"; + @Nullable + private String nextVersion; + + public static final String JSON_PROPERTY_PROFILE_CONFIG_OUTDATED = "profileConfigOutdated"; + @Nullable + private Boolean profileConfigOutdated; + + public static final String JSON_PROPERTY_PROFILE_NAME = "profileName"; + @Nullable + private String profileName; + + public static final String JSON_PROPERTY_PROFILE_TEMPLATE_VERSION = "profileTemplateVersion"; + @Nullable + private String profileTemplateVersion; + + public static final String JSON_PROPERTY_AGENT_NAME = "agentName"; + @Nullable + private String agentName; + + public static final String JSON_PROPERTY_RELATED_ENTITY_ID = "relatedEntityId"; + @Nullable + private EntityId relatedEntityId; + + public AgentApplicationInfo() { + } + + @JsonCreator + public AgentApplicationInfo( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime, + @JsonProperty(JSON_PROPERTY_TENANT_ID) TenantId tenantId, + @JsonProperty(JSON_PROPERTY_CURRENT_VERSION) String currentVersion, + @JsonProperty(JSON_PROPERTY_NEXT_VERSION) String nextVersion, + @JsonProperty(JSON_PROPERTY_PROFILE_CONFIG_OUTDATED) Boolean profileConfigOutdated, + @JsonProperty(JSON_PROPERTY_PROFILE_NAME) String profileName, + @JsonProperty(JSON_PROPERTY_PROFILE_TEMPLATE_VERSION) String profileTemplateVersion, + @JsonProperty(JSON_PROPERTY_AGENT_NAME) String agentName, + @JsonProperty(JSON_PROPERTY_RELATED_ENTITY_ID) EntityId relatedEntityId + ) { + this(); + this.createdTime = createdTime; + this.tenantId = tenantId; + this.currentVersion = currentVersion; + this.nextVersion = nextVersion; + this.profileConfigOutdated = profileConfigOutdated; + this.profileName = profileName; + this.profileTemplateVersion = profileTemplateVersion; + this.agentName = agentName; + this.relatedEntityId = relatedEntityId; + } + + public AgentApplicationInfo id(@Nullable AgentApplicationId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent Application Id. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentApplicationId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentApplicationId id) { + this.id = id; + } + + + /** + * Timestamp of the agent application creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + /** + * JSON object with Tenant Id. + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + + + public AgentApplicationInfo agentId(@Nonnull AgentId agentId) { + this.agentId = agentId; + return this; + } + + /** + * Agent this application belongs to + * @return agentId + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_AGENT_ID, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public AgentId getAgentId() { + return agentId; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_ID, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setAgentId(@Nonnull AgentId agentId) { + this.agentId = agentId; + } + + + public AgentApplicationInfo name(@Nullable String name) { + this.name = name; + return this; + } + + /** + * Application name (not unique across tenant) + * @return name + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + + @JsonProperty(value = JSON_PROPERTY_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setName(@Nullable String name) { + this.name = name; + } + + + public AgentApplicationInfo templateVersion(@Nonnull String templateVersion) { + this.templateVersion = templateVersion; + return this; + } + + /** + * Template version this application is based on + * @return templateVersion + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_VERSION, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getTemplateVersion() { + return templateVersion; + } + + + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_VERSION, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setTemplateVersion(@Nonnull String templateVersion) { + this.templateVersion = templateVersion; + } + + + public AgentApplicationInfo desiredTemplateVersion(@Nullable String desiredTemplateVersion) { + this.desiredTemplateVersion = desiredTemplateVersion; + return this; + } + + /** + * Get desiredTemplateVersion + * @return desiredTemplateVersion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DESIRED_TEMPLATE_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDesiredTemplateVersion() { + return desiredTemplateVersion; + } + + + @JsonProperty(value = JSON_PROPERTY_DESIRED_TEMPLATE_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDesiredTemplateVersion(@Nullable String desiredTemplateVersion) { + this.desiredTemplateVersion = desiredTemplateVersion; + } + + + public AgentApplicationInfo appType(@Nonnull AgentApplicationType appType) { + this.appType = appType; + return this; + } + + /** + * Application type + * @return appType + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_APP_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public AgentApplicationType getAppType() { + return appType; + } + + + @JsonProperty(value = JSON_PROPERTY_APP_TYPE, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setAppType(@Nonnull AgentApplicationType appType) { + this.appType = appType; + } + + + public AgentApplicationInfo config(@Nullable DockerComposeConfig config) { + this.config = config; + return this; + } + + /** + * Get config + * @return config + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CONFIG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public DockerComposeConfig getConfig() { + return config; + } + + + @JsonProperty(value = JSON_PROPERTY_CONFIG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setConfig(@Nullable DockerComposeConfig config) { + this.config = config; + } + + + public AgentApplicationInfo version(@Nullable Long version) { + this.version = version; + return this; + } + + /** + * Get version + * @return version + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getVersion() { + return version; + } + + + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVersion(@Nullable Long version) { + this.version = version; + } + + + public AgentApplicationInfo projectName(@Nullable String projectName) { + this.projectName = projectName; + return this; + } + + /** + * Get projectName + * @return projectName + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROJECT_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getProjectName() { + return projectName; + } + + + @JsonProperty(value = JSON_PROPERTY_PROJECT_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProjectName(@Nullable String projectName) { + this.projectName = projectName; + } + + + public AgentApplicationInfo pendingDeletion(@Nullable Boolean pendingDeletion) { + this.pendingDeletion = pendingDeletion; + return this; + } + + /** + * Get pendingDeletion + * @return pendingDeletion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PENDING_DELETION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getPendingDeletion() { + return pendingDeletion; + } + + + @JsonProperty(value = JSON_PROPERTY_PENDING_DELETION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setPendingDeletion(@Nullable Boolean pendingDeletion) { + this.pendingDeletion = pendingDeletion; + } + + + public AgentApplicationInfo origin(@Nullable AgentApplicationOrigin origin) { + this.origin = origin; + return this; + } + + /** + * Origin of the application (INSTALLED or DISCOVERED) + * @return origin + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ORIGIN, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentApplicationOrigin getOrigin() { + return origin; + } + + + @JsonProperty(value = JSON_PROPERTY_ORIGIN, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setOrigin(@Nullable AgentApplicationOrigin origin) { + this.origin = origin; + } + + + public AgentApplicationInfo applicationProfileId(@Nullable AgentAppProfileId applicationProfileId) { + this.applicationProfileId = applicationProfileId; + return this; + } + + /** + * Application Profile Id. When set, config is read-only and inherited from the profile. + * @return applicationProfileId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_APPLICATION_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppProfileId getApplicationProfileId() { + return applicationProfileId; + } + + + @JsonProperty(value = JSON_PROPERTY_APPLICATION_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setApplicationProfileId(@Nullable AgentAppProfileId applicationProfileId) { + this.applicationProfileId = applicationProfileId; + } + + + public AgentApplicationInfo profileConfigVersion(@Nullable Long profileConfigVersion) { + this.profileConfigVersion = profileConfigVersion; + return this; + } + + /** + * Get profileConfigVersion + * @return profileConfigVersion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROFILE_CONFIG_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getProfileConfigVersion() { + return profileConfigVersion; + } + + + @JsonProperty(value = JSON_PROPERTY_PROFILE_CONFIG_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProfileConfigVersion(@Nullable Long profileConfigVersion) { + this.profileConfigVersion = profileConfigVersion; + } + + + /** + * Current version of the template this application is based on. + * @return currentVersion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CURRENT_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getCurrentVersion() { + return currentVersion; + } + + + + + /** + * Next version available for upgrade. + * @return nextVersion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_NEXT_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getNextVersion() { + return nextVersion; + } + + + + + /** + * True if the app's config is outdated relative to its profile. + * @return profileConfigOutdated + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROFILE_CONFIG_OUTDATED, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getProfileConfigOutdated() { + return profileConfigOutdated; + } + + + + + /** + * Name of the application profile this app is based on. + * @return profileName + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROFILE_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getProfileName() { + return profileName; + } + + + + + /** + * Template version of the application profile this app is based on. + * @return profileTemplateVersion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROFILE_TEMPLATE_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getProfileTemplateVersion() { + return profileTemplateVersion; + } + + + + + /** + * Name of the owning agent. + * @return agentName + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAgentName() { + return agentName; + } + + + + + /** + * Related entity id (Edge or Gateway device) currently assigned to this application. + * @return relatedEntityId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_RELATED_ENTITY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public EntityId getRelatedEntityId() { + return relatedEntityId; + } + + + + + /** + * Return true if this AgentApplicationInfo object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentApplicationInfo agentApplicationInfo = (AgentApplicationInfo) o; + return Objects.equals(this.id, agentApplicationInfo.id) && + Objects.equals(this.createdTime, agentApplicationInfo.createdTime) && + Objects.equals(this.tenantId, agentApplicationInfo.tenantId) && + Objects.equals(this.agentId, agentApplicationInfo.agentId) && + Objects.equals(this.name, agentApplicationInfo.name) && + Objects.equals(this.templateVersion, agentApplicationInfo.templateVersion) && + Objects.equals(this.desiredTemplateVersion, agentApplicationInfo.desiredTemplateVersion) && + Objects.equals(this.appType, agentApplicationInfo.appType) && + Objects.equals(this.config, agentApplicationInfo.config) && + Objects.equals(this.version, agentApplicationInfo.version) && + Objects.equals(this.projectName, agentApplicationInfo.projectName) && + Objects.equals(this.pendingDeletion, agentApplicationInfo.pendingDeletion) && + Objects.equals(this.origin, agentApplicationInfo.origin) && + Objects.equals(this.applicationProfileId, agentApplicationInfo.applicationProfileId) && + Objects.equals(this.profileConfigVersion, agentApplicationInfo.profileConfigVersion) && + Objects.equals(this.currentVersion, agentApplicationInfo.currentVersion) && + Objects.equals(this.nextVersion, agentApplicationInfo.nextVersion) && + Objects.equals(this.profileConfigOutdated, agentApplicationInfo.profileConfigOutdated) && + Objects.equals(this.profileName, agentApplicationInfo.profileName) && + Objects.equals(this.profileTemplateVersion, agentApplicationInfo.profileTemplateVersion) && + Objects.equals(this.agentName, agentApplicationInfo.agentName) && + Objects.equals(this.relatedEntityId, agentApplicationInfo.relatedEntityId); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, tenantId, agentId, name, templateVersion, desiredTemplateVersion, appType, config, version, projectName, pendingDeletion, origin, applicationProfileId, profileConfigVersion, currentVersion, nextVersion, profileConfigOutdated, profileName, profileTemplateVersion, agentName, relatedEntityId); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentApplicationInfo {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" agentId: ").append(toIndentedString(agentId)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" templateVersion: ").append(toIndentedString(templateVersion)).append("\n"); + sb.append(" desiredTemplateVersion: ").append(toIndentedString(desiredTemplateVersion)).append("\n"); + sb.append(" appType: ").append(toIndentedString(appType)).append("\n"); + sb.append(" config: ").append(toIndentedString(config)).append("\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" projectName: ").append(toIndentedString(projectName)).append("\n"); + sb.append(" pendingDeletion: ").append(toIndentedString(pendingDeletion)).append("\n"); + sb.append(" origin: ").append(toIndentedString(origin)).append("\n"); + sb.append(" applicationProfileId: ").append(toIndentedString(applicationProfileId)).append("\n"); + sb.append(" profileConfigVersion: ").append(toIndentedString(profileConfigVersion)).append("\n"); + sb.append(" currentVersion: ").append(toIndentedString(currentVersion)).append("\n"); + sb.append(" nextVersion: ").append(toIndentedString(nextVersion)).append("\n"); + sb.append(" profileConfigOutdated: ").append(toIndentedString(profileConfigOutdated)).append("\n"); + sb.append(" profileName: ").append(toIndentedString(profileName)).append("\n"); + sb.append(" profileTemplateVersion: ").append(toIndentedString(profileTemplateVersion)).append("\n"); + sb.append(" agentName: ").append(toIndentedString(agentName)).append("\n"); + sb.append(" relatedEntityId: ").append(toIndentedString(relatedEntityId)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `agentId` to the URL query string + if (getAgentId() != null) { + joiner.add(getAgentId().toUrlQueryString(prefix + "agentId" + suffix)); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sname%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `templateVersion` to the URL query string + if (getTemplateVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateVersion())))); + } + + // add `desiredTemplateVersion` to the URL query string + if (getDesiredTemplateVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sdesiredTemplateVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDesiredTemplateVersion())))); + } + + // add `appType` to the URL query string + if (getAppType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sappType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAppType())))); + } + + // add `config` to the URL query string + if (getConfig() != null) { + joiner.add(getConfig().toUrlQueryString(prefix + "config" + suffix)); + } + + // add `version` to the URL query string + if (getVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sversion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getVersion())))); + } + + // add `projectName` to the URL query string + if (getProjectName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprojectName%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProjectName())))); + } + + // add `pendingDeletion` to the URL query string + if (getPendingDeletion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%spendingDeletion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getPendingDeletion())))); + } + + // add `origin` to the URL query string + if (getOrigin() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sorigin%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getOrigin())))); + } + + // add `applicationProfileId` to the URL query string + if (getApplicationProfileId() != null) { + joiner.add(getApplicationProfileId().toUrlQueryString(prefix + "applicationProfileId" + suffix)); + } + + // add `profileConfigVersion` to the URL query string + if (getProfileConfigVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprofileConfigVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProfileConfigVersion())))); + } + + // add `currentVersion` to the URL query string + if (getCurrentVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scurrentVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCurrentVersion())))); + } + + // add `nextVersion` to the URL query string + if (getNextVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextVersion())))); + } + + // add `profileConfigOutdated` to the URL query string + if (getProfileConfigOutdated() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprofileConfigOutdated%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProfileConfigOutdated())))); + } + + // add `profileName` to the URL query string + if (getProfileName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprofileName%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProfileName())))); + } + + // add `profileTemplateVersion` to the URL query string + if (getProfileTemplateVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprofileTemplateVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProfileTemplateVersion())))); + } + + // add `agentName` to the URL query string + if (getAgentName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sagentName%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAgentName())))); + } + + // add `relatedEntityId` to the URL query string + if (getRelatedEntityId() != null) { + joiner.add(getRelatedEntityId().toUrlQueryString(prefix + "relatedEntityId" + suffix)); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentApplicationOrigin.java b/paas/src/main/java/org/thingsboard/client/model/AgentApplicationOrigin.java new file mode 100644 index 00000000..544ca353 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentApplicationOrigin.java @@ -0,0 +1,82 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets AgentApplicationOrigin + */ +public enum AgentApplicationOrigin { + + INSTALLED("INSTALLED"), + + DISCOVERED("DISCOVERED"), + + AUTO_PROVISIONED("AUTO_PROVISIONED"); + + private String value; + + AgentApplicationOrigin(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static AgentApplicationOrigin fromValue(String value) { + for (AgentApplicationOrigin b : AgentApplicationOrigin.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentApplicationType.java b/paas/src/main/java/org/thingsboard/client/model/AgentApplicationType.java new file mode 100644 index 00000000..3c575e7e --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentApplicationType.java @@ -0,0 +1,82 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets AgentApplicationType + */ +public enum AgentApplicationType { + + GENERIC("GENERIC"), + + EDGE("EDGE"), + + GATEWAY("GATEWAY"); + + private String value; + + AgentApplicationType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static AgentApplicationType fromValue(String value) { + for (AgentApplicationType b : AgentApplicationType.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentBulkAction.java b/paas/src/main/java/org/thingsboard/client/model/AgentBulkAction.java new file mode 100644 index 00000000..20dcb7ee --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentBulkAction.java @@ -0,0 +1,568 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppEventActionType; +import org.thingsboard.client.model.AgentBulkActionId; +import org.thingsboard.client.model.AgentBulkActionStatus; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentBulkAction + */ +@JsonPropertyOrder({ + AgentBulkAction.JSON_PROPERTY_ID, + AgentBulkAction.JSON_PROPERTY_CREATED_TIME, + AgentBulkAction.JSON_PROPERTY_TENANT_ID, + AgentBulkAction.JSON_PROPERTY_AGENT_PROFILE_ID, + AgentBulkAction.JSON_PROPERTY_APPLICATION_PROFILE_ID, + AgentBulkAction.JSON_PROPERTY_ACTION_TYPE, + AgentBulkAction.JSON_PROPERTY_STATUS, + AgentBulkAction.JSON_PROPERTY_ERROR_MSG, + AgentBulkAction.JSON_PROPERTY_PROCESSING_STARTED_TIME, + AgentBulkAction.JSON_PROPERTY_TOTAL, + AgentBulkAction.JSON_PROPERTY_SUBMITTED, + AgentBulkAction.JSON_PROPERTY_SKIP_COUNTS +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentBulkAction { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentBulkActionId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_AGENT_PROFILE_ID = "agentProfileId"; + @Nullable + private UUID agentProfileId; + + public static final String JSON_PROPERTY_APPLICATION_PROFILE_ID = "applicationProfileId"; + @Nullable + private UUID applicationProfileId; + + public static final String JSON_PROPERTY_ACTION_TYPE = "actionType"; + @Nullable + private AgentAppEventActionType actionType; + + public static final String JSON_PROPERTY_STATUS = "status"; + @Nullable + private AgentBulkActionStatus status; + + public static final String JSON_PROPERTY_ERROR_MSG = "errorMsg"; + @Nullable + private String errorMsg; + + public static final String JSON_PROPERTY_PROCESSING_STARTED_TIME = "processingStartedTime"; + @Nullable + private Long processingStartedTime; + + public static final String JSON_PROPERTY_TOTAL = "total"; + @Nullable + private Integer total; + + public static final String JSON_PROPERTY_SUBMITTED = "submitted"; + @Nullable + private Integer submitted; + + public static final String JSON_PROPERTY_SKIP_COUNTS = "skipCounts"; + @Nullable + private Map skipCounts = new HashMap<>(); + + public AgentBulkAction() { + } + + @JsonCreator + public AgentBulkAction( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime + ) { + this(); + this.createdTime = createdTime; + } + + public AgentBulkAction id(@Nullable AgentBulkActionId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent Bulk Action Id. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentBulkActionId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentBulkActionId id) { + this.id = id; + } + + + /** + * Timestamp of the bulk action creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + public AgentBulkAction tenantId(@Nullable TenantId tenantId) { + this.tenantId = tenantId; + return this; + } + + /** + * Get tenantId + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTenantId(@Nullable TenantId tenantId) { + this.tenantId = tenantId; + } + + + public AgentBulkAction agentProfileId(@Nullable UUID agentProfileId) { + this.agentProfileId = agentProfileId; + return this; + } + + /** + * Get agentProfileId + * @return agentProfileId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UUID getAgentProfileId() { + return agentProfileId; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAgentProfileId(@Nullable UUID agentProfileId) { + this.agentProfileId = agentProfileId; + } + + + public AgentBulkAction applicationProfileId(@Nullable UUID applicationProfileId) { + this.applicationProfileId = applicationProfileId; + return this; + } + + /** + * Get applicationProfileId + * @return applicationProfileId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_APPLICATION_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public UUID getApplicationProfileId() { + return applicationProfileId; + } + + + @JsonProperty(value = JSON_PROPERTY_APPLICATION_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setApplicationProfileId(@Nullable UUID applicationProfileId) { + this.applicationProfileId = applicationProfileId; + } + + + public AgentBulkAction actionType(@Nullable AgentAppEventActionType actionType) { + this.actionType = actionType; + return this; + } + + /** + * Get actionType + * @return actionType + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ACTION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppEventActionType getActionType() { + return actionType; + } + + + @JsonProperty(value = JSON_PROPERTY_ACTION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setActionType(@Nullable AgentAppEventActionType actionType) { + this.actionType = actionType; + } + + + public AgentBulkAction status(@Nullable AgentBulkActionStatus status) { + this.status = status; + return this; + } + + /** + * Get status + * @return status + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_STATUS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentBulkActionStatus getStatus() { + return status; + } + + + @JsonProperty(value = JSON_PROPERTY_STATUS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setStatus(@Nullable AgentBulkActionStatus status) { + this.status = status; + } + + + public AgentBulkAction errorMsg(@Nullable String errorMsg) { + this.errorMsg = errorMsg; + return this; + } + + /** + * Get errorMsg + * @return errorMsg + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ERROR_MSG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getErrorMsg() { + return errorMsg; + } + + + @JsonProperty(value = JSON_PROPERTY_ERROR_MSG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setErrorMsg(@Nullable String errorMsg) { + this.errorMsg = errorMsg; + } + + + public AgentBulkAction processingStartedTime(@Nullable Long processingStartedTime) { + this.processingStartedTime = processingStartedTime; + return this; + } + + /** + * Get processingStartedTime + * @return processingStartedTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROCESSING_STARTED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getProcessingStartedTime() { + return processingStartedTime; + } + + + @JsonProperty(value = JSON_PROPERTY_PROCESSING_STARTED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProcessingStartedTime(@Nullable Long processingStartedTime) { + this.processingStartedTime = processingStartedTime; + } + + + public AgentBulkAction total(@Nullable Integer total) { + this.total = total; + return this; + } + + /** + * Get total + * @return total + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getTotal() { + return total; + } + + + @JsonProperty(value = JSON_PROPERTY_TOTAL, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTotal(@Nullable Integer total) { + this.total = total; + } + + + public AgentBulkAction submitted(@Nullable Integer submitted) { + this.submitted = submitted; + return this; + } + + /** + * Get submitted + * @return submitted + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_SUBMITTED, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getSubmitted() { + return submitted; + } + + + @JsonProperty(value = JSON_PROPERTY_SUBMITTED, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSubmitted(@Nullable Integer submitted) { + this.submitted = submitted; + } + + + public AgentBulkAction skipCounts(@Nullable Map skipCounts) { + this.skipCounts = skipCounts; + return this; + } + + public AgentBulkAction putSkipCountsItem(String key, Integer skipCountsItem) { + if (this.skipCounts == null) { + this.skipCounts = new HashMap<>(); + } + this.skipCounts.put(key, skipCountsItem); + return this; + } + + /** + * Get skipCounts + * @return skipCounts + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_SKIP_COUNTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getSkipCounts() { + return skipCounts; + } + + + @JsonProperty(value = JSON_PROPERTY_SKIP_COUNTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSkipCounts(@Nullable Map skipCounts) { + this.skipCounts = skipCounts; + } + + + /** + * Return true if this AgentBulkAction object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentBulkAction agentBulkAction = (AgentBulkAction) o; + return Objects.equals(this.id, agentBulkAction.id) && + Objects.equals(this.createdTime, agentBulkAction.createdTime) && + Objects.equals(this.tenantId, agentBulkAction.tenantId) && + Objects.equals(this.agentProfileId, agentBulkAction.agentProfileId) && + Objects.equals(this.applicationProfileId, agentBulkAction.applicationProfileId) && + Objects.equals(this.actionType, agentBulkAction.actionType) && + Objects.equals(this.status, agentBulkAction.status) && + Objects.equals(this.errorMsg, agentBulkAction.errorMsg) && + Objects.equals(this.processingStartedTime, agentBulkAction.processingStartedTime) && + Objects.equals(this.total, agentBulkAction.total) && + Objects.equals(this.submitted, agentBulkAction.submitted) && + Objects.equals(this.skipCounts, agentBulkAction.skipCounts); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, tenantId, agentProfileId, applicationProfileId, actionType, status, errorMsg, processingStartedTime, total, submitted, skipCounts); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentBulkAction {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" agentProfileId: ").append(toIndentedString(agentProfileId)).append("\n"); + sb.append(" applicationProfileId: ").append(toIndentedString(applicationProfileId)).append("\n"); + sb.append(" actionType: ").append(toIndentedString(actionType)).append("\n"); + sb.append(" status: ").append(toIndentedString(status)).append("\n"); + sb.append(" errorMsg: ").append(toIndentedString(errorMsg)).append("\n"); + sb.append(" processingStartedTime: ").append(toIndentedString(processingStartedTime)).append("\n"); + sb.append(" total: ").append(toIndentedString(total)).append("\n"); + sb.append(" submitted: ").append(toIndentedString(submitted)).append("\n"); + sb.append(" skipCounts: ").append(toIndentedString(skipCounts)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `agentProfileId` to the URL query string + if (getAgentProfileId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sagentProfileId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAgentProfileId())))); + } + + // add `applicationProfileId` to the URL query string + if (getApplicationProfileId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sapplicationProfileId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getApplicationProfileId())))); + } + + // add `actionType` to the URL query string + if (getActionType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sactionType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getActionType())))); + } + + // add `status` to the URL query string + if (getStatus() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstatus%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStatus())))); + } + + // add `errorMsg` to the URL query string + if (getErrorMsg() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%serrorMsg%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getErrorMsg())))); + } + + // add `processingStartedTime` to the URL query string + if (getProcessingStartedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprocessingStartedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProcessingStartedTime())))); + } + + // add `total` to the URL query string + if (getTotal() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotal%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotal())))); + } + + // add `submitted` to the URL query string + if (getSubmitted() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%ssubmitted%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getSubmitted())))); + } + + // add `skipCounts` to the URL query string + if (getSkipCounts() != null) { + for (String _key : getSkipCounts().keySet()) { + joiner.add(String.format(java.util.Locale.ROOT, "%sskipCounts%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, _key, containerSuffix), + getSkipCounts().get(_key), ApiClient.urlEncode(ApiClient.valueToString(getSkipCounts().get(_key))))); + } + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentBulkActionEventStats.java b/paas/src/main/java/org/thingsboard/client/model/AgentBulkActionEventStats.java new file mode 100644 index 00000000..b6df14db --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentBulkActionEventStats.java @@ -0,0 +1,205 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentBulkActionEventStats + */ +@JsonPropertyOrder({ + AgentBulkActionEventStats.JSON_PROPERTY_COUNTS_BY_STATUS, + AgentBulkActionEventStats.JSON_PROPERTY_TOTAL +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentBulkActionEventStats { + public static final String JSON_PROPERTY_COUNTS_BY_STATUS = "countsByStatus"; + @Nullable + private Map countsByStatus = new HashMap<>(); + + public static final String JSON_PROPERTY_TOTAL = "total"; + @Nullable + private Long total; + + public AgentBulkActionEventStats() { + } + + public AgentBulkActionEventStats countsByStatus(@Nullable Map countsByStatus) { + this.countsByStatus = countsByStatus; + return this; + } + + public AgentBulkActionEventStats putCountsByStatusItem(String key, Long countsByStatusItem) { + if (this.countsByStatus == null) { + this.countsByStatus = new HashMap<>(); + } + this.countsByStatus.put(key, countsByStatusItem); + return this; + } + + /** + * Number of events produced by the bulk action per processing status + * @return countsByStatus + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_COUNTS_BY_STATUS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getCountsByStatus() { + return countsByStatus; + } + + + @JsonProperty(value = JSON_PROPERTY_COUNTS_BY_STATUS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCountsByStatus(@Nullable Map countsByStatus) { + this.countsByStatus = countsByStatus; + } + + + public AgentBulkActionEventStats total(@Nullable Long total) { + this.total = total; + return this; + } + + /** + * Total number of events produced by the bulk action + * @return total + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getTotal() { + return total; + } + + + @JsonProperty(value = JSON_PROPERTY_TOTAL, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTotal(@Nullable Long total) { + this.total = total; + } + + + /** + * Return true if this AgentBulkActionEventStats object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentBulkActionEventStats agentBulkActionEventStats = (AgentBulkActionEventStats) o; + return Objects.equals(this.countsByStatus, agentBulkActionEventStats.countsByStatus) && + Objects.equals(this.total, agentBulkActionEventStats.total); + } + + @Override + public int hashCode() { + return Objects.hash(countsByStatus, total); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentBulkActionEventStats {\n"); + sb.append(" countsByStatus: ").append(toIndentedString(countsByStatus)).append("\n"); + sb.append(" total: ").append(toIndentedString(total)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `countsByStatus` to the URL query string + if (getCountsByStatus() != null) { + for (String _key : getCountsByStatus().keySet()) { + joiner.add(String.format(java.util.Locale.ROOT, "%scountsByStatus%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, _key, containerSuffix), + getCountsByStatus().get(_key), ApiClient.urlEncode(ApiClient.valueToString(getCountsByStatus().get(_key))))); + } + } + + // add `total` to the URL query string + if (getTotal() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotal%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotal())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentBulkActionId.java b/paas/src/main/java/org/thingsboard/client/model/AgentBulkActionId.java new file mode 100644 index 00000000..1338f52b --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentBulkActionId.java @@ -0,0 +1,155 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.EntityId; +import org.thingsboard.client.model.EntityType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * AgentBulkActionId + */ +@JsonPropertyOrder({ +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "entityType", // ignore manually set entityType, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the entityType to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "entityType", visible = true) + +public class AgentBulkActionId extends EntityId { + public AgentBulkActionId() { + } + + @Override + public AgentBulkActionId id(@Nonnull UUID id) { + this.setId(id); + return this; + } + + /** + * Return true if this AgentBulkActionId object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentBulkActionId {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `entityType` to the URL query string + if (getEntityType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sentityType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getEntityType())))); + } + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("AgentBulkActionId", AgentBulkActionId.class); + JSON.registerDiscriminator(AgentBulkActionId.class, "entityType", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentBulkActionStatus.java b/paas/src/main/java/org/thingsboard/client/model/AgentBulkActionStatus.java new file mode 100644 index 00000000..e9912e07 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentBulkActionStatus.java @@ -0,0 +1,84 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets AgentBulkActionStatus + */ +public enum AgentBulkActionStatus { + + QUEUED("QUEUED"), + + IN_PROGRESS("IN_PROGRESS"), + + STARTED("STARTED"), + + START_FAILED("START_FAILED"); + + private String value; + + AgentBulkActionStatus(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static AgentBulkActionStatus fromValue(String value) { + for (AgentBulkActionStatus b : AgentBulkActionStatus.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentFinalizeStep.java b/paas/src/main/java/org/thingsboard/client/model/AgentFinalizeStep.java new file mode 100644 index 00000000..3fd0964d --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentFinalizeStep.java @@ -0,0 +1,210 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStep; +import org.thingsboard.client.model.AgentAppStepType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * AgentFinalizeStep + */ +@JsonPropertyOrder({ +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class AgentFinalizeStep extends AgentAppStep { + public AgentFinalizeStep() { + } + + @Override + public AgentFinalizeStep id(@Nullable UUID id) { + this.setId(id); + return this; + } + + @Override + public AgentFinalizeStep nextId(@Nullable UUID nextId) { + this.setNextId(nextId); + return this; + } + + @Override + public AgentFinalizeStep title(@Nullable String title) { + this.setTitle(title); + return this; + } + + @Override + public AgentFinalizeStep templateOnly(@Nullable Boolean templateOnly) { + this.setTemplateOnly(templateOnly); + return this; + } + + @Override + public AgentFinalizeStep condition(@Nullable String condition) { + this.setCondition(condition); + return this; + } + + @Override + public AgentFinalizeStep stateful(@Nullable Boolean stateful) { + this.setStateful(stateful); + return this; + } + + /** + * Return true if this AgentFinalizeStep object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentFinalizeStep {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `nextId` to the URL query string + if (getNextId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextId())))); + } + + // add `title` to the URL query string + if (getTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTitle())))); + } + + // add `templateOnly` to the URL query string + if (getTemplateOnly() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateOnly%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateOnly())))); + } + + // add `condition` to the URL query string + if (getCondition() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scondition%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCondition())))); + } + + // add `stateful` to the URL query string + if (getStateful() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstateful%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStateful())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("AgentFinalizeStep", AgentFinalizeStep.class); + JSON.registerDiscriminator(AgentFinalizeStep.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentId.java b/paas/src/main/java/org/thingsboard/client/model/AgentId.java new file mode 100644 index 00000000..8c0aedc4 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentId.java @@ -0,0 +1,155 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.EntityId; +import org.thingsboard.client.model.EntityType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * AgentId + */ +@JsonPropertyOrder({ +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "entityType", // ignore manually set entityType, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the entityType to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "entityType", visible = true) + +public class AgentId extends EntityId { + public AgentId() { + } + + @Override + public AgentId id(@Nonnull UUID id) { + this.setId(id); + return this; + } + + /** + * Return true if this AgentId object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentId {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `entityType` to the URL query string + if (getEntityType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sentityType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getEntityType())))); + } + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("AgentId", AgentId.class); + JSON.registerDiscriminator(AgentId.class, "entityType", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentInfo.java b/paas/src/main/java/org/thingsboard/client/model/AgentInfo.java new file mode 100644 index 00000000..a49f4a00 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentInfo.java @@ -0,0 +1,779 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentId; +import org.thingsboard.client.model.AgentProfileId; +import org.thingsboard.client.model.CustomerId; +import org.thingsboard.client.model.EntityId; +import org.thingsboard.client.model.EntityInfo; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentInfo + */ +@JsonPropertyOrder({ + AgentInfo.JSON_PROPERTY_ID, + AgentInfo.JSON_PROPERTY_CREATED_TIME, + AgentInfo.JSON_PROPERTY_ADDITIONAL_INFO, + AgentInfo.JSON_PROPERTY_TENANT_ID, + AgentInfo.JSON_PROPERTY_CUSTOMER_ID, + AgentInfo.JSON_PROPERTY_NAME, + AgentInfo.JSON_PROPERTY_DESCRIPTION, + AgentInfo.JSON_PROPERTY_ROUTING_KEY, + AgentInfo.JSON_PROPERTY_SECRET, + AgentInfo.JSON_PROPERTY_AGENT_PROFILE_ID, + AgentInfo.JSON_PROPERTY_VERSION, + AgentInfo.JSON_PROPERTY_CUSTOMER_TITLE, + AgentInfo.JSON_PROPERTY_CUSTOMER_IS_PUBLIC, + AgentInfo.JSON_PROPERTY_AGENT_PROFILE_NAME, + AgentInfo.JSON_PROPERTY_OWNER_NAME, + AgentInfo.JSON_PROPERTY_GROUPS, + AgentInfo.JSON_PROPERTY_ACTIVE, + AgentInfo.JSON_PROPERTY_AGENT_VERSION, + AgentInfo.JSON_PROPERTY_UPGRADE_TARGET_IMAGE_REF, + AgentInfo.JSON_PROPERTY_OWNER_ID +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentInfo { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_ADDITIONAL_INFO = "additionalInfo"; + @Nullable + private com.fasterxml.jackson.databind.JsonNode additionalInfo = null; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_CUSTOMER_ID = "customerId"; + @Nullable + private CustomerId customerId; + + public static final String JSON_PROPERTY_NAME = "name"; + @Nonnull + private String name; + + public static final String JSON_PROPERTY_DESCRIPTION = "description"; + @Nullable + private String description; + + public static final String JSON_PROPERTY_ROUTING_KEY = "routingKey"; + @Nonnull + private String routingKey; + + public static final String JSON_PROPERTY_SECRET = "secret"; + @Nonnull + private String secret; + + public static final String JSON_PROPERTY_AGENT_PROFILE_ID = "agentProfileId"; + @Nullable + private AgentProfileId agentProfileId; + + public static final String JSON_PROPERTY_VERSION = "version"; + @Nullable + private Long version; + + public static final String JSON_PROPERTY_CUSTOMER_TITLE = "customerTitle"; + @Nullable + private String customerTitle; + + public static final String JSON_PROPERTY_CUSTOMER_IS_PUBLIC = "customerIsPublic"; + @Nullable + private Boolean customerIsPublic; + + public static final String JSON_PROPERTY_AGENT_PROFILE_NAME = "agentProfileName"; + @Nullable + private String agentProfileName; + + public static final String JSON_PROPERTY_OWNER_NAME = "ownerName"; + @Nullable + private String ownerName; + + public static final String JSON_PROPERTY_GROUPS = "groups"; + @Nullable + private List groups = new ArrayList<>(); + + public static final String JSON_PROPERTY_ACTIVE = "active"; + @Nullable + private Boolean active; + + public static final String JSON_PROPERTY_AGENT_VERSION = "agentVersion"; + @Nullable + private String agentVersion; + + public static final String JSON_PROPERTY_UPGRADE_TARGET_IMAGE_REF = "upgradeTargetImageRef"; + @Nullable + private String upgradeTargetImageRef; + + public static final String JSON_PROPERTY_OWNER_ID = "ownerId"; + @Nullable + private EntityId ownerId; + + public AgentInfo() { + } + + @JsonCreator + public AgentInfo( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime, + @JsonProperty(JSON_PROPERTY_TENANT_ID) TenantId tenantId, + @JsonProperty(JSON_PROPERTY_CUSTOMER_ID) CustomerId customerId, + @JsonProperty(JSON_PROPERTY_CUSTOMER_TITLE) String customerTitle, + @JsonProperty(JSON_PROPERTY_CUSTOMER_IS_PUBLIC) Boolean customerIsPublic, + @JsonProperty(JSON_PROPERTY_AGENT_PROFILE_NAME) String agentProfileName, + @JsonProperty(JSON_PROPERTY_OWNER_NAME) String ownerName, + @JsonProperty(JSON_PROPERTY_ACTIVE) Boolean active, + @JsonProperty(JSON_PROPERTY_AGENT_VERSION) String agentVersion, + @JsonProperty(JSON_PROPERTY_UPGRADE_TARGET_IMAGE_REF) String upgradeTargetImageRef, + @JsonProperty(JSON_PROPERTY_OWNER_ID) EntityId ownerId + ) { + this(); + this.createdTime = createdTime; + this.tenantId = tenantId; + this.customerId = customerId; + this.customerTitle = customerTitle; + this.customerIsPublic = customerIsPublic; + this.agentProfileName = agentProfileName; + this.ownerName = ownerName; + this.active = active; + this.agentVersion = agentVersion; + this.upgradeTargetImageRef = upgradeTargetImageRef; + this.ownerId = ownerId; + } + + public AgentInfo id(@Nullable AgentId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent Id. Specify this field to update the Agent. Referencing non-existing Agent Id will cause error. Omit this field to create new Agent. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentId id) { + this.id = id; + } + + + /** + * Timestamp of the agent creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + public AgentInfo additionalInfo(@Nullable com.fasterxml.jackson.databind.JsonNode additionalInfo) { + this.additionalInfo = additionalInfo; + return this; + } + + /** + * Get additionalInfo + * @return additionalInfo + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ADDITIONAL_INFO, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public com.fasterxml.jackson.databind.JsonNode getAdditionalInfo() { + return additionalInfo; + } + + + @JsonProperty(value = JSON_PROPERTY_ADDITIONAL_INFO, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAdditionalInfo(@Nullable com.fasterxml.jackson.databind.JsonNode additionalInfo) { + this.additionalInfo = additionalInfo; + } + + + /** + * JSON object with Tenant Id. Use 'assignAgentToTenant' to change the Tenant Id. + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + + + /** + * JSON object with Customer Id. + * @return customerId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CUSTOMER_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public CustomerId getCustomerId() { + return customerId; + } + + + + + public AgentInfo name(@Nonnull String name) { + this.name = name; + return this; + } + + /** + * Unique Agent Name in scope of Tenant + * @return name + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getName() { + return name; + } + + + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setName(@Nonnull String name) { + this.name = name; + } + + + public AgentInfo description(@Nullable String description) { + this.description = description; + return this; + } + + /** + * Agent description + * @return description + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDescription() { + return description; + } + + + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDescription(@Nullable String description) { + this.description = description; + } + + + public AgentInfo routingKey(@Nonnull String routingKey) { + this.routingKey = routingKey; + return this; + } + + /** + * Agent routing key used for authentication + * @return routingKey + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_ROUTING_KEY, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getRoutingKey() { + return routingKey; + } + + + @JsonProperty(value = JSON_PROPERTY_ROUTING_KEY, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setRoutingKey(@Nonnull String routingKey) { + this.routingKey = routingKey; + } + + + public AgentInfo secret(@Nonnull String secret) { + this.secret = secret; + return this; + } + + /** + * Agent secret used for authentication + * @return secret + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_SECRET, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getSecret() { + return secret; + } + + + @JsonProperty(value = JSON_PROPERTY_SECRET, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setSecret(@Nonnull String secret) { + this.secret = secret; + } + + + public AgentInfo agentProfileId(@Nullable AgentProfileId agentProfileId) { + this.agentProfileId = agentProfileId; + return this; + } + + /** + * JSON object with Agent Profile Id. Nullable. + * @return agentProfileId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentProfileId getAgentProfileId() { + return agentProfileId; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_PROFILE_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAgentProfileId(@Nullable AgentProfileId agentProfileId) { + this.agentProfileId = agentProfileId; + } + + + public AgentInfo version(@Nullable Long version) { + this.version = version; + return this; + } + + /** + * Get version + * @return version + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getVersion() { + return version; + } + + + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVersion(@Nullable Long version) { + this.version = version; + } + + + /** + * Title of the Customer that owns the agent. + * @return customerTitle + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CUSTOMER_TITLE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getCustomerTitle() { + return customerTitle; + } + + + + + /** + * Indicates special 'Public' Customer that is auto-generated to use the agents on public dashboards. + * @return customerIsPublic + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CUSTOMER_IS_PUBLIC, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getCustomerIsPublic() { + return customerIsPublic; + } + + + + + /** + * Name of the Agent Profile the agent belongs to. + * @return agentProfileName + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_PROFILE_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAgentProfileName() { + return agentProfileName; + } + + + + + /** + * Owner name — tenant title if the agent is owned by a tenant, or customer title otherwise. + * @return ownerName + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_OWNER_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getOwnerName() { + return ownerName; + } + + + + + public AgentInfo groups(@Nullable List groups) { + this.groups = groups; + return this; + } + + public AgentInfo addGroupsItem(EntityInfo groupsItem) { + if (this.groups == null) { + this.groups = new ArrayList<>(); + } + this.groups.add(groupsItem); + return this; + } + + /** + * Entity groups that contain this agent (excluding the implicit 'All' group). + * @return groups + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_GROUPS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getGroups() { + return groups; + } + + + @JsonProperty(value = JSON_PROPERTY_GROUPS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setGroups(@Nullable List groups) { + this.groups = groups; + } + + + /** + * Whether the agent currently has an active connection (derived from server-scope 'active' attribute). + * @return active + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ACTIVE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getActive() { + return active; + } + + + + + /** + * Agent software version reported on the last connect (derived from server-scope 'agentVersion' attribute). + * @return agentVersion + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAgentVersion() { + return agentVersion; + } + + + + + /** + * Image reference this agent should be upgraded to, or null when no upgrade applies. Resolved from the published version graph. + * @return upgradeTargetImageRef + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_UPGRADE_TARGET_IMAGE_REF, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getUpgradeTargetImageRef() { + return upgradeTargetImageRef; + } + + + + + /** + * JSON object with Customer or Tenant Id + * @return ownerId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_OWNER_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public EntityId getOwnerId() { + return ownerId; + } + + + + + /** + * Return true if this AgentInfo object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentInfo agentInfo = (AgentInfo) o; + return Objects.equals(this.id, agentInfo.id) && + Objects.equals(this.createdTime, agentInfo.createdTime) && + Objects.equals(this.additionalInfo, agentInfo.additionalInfo) && + Objects.equals(this.tenantId, agentInfo.tenantId) && + Objects.equals(this.customerId, agentInfo.customerId) && + Objects.equals(this.name, agentInfo.name) && + Objects.equals(this.description, agentInfo.description) && + Objects.equals(this.routingKey, agentInfo.routingKey) && + Objects.equals(this.secret, agentInfo.secret) && + Objects.equals(this.agentProfileId, agentInfo.agentProfileId) && + Objects.equals(this.version, agentInfo.version) && + Objects.equals(this.customerTitle, agentInfo.customerTitle) && + Objects.equals(this.customerIsPublic, agentInfo.customerIsPublic) && + Objects.equals(this.agentProfileName, agentInfo.agentProfileName) && + Objects.equals(this.ownerName, agentInfo.ownerName) && + Objects.equals(this.groups, agentInfo.groups) && + Objects.equals(this.active, agentInfo.active) && + Objects.equals(this.agentVersion, agentInfo.agentVersion) && + Objects.equals(this.upgradeTargetImageRef, agentInfo.upgradeTargetImageRef) && + Objects.equals(this.ownerId, agentInfo.ownerId); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, additionalInfo, tenantId, customerId, name, description, routingKey, secret, agentProfileId, version, customerTitle, customerIsPublic, agentProfileName, ownerName, groups, active, agentVersion, upgradeTargetImageRef, ownerId); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentInfo {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" additionalInfo: ").append(toIndentedString(additionalInfo)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" customerId: ").append(toIndentedString(customerId)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" description: ").append(toIndentedString(description)).append("\n"); + sb.append(" routingKey: ").append(toIndentedString(routingKey)).append("\n"); + sb.append(" secret: ").append(toIndentedString(secret)).append("\n"); + sb.append(" agentProfileId: ").append(toIndentedString(agentProfileId)).append("\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" customerTitle: ").append(toIndentedString(customerTitle)).append("\n"); + sb.append(" customerIsPublic: ").append(toIndentedString(customerIsPublic)).append("\n"); + sb.append(" agentProfileName: ").append(toIndentedString(agentProfileName)).append("\n"); + sb.append(" ownerName: ").append(toIndentedString(ownerName)).append("\n"); + sb.append(" groups: ").append(toIndentedString(groups)).append("\n"); + sb.append(" active: ").append(toIndentedString(active)).append("\n"); + sb.append(" agentVersion: ").append(toIndentedString(agentVersion)).append("\n"); + sb.append(" upgradeTargetImageRef: ").append(toIndentedString(upgradeTargetImageRef)).append("\n"); + sb.append(" ownerId: ").append(toIndentedString(ownerId)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `additionalInfo` to the URL query string + if (getAdditionalInfo() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sadditionalInfo%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAdditionalInfo())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `customerId` to the URL query string + if (getCustomerId() != null) { + joiner.add(getCustomerId().toUrlQueryString(prefix + "customerId" + suffix)); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sname%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `description` to the URL query string + if (getDescription() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sdescription%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDescription())))); + } + + // add `routingKey` to the URL query string + if (getRoutingKey() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sroutingKey%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getRoutingKey())))); + } + + // add `secret` to the URL query string + if (getSecret() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%ssecret%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getSecret())))); + } + + // add `agentProfileId` to the URL query string + if (getAgentProfileId() != null) { + joiner.add(getAgentProfileId().toUrlQueryString(prefix + "agentProfileId" + suffix)); + } + + // add `version` to the URL query string + if (getVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sversion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getVersion())))); + } + + // add `customerTitle` to the URL query string + if (getCustomerTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scustomerTitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCustomerTitle())))); + } + + // add `customerIsPublic` to the URL query string + if (getCustomerIsPublic() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scustomerIsPublic%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCustomerIsPublic())))); + } + + // add `agentProfileName` to the URL query string + if (getAgentProfileName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sagentProfileName%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAgentProfileName())))); + } + + // add `ownerName` to the URL query string + if (getOwnerName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sownerName%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getOwnerName())))); + } + + // add `groups` to the URL query string + if (getGroups() != null) { + for (int i = 0; i < getGroups().size(); i++) { + if (getGroups().get(i) != null) { + joiner.add(getGroups().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sgroups%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `active` to the URL query string + if (getActive() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sactive%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getActive())))); + } + + // add `agentVersion` to the URL query string + if (getAgentVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sagentVersion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAgentVersion())))); + } + + // add `upgradeTargetImageRef` to the URL query string + if (getUpgradeTargetImageRef() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%supgradeTargetImageRef%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getUpgradeTargetImageRef())))); + } + + // add `ownerId` to the URL query string + if (getOwnerId() != null) { + joiner.add(getOwnerId().toUrlQueryString(prefix + "ownerId" + suffix)); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentInstructions.java b/paas/src/main/java/org/thingsboard/client/model/AgentInstructions.java new file mode 100644 index 00000000..baf401aa --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentInstructions.java @@ -0,0 +1,155 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentInstructions + */ +@JsonPropertyOrder({ + AgentInstructions.JSON_PROPERTY_INSTRUCTIONS +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentInstructions { + public static final String JSON_PROPERTY_INSTRUCTIONS = "instructions"; + @Nullable + private String instructions; + + public AgentInstructions() { + } + + public AgentInstructions instructions(@Nullable String instructions) { + this.instructions = instructions; + return this; + } + + /** + * Resolved install/provision instructions for the selected method + * @return instructions + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_INSTRUCTIONS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getInstructions() { + return instructions; + } + + + @JsonProperty(value = JSON_PROPERTY_INSTRUCTIONS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setInstructions(@Nullable String instructions) { + this.instructions = instructions; + } + + + /** + * Return true if this AgentInstructions object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentInstructions agentInstructions = (AgentInstructions) o; + return Objects.equals(this.instructions, agentInstructions.instructions); + } + + @Override + public int hashCode() { + return Objects.hash(instructions); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentInstructions {\n"); + sb.append(" instructions: ").append(toIndentedString(instructions)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `instructions` to the URL query string + if (getInstructions() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sinstructions%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getInstructions())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentPrepareStep.java b/paas/src/main/java/org/thingsboard/client/model/AgentPrepareStep.java new file mode 100644 index 00000000..4e210818 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentPrepareStep.java @@ -0,0 +1,210 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStep; +import org.thingsboard.client.model.AgentAppStepType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * AgentPrepareStep + */ +@JsonPropertyOrder({ +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class AgentPrepareStep extends AgentAppStep { + public AgentPrepareStep() { + } + + @Override + public AgentPrepareStep id(@Nullable UUID id) { + this.setId(id); + return this; + } + + @Override + public AgentPrepareStep nextId(@Nullable UUID nextId) { + this.setNextId(nextId); + return this; + } + + @Override + public AgentPrepareStep title(@Nullable String title) { + this.setTitle(title); + return this; + } + + @Override + public AgentPrepareStep templateOnly(@Nullable Boolean templateOnly) { + this.setTemplateOnly(templateOnly); + return this; + } + + @Override + public AgentPrepareStep condition(@Nullable String condition) { + this.setCondition(condition); + return this; + } + + @Override + public AgentPrepareStep stateful(@Nullable Boolean stateful) { + this.setStateful(stateful); + return this; + } + + /** + * Return true if this AgentPrepareStep object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentPrepareStep {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `nextId` to the URL query string + if (getNextId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextId())))); + } + + // add `title` to the URL query string + if (getTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTitle())))); + } + + // add `templateOnly` to the URL query string + if (getTemplateOnly() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateOnly%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateOnly())))); + } + + // add `condition` to the URL query string + if (getCondition() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scondition%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCondition())))); + } + + // add `stateful` to the URL query string + if (getStateful() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstateful%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStateful())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("AgentPrepareStep", AgentPrepareStep.class); + JSON.registerDiscriminator(AgentPrepareStep.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentProcessingStatus.java b/paas/src/main/java/org/thingsboard/client/model/AgentProcessingStatus.java new file mode 100644 index 00000000..551ceab5 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentProcessingStatus.java @@ -0,0 +1,88 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets AgentProcessingStatus + */ +public enum AgentProcessingStatus { + + PENDING("PENDING"), + + QUEUED("QUEUED"), + + PROCESSING("PROCESSING"), + + FINISHED("FINISHED"), + + ERROR("ERROR"), + + START_FAILED("START_FAILED"); + + private String value; + + AgentProcessingStatus(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static AgentProcessingStatus fromValue(String value) { + for (AgentProcessingStatus b : AgentProcessingStatus.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentProfile.java b/paas/src/main/java/org/thingsboard/client/model/AgentProfile.java new file mode 100644 index 00000000..9b481c70 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentProfile.java @@ -0,0 +1,473 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentProfileId; +import org.thingsboard.client.model.AgentProvisionType; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentProfile + */ +@JsonPropertyOrder({ + AgentProfile.JSON_PROPERTY_ID, + AgentProfile.JSON_PROPERTY_CREATED_TIME, + AgentProfile.JSON_PROPERTY_TENANT_ID, + AgentProfile.JSON_PROPERTY_NAME, + AgentProfile.JSON_PROPERTY_DESCRIPTION, + AgentProfile.JSON_PROPERTY_PROVISION_KEY, + AgentProfile.JSON_PROPERTY_PROVISION_SECRET, + AgentProfile.JSON_PROPERTY_PROVISION_TYPE, + AgentProfile.JSON_PROPERTY_VERSION, + AgentProfile.JSON_PROPERTY_DEFAULT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentProfile { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentProfileId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_NAME = "name"; + @Nonnull + private String name; + + public static final String JSON_PROPERTY_DESCRIPTION = "description"; + @Nullable + private String description; + + public static final String JSON_PROPERTY_PROVISION_KEY = "provisionKey"; + @Nullable + private String provisionKey; + + public static final String JSON_PROPERTY_PROVISION_SECRET = "provisionSecret"; + @Nullable + private String provisionSecret; + + public static final String JSON_PROPERTY_PROVISION_TYPE = "provisionType"; + @Nullable + private AgentProvisionType provisionType; + + public static final String JSON_PROPERTY_VERSION = "version"; + @Nullable + private Long version; + + public static final String JSON_PROPERTY_DEFAULT = "default"; + @Nullable + private Boolean _default; + + public AgentProfile() { + } + + @JsonCreator + public AgentProfile( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime, + @JsonProperty(JSON_PROPERTY_TENANT_ID) TenantId tenantId + ) { + this(); + this.createdTime = createdTime; + this.tenantId = tenantId; + } + + public AgentProfile id(@Nullable AgentProfileId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent Profile Id. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentProfileId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentProfileId id) { + this.id = id; + } + + + /** + * Timestamp of the profile creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + /** + * JSON object with Tenant Id. + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + + + public AgentProfile name(@Nonnull String name) { + this.name = name; + return this; + } + + /** + * Unique profile name within tenant + * @return name + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getName() { + return name; + } + + + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setName(@Nonnull String name) { + this.name = name; + } + + + public AgentProfile description(@Nullable String description) { + this.description = description; + return this; + } + + /** + * Profile description + * @return description + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDescription() { + return description; + } + + + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDescription(@Nullable String description) { + this.description = description; + } + + + public AgentProfile provisionKey(@Nullable String provisionKey) { + this.provisionKey = provisionKey; + return this; + } + + /** + * Provision key for future auto-provisioning + * @return provisionKey + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROVISION_KEY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getProvisionKey() { + return provisionKey; + } + + + @JsonProperty(value = JSON_PROPERTY_PROVISION_KEY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProvisionKey(@Nullable String provisionKey) { + this.provisionKey = provisionKey; + } + + + public AgentProfile provisionSecret(@Nullable String provisionSecret) { + this.provisionSecret = provisionSecret; + return this; + } + + /** + * Provision secret for future auto-provisioning + * @return provisionSecret + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROVISION_SECRET, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getProvisionSecret() { + return provisionSecret; + } + + + @JsonProperty(value = JSON_PROPERTY_PROVISION_SECRET, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProvisionSecret(@Nullable String provisionSecret) { + this.provisionSecret = provisionSecret; + } + + + public AgentProfile provisionType(@Nullable AgentProvisionType provisionType) { + this.provisionType = provisionType; + return this; + } + + /** + * Provisioning strategy. DISABLED by default. + * @return provisionType + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROVISION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentProvisionType getProvisionType() { + return provisionType; + } + + + @JsonProperty(value = JSON_PROPERTY_PROVISION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProvisionType(@Nullable AgentProvisionType provisionType) { + this.provisionType = provisionType; + } + + + public AgentProfile version(@Nullable Long version) { + this.version = version; + return this; + } + + /** + * Get version + * @return version + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getVersion() { + return version; + } + + + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVersion(@Nullable Long version) { + this.version = version; + } + + + public AgentProfile _default(@Nullable Boolean _default) { + this._default = _default; + return this; + } + + /** + * Used to mark the default profile that will be assigned to agents when no profile is specified. + * @return _default + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DEFAULT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getDefault() { + return _default; + } + + + @JsonProperty(value = JSON_PROPERTY_DEFAULT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDefault(@Nullable Boolean _default) { + this._default = _default; + } + + + /** + * Return true if this AgentProfile object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentProfile agentProfile = (AgentProfile) o; + return Objects.equals(this.id, agentProfile.id) && + Objects.equals(this.createdTime, agentProfile.createdTime) && + Objects.equals(this.tenantId, agentProfile.tenantId) && + Objects.equals(this.name, agentProfile.name) && + Objects.equals(this.description, agentProfile.description) && + Objects.equals(this.provisionKey, agentProfile.provisionKey) && + Objects.equals(this.provisionSecret, agentProfile.provisionSecret) && + Objects.equals(this.provisionType, agentProfile.provisionType) && + Objects.equals(this.version, agentProfile.version) && + Objects.equals(this._default, agentProfile._default); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, tenantId, name, description, provisionKey, provisionSecret, provisionType, version, _default); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentProfile {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" description: ").append(toIndentedString(description)).append("\n"); + sb.append(" provisionKey: ").append(toIndentedString(provisionKey)).append("\n"); + sb.append(" provisionSecret: ").append(toIndentedString(provisionSecret)).append("\n"); + sb.append(" provisionType: ").append(toIndentedString(provisionType)).append("\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" _default: ").append(toIndentedString(_default)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sname%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `description` to the URL query string + if (getDescription() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sdescription%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDescription())))); + } + + // add `provisionKey` to the URL query string + if (getProvisionKey() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprovisionKey%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProvisionKey())))); + } + + // add `provisionSecret` to the URL query string + if (getProvisionSecret() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprovisionSecret%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProvisionSecret())))); + } + + // add `provisionType` to the URL query string + if (getProvisionType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprovisionType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProvisionType())))); + } + + // add `version` to the URL query string + if (getVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sversion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getVersion())))); + } + + // add `default` to the URL query string + if (getDefault() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sdefault%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDefault())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentProfileId.java b/paas/src/main/java/org/thingsboard/client/model/AgentProfileId.java new file mode 100644 index 00000000..2b6dcd98 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentProfileId.java @@ -0,0 +1,155 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.EntityId; +import org.thingsboard.client.model.EntityType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * AgentProfileId + */ +@JsonPropertyOrder({ +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "entityType", // ignore manually set entityType, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the entityType to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "entityType", visible = true) + +public class AgentProfileId extends EntityId { + public AgentProfileId() { + } + + @Override + public AgentProfileId id(@Nonnull UUID id) { + this.setId(id); + return this; + } + + /** + * Return true if this AgentProfileId object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentProfileId {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `entityType` to the URL query string + if (getEntityType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sentityType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getEntityType())))); + } + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("AgentProfileId", AgentProfileId.class); + JSON.registerDiscriminator(AgentProfileId.class, "entityType", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentProfileInfo.java b/paas/src/main/java/org/thingsboard/client/model/AgentProfileInfo.java new file mode 100644 index 00000000..393e473b --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentProfileInfo.java @@ -0,0 +1,473 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentProfileId; +import org.thingsboard.client.model.AgentProvisionType; +import org.thingsboard.client.model.TenantId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentProfileInfo + */ +@JsonPropertyOrder({ + AgentProfileInfo.JSON_PROPERTY_ID, + AgentProfileInfo.JSON_PROPERTY_CREATED_TIME, + AgentProfileInfo.JSON_PROPERTY_TENANT_ID, + AgentProfileInfo.JSON_PROPERTY_NAME, + AgentProfileInfo.JSON_PROPERTY_DESCRIPTION, + AgentProfileInfo.JSON_PROPERTY_PROVISION_KEY, + AgentProfileInfo.JSON_PROPERTY_PROVISION_SECRET, + AgentProfileInfo.JSON_PROPERTY_PROVISION_TYPE, + AgentProfileInfo.JSON_PROPERTY_VERSION, + AgentProfileInfo.JSON_PROPERTY_DEFAULT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentProfileInfo { + public static final String JSON_PROPERTY_ID = "id"; + @Nullable + private AgentProfileId id; + + public static final String JSON_PROPERTY_CREATED_TIME = "createdTime"; + @Nullable + private Long createdTime; + + public static final String JSON_PROPERTY_TENANT_ID = "tenantId"; + @Nullable + private TenantId tenantId; + + public static final String JSON_PROPERTY_NAME = "name"; + @Nonnull + private String name; + + public static final String JSON_PROPERTY_DESCRIPTION = "description"; + @Nullable + private String description; + + public static final String JSON_PROPERTY_PROVISION_KEY = "provisionKey"; + @Nullable + private String provisionKey; + + public static final String JSON_PROPERTY_PROVISION_SECRET = "provisionSecret"; + @Nullable + private String provisionSecret; + + public static final String JSON_PROPERTY_PROVISION_TYPE = "provisionType"; + @Nullable + private AgentProvisionType provisionType; + + public static final String JSON_PROPERTY_VERSION = "version"; + @Nullable + private Long version; + + public static final String JSON_PROPERTY_DEFAULT = "default"; + @Nullable + private Boolean _default; + + public AgentProfileInfo() { + } + + @JsonCreator + public AgentProfileInfo( + @JsonProperty(JSON_PROPERTY_CREATED_TIME) Long createdTime, + @JsonProperty(JSON_PROPERTY_TENANT_ID) TenantId tenantId + ) { + this(); + this.createdTime = createdTime; + this.tenantId = tenantId; + } + + public AgentProfileInfo id(@Nullable AgentProfileId id) { + this.id = id; + return this; + } + + /** + * JSON object with the Agent Profile Id. + * @return id + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentProfileId getId() { + return id; + } + + + @JsonProperty(value = JSON_PROPERTY_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setId(@Nullable AgentProfileId id) { + this.id = id; + } + + + /** + * Timestamp of the profile creation, in milliseconds + * @return createdTime + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CREATED_TIME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getCreatedTime() { + return createdTime; + } + + + + + /** + * JSON object with Tenant Id. + * @return tenantId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TENANT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TenantId getTenantId() { + return tenantId; + } + + + + + public AgentProfileInfo name(@Nonnull String name) { + this.name = name; + return this; + } + + /** + * Unique profile name within tenant + * @return name + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getName() { + return name; + } + + + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setName(@Nonnull String name) { + this.name = name; + } + + + public AgentProfileInfo description(@Nullable String description) { + this.description = description; + return this; + } + + /** + * Profile description + * @return description + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDescription() { + return description; + } + + + @JsonProperty(value = JSON_PROPERTY_DESCRIPTION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDescription(@Nullable String description) { + this.description = description; + } + + + public AgentProfileInfo provisionKey(@Nullable String provisionKey) { + this.provisionKey = provisionKey; + return this; + } + + /** + * Provision key for future auto-provisioning + * @return provisionKey + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROVISION_KEY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getProvisionKey() { + return provisionKey; + } + + + @JsonProperty(value = JSON_PROPERTY_PROVISION_KEY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProvisionKey(@Nullable String provisionKey) { + this.provisionKey = provisionKey; + } + + + public AgentProfileInfo provisionSecret(@Nullable String provisionSecret) { + this.provisionSecret = provisionSecret; + return this; + } + + /** + * Provision secret for future auto-provisioning + * @return provisionSecret + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROVISION_SECRET, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getProvisionSecret() { + return provisionSecret; + } + + + @JsonProperty(value = JSON_PROPERTY_PROVISION_SECRET, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProvisionSecret(@Nullable String provisionSecret) { + this.provisionSecret = provisionSecret; + } + + + public AgentProfileInfo provisionType(@Nullable AgentProvisionType provisionType) { + this.provisionType = provisionType; + return this; + } + + /** + * Provisioning strategy. DISABLED by default. + * @return provisionType + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PROVISION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentProvisionType getProvisionType() { + return provisionType; + } + + + @JsonProperty(value = JSON_PROPERTY_PROVISION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setProvisionType(@Nullable AgentProvisionType provisionType) { + this.provisionType = provisionType; + } + + + public AgentProfileInfo version(@Nullable Long version) { + this.version = version; + return this; + } + + /** + * Get version + * @return version + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getVersion() { + return version; + } + + + @JsonProperty(value = JSON_PROPERTY_VERSION, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setVersion(@Nullable Long version) { + this.version = version; + } + + + public AgentProfileInfo _default(@Nullable Boolean _default) { + this._default = _default; + return this; + } + + /** + * Used to mark the default profile that will be assigned to agents when no profile is specified. + * @return _default + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DEFAULT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getDefault() { + return _default; + } + + + @JsonProperty(value = JSON_PROPERTY_DEFAULT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDefault(@Nullable Boolean _default) { + this._default = _default; + } + + + /** + * Return true if this AgentProfileInfo object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentProfileInfo agentProfileInfo = (AgentProfileInfo) o; + return Objects.equals(this.id, agentProfileInfo.id) && + Objects.equals(this.createdTime, agentProfileInfo.createdTime) && + Objects.equals(this.tenantId, agentProfileInfo.tenantId) && + Objects.equals(this.name, agentProfileInfo.name) && + Objects.equals(this.description, agentProfileInfo.description) && + Objects.equals(this.provisionKey, agentProfileInfo.provisionKey) && + Objects.equals(this.provisionSecret, agentProfileInfo.provisionSecret) && + Objects.equals(this.provisionType, agentProfileInfo.provisionType) && + Objects.equals(this.version, agentProfileInfo.version) && + Objects.equals(this._default, agentProfileInfo._default); + } + + @Override + public int hashCode() { + return Objects.hash(id, createdTime, tenantId, name, description, provisionKey, provisionSecret, provisionType, version, _default); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentProfileInfo {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" createdTime: ").append(toIndentedString(createdTime)).append("\n"); + sb.append(" tenantId: ").append(toIndentedString(tenantId)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" description: ").append(toIndentedString(description)).append("\n"); + sb.append(" provisionKey: ").append(toIndentedString(provisionKey)).append("\n"); + sb.append(" provisionSecret: ").append(toIndentedString(provisionSecret)).append("\n"); + sb.append(" provisionType: ").append(toIndentedString(provisionType)).append("\n"); + sb.append(" version: ").append(toIndentedString(version)).append("\n"); + sb.append(" _default: ").append(toIndentedString(_default)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(getId().toUrlQueryString(prefix + "id" + suffix)); + } + + // add `createdTime` to the URL query string + if (getCreatedTime() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%screatedTime%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCreatedTime())))); + } + + // add `tenantId` to the URL query string + if (getTenantId() != null) { + joiner.add(getTenantId().toUrlQueryString(prefix + "tenantId" + suffix)); + } + + // add `name` to the URL query string + if (getName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sname%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getName())))); + } + + // add `description` to the URL query string + if (getDescription() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sdescription%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDescription())))); + } + + // add `provisionKey` to the URL query string + if (getProvisionKey() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprovisionKey%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProvisionKey())))); + } + + // add `provisionSecret` to the URL query string + if (getProvisionSecret() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprovisionSecret%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProvisionSecret())))); + } + + // add `provisionType` to the URL query string + if (getProvisionType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprovisionType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getProvisionType())))); + } + + // add `version` to the URL query string + if (getVersion() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sversion%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getVersion())))); + } + + // add `default` to the URL query string + if (getDefault() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sdefault%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDefault())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentProvisionType.java b/paas/src/main/java/org/thingsboard/client/model/AgentProvisionType.java new file mode 100644 index 00000000..fb256684 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentProvisionType.java @@ -0,0 +1,84 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets AgentProvisionType + */ +public enum AgentProvisionType { + + DISABLED("DISABLED"), + + NO_AUTO_INSTALL("NO_AUTO_INSTALL"), + + AUTO_INSTALL_PER_APP_TYPE("AUTO_INSTALL_PER_APP_TYPE"), + + AUTO_INSTALL_PER_APP_PROFILE("AUTO_INSTALL_PER_APP_PROFILE"); + + private String value; + + AgentProvisionType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static AgentProvisionType fromValue(String value) { + for (AgentProvisionType b : AgentProvisionType.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/AgentUpgradeRequest.java b/paas/src/main/java/org/thingsboard/client/model/AgentUpgradeRequest.java new file mode 100644 index 00000000..42b366ff --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/AgentUpgradeRequest.java @@ -0,0 +1,155 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nonnull; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * AgentUpgradeRequest + */ +@JsonPropertyOrder({ + AgentUpgradeRequest.JSON_PROPERTY_IMAGE_REF +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class AgentUpgradeRequest { + public static final String JSON_PROPERTY_IMAGE_REF = "imageRef"; + @Nonnull + private String imageRef; + + public AgentUpgradeRequest() { + } + + public AgentUpgradeRequest imageRef(@Nonnull String imageRef) { + this.imageRef = imageRef; + return this; + } + + /** + * Target agent image reference — a digest-pinned reference in production, or a tag. + * @return imageRef + */ + @Nonnull + @JsonProperty(value = JSON_PROPERTY_IMAGE_REF, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getImageRef() { + return imageRef; + } + + + @JsonProperty(value = JSON_PROPERTY_IMAGE_REF, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setImageRef(@Nonnull String imageRef) { + this.imageRef = imageRef; + } + + + /** + * Return true if this AgentUpgradeRequest object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AgentUpgradeRequest agentUpgradeRequest = (AgentUpgradeRequest) o; + return Objects.equals(this.imageRef, agentUpgradeRequest.imageRef); + } + + @Override + public int hashCode() { + return Objects.hash(imageRef); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AgentUpgradeRequest {\n"); + sb.append(" imageRef: ").append(toIndentedString(imageRef)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `imageRef` to the URL query string + if (getImageRef() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%simageRef%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getImageRef())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/BackupVolumesRemoveStep.java b/paas/src/main/java/org/thingsboard/client/model/BackupVolumesRemoveStep.java new file mode 100644 index 00000000..08352d7f --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/BackupVolumesRemoveStep.java @@ -0,0 +1,210 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStep; +import org.thingsboard.client.model.AgentAppStepType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * BackupVolumesRemoveStep + */ +@JsonPropertyOrder({ +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class BackupVolumesRemoveStep extends AgentAppStep { + public BackupVolumesRemoveStep() { + } + + @Override + public BackupVolumesRemoveStep id(@Nullable UUID id) { + this.setId(id); + return this; + } + + @Override + public BackupVolumesRemoveStep nextId(@Nullable UUID nextId) { + this.setNextId(nextId); + return this; + } + + @Override + public BackupVolumesRemoveStep title(@Nullable String title) { + this.setTitle(title); + return this; + } + + @Override + public BackupVolumesRemoveStep templateOnly(@Nullable Boolean templateOnly) { + this.setTemplateOnly(templateOnly); + return this; + } + + @Override + public BackupVolumesRemoveStep condition(@Nullable String condition) { + this.setCondition(condition); + return this; + } + + @Override + public BackupVolumesRemoveStep stateful(@Nullable Boolean stateful) { + this.setStateful(stateful); + return this; + } + + /** + * Return true if this BackupVolumesRemoveStep object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BackupVolumesRemoveStep {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `nextId` to the URL query string + if (getNextId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextId())))); + } + + // add `title` to the URL query string + if (getTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTitle())))); + } + + // add `templateOnly` to the URL query string + if (getTemplateOnly() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateOnly%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateOnly())))); + } + + // add `condition` to the URL query string + if (getCondition() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scondition%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCondition())))); + } + + // add `stateful` to the URL query string + if (getStateful() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstateful%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStateful())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("BackupVolumesRemoveStep", BackupVolumesRemoveStep.class); + JSON.registerDiscriminator(BackupVolumesRemoveStep.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/BackupVolumesStep.java b/paas/src/main/java/org/thingsboard/client/model/BackupVolumesStep.java new file mode 100644 index 00000000..055c827b --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/BackupVolumesStep.java @@ -0,0 +1,248 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStep; +import org.thingsboard.client.model.AgentAppStepType; +import org.thingsboard.client.model.BackupVolumesStepState; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * BackupVolumesStep + */ +@JsonPropertyOrder({ + BackupVolumesStep.JSON_PROPERTY_STATE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class BackupVolumesStep extends AgentAppStep { + public static final String JSON_PROPERTY_STATE = "state"; + @Nullable + private BackupVolumesStepState state; + + public BackupVolumesStep() { + } + + public BackupVolumesStep state(@Nullable BackupVolumesStepState state) { + this.state = state; + return this; + } + + /** + * Get state + * @return state + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_STATE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public BackupVolumesStepState getState() { + return state; + } + + + @JsonProperty(value = JSON_PROPERTY_STATE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setState(@Nullable BackupVolumesStepState state) { + this.state = state; + } + + + @Override + public BackupVolumesStep id(@Nullable UUID id) { + this.setId(id); + return this; + } + + @Override + public BackupVolumesStep nextId(@Nullable UUID nextId) { + this.setNextId(nextId); + return this; + } + + @Override + public BackupVolumesStep title(@Nullable String title) { + this.setTitle(title); + return this; + } + + @Override + public BackupVolumesStep templateOnly(@Nullable Boolean templateOnly) { + this.setTemplateOnly(templateOnly); + return this; + } + + @Override + public BackupVolumesStep condition(@Nullable String condition) { + this.setCondition(condition); + return this; + } + + @Override + public BackupVolumesStep stateful(@Nullable Boolean stateful) { + this.setStateful(stateful); + return this; + } + + /** + * Return true if this BackupVolumesStep object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BackupVolumesStep backupVolumesStep = (BackupVolumesStep) o; + return Objects.equals(this.state, backupVolumesStep.state) && + super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(state, super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BackupVolumesStep {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" state: ").append(toIndentedString(state)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `nextId` to the URL query string + if (getNextId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextId())))); + } + + // add `title` to the URL query string + if (getTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTitle())))); + } + + // add `templateOnly` to the URL query string + if (getTemplateOnly() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateOnly%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateOnly())))); + } + + // add `condition` to the URL query string + if (getCondition() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scondition%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCondition())))); + } + + // add `stateful` to the URL query string + if (getStateful() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstateful%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStateful())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `state` to the URL query string + if (getState() != null) { + joiner.add(getState().toUrlQueryString(prefix + "state" + suffix)); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("BackupVolumesStep", BackupVolumesStep.class); + JSON.registerDiscriminator(BackupVolumesStep.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/BackupVolumesStepState.java b/paas/src/main/java/org/thingsboard/client/model/BackupVolumesStepState.java new file mode 100644 index 00000000..18752db0 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/BackupVolumesStepState.java @@ -0,0 +1,181 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppStepState; +import org.thingsboard.client.model.AgentAppStepType; +import org.thingsboard.client.model.StepFieldListString; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * BackupVolumesStepState + */ +@JsonPropertyOrder({ + BackupVolumesStepState.JSON_PROPERTY_BACKUP_VOLUMES +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class BackupVolumesStepState extends AgentAppStepState { + public static final String JSON_PROPERTY_BACKUP_VOLUMES = "backupVolumes"; + @Nullable + private StepFieldListString backupVolumes; + + public BackupVolumesStepState() { + } + + public BackupVolumesStepState backupVolumes(@Nullable StepFieldListString backupVolumes) { + this.backupVolumes = backupVolumes; + return this; + } + + /** + * Get backupVolumes + * @return backupVolumes + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_BACKUP_VOLUMES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldListString getBackupVolumes() { + return backupVolumes; + } + + + @JsonProperty(value = JSON_PROPERTY_BACKUP_VOLUMES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBackupVolumes(@Nullable StepFieldListString backupVolumes) { + this.backupVolumes = backupVolumes; + } + + + /** + * Return true if this BackupVolumesStepState object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BackupVolumesStepState backupVolumesStepState = (BackupVolumesStepState) o; + return Objects.equals(this.backupVolumes, backupVolumesStepState.backupVolumes) && + super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(backupVolumes, super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BackupVolumesStepState {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" backupVolumes: ").append(toIndentedString(backupVolumes)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `backupVolumes` to the URL query string + if (getBackupVolumes() != null) { + joiner.add(getBackupVolumes().toUrlQueryString(prefix + "backupVolumes" + suffix)); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("BackupVolumesStepState", BackupVolumesStepState.class); + JSON.registerDiscriminator(BackupVolumesStepState.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/BulkOperationPreview.java b/paas/src/main/java/org/thingsboard/client/model/BulkOperationPreview.java new file mode 100644 index 00000000..86c0f30a --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/BulkOperationPreview.java @@ -0,0 +1,293 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.thingsboard.client.model.SkippedApp; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * BulkOperationPreview + */ +@JsonPropertyOrder({ + BulkOperationPreview.JSON_PROPERTY_TOTAL, + BulkOperationPreview.JSON_PROPERTY_ELIGIBLE, + BulkOperationPreview.JSON_PROPERTY_SKIPPED_COUNTS_BY_REASON, + BulkOperationPreview.JSON_PROPERTY_SKIPPED_SAMPLE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class BulkOperationPreview { + public static final String JSON_PROPERTY_TOTAL = "total"; + @Nullable + private Integer total; + + public static final String JSON_PROPERTY_ELIGIBLE = "eligible"; + @Nullable + private Integer eligible; + + public static final String JSON_PROPERTY_SKIPPED_COUNTS_BY_REASON = "skippedCountsByReason"; + @Nullable + private Map skippedCountsByReason = new HashMap<>(); + + public static final String JSON_PROPERTY_SKIPPED_SAMPLE = "skippedSample"; + @Nullable + private List skippedSample = new ArrayList<>(); + + public BulkOperationPreview() { + } + + public BulkOperationPreview total(@Nullable Integer total) { + this.total = total; + return this; + } + + /** + * Total number of apps targeted by the bulk operation + * @return total + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getTotal() { + return total; + } + + + @JsonProperty(value = JSON_PROPERTY_TOTAL, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTotal(@Nullable Integer total) { + this.total = total; + } + + + public BulkOperationPreview eligible(@Nullable Integer eligible) { + this.eligible = eligible; + return this; + } + + /** + * Number of apps that would be submitted (total minus skipped) + * @return eligible + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ELIGIBLE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getEligible() { + return eligible; + } + + + @JsonProperty(value = JSON_PROPERTY_ELIGIBLE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setEligible(@Nullable Integer eligible) { + this.eligible = eligible; + } + + + public BulkOperationPreview skippedCountsByReason(@Nullable Map skippedCountsByReason) { + this.skippedCountsByReason = skippedCountsByReason; + return this; + } + + public BulkOperationPreview putSkippedCountsByReasonItem(String key, Integer skippedCountsByReasonItem) { + if (this.skippedCountsByReason == null) { + this.skippedCountsByReason = new HashMap<>(); + } + this.skippedCountsByReason.put(key, skippedCountsByReasonItem); + return this; + } + + /** + * Skip count per reason for the targeted apps + * @return skippedCountsByReason + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_SKIPPED_COUNTS_BY_REASON, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getSkippedCountsByReason() { + return skippedCountsByReason; + } + + + @JsonProperty(value = JSON_PROPERTY_SKIPPED_COUNTS_BY_REASON, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSkippedCountsByReason(@Nullable Map skippedCountsByReason) { + this.skippedCountsByReason = skippedCountsByReason; + } + + + public BulkOperationPreview skippedSample(@Nullable List skippedSample) { + this.skippedSample = skippedSample; + return this; + } + + public BulkOperationPreview addSkippedSampleItem(SkippedApp skippedSampleItem) { + if (this.skippedSample == null) { + this.skippedSample = new ArrayList<>(); + } + this.skippedSample.add(skippedSampleItem); + return this; + } + + /** + * Sample of skipped apps, capped per reason. Use the run history to inspect the full list. + * @return skippedSample + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_SKIPPED_SAMPLE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getSkippedSample() { + return skippedSample; + } + + + @JsonProperty(value = JSON_PROPERTY_SKIPPED_SAMPLE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSkippedSample(@Nullable List skippedSample) { + this.skippedSample = skippedSample; + } + + + /** + * Return true if this BulkOperationPreview object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BulkOperationPreview bulkOperationPreview = (BulkOperationPreview) o; + return Objects.equals(this.total, bulkOperationPreview.total) && + Objects.equals(this.eligible, bulkOperationPreview.eligible) && + Objects.equals(this.skippedCountsByReason, bulkOperationPreview.skippedCountsByReason) && + Objects.equals(this.skippedSample, bulkOperationPreview.skippedSample); + } + + @Override + public int hashCode() { + return Objects.hash(total, eligible, skippedCountsByReason, skippedSample); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BulkOperationPreview {\n"); + sb.append(" total: ").append(toIndentedString(total)).append("\n"); + sb.append(" eligible: ").append(toIndentedString(eligible)).append("\n"); + sb.append(" skippedCountsByReason: ").append(toIndentedString(skippedCountsByReason)).append("\n"); + sb.append(" skippedSample: ").append(toIndentedString(skippedSample)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `total` to the URL query string + if (getTotal() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotal%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotal())))); + } + + // add `eligible` to the URL query string + if (getEligible() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%seligible%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getEligible())))); + } + + // add `skippedCountsByReason` to the URL query string + if (getSkippedCountsByReason() != null) { + for (String _key : getSkippedCountsByReason().keySet()) { + joiner.add(String.format(java.util.Locale.ROOT, "%sskippedCountsByReason%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, _key, containerSuffix), + getSkippedCountsByReason().get(_key), ApiClient.urlEncode(ApiClient.valueToString(getSkippedCountsByReason().get(_key))))); + } + } + + // add `skippedSample` to the URL query string + if (getSkippedSample() != null) { + for (int i = 0; i < getSkippedSample().size(); i++) { + if (getSkippedSample().get(i) != null) { + joiner.add(getSkippedSample().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sskippedSample%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/BulkOperationRequest.java b/paas/src/main/java/org/thingsboard/client/model/BulkOperationRequest.java new file mode 100644 index 00000000..7ad916ac --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/BulkOperationRequest.java @@ -0,0 +1,208 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import org.thingsboard.client.model.AgentAppEventActionType; +import org.thingsboard.client.model.AgentAppEventStepStatesValue; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * BulkOperationRequest + */ +@JsonPropertyOrder({ + BulkOperationRequest.JSON_PROPERTY_ACTION_TYPE, + BulkOperationRequest.JSON_PROPERTY_STEP_INPUTS +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class BulkOperationRequest { + public static final String JSON_PROPERTY_ACTION_TYPE = "actionType"; + @Nullable + private AgentAppEventActionType actionType; + + public static final String JSON_PROPERTY_STEP_INPUTS = "stepInputs"; + @Nullable + private Map stepInputs = new HashMap<>(); + + public BulkOperationRequest() { + } + + public BulkOperationRequest actionType(@Nullable AgentAppEventActionType actionType) { + this.actionType = actionType; + return this; + } + + /** + * Get actionType + * @return actionType + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ACTION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppEventActionType getActionType() { + return actionType; + } + + + @JsonProperty(value = JSON_PROPERTY_ACTION_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setActionType(@Nullable AgentAppEventActionType actionType) { + this.actionType = actionType; + } + + + public BulkOperationRequest stepInputs(@Nullable Map stepInputs) { + this.stepInputs = stepInputs; + return this; + } + + public BulkOperationRequest putStepInputsItem(String key, AgentAppEventStepStatesValue stepInputsItem) { + if (this.stepInputs == null) { + this.stepInputs = new HashMap<>(); + } + this.stepInputs.put(key, stepInputsItem); + return this; + } + + /** + * Get stepInputs + * @return stepInputs + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_STEP_INPUTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getStepInputs() { + return stepInputs; + } + + + @JsonProperty(value = JSON_PROPERTY_STEP_INPUTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setStepInputs(@Nullable Map stepInputs) { + this.stepInputs = stepInputs; + } + + + /** + * Return true if this BulkOperationRequest object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BulkOperationRequest bulkOperationRequest = (BulkOperationRequest) o; + return Objects.equals(this.actionType, bulkOperationRequest.actionType) && + Objects.equals(this.stepInputs, bulkOperationRequest.stepInputs); + } + + @Override + public int hashCode() { + return Objects.hash(actionType, stepInputs); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BulkOperationRequest {\n"); + sb.append(" actionType: ").append(toIndentedString(actionType)).append("\n"); + sb.append(" stepInputs: ").append(toIndentedString(stepInputs)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `actionType` to the URL query string + if (getActionType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sactionType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getActionType())))); + } + + // add `stepInputs` to the URL query string + if (getStepInputs() != null) { + for (String _key : getStepInputs().keySet()) { + if (getStepInputs().get(_key) != null) { + joiner.add(getStepInputs().get(_key).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sstepInputs%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, _key, containerSuffix)))); + } + } + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/ComposeDownStep.java b/paas/src/main/java/org/thingsboard/client/model/ComposeDownStep.java new file mode 100644 index 00000000..3487925f --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/ComposeDownStep.java @@ -0,0 +1,248 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStep; +import org.thingsboard.client.model.AgentAppStepType; +import org.thingsboard.client.model.ComposeDownStepState; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * ComposeDownStep + */ +@JsonPropertyOrder({ + ComposeDownStep.JSON_PROPERTY_STATE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class ComposeDownStep extends AgentAppStep { + public static final String JSON_PROPERTY_STATE = "state"; + @Nullable + private ComposeDownStepState state; + + public ComposeDownStep() { + } + + public ComposeDownStep state(@Nullable ComposeDownStepState state) { + this.state = state; + return this; + } + + /** + * Get state + * @return state + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_STATE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ComposeDownStepState getState() { + return state; + } + + + @JsonProperty(value = JSON_PROPERTY_STATE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setState(@Nullable ComposeDownStepState state) { + this.state = state; + } + + + @Override + public ComposeDownStep id(@Nullable UUID id) { + this.setId(id); + return this; + } + + @Override + public ComposeDownStep nextId(@Nullable UUID nextId) { + this.setNextId(nextId); + return this; + } + + @Override + public ComposeDownStep title(@Nullable String title) { + this.setTitle(title); + return this; + } + + @Override + public ComposeDownStep templateOnly(@Nullable Boolean templateOnly) { + this.setTemplateOnly(templateOnly); + return this; + } + + @Override + public ComposeDownStep condition(@Nullable String condition) { + this.setCondition(condition); + return this; + } + + @Override + public ComposeDownStep stateful(@Nullable Boolean stateful) { + this.setStateful(stateful); + return this; + } + + /** + * Return true if this ComposeDownStep object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ComposeDownStep composeDownStep = (ComposeDownStep) o; + return Objects.equals(this.state, composeDownStep.state) && + super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(state, super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ComposeDownStep {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" state: ").append(toIndentedString(state)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `nextId` to the URL query string + if (getNextId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextId())))); + } + + // add `title` to the URL query string + if (getTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTitle())))); + } + + // add `templateOnly` to the URL query string + if (getTemplateOnly() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateOnly%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateOnly())))); + } + + // add `condition` to the URL query string + if (getCondition() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scondition%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCondition())))); + } + + // add `stateful` to the URL query string + if (getStateful() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstateful%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStateful())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `state` to the URL query string + if (getState() != null) { + joiner.add(getState().toUrlQueryString(prefix + "state" + suffix)); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("ComposeDownStep", ComposeDownStep.class); + JSON.registerDiscriminator(ComposeDownStep.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/ComposeDownStepState.java b/paas/src/main/java/org/thingsboard/client/model/ComposeDownStepState.java new file mode 100644 index 00000000..ff0f115d --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/ComposeDownStepState.java @@ -0,0 +1,218 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppStepState; +import org.thingsboard.client.model.AgentAppStepType; +import org.thingsboard.client.model.StepFieldBoolean; +import org.thingsboard.client.model.StepFieldListString; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * ComposeDownStepState + */ +@JsonPropertyOrder({ + ComposeDownStepState.JSON_PROPERTY_SERVICE_IMAGE_REGEX_PATTERNS, + ComposeDownStepState.JSON_PROPERTY_REMOVE_VOLUMES +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class ComposeDownStepState extends AgentAppStepState { + public static final String JSON_PROPERTY_SERVICE_IMAGE_REGEX_PATTERNS = "serviceImageRegexPatterns"; + @Nullable + private StepFieldListString serviceImageRegexPatterns; + + public static final String JSON_PROPERTY_REMOVE_VOLUMES = "removeVolumes"; + @Nullable + private StepFieldBoolean removeVolumes; + + public ComposeDownStepState() { + } + + public ComposeDownStepState serviceImageRegexPatterns(@Nullable StepFieldListString serviceImageRegexPatterns) { + this.serviceImageRegexPatterns = serviceImageRegexPatterns; + return this; + } + + /** + * Get serviceImageRegexPatterns + * @return serviceImageRegexPatterns + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_SERVICE_IMAGE_REGEX_PATTERNS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldListString getServiceImageRegexPatterns() { + return serviceImageRegexPatterns; + } + + + @JsonProperty(value = JSON_PROPERTY_SERVICE_IMAGE_REGEX_PATTERNS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setServiceImageRegexPatterns(@Nullable StepFieldListString serviceImageRegexPatterns) { + this.serviceImageRegexPatterns = serviceImageRegexPatterns; + } + + + public ComposeDownStepState removeVolumes(@Nullable StepFieldBoolean removeVolumes) { + this.removeVolumes = removeVolumes; + return this; + } + + /** + * Get removeVolumes + * @return removeVolumes + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_REMOVE_VOLUMES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldBoolean getRemoveVolumes() { + return removeVolumes; + } + + + @JsonProperty(value = JSON_PROPERTY_REMOVE_VOLUMES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setRemoveVolumes(@Nullable StepFieldBoolean removeVolumes) { + this.removeVolumes = removeVolumes; + } + + + /** + * Return true if this ComposeDownStepState object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ComposeDownStepState composeDownStepState = (ComposeDownStepState) o; + return Objects.equals(this.serviceImageRegexPatterns, composeDownStepState.serviceImageRegexPatterns) && + Objects.equals(this.removeVolumes, composeDownStepState.removeVolumes) && + super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(serviceImageRegexPatterns, removeVolumes, super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ComposeDownStepState {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" serviceImageRegexPatterns: ").append(toIndentedString(serviceImageRegexPatterns)).append("\n"); + sb.append(" removeVolumes: ").append(toIndentedString(removeVolumes)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `serviceImageRegexPatterns` to the URL query string + if (getServiceImageRegexPatterns() != null) { + joiner.add(getServiceImageRegexPatterns().toUrlQueryString(prefix + "serviceImageRegexPatterns" + suffix)); + } + + // add `removeVolumes` to the URL query string + if (getRemoveVolumes() != null) { + joiner.add(getRemoveVolumes().toUrlQueryString(prefix + "removeVolumes" + suffix)); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("ComposeDownStepState", ComposeDownStepState.class); + JSON.registerDiscriminator(ComposeDownStepState.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/ComposeRestartStep.java b/paas/src/main/java/org/thingsboard/client/model/ComposeRestartStep.java new file mode 100644 index 00000000..313069ee --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/ComposeRestartStep.java @@ -0,0 +1,210 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStep; +import org.thingsboard.client.model.AgentAppStepType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * ComposeRestartStep + */ +@JsonPropertyOrder({ +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class ComposeRestartStep extends AgentAppStep { + public ComposeRestartStep() { + } + + @Override + public ComposeRestartStep id(@Nullable UUID id) { + this.setId(id); + return this; + } + + @Override + public ComposeRestartStep nextId(@Nullable UUID nextId) { + this.setNextId(nextId); + return this; + } + + @Override + public ComposeRestartStep title(@Nullable String title) { + this.setTitle(title); + return this; + } + + @Override + public ComposeRestartStep templateOnly(@Nullable Boolean templateOnly) { + this.setTemplateOnly(templateOnly); + return this; + } + + @Override + public ComposeRestartStep condition(@Nullable String condition) { + this.setCondition(condition); + return this; + } + + @Override + public ComposeRestartStep stateful(@Nullable Boolean stateful) { + this.setStateful(stateful); + return this; + } + + /** + * Return true if this ComposeRestartStep object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ComposeRestartStep {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `nextId` to the URL query string + if (getNextId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextId())))); + } + + // add `title` to the URL query string + if (getTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTitle())))); + } + + // add `templateOnly` to the URL query string + if (getTemplateOnly() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateOnly%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateOnly())))); + } + + // add `condition` to the URL query string + if (getCondition() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scondition%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCondition())))); + } + + // add `stateful` to the URL query string + if (getStateful() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstateful%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStateful())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("ComposeRestartStep", ComposeRestartStep.class); + JSON.registerDiscriminator(ComposeRestartStep.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/ComposeStartStep.java b/paas/src/main/java/org/thingsboard/client/model/ComposeStartStep.java new file mode 100644 index 00000000..b59098b6 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/ComposeStartStep.java @@ -0,0 +1,210 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStep; +import org.thingsboard.client.model.AgentAppStepType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * ComposeStartStep + */ +@JsonPropertyOrder({ +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class ComposeStartStep extends AgentAppStep { + public ComposeStartStep() { + } + + @Override + public ComposeStartStep id(@Nullable UUID id) { + this.setId(id); + return this; + } + + @Override + public ComposeStartStep nextId(@Nullable UUID nextId) { + this.setNextId(nextId); + return this; + } + + @Override + public ComposeStartStep title(@Nullable String title) { + this.setTitle(title); + return this; + } + + @Override + public ComposeStartStep templateOnly(@Nullable Boolean templateOnly) { + this.setTemplateOnly(templateOnly); + return this; + } + + @Override + public ComposeStartStep condition(@Nullable String condition) { + this.setCondition(condition); + return this; + } + + @Override + public ComposeStartStep stateful(@Nullable Boolean stateful) { + this.setStateful(stateful); + return this; + } + + /** + * Return true if this ComposeStartStep object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ComposeStartStep {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `nextId` to the URL query string + if (getNextId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextId())))); + } + + // add `title` to the URL query string + if (getTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTitle())))); + } + + // add `templateOnly` to the URL query string + if (getTemplateOnly() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateOnly%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateOnly())))); + } + + // add `condition` to the URL query string + if (getCondition() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scondition%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCondition())))); + } + + // add `stateful` to the URL query string + if (getStateful() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstateful%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStateful())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("ComposeStartStep", ComposeStartStep.class); + JSON.registerDiscriminator(ComposeStartStep.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/ComposeStep.java b/paas/src/main/java/org/thingsboard/client/model/ComposeStep.java new file mode 100644 index 00000000..8bdcea2d --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/ComposeStep.java @@ -0,0 +1,248 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStep; +import org.thingsboard.client.model.AgentAppStepType; +import org.thingsboard.client.model.ComposeStepState; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * ComposeStep + */ +@JsonPropertyOrder({ + ComposeStep.JSON_PROPERTY_STATE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class ComposeStep extends AgentAppStep { + public static final String JSON_PROPERTY_STATE = "state"; + @Nullable + private ComposeStepState state; + + public ComposeStep() { + } + + public ComposeStep state(@Nullable ComposeStepState state) { + this.state = state; + return this; + } + + /** + * Get state + * @return state + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_STATE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ComposeStepState getState() { + return state; + } + + + @JsonProperty(value = JSON_PROPERTY_STATE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setState(@Nullable ComposeStepState state) { + this.state = state; + } + + + @Override + public ComposeStep id(@Nullable UUID id) { + this.setId(id); + return this; + } + + @Override + public ComposeStep nextId(@Nullable UUID nextId) { + this.setNextId(nextId); + return this; + } + + @Override + public ComposeStep title(@Nullable String title) { + this.setTitle(title); + return this; + } + + @Override + public ComposeStep templateOnly(@Nullable Boolean templateOnly) { + this.setTemplateOnly(templateOnly); + return this; + } + + @Override + public ComposeStep condition(@Nullable String condition) { + this.setCondition(condition); + return this; + } + + @Override + public ComposeStep stateful(@Nullable Boolean stateful) { + this.setStateful(stateful); + return this; + } + + /** + * Return true if this ComposeStep object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ComposeStep composeStep = (ComposeStep) o; + return Objects.equals(this.state, composeStep.state) && + super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(state, super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ComposeStep {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" state: ").append(toIndentedString(state)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `nextId` to the URL query string + if (getNextId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextId())))); + } + + // add `title` to the URL query string + if (getTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTitle())))); + } + + // add `templateOnly` to the URL query string + if (getTemplateOnly() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateOnly%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateOnly())))); + } + + // add `condition` to the URL query string + if (getCondition() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scondition%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCondition())))); + } + + // add `stateful` to the URL query string + if (getStateful() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstateful%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStateful())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `state` to the URL query string + if (getState() != null) { + joiner.add(getState().toUrlQueryString(prefix + "state" + suffix)); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("ComposeStep", ComposeStep.class); + JSON.registerDiscriminator(ComposeStep.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/ComposeStepState.java b/paas/src/main/java/org/thingsboard/client/model/ComposeStepState.java new file mode 100644 index 00000000..7267b232 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/ComposeStepState.java @@ -0,0 +1,218 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppStepState; +import org.thingsboard.client.model.AgentAppStepType; +import org.thingsboard.client.model.StepFieldBoolean; +import org.thingsboard.client.model.StepFieldListString; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * ComposeStepState + */ +@JsonPropertyOrder({ + ComposeStepState.JSON_PROPERTY_SERVICE_IMAGE_REGEX_PATTERNS, + ComposeStepState.JSON_PROPERTY_PULL_IMAGES +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class ComposeStepState extends AgentAppStepState { + public static final String JSON_PROPERTY_SERVICE_IMAGE_REGEX_PATTERNS = "serviceImageRegexPatterns"; + @Nullable + private StepFieldListString serviceImageRegexPatterns; + + public static final String JSON_PROPERTY_PULL_IMAGES = "pullImages"; + @Nullable + private StepFieldBoolean pullImages; + + public ComposeStepState() { + } + + public ComposeStepState serviceImageRegexPatterns(@Nullable StepFieldListString serviceImageRegexPatterns) { + this.serviceImageRegexPatterns = serviceImageRegexPatterns; + return this; + } + + /** + * Get serviceImageRegexPatterns + * @return serviceImageRegexPatterns + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_SERVICE_IMAGE_REGEX_PATTERNS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldListString getServiceImageRegexPatterns() { + return serviceImageRegexPatterns; + } + + + @JsonProperty(value = JSON_PROPERTY_SERVICE_IMAGE_REGEX_PATTERNS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setServiceImageRegexPatterns(@Nullable StepFieldListString serviceImageRegexPatterns) { + this.serviceImageRegexPatterns = serviceImageRegexPatterns; + } + + + public ComposeStepState pullImages(@Nullable StepFieldBoolean pullImages) { + this.pullImages = pullImages; + return this; + } + + /** + * Get pullImages + * @return pullImages + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PULL_IMAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldBoolean getPullImages() { + return pullImages; + } + + + @JsonProperty(value = JSON_PROPERTY_PULL_IMAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setPullImages(@Nullable StepFieldBoolean pullImages) { + this.pullImages = pullImages; + } + + + /** + * Return true if this ComposeStepState object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ComposeStepState composeStepState = (ComposeStepState) o; + return Objects.equals(this.serviceImageRegexPatterns, composeStepState.serviceImageRegexPatterns) && + Objects.equals(this.pullImages, composeStepState.pullImages) && + super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(serviceImageRegexPatterns, pullImages, super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ComposeStepState {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" serviceImageRegexPatterns: ").append(toIndentedString(serviceImageRegexPatterns)).append("\n"); + sb.append(" pullImages: ").append(toIndentedString(pullImages)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `serviceImageRegexPatterns` to the URL query string + if (getServiceImageRegexPatterns() != null) { + joiner.add(getServiceImageRegexPatterns().toUrlQueryString(prefix + "serviceImageRegexPatterns" + suffix)); + } + + // add `pullImages` to the URL query string + if (getPullImages() != null) { + joiner.add(getPullImages().toUrlQueryString(prefix + "pullImages" + suffix)); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("ComposeStepState", ComposeStepState.class); + JSON.registerDiscriminator(ComposeStepState.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/ComposeTypeChoiceStep.java b/paas/src/main/java/org/thingsboard/client/model/ComposeTypeChoiceStep.java new file mode 100644 index 00000000..0de2fd21 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/ComposeTypeChoiceStep.java @@ -0,0 +1,261 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStep; +import org.thingsboard.client.model.AgentAppStepType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * ComposeTypeChoiceStep + */ +@JsonPropertyOrder({ + ComposeTypeChoiceStep.JSON_PROPERTY_COMPOSE_TEMPLATES +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class ComposeTypeChoiceStep extends AgentAppStep { + public static final String JSON_PROPERTY_COMPOSE_TEMPLATES = "composeTemplates"; + @Nullable + private Map composeTemplates = new HashMap<>(); + + public ComposeTypeChoiceStep() { + } + + public ComposeTypeChoiceStep composeTemplates(@Nullable Map composeTemplates) { + this.composeTemplates = composeTemplates; + return this; + } + + public ComposeTypeChoiceStep putComposeTemplatesItem(String key, com.fasterxml.jackson.databind.JsonNode composeTemplatesItem) { + if (this.composeTemplates == null) { + this.composeTemplates = new HashMap<>(); + } + this.composeTemplates.put(key, composeTemplatesItem); + return this; + } + + /** + * Get composeTemplates + * @return composeTemplates + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_COMPOSE_TEMPLATES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Map getComposeTemplates() { + return composeTemplates; + } + + + @JsonProperty(value = JSON_PROPERTY_COMPOSE_TEMPLATES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setComposeTemplates(@Nullable Map composeTemplates) { + this.composeTemplates = composeTemplates; + } + + + @Override + public ComposeTypeChoiceStep id(@Nullable UUID id) { + this.setId(id); + return this; + } + + @Override + public ComposeTypeChoiceStep nextId(@Nullable UUID nextId) { + this.setNextId(nextId); + return this; + } + + @Override + public ComposeTypeChoiceStep title(@Nullable String title) { + this.setTitle(title); + return this; + } + + @Override + public ComposeTypeChoiceStep templateOnly(@Nullable Boolean templateOnly) { + this.setTemplateOnly(templateOnly); + return this; + } + + @Override + public ComposeTypeChoiceStep condition(@Nullable String condition) { + this.setCondition(condition); + return this; + } + + @Override + public ComposeTypeChoiceStep stateful(@Nullable Boolean stateful) { + this.setStateful(stateful); + return this; + } + + /** + * Return true if this ComposeTypeChoiceStep object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ComposeTypeChoiceStep composeTypeChoiceStep = (ComposeTypeChoiceStep) o; + return Objects.equals(this.composeTemplates, composeTypeChoiceStep.composeTemplates) && + super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(composeTemplates, super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ComposeTypeChoiceStep {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" composeTemplates: ").append(toIndentedString(composeTemplates)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `nextId` to the URL query string + if (getNextId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextId())))); + } + + // add `title` to the URL query string + if (getTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTitle())))); + } + + // add `templateOnly` to the URL query string + if (getTemplateOnly() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateOnly%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateOnly())))); + } + + // add `condition` to the URL query string + if (getCondition() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scondition%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCondition())))); + } + + // add `stateful` to the URL query string + if (getStateful() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstateful%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStateful())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `composeTemplates` to the URL query string + if (getComposeTemplates() != null) { + for (String _key : getComposeTemplates().keySet()) { + joiner.add(String.format(java.util.Locale.ROOT, "%scomposeTemplates%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, _key, containerSuffix), + getComposeTemplates().get(_key), ApiClient.urlEncode(ApiClient.valueToString(getComposeTemplates().get(_key))))); + } + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("ComposeTypeChoiceStep", ComposeTypeChoiceStep.class); + JSON.registerDiscriminator(ComposeTypeChoiceStep.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/DefaultTenantProfileConfiguration.java b/paas/src/main/java/org/thingsboard/client/model/DefaultTenantProfileConfiguration.java index bcaaa778..0ffc488a 100644 --- a/paas/src/main/java/org/thingsboard/client/model/DefaultTenantProfileConfiguration.java +++ b/paas/src/main/java/org/thingsboard/client/model/DefaultTenantProfileConfiguration.java @@ -49,6 +49,8 @@ DefaultTenantProfileConfiguration.JSON_PROPERTY_MAX_DASHBOARDS, DefaultTenantProfileConfiguration.JSON_PROPERTY_MAX_RULE_CHAINS, DefaultTenantProfileConfiguration.JSON_PROPERTY_MAX_EDGES, + DefaultTenantProfileConfiguration.JSON_PROPERTY_MAX_AGENTS, + DefaultTenantProfileConfiguration.JSON_PROPERTY_MAX_AGENT_APPLICATIONS, DefaultTenantProfileConfiguration.JSON_PROPERTY_MAX_RESOURCES_IN_BYTES, DefaultTenantProfileConfiguration.JSON_PROPERTY_MAX_OTA_PACKAGES_IN_BYTES, DefaultTenantProfileConfiguration.JSON_PROPERTY_MAX_RESOURCE_SIZE, @@ -112,6 +114,10 @@ DefaultTenantProfileConfiguration.JSON_PROPERTY_EDGE_EVENT_RATE_LIMITS_PER_EDGE, DefaultTenantProfileConfiguration.JSON_PROPERTY_EDGE_UPLINK_MESSAGES_RATE_LIMITS, DefaultTenantProfileConfiguration.JSON_PROPERTY_EDGE_UPLINK_MESSAGES_RATE_LIMITS_PER_EDGE, + DefaultTenantProfileConfiguration.JSON_PROPERTY_AGENT_EVENT_RATE_LIMITS, + DefaultTenantProfileConfiguration.JSON_PROPERTY_AGENT_EVENT_RATE_LIMITS_PER_AGENT, + DefaultTenantProfileConfiguration.JSON_PROPERTY_AGENT_LOG_CHUNK_RATE_LIMITS, + DefaultTenantProfileConfiguration.JSON_PROPERTY_AGENT_LOG_CHUNK_RATE_LIMITS_PER_AGENT, DefaultTenantProfileConfiguration.JSON_PROPERTY_DEFAULT_STORAGE_TTL_DAYS, DefaultTenantProfileConfiguration.JSON_PROPERTY_ALARMS_TTL_DAYS, DefaultTenantProfileConfiguration.JSON_PROPERTY_RPC_TTL_DAYS, @@ -171,6 +177,14 @@ public class DefaultTenantProfileConfiguration extends TenantProfileConfiguratio @Nullable private Long maxEdges; + public static final String JSON_PROPERTY_MAX_AGENTS = "maxAgents"; + @Nullable + private Long maxAgents; + + public static final String JSON_PROPERTY_MAX_AGENT_APPLICATIONS = "maxAgentApplications"; + @Nullable + private Long maxAgentApplications; + public static final String JSON_PROPERTY_MAX_RESOURCES_IN_BYTES = "maxResourcesInBytes"; @Nullable private Long maxResourcesInBytes; @@ -423,6 +437,22 @@ public class DefaultTenantProfileConfiguration extends TenantProfileConfiguratio @Nullable private String edgeUplinkMessagesRateLimitsPerEdge; + public static final String JSON_PROPERTY_AGENT_EVENT_RATE_LIMITS = "agentEventRateLimits"; + @Nullable + private String agentEventRateLimits; + + public static final String JSON_PROPERTY_AGENT_EVENT_RATE_LIMITS_PER_AGENT = "agentEventRateLimitsPerAgent"; + @Nullable + private String agentEventRateLimitsPerAgent; + + public static final String JSON_PROPERTY_AGENT_LOG_CHUNK_RATE_LIMITS = "agentLogChunkRateLimits"; + @Nullable + private String agentLogChunkRateLimits; + + public static final String JSON_PROPERTY_AGENT_LOG_CHUNK_RATE_LIMITS_PER_AGENT = "agentLogChunkRateLimitsPerAgent"; + @Nullable + private String agentLogChunkRateLimitsPerAgent; + public static final String JSON_PROPERTY_DEFAULT_STORAGE_TTL_DAYS = "defaultStorageTtlDays"; @Nullable private Integer defaultStorageTtlDays; @@ -682,6 +712,54 @@ public void setMaxEdges(@Nullable Long maxEdges) { } + public DefaultTenantProfileConfiguration maxAgents(@Nullable Long maxAgents) { + this.maxAgents = maxAgents; + return this; + } + + /** + * Get maxAgents + * @return maxAgents + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_MAX_AGENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getMaxAgents() { + return maxAgents; + } + + + @JsonProperty(value = JSON_PROPERTY_MAX_AGENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMaxAgents(@Nullable Long maxAgents) { + this.maxAgents = maxAgents; + } + + + public DefaultTenantProfileConfiguration maxAgentApplications(@Nullable Long maxAgentApplications) { + this.maxAgentApplications = maxAgentApplications; + return this; + } + + /** + * Get maxAgentApplications + * @return maxAgentApplications + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_MAX_AGENT_APPLICATIONS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getMaxAgentApplications() { + return maxAgentApplications; + } + + + @JsonProperty(value = JSON_PROPERTY_MAX_AGENT_APPLICATIONS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMaxAgentApplications(@Nullable Long maxAgentApplications) { + this.maxAgentApplications = maxAgentApplications; + } + + public DefaultTenantProfileConfiguration maxResourcesInBytes(@Nullable Long maxResourcesInBytes) { this.maxResourcesInBytes = maxResourcesInBytes; return this; @@ -2194,6 +2272,102 @@ public void setEdgeUplinkMessagesRateLimitsPerEdge(@Nullable String edgeUplinkMe } + public DefaultTenantProfileConfiguration agentEventRateLimits(@Nullable String agentEventRateLimits) { + this.agentEventRateLimits = agentEventRateLimits; + return this; + } + + /** + * Get agentEventRateLimits + * @return agentEventRateLimits + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_EVENT_RATE_LIMITS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAgentEventRateLimits() { + return agentEventRateLimits; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_EVENT_RATE_LIMITS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAgentEventRateLimits(@Nullable String agentEventRateLimits) { + this.agentEventRateLimits = agentEventRateLimits; + } + + + public DefaultTenantProfileConfiguration agentEventRateLimitsPerAgent(@Nullable String agentEventRateLimitsPerAgent) { + this.agentEventRateLimitsPerAgent = agentEventRateLimitsPerAgent; + return this; + } + + /** + * Get agentEventRateLimitsPerAgent + * @return agentEventRateLimitsPerAgent + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_EVENT_RATE_LIMITS_PER_AGENT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAgentEventRateLimitsPerAgent() { + return agentEventRateLimitsPerAgent; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_EVENT_RATE_LIMITS_PER_AGENT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAgentEventRateLimitsPerAgent(@Nullable String agentEventRateLimitsPerAgent) { + this.agentEventRateLimitsPerAgent = agentEventRateLimitsPerAgent; + } + + + public DefaultTenantProfileConfiguration agentLogChunkRateLimits(@Nullable String agentLogChunkRateLimits) { + this.agentLogChunkRateLimits = agentLogChunkRateLimits; + return this; + } + + /** + * Get agentLogChunkRateLimits + * @return agentLogChunkRateLimits + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_LOG_CHUNK_RATE_LIMITS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAgentLogChunkRateLimits() { + return agentLogChunkRateLimits; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_LOG_CHUNK_RATE_LIMITS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAgentLogChunkRateLimits(@Nullable String agentLogChunkRateLimits) { + this.agentLogChunkRateLimits = agentLogChunkRateLimits; + } + + + public DefaultTenantProfileConfiguration agentLogChunkRateLimitsPerAgent(@Nullable String agentLogChunkRateLimitsPerAgent) { + this.agentLogChunkRateLimitsPerAgent = agentLogChunkRateLimitsPerAgent; + return this; + } + + /** + * Get agentLogChunkRateLimitsPerAgent + * @return agentLogChunkRateLimitsPerAgent + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_LOG_CHUNK_RATE_LIMITS_PER_AGENT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAgentLogChunkRateLimitsPerAgent() { + return agentLogChunkRateLimitsPerAgent; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_LOG_CHUNK_RATE_LIMITS_PER_AGENT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAgentLogChunkRateLimitsPerAgent(@Nullable String agentLogChunkRateLimitsPerAgent) { + this.agentLogChunkRateLimitsPerAgent = agentLogChunkRateLimitsPerAgent; + } + + public DefaultTenantProfileConfiguration defaultStorageTtlDays(@Nullable Integer defaultStorageTtlDays) { this.defaultStorageTtlDays = defaultStorageTtlDays; return this; @@ -2741,6 +2915,8 @@ public boolean equals(Object o) { Objects.equals(this.maxDashboards, defaultTenantProfileConfiguration.maxDashboards) && Objects.equals(this.maxRuleChains, defaultTenantProfileConfiguration.maxRuleChains) && Objects.equals(this.maxEdges, defaultTenantProfileConfiguration.maxEdges) && + Objects.equals(this.maxAgents, defaultTenantProfileConfiguration.maxAgents) && + Objects.equals(this.maxAgentApplications, defaultTenantProfileConfiguration.maxAgentApplications) && Objects.equals(this.maxResourcesInBytes, defaultTenantProfileConfiguration.maxResourcesInBytes) && Objects.equals(this.maxOtaPackagesInBytes, defaultTenantProfileConfiguration.maxOtaPackagesInBytes) && Objects.equals(this.maxResourceSize, defaultTenantProfileConfiguration.maxResourceSize) && @@ -2804,6 +2980,10 @@ public boolean equals(Object o) { Objects.equals(this.edgeEventRateLimitsPerEdge, defaultTenantProfileConfiguration.edgeEventRateLimitsPerEdge) && Objects.equals(this.edgeUplinkMessagesRateLimits, defaultTenantProfileConfiguration.edgeUplinkMessagesRateLimits) && Objects.equals(this.edgeUplinkMessagesRateLimitsPerEdge, defaultTenantProfileConfiguration.edgeUplinkMessagesRateLimitsPerEdge) && + Objects.equals(this.agentEventRateLimits, defaultTenantProfileConfiguration.agentEventRateLimits) && + Objects.equals(this.agentEventRateLimitsPerAgent, defaultTenantProfileConfiguration.agentEventRateLimitsPerAgent) && + Objects.equals(this.agentLogChunkRateLimits, defaultTenantProfileConfiguration.agentLogChunkRateLimits) && + Objects.equals(this.agentLogChunkRateLimitsPerAgent, defaultTenantProfileConfiguration.agentLogChunkRateLimitsPerAgent) && Objects.equals(this.defaultStorageTtlDays, defaultTenantProfileConfiguration.defaultStorageTtlDays) && Objects.equals(this.alarmsTtlDays, defaultTenantProfileConfiguration.alarmsTtlDays) && Objects.equals(this.rpcTtlDays, defaultTenantProfileConfiguration.rpcTtlDays) && @@ -2831,7 +3011,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(maxDevices, maxAssets, maxCustomers, maxUsers, maxDashboards, maxRuleChains, maxEdges, maxResourcesInBytes, maxOtaPackagesInBytes, maxResourceSize, maxReportSizeInBytes, maxIntegrations, maxConverters, maxSchedulerEvents, whiteLabelingEnabled, trendzEnabled, edgeEnabled, transportTenantMsgRateLimit, transportTenantTelemetryMsgRateLimit, transportTenantTelemetryDataPointsRateLimit, transportDeviceMsgRateLimit, transportDeviceTelemetryMsgRateLimit, transportDeviceTelemetryDataPointsRateLimit, transportGatewayMsgRateLimit, transportGatewayTelemetryMsgRateLimit, transportGatewayTelemetryDataPointsRateLimit, transportGatewayDeviceMsgRateLimit, transportGatewayDeviceTelemetryMsgRateLimit, transportGatewayDeviceTelemetryDataPointsRateLimit, integrationMsgsPerTenantRateLimit, integrationMsgsPerDeviceRateLimit, integrationMsgsPerAssetRateLimit, tenantEntityExportRateLimit, tenantEntityImportRateLimit, tenantNotificationRequestsRateLimit, tenantNotificationRequestsPerRuleRateLimit, maxTransportMessages, maxTransportDataPoints, maxREExecutions, maxJSExecutions, maxTbelExecutions, maxDPStorageDays, maxRuleNodeExecutionsPerMessage, maxDebugModeDurationMinutes, maxEmails, smsEnabled, maxSms, maxCreatedAlarms, maxGeneratedReports, maxAiCredits, tenantServerRestLimitsConfiguration, customerServerRestLimitsConfiguration, maxWsSessionsPerTenant, maxWsSessionsPerCustomer, maxWsSessionsPerRegularUser, maxWsSessionsPerPublicUser, wsMsgQueueLimitPerSession, maxWsSubscriptionsPerTenant, maxWsSubscriptionsPerCustomer, maxWsSubscriptionsPerRegularUser, maxWsSubscriptionsPerPublicUser, wsUpdatesPerSessionRateLimit, cassandraReadQueryTenantCoreRateLimits, cassandraWriteQueryTenantCoreRateLimits, cassandraReadQueryTenantRuleEngineRateLimits, cassandraWriteQueryTenantRuleEngineRateLimits, edgeEventRateLimits, edgeEventRateLimitsPerEdge, edgeUplinkMessagesRateLimits, edgeUplinkMessagesRateLimitsPerEdge, defaultStorageTtlDays, alarmsTtlDays, rpcTtlDays, queueStatsTtlDays, ruleEngineExceptionsTtlDays, blobEntityTtlDays, reportTtlDays, warnThreshold, maxCalculatedFieldsPerEntity, maxArgumentsPerCF, minAllowedScheduledUpdateIntervalInSecForCF, maxRelationLevelPerCfArgument, maxRelatedEntitiesToReturnPerCfArgument, maxDataPointsPerRollingArg, maxStateSizeInKBytes, maxSingleValueArgumentSizeInKBytes, minAllowedDeduplicationIntervalInSecForCF, minAllowedAggregationIntervalInSecForCF, intermediateAggregationIntervalInSecForCF, cfReevaluationCheckInterval, alarmsReevaluationInterval, aiChatRequestsPerTenantRateLimit, super.hashCode()); + return Objects.hash(maxDevices, maxAssets, maxCustomers, maxUsers, maxDashboards, maxRuleChains, maxEdges, maxAgents, maxAgentApplications, maxResourcesInBytes, maxOtaPackagesInBytes, maxResourceSize, maxReportSizeInBytes, maxIntegrations, maxConverters, maxSchedulerEvents, whiteLabelingEnabled, trendzEnabled, edgeEnabled, transportTenantMsgRateLimit, transportTenantTelemetryMsgRateLimit, transportTenantTelemetryDataPointsRateLimit, transportDeviceMsgRateLimit, transportDeviceTelemetryMsgRateLimit, transportDeviceTelemetryDataPointsRateLimit, transportGatewayMsgRateLimit, transportGatewayTelemetryMsgRateLimit, transportGatewayTelemetryDataPointsRateLimit, transportGatewayDeviceMsgRateLimit, transportGatewayDeviceTelemetryMsgRateLimit, transportGatewayDeviceTelemetryDataPointsRateLimit, integrationMsgsPerTenantRateLimit, integrationMsgsPerDeviceRateLimit, integrationMsgsPerAssetRateLimit, tenantEntityExportRateLimit, tenantEntityImportRateLimit, tenantNotificationRequestsRateLimit, tenantNotificationRequestsPerRuleRateLimit, maxTransportMessages, maxTransportDataPoints, maxREExecutions, maxJSExecutions, maxTbelExecutions, maxDPStorageDays, maxRuleNodeExecutionsPerMessage, maxDebugModeDurationMinutes, maxEmails, smsEnabled, maxSms, maxCreatedAlarms, maxGeneratedReports, maxAiCredits, tenantServerRestLimitsConfiguration, customerServerRestLimitsConfiguration, maxWsSessionsPerTenant, maxWsSessionsPerCustomer, maxWsSessionsPerRegularUser, maxWsSessionsPerPublicUser, wsMsgQueueLimitPerSession, maxWsSubscriptionsPerTenant, maxWsSubscriptionsPerCustomer, maxWsSubscriptionsPerRegularUser, maxWsSubscriptionsPerPublicUser, wsUpdatesPerSessionRateLimit, cassandraReadQueryTenantCoreRateLimits, cassandraWriteQueryTenantCoreRateLimits, cassandraReadQueryTenantRuleEngineRateLimits, cassandraWriteQueryTenantRuleEngineRateLimits, edgeEventRateLimits, edgeEventRateLimitsPerEdge, edgeUplinkMessagesRateLimits, edgeUplinkMessagesRateLimitsPerEdge, agentEventRateLimits, agentEventRateLimitsPerAgent, agentLogChunkRateLimits, agentLogChunkRateLimitsPerAgent, defaultStorageTtlDays, alarmsTtlDays, rpcTtlDays, queueStatsTtlDays, ruleEngineExceptionsTtlDays, blobEntityTtlDays, reportTtlDays, warnThreshold, maxCalculatedFieldsPerEntity, maxArgumentsPerCF, minAllowedScheduledUpdateIntervalInSecForCF, maxRelationLevelPerCfArgument, maxRelatedEntitiesToReturnPerCfArgument, maxDataPointsPerRollingArg, maxStateSizeInKBytes, maxSingleValueArgumentSizeInKBytes, minAllowedDeduplicationIntervalInSecForCF, minAllowedAggregationIntervalInSecForCF, intermediateAggregationIntervalInSecForCF, cfReevaluationCheckInterval, alarmsReevaluationInterval, aiChatRequestsPerTenantRateLimit, super.hashCode()); } @Override @@ -2846,6 +3026,8 @@ public String toString() { sb.append(" maxDashboards: ").append(toIndentedString(maxDashboards)).append("\n"); sb.append(" maxRuleChains: ").append(toIndentedString(maxRuleChains)).append("\n"); sb.append(" maxEdges: ").append(toIndentedString(maxEdges)).append("\n"); + sb.append(" maxAgents: ").append(toIndentedString(maxAgents)).append("\n"); + sb.append(" maxAgentApplications: ").append(toIndentedString(maxAgentApplications)).append("\n"); sb.append(" maxResourcesInBytes: ").append(toIndentedString(maxResourcesInBytes)).append("\n"); sb.append(" maxOtaPackagesInBytes: ").append(toIndentedString(maxOtaPackagesInBytes)).append("\n"); sb.append(" maxResourceSize: ").append(toIndentedString(maxResourceSize)).append("\n"); @@ -2909,6 +3091,10 @@ public String toString() { sb.append(" edgeEventRateLimitsPerEdge: ").append(toIndentedString(edgeEventRateLimitsPerEdge)).append("\n"); sb.append(" edgeUplinkMessagesRateLimits: ").append(toIndentedString(edgeUplinkMessagesRateLimits)).append("\n"); sb.append(" edgeUplinkMessagesRateLimitsPerEdge: ").append(toIndentedString(edgeUplinkMessagesRateLimitsPerEdge)).append("\n"); + sb.append(" agentEventRateLimits: ").append(toIndentedString(agentEventRateLimits)).append("\n"); + sb.append(" agentEventRateLimitsPerAgent: ").append(toIndentedString(agentEventRateLimitsPerAgent)).append("\n"); + sb.append(" agentLogChunkRateLimits: ").append(toIndentedString(agentLogChunkRateLimits)).append("\n"); + sb.append(" agentLogChunkRateLimitsPerAgent: ").append(toIndentedString(agentLogChunkRateLimitsPerAgent)).append("\n"); sb.append(" defaultStorageTtlDays: ").append(toIndentedString(defaultStorageTtlDays)).append("\n"); sb.append(" alarmsTtlDays: ").append(toIndentedString(alarmsTtlDays)).append("\n"); sb.append(" rpcTtlDays: ").append(toIndentedString(rpcTtlDays)).append("\n"); @@ -3018,6 +3204,16 @@ public String toUrlQueryString(String prefix) { joiner.add(String.format(java.util.Locale.ROOT, "%smaxEdges%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getMaxEdges())))); } + // add `maxAgents` to the URL query string + if (getMaxAgents() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%smaxAgents%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getMaxAgents())))); + } + + // add `maxAgentApplications` to the URL query string + if (getMaxAgentApplications() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%smaxAgentApplications%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getMaxAgentApplications())))); + } + // add `maxResourcesInBytes` to the URL query string if (getMaxResourcesInBytes() != null) { joiner.add(String.format(java.util.Locale.ROOT, "%smaxResourcesInBytes%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getMaxResourcesInBytes())))); @@ -3333,6 +3529,26 @@ public String toUrlQueryString(String prefix) { joiner.add(String.format(java.util.Locale.ROOT, "%sedgeUplinkMessagesRateLimitsPerEdge%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getEdgeUplinkMessagesRateLimitsPerEdge())))); } + // add `agentEventRateLimits` to the URL query string + if (getAgentEventRateLimits() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sagentEventRateLimits%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAgentEventRateLimits())))); + } + + // add `agentEventRateLimitsPerAgent` to the URL query string + if (getAgentEventRateLimitsPerAgent() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sagentEventRateLimitsPerAgent%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAgentEventRateLimitsPerAgent())))); + } + + // add `agentLogChunkRateLimits` to the URL query string + if (getAgentLogChunkRateLimits() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sagentLogChunkRateLimits%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAgentLogChunkRateLimits())))); + } + + // add `agentLogChunkRateLimitsPerAgent` to the URL query string + if (getAgentLogChunkRateLimitsPerAgent() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sagentLogChunkRateLimitsPerAgent%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAgentLogChunkRateLimitsPerAgent())))); + } + // add `defaultStorageTtlDays` to the URL query string if (getDefaultStorageTtlDays() != null) { joiner.add(String.format(java.util.Locale.ROOT, "%sdefaultStorageTtlDays%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getDefaultStorageTtlDays())))); diff --git a/paas/src/main/java/org/thingsboard/client/model/DockerComposeConfig.java b/paas/src/main/java/org/thingsboard/client/model/DockerComposeConfig.java new file mode 100644 index 00000000..c47664eb --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/DockerComposeConfig.java @@ -0,0 +1,246 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentAppArgument; +import org.thingsboard.client.model.AgentAppConfig; +import org.thingsboard.client.model.AgentAppConfigType; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * DockerComposeConfig + */ +@JsonPropertyOrder({ + DockerComposeConfig.JSON_PROPERTY_COMPOSE, + DockerComposeConfig.JSON_PROPERTY_COMPOSE_TYPE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class DockerComposeConfig extends AgentAppConfig { + public static final String JSON_PROPERTY_COMPOSE = "compose"; + @Nullable + private com.fasterxml.jackson.databind.JsonNode compose = null; + + public static final String JSON_PROPERTY_COMPOSE_TYPE = "composeType"; + @Nullable + private String composeType; + + public DockerComposeConfig() { + } + + public DockerComposeConfig compose(@Nullable com.fasterxml.jackson.databind.JsonNode compose) { + this.compose = compose; + return this; + } + + /** + * Get compose + * @return compose + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_COMPOSE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public com.fasterxml.jackson.databind.JsonNode getCompose() { + return compose; + } + + + @JsonProperty(value = JSON_PROPERTY_COMPOSE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCompose(@Nullable com.fasterxml.jackson.databind.JsonNode compose) { + this.compose = compose; + } + + + public DockerComposeConfig composeType(@Nullable String composeType) { + this.composeType = composeType; + return this; + } + + /** + * Get composeType + * @return composeType + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_COMPOSE_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getComposeType() { + return composeType; + } + + + @JsonProperty(value = JSON_PROPERTY_COMPOSE_TYPE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setComposeType(@Nullable String composeType) { + this.composeType = composeType; + } + + + @Override + public DockerComposeConfig arguments(@Nullable List arguments) { + this.setArguments(arguments); + return this; + } + + @Override + public DockerComposeConfig edgeRoutingKey(@Nullable String edgeRoutingKey) { + this.setEdgeRoutingKey(edgeRoutingKey); + return this; + } + + /** + * Return true if this DockerComposeConfig object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DockerComposeConfig dockerComposeConfig = (DockerComposeConfig) o; + return Objects.equals(this.compose, dockerComposeConfig.compose) && + Objects.equals(this.composeType, dockerComposeConfig.composeType) && + super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(compose, composeType, super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class DockerComposeConfig {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" compose: ").append(toIndentedString(compose)).append("\n"); + sb.append(" composeType: ").append(toIndentedString(composeType)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `arguments` to the URL query string + if (getArguments() != null) { + for (int i = 0; i < getArguments().size(); i++) { + if (getArguments().get(i) != null) { + joiner.add(getArguments().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sarguments%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `edgeRoutingKey` to the URL query string + if (getEdgeRoutingKey() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sedgeRoutingKey%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getEdgeRoutingKey())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `compose` to the URL query string + if (getCompose() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scompose%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCompose())))); + } + + // add `composeType` to the URL query string + if (getComposeType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scomposeType%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getComposeType())))); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("DockerComposeConfig", DockerComposeConfig.class); + JSON.registerDiscriminator(DockerComposeConfig.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/EntityGroup.java b/paas/src/main/java/org/thingsboard/client/model/EntityGroup.java index 11b60260..e4c172f5 100644 --- a/paas/src/main/java/org/thingsboard/client/model/EntityGroup.java +++ b/paas/src/main/java/org/thingsboard/client/model/EntityGroup.java @@ -160,6 +160,20 @@ public enum TypeEnum { API_KEY(EntityType.valueOf("API_KEY")), + AGENT(EntityType.valueOf("AGENT")), + + AGENT_APPLICATION(EntityType.valueOf("AGENT_APPLICATION")), + + AGENT_APP_EVENT(EntityType.valueOf("AGENT_APP_EVENT")), + + AGENT_APP_UNIT(EntityType.valueOf("AGENT_APP_UNIT")), + + AGENT_APP_PROFILE(EntityType.valueOf("AGENT_APP_PROFILE")), + + AGENT_PROFILE(EntityType.valueOf("AGENT_PROFILE")), + + AGENT_BULK_ACTION(EntityType.valueOf("AGENT_BULK_ACTION")), + BILLING_CUSTOMER(EntityType.valueOf("BILLING_CUSTOMER")), SUBSCRIPTION_PLAN(EntityType.valueOf("SUBSCRIPTION_PLAN")), diff --git a/paas/src/main/java/org/thingsboard/client/model/EntityGroupInfo.java b/paas/src/main/java/org/thingsboard/client/model/EntityGroupInfo.java index 42c5c9fe..74dfba9c 100644 --- a/paas/src/main/java/org/thingsboard/client/model/EntityGroupInfo.java +++ b/paas/src/main/java/org/thingsboard/client/model/EntityGroupInfo.java @@ -164,6 +164,20 @@ public enum TypeEnum { API_KEY(EntityType.valueOf("API_KEY")), + AGENT(EntityType.valueOf("AGENT")), + + AGENT_APPLICATION(EntityType.valueOf("AGENT_APPLICATION")), + + AGENT_APP_EVENT(EntityType.valueOf("AGENT_APP_EVENT")), + + AGENT_APP_UNIT(EntityType.valueOf("AGENT_APP_UNIT")), + + AGENT_APP_PROFILE(EntityType.valueOf("AGENT_APP_PROFILE")), + + AGENT_PROFILE(EntityType.valueOf("AGENT_PROFILE")), + + AGENT_BULK_ACTION(EntityType.valueOf("AGENT_BULK_ACTION")), + BILLING_CUSTOMER(EntityType.valueOf("BILLING_CUSTOMER")), SUBSCRIPTION_PLAN(EntityType.valueOf("SUBSCRIPTION_PLAN")), diff --git a/paas/src/main/java/org/thingsboard/client/model/EntityId.java b/paas/src/main/java/org/thingsboard/client/model/EntityId.java index 786c3718..c6ab510d 100644 --- a/paas/src/main/java/org/thingsboard/client/model/EntityId.java +++ b/paas/src/main/java/org/thingsboard/client/model/EntityId.java @@ -54,6 +54,13 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "entityType", visible = true) @JsonSubTypes({ @JsonSubTypes.Type(value = AdminSettingsId.class, name = "ADMIN_SETTINGS"), + @JsonSubTypes.Type(value = AgentId.class, name = "AGENT"), + @JsonSubTypes.Type(value = AgentApplicationId.class, name = "AGENT_APPLICATION"), + @JsonSubTypes.Type(value = AgentAppEventId.class, name = "AGENT_APP_EVENT"), + @JsonSubTypes.Type(value = AgentAppProfileId.class, name = "AGENT_APP_PROFILE"), + @JsonSubTypes.Type(value = AgentAppUnitId.class, name = "AGENT_APP_UNIT"), + @JsonSubTypes.Type(value = AgentBulkActionId.class, name = "AGENT_BULK_ACTION"), + @JsonSubTypes.Type(value = AgentProfileId.class, name = "AGENT_PROFILE"), @JsonSubTypes.Type(value = AiModelId.class, name = "AI_MODEL"), @JsonSubTypes.Type(value = AlarmId.class, name = "ALARM"), @JsonSubTypes.Type(value = ApiKeyId.class, name = "API_KEY"), @@ -257,6 +264,13 @@ public String toUrlQueryString(String prefix) { // Initialize and register the discriminator mappings. Map> mappings = new HashMap>(); mappings.put("ADMIN_SETTINGS", AdminSettingsId.class); + mappings.put("AGENT", AgentId.class); + mappings.put("AGENT_APPLICATION", AgentApplicationId.class); + mappings.put("AGENT_APP_EVENT", AgentAppEventId.class); + mappings.put("AGENT_APP_PROFILE", AgentAppProfileId.class); + mappings.put("AGENT_APP_UNIT", AgentAppUnitId.class); + mappings.put("AGENT_BULK_ACTION", AgentBulkActionId.class); + mappings.put("AGENT_PROFILE", AgentProfileId.class); mappings.put("AI_MODEL", AiModelId.class); mappings.put("ALARM", AlarmId.class); mappings.put("API_KEY", ApiKeyId.class); diff --git a/paas/src/main/java/org/thingsboard/client/model/EntityType.java b/paas/src/main/java/org/thingsboard/client/model/EntityType.java index 904cb361..bead2ddc 100644 --- a/paas/src/main/java/org/thingsboard/client/model/EntityType.java +++ b/paas/src/main/java/org/thingsboard/client/model/EntityType.java @@ -124,6 +124,20 @@ public enum EntityType { API_KEY("API_KEY"), + AGENT("AGENT"), + + AGENT_APPLICATION("AGENT_APPLICATION"), + + AGENT_APP_EVENT("AGENT_APP_EVENT"), + + AGENT_APP_UNIT("AGENT_APP_UNIT"), + + AGENT_APP_PROFILE("AGENT_APP_PROFILE"), + + AGENT_PROFILE("AGENT_PROFILE"), + + AGENT_BULK_ACTION("AGENT_BULK_ACTION"), + BILLING_CUSTOMER("BILLING_CUSTOMER"), SUBSCRIPTION_PLAN("SUBSCRIPTION_PLAN"), diff --git a/paas/src/main/java/org/thingsboard/client/model/GetManagedRelatedEntityIds200ResponseInner.java b/paas/src/main/java/org/thingsboard/client/model/GetManagedRelatedEntityIds200ResponseInner.java new file mode 100644 index 00000000..6d3520eb --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/GetManagedRelatedEntityIds200ResponseInner.java @@ -0,0 +1,3503 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.AdminSettingsId; +import org.thingsboard.client.model.AgentAppEventId; +import org.thingsboard.client.model.AgentAppProfileId; +import org.thingsboard.client.model.AgentAppUnitId; +import org.thingsboard.client.model.AgentApplicationId; +import org.thingsboard.client.model.AgentBulkActionId; +import org.thingsboard.client.model.AgentId; +import org.thingsboard.client.model.AgentProfileId; +import org.thingsboard.client.model.AiModelId; +import org.thingsboard.client.model.AlarmId; +import org.thingsboard.client.model.ApiKeyId; +import org.thingsboard.client.model.ApiUsageStateId; +import org.thingsboard.client.model.AssetId; +import org.thingsboard.client.model.AssetProfileId; +import org.thingsboard.client.model.BillingCustomerId; +import org.thingsboard.client.model.BlobEntityId; +import org.thingsboard.client.model.CalculatedFieldId; +import org.thingsboard.client.model.ConverterId; +import org.thingsboard.client.model.CouponId; +import org.thingsboard.client.model.CustomerId; +import org.thingsboard.client.model.DashboardId; +import org.thingsboard.client.model.DeviceId; +import org.thingsboard.client.model.DeviceProfileId; +import org.thingsboard.client.model.DomainId; +import org.thingsboard.client.model.EdgeId; +import org.thingsboard.client.model.EntityGroupId; +import org.thingsboard.client.model.EntityType; +import org.thingsboard.client.model.EntityViewId; +import org.thingsboard.client.model.GroupPermissionId; +import org.thingsboard.client.model.IntegrationId; +import org.thingsboard.client.model.JobId; +import org.thingsboard.client.model.MobileAppBundleId; +import org.thingsboard.client.model.MobileAppId; +import org.thingsboard.client.model.NotificationId; +import org.thingsboard.client.model.NotificationRequestId; +import org.thingsboard.client.model.NotificationRuleId; +import org.thingsboard.client.model.NotificationTargetId; +import org.thingsboard.client.model.NotificationTemplateId; +import org.thingsboard.client.model.OAuth2ClientId; +import org.thingsboard.client.model.OtaPackageId; +import org.thingsboard.client.model.ProductId; +import org.thingsboard.client.model.QueueId; +import org.thingsboard.client.model.QueueStatsId; +import org.thingsboard.client.model.ReportId; +import org.thingsboard.client.model.ReportTemplateId; +import org.thingsboard.client.model.RoleId; +import org.thingsboard.client.model.RpcId; +import org.thingsboard.client.model.RuleChainId; +import org.thingsboard.client.model.RuleNodeId; +import org.thingsboard.client.model.SchedulerEventId; +import org.thingsboard.client.model.SecretId; +import org.thingsboard.client.model.SubscriptionAddonId; +import org.thingsboard.client.model.SubscriptionId; +import org.thingsboard.client.model.SubscriptionPlanId; +import org.thingsboard.client.model.TbResourceId; +import org.thingsboard.client.model.TenantId; +import org.thingsboard.client.model.TenantProfileId; +import org.thingsboard.client.model.UserId; +import org.thingsboard.client.model.WidgetTypeId; +import org.thingsboard.client.model.WidgetsBundleId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +import com.fasterxml.jackson.core.type.TypeReference; + +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import org.thingsboard.client.ApiClient; +import org.thingsboard.client.JSON; + +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonDeserialize(using = GetManagedRelatedEntityIds200ResponseInner.GetManagedRelatedEntityIds200ResponseInnerDeserializer.class) +@JsonSerialize(using = GetManagedRelatedEntityIds200ResponseInner.GetManagedRelatedEntityIds200ResponseInnerSerializer.class) +public class GetManagedRelatedEntityIds200ResponseInner extends AbstractOpenApiSchema { + private static final Logger log = Logger.getLogger(GetManagedRelatedEntityIds200ResponseInner.class.getName()); + + public static class GetManagedRelatedEntityIds200ResponseInnerSerializer extends StdSerializer { + public GetManagedRelatedEntityIds200ResponseInnerSerializer(Class t) { + super(t); + } + + public GetManagedRelatedEntityIds200ResponseInnerSerializer() { + this(null); + } + + @Override + public void serialize(GetManagedRelatedEntityIds200ResponseInner value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { + jgen.writeObject(value.getActualInstance()); + } + } + + public static class GetManagedRelatedEntityIds200ResponseInnerDeserializer extends StdDeserializer { + public GetManagedRelatedEntityIds200ResponseInnerDeserializer() { + this(GetManagedRelatedEntityIds200ResponseInner.class); + } + + public GetManagedRelatedEntityIds200ResponseInnerDeserializer(Class vc) { + super(vc); + } + + @Override + public GetManagedRelatedEntityIds200ResponseInner deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { + JsonNode tree = jp.readValueAsTree(); + Object deserialized = null; + boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); + int match = 0; + JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize AdminSettingsId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AdminSettingsId.class.equals(Integer.class) || AdminSettingsId.class.equals(Long.class) || AdminSettingsId.class.equals(Float.class) || AdminSettingsId.class.equals(Double.class) || AdminSettingsId.class.equals(Boolean.class) || AdminSettingsId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AdminSettingsId.class.equals(Integer.class) || AdminSettingsId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AdminSettingsId.class.equals(Float.class) || AdminSettingsId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AdminSettingsId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AdminSettingsId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AdminSettingsId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AdminSettingsId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AdminSettingsId'", e); + } + + // deserialize AgentAppEventId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AgentAppEventId.class.equals(Integer.class) || AgentAppEventId.class.equals(Long.class) || AgentAppEventId.class.equals(Float.class) || AgentAppEventId.class.equals(Double.class) || AgentAppEventId.class.equals(Boolean.class) || AgentAppEventId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AgentAppEventId.class.equals(Integer.class) || AgentAppEventId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AgentAppEventId.class.equals(Float.class) || AgentAppEventId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AgentAppEventId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AgentAppEventId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AgentAppEventId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AgentAppEventId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AgentAppEventId'", e); + } + + // deserialize AgentAppProfileId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AgentAppProfileId.class.equals(Integer.class) || AgentAppProfileId.class.equals(Long.class) || AgentAppProfileId.class.equals(Float.class) || AgentAppProfileId.class.equals(Double.class) || AgentAppProfileId.class.equals(Boolean.class) || AgentAppProfileId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AgentAppProfileId.class.equals(Integer.class) || AgentAppProfileId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AgentAppProfileId.class.equals(Float.class) || AgentAppProfileId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AgentAppProfileId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AgentAppProfileId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AgentAppProfileId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AgentAppProfileId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AgentAppProfileId'", e); + } + + // deserialize AgentAppUnitId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AgentAppUnitId.class.equals(Integer.class) || AgentAppUnitId.class.equals(Long.class) || AgentAppUnitId.class.equals(Float.class) || AgentAppUnitId.class.equals(Double.class) || AgentAppUnitId.class.equals(Boolean.class) || AgentAppUnitId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AgentAppUnitId.class.equals(Integer.class) || AgentAppUnitId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AgentAppUnitId.class.equals(Float.class) || AgentAppUnitId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AgentAppUnitId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AgentAppUnitId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AgentAppUnitId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AgentAppUnitId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AgentAppUnitId'", e); + } + + // deserialize AgentApplicationId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AgentApplicationId.class.equals(Integer.class) || AgentApplicationId.class.equals(Long.class) || AgentApplicationId.class.equals(Float.class) || AgentApplicationId.class.equals(Double.class) || AgentApplicationId.class.equals(Boolean.class) || AgentApplicationId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AgentApplicationId.class.equals(Integer.class) || AgentApplicationId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AgentApplicationId.class.equals(Float.class) || AgentApplicationId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AgentApplicationId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AgentApplicationId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AgentApplicationId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AgentApplicationId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AgentApplicationId'", e); + } + + // deserialize AgentBulkActionId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AgentBulkActionId.class.equals(Integer.class) || AgentBulkActionId.class.equals(Long.class) || AgentBulkActionId.class.equals(Float.class) || AgentBulkActionId.class.equals(Double.class) || AgentBulkActionId.class.equals(Boolean.class) || AgentBulkActionId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AgentBulkActionId.class.equals(Integer.class) || AgentBulkActionId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AgentBulkActionId.class.equals(Float.class) || AgentBulkActionId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AgentBulkActionId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AgentBulkActionId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AgentBulkActionId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AgentBulkActionId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AgentBulkActionId'", e); + } + + // deserialize AgentId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AgentId.class.equals(Integer.class) || AgentId.class.equals(Long.class) || AgentId.class.equals(Float.class) || AgentId.class.equals(Double.class) || AgentId.class.equals(Boolean.class) || AgentId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AgentId.class.equals(Integer.class) || AgentId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AgentId.class.equals(Float.class) || AgentId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AgentId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AgentId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AgentId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AgentId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AgentId'", e); + } + + // deserialize AgentProfileId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AgentProfileId.class.equals(Integer.class) || AgentProfileId.class.equals(Long.class) || AgentProfileId.class.equals(Float.class) || AgentProfileId.class.equals(Double.class) || AgentProfileId.class.equals(Boolean.class) || AgentProfileId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AgentProfileId.class.equals(Integer.class) || AgentProfileId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AgentProfileId.class.equals(Float.class) || AgentProfileId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AgentProfileId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AgentProfileId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AgentProfileId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AgentProfileId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AgentProfileId'", e); + } + + // deserialize AiModelId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AiModelId.class.equals(Integer.class) || AiModelId.class.equals(Long.class) || AiModelId.class.equals(Float.class) || AiModelId.class.equals(Double.class) || AiModelId.class.equals(Boolean.class) || AiModelId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AiModelId.class.equals(Integer.class) || AiModelId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AiModelId.class.equals(Float.class) || AiModelId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AiModelId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AiModelId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AiModelId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AiModelId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AiModelId'", e); + } + + // deserialize AlarmId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AlarmId.class.equals(Integer.class) || AlarmId.class.equals(Long.class) || AlarmId.class.equals(Float.class) || AlarmId.class.equals(Double.class) || AlarmId.class.equals(Boolean.class) || AlarmId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AlarmId.class.equals(Integer.class) || AlarmId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AlarmId.class.equals(Float.class) || AlarmId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AlarmId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AlarmId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AlarmId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AlarmId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AlarmId'", e); + } + + // deserialize ApiKeyId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ApiKeyId.class.equals(Integer.class) || ApiKeyId.class.equals(Long.class) || ApiKeyId.class.equals(Float.class) || ApiKeyId.class.equals(Double.class) || ApiKeyId.class.equals(Boolean.class) || ApiKeyId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ApiKeyId.class.equals(Integer.class) || ApiKeyId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ApiKeyId.class.equals(Float.class) || ApiKeyId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ApiKeyId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ApiKeyId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ApiKeyId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ApiKeyId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ApiKeyId'", e); + } + + // deserialize ApiUsageStateId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ApiUsageStateId.class.equals(Integer.class) || ApiUsageStateId.class.equals(Long.class) || ApiUsageStateId.class.equals(Float.class) || ApiUsageStateId.class.equals(Double.class) || ApiUsageStateId.class.equals(Boolean.class) || ApiUsageStateId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ApiUsageStateId.class.equals(Integer.class) || ApiUsageStateId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ApiUsageStateId.class.equals(Float.class) || ApiUsageStateId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ApiUsageStateId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ApiUsageStateId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ApiUsageStateId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ApiUsageStateId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ApiUsageStateId'", e); + } + + // deserialize AssetId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AssetId.class.equals(Integer.class) || AssetId.class.equals(Long.class) || AssetId.class.equals(Float.class) || AssetId.class.equals(Double.class) || AssetId.class.equals(Boolean.class) || AssetId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AssetId.class.equals(Integer.class) || AssetId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AssetId.class.equals(Float.class) || AssetId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AssetId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AssetId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AssetId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AssetId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AssetId'", e); + } + + // deserialize AssetProfileId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (AssetProfileId.class.equals(Integer.class) || AssetProfileId.class.equals(Long.class) || AssetProfileId.class.equals(Float.class) || AssetProfileId.class.equals(Double.class) || AssetProfileId.class.equals(Boolean.class) || AssetProfileId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((AssetProfileId.class.equals(Integer.class) || AssetProfileId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((AssetProfileId.class.equals(Float.class) || AssetProfileId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (AssetProfileId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (AssetProfileId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(AssetProfileId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'AssetProfileId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'AssetProfileId'", e); + } + + // deserialize BillingCustomerId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (BillingCustomerId.class.equals(Integer.class) || BillingCustomerId.class.equals(Long.class) || BillingCustomerId.class.equals(Float.class) || BillingCustomerId.class.equals(Double.class) || BillingCustomerId.class.equals(Boolean.class) || BillingCustomerId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((BillingCustomerId.class.equals(Integer.class) || BillingCustomerId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((BillingCustomerId.class.equals(Float.class) || BillingCustomerId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (BillingCustomerId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (BillingCustomerId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(BillingCustomerId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'BillingCustomerId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'BillingCustomerId'", e); + } + + // deserialize BlobEntityId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (BlobEntityId.class.equals(Integer.class) || BlobEntityId.class.equals(Long.class) || BlobEntityId.class.equals(Float.class) || BlobEntityId.class.equals(Double.class) || BlobEntityId.class.equals(Boolean.class) || BlobEntityId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((BlobEntityId.class.equals(Integer.class) || BlobEntityId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((BlobEntityId.class.equals(Float.class) || BlobEntityId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (BlobEntityId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (BlobEntityId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(BlobEntityId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'BlobEntityId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'BlobEntityId'", e); + } + + // deserialize CalculatedFieldId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (CalculatedFieldId.class.equals(Integer.class) || CalculatedFieldId.class.equals(Long.class) || CalculatedFieldId.class.equals(Float.class) || CalculatedFieldId.class.equals(Double.class) || CalculatedFieldId.class.equals(Boolean.class) || CalculatedFieldId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((CalculatedFieldId.class.equals(Integer.class) || CalculatedFieldId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((CalculatedFieldId.class.equals(Float.class) || CalculatedFieldId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (CalculatedFieldId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (CalculatedFieldId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(CalculatedFieldId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'CalculatedFieldId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'CalculatedFieldId'", e); + } + + // deserialize ConverterId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ConverterId.class.equals(Integer.class) || ConverterId.class.equals(Long.class) || ConverterId.class.equals(Float.class) || ConverterId.class.equals(Double.class) || ConverterId.class.equals(Boolean.class) || ConverterId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ConverterId.class.equals(Integer.class) || ConverterId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ConverterId.class.equals(Float.class) || ConverterId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ConverterId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ConverterId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ConverterId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ConverterId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ConverterId'", e); + } + + // deserialize CouponId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (CouponId.class.equals(Integer.class) || CouponId.class.equals(Long.class) || CouponId.class.equals(Float.class) || CouponId.class.equals(Double.class) || CouponId.class.equals(Boolean.class) || CouponId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((CouponId.class.equals(Integer.class) || CouponId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((CouponId.class.equals(Float.class) || CouponId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (CouponId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (CouponId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(CouponId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'CouponId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'CouponId'", e); + } + + // deserialize CustomerId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (CustomerId.class.equals(Integer.class) || CustomerId.class.equals(Long.class) || CustomerId.class.equals(Float.class) || CustomerId.class.equals(Double.class) || CustomerId.class.equals(Boolean.class) || CustomerId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((CustomerId.class.equals(Integer.class) || CustomerId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((CustomerId.class.equals(Float.class) || CustomerId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (CustomerId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (CustomerId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(CustomerId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'CustomerId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'CustomerId'", e); + } + + // deserialize DashboardId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (DashboardId.class.equals(Integer.class) || DashboardId.class.equals(Long.class) || DashboardId.class.equals(Float.class) || DashboardId.class.equals(Double.class) || DashboardId.class.equals(Boolean.class) || DashboardId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((DashboardId.class.equals(Integer.class) || DashboardId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((DashboardId.class.equals(Float.class) || DashboardId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (DashboardId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (DashboardId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(DashboardId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'DashboardId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'DashboardId'", e); + } + + // deserialize DeviceId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (DeviceId.class.equals(Integer.class) || DeviceId.class.equals(Long.class) || DeviceId.class.equals(Float.class) || DeviceId.class.equals(Double.class) || DeviceId.class.equals(Boolean.class) || DeviceId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((DeviceId.class.equals(Integer.class) || DeviceId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((DeviceId.class.equals(Float.class) || DeviceId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (DeviceId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (DeviceId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(DeviceId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'DeviceId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'DeviceId'", e); + } + + // deserialize DeviceProfileId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (DeviceProfileId.class.equals(Integer.class) || DeviceProfileId.class.equals(Long.class) || DeviceProfileId.class.equals(Float.class) || DeviceProfileId.class.equals(Double.class) || DeviceProfileId.class.equals(Boolean.class) || DeviceProfileId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((DeviceProfileId.class.equals(Integer.class) || DeviceProfileId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((DeviceProfileId.class.equals(Float.class) || DeviceProfileId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (DeviceProfileId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (DeviceProfileId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(DeviceProfileId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'DeviceProfileId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'DeviceProfileId'", e); + } + + // deserialize DomainId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (DomainId.class.equals(Integer.class) || DomainId.class.equals(Long.class) || DomainId.class.equals(Float.class) || DomainId.class.equals(Double.class) || DomainId.class.equals(Boolean.class) || DomainId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((DomainId.class.equals(Integer.class) || DomainId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((DomainId.class.equals(Float.class) || DomainId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (DomainId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (DomainId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(DomainId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'DomainId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'DomainId'", e); + } + + // deserialize EdgeId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (EdgeId.class.equals(Integer.class) || EdgeId.class.equals(Long.class) || EdgeId.class.equals(Float.class) || EdgeId.class.equals(Double.class) || EdgeId.class.equals(Boolean.class) || EdgeId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((EdgeId.class.equals(Integer.class) || EdgeId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((EdgeId.class.equals(Float.class) || EdgeId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (EdgeId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (EdgeId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(EdgeId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'EdgeId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'EdgeId'", e); + } + + // deserialize EntityGroupId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (EntityGroupId.class.equals(Integer.class) || EntityGroupId.class.equals(Long.class) || EntityGroupId.class.equals(Float.class) || EntityGroupId.class.equals(Double.class) || EntityGroupId.class.equals(Boolean.class) || EntityGroupId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((EntityGroupId.class.equals(Integer.class) || EntityGroupId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((EntityGroupId.class.equals(Float.class) || EntityGroupId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (EntityGroupId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (EntityGroupId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(EntityGroupId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'EntityGroupId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'EntityGroupId'", e); + } + + // deserialize EntityViewId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (EntityViewId.class.equals(Integer.class) || EntityViewId.class.equals(Long.class) || EntityViewId.class.equals(Float.class) || EntityViewId.class.equals(Double.class) || EntityViewId.class.equals(Boolean.class) || EntityViewId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((EntityViewId.class.equals(Integer.class) || EntityViewId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((EntityViewId.class.equals(Float.class) || EntityViewId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (EntityViewId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (EntityViewId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(EntityViewId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'EntityViewId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'EntityViewId'", e); + } + + // deserialize GroupPermissionId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (GroupPermissionId.class.equals(Integer.class) || GroupPermissionId.class.equals(Long.class) || GroupPermissionId.class.equals(Float.class) || GroupPermissionId.class.equals(Double.class) || GroupPermissionId.class.equals(Boolean.class) || GroupPermissionId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((GroupPermissionId.class.equals(Integer.class) || GroupPermissionId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((GroupPermissionId.class.equals(Float.class) || GroupPermissionId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (GroupPermissionId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (GroupPermissionId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(GroupPermissionId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'GroupPermissionId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'GroupPermissionId'", e); + } + + // deserialize IntegrationId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (IntegrationId.class.equals(Integer.class) || IntegrationId.class.equals(Long.class) || IntegrationId.class.equals(Float.class) || IntegrationId.class.equals(Double.class) || IntegrationId.class.equals(Boolean.class) || IntegrationId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((IntegrationId.class.equals(Integer.class) || IntegrationId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((IntegrationId.class.equals(Float.class) || IntegrationId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (IntegrationId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (IntegrationId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(IntegrationId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'IntegrationId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'IntegrationId'", e); + } + + // deserialize JobId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (JobId.class.equals(Integer.class) || JobId.class.equals(Long.class) || JobId.class.equals(Float.class) || JobId.class.equals(Double.class) || JobId.class.equals(Boolean.class) || JobId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((JobId.class.equals(Integer.class) || JobId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((JobId.class.equals(Float.class) || JobId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (JobId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (JobId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(JobId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'JobId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'JobId'", e); + } + + // deserialize MobileAppBundleId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (MobileAppBundleId.class.equals(Integer.class) || MobileAppBundleId.class.equals(Long.class) || MobileAppBundleId.class.equals(Float.class) || MobileAppBundleId.class.equals(Double.class) || MobileAppBundleId.class.equals(Boolean.class) || MobileAppBundleId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((MobileAppBundleId.class.equals(Integer.class) || MobileAppBundleId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((MobileAppBundleId.class.equals(Float.class) || MobileAppBundleId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (MobileAppBundleId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (MobileAppBundleId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(MobileAppBundleId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'MobileAppBundleId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'MobileAppBundleId'", e); + } + + // deserialize MobileAppId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (MobileAppId.class.equals(Integer.class) || MobileAppId.class.equals(Long.class) || MobileAppId.class.equals(Float.class) || MobileAppId.class.equals(Double.class) || MobileAppId.class.equals(Boolean.class) || MobileAppId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((MobileAppId.class.equals(Integer.class) || MobileAppId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((MobileAppId.class.equals(Float.class) || MobileAppId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (MobileAppId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (MobileAppId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(MobileAppId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'MobileAppId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'MobileAppId'", e); + } + + // deserialize NotificationId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (NotificationId.class.equals(Integer.class) || NotificationId.class.equals(Long.class) || NotificationId.class.equals(Float.class) || NotificationId.class.equals(Double.class) || NotificationId.class.equals(Boolean.class) || NotificationId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((NotificationId.class.equals(Integer.class) || NotificationId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((NotificationId.class.equals(Float.class) || NotificationId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (NotificationId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (NotificationId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(NotificationId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'NotificationId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'NotificationId'", e); + } + + // deserialize NotificationRequestId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (NotificationRequestId.class.equals(Integer.class) || NotificationRequestId.class.equals(Long.class) || NotificationRequestId.class.equals(Float.class) || NotificationRequestId.class.equals(Double.class) || NotificationRequestId.class.equals(Boolean.class) || NotificationRequestId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((NotificationRequestId.class.equals(Integer.class) || NotificationRequestId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((NotificationRequestId.class.equals(Float.class) || NotificationRequestId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (NotificationRequestId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (NotificationRequestId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(NotificationRequestId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'NotificationRequestId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'NotificationRequestId'", e); + } + + // deserialize NotificationRuleId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (NotificationRuleId.class.equals(Integer.class) || NotificationRuleId.class.equals(Long.class) || NotificationRuleId.class.equals(Float.class) || NotificationRuleId.class.equals(Double.class) || NotificationRuleId.class.equals(Boolean.class) || NotificationRuleId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((NotificationRuleId.class.equals(Integer.class) || NotificationRuleId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((NotificationRuleId.class.equals(Float.class) || NotificationRuleId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (NotificationRuleId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (NotificationRuleId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(NotificationRuleId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'NotificationRuleId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'NotificationRuleId'", e); + } + + // deserialize NotificationTargetId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (NotificationTargetId.class.equals(Integer.class) || NotificationTargetId.class.equals(Long.class) || NotificationTargetId.class.equals(Float.class) || NotificationTargetId.class.equals(Double.class) || NotificationTargetId.class.equals(Boolean.class) || NotificationTargetId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((NotificationTargetId.class.equals(Integer.class) || NotificationTargetId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((NotificationTargetId.class.equals(Float.class) || NotificationTargetId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (NotificationTargetId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (NotificationTargetId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(NotificationTargetId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'NotificationTargetId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'NotificationTargetId'", e); + } + + // deserialize NotificationTemplateId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (NotificationTemplateId.class.equals(Integer.class) || NotificationTemplateId.class.equals(Long.class) || NotificationTemplateId.class.equals(Float.class) || NotificationTemplateId.class.equals(Double.class) || NotificationTemplateId.class.equals(Boolean.class) || NotificationTemplateId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((NotificationTemplateId.class.equals(Integer.class) || NotificationTemplateId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((NotificationTemplateId.class.equals(Float.class) || NotificationTemplateId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (NotificationTemplateId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (NotificationTemplateId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(NotificationTemplateId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'NotificationTemplateId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'NotificationTemplateId'", e); + } + + // deserialize OAuth2ClientId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (OAuth2ClientId.class.equals(Integer.class) || OAuth2ClientId.class.equals(Long.class) || OAuth2ClientId.class.equals(Float.class) || OAuth2ClientId.class.equals(Double.class) || OAuth2ClientId.class.equals(Boolean.class) || OAuth2ClientId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((OAuth2ClientId.class.equals(Integer.class) || OAuth2ClientId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((OAuth2ClientId.class.equals(Float.class) || OAuth2ClientId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (OAuth2ClientId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (OAuth2ClientId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(OAuth2ClientId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'OAuth2ClientId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'OAuth2ClientId'", e); + } + + // deserialize OtaPackageId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (OtaPackageId.class.equals(Integer.class) || OtaPackageId.class.equals(Long.class) || OtaPackageId.class.equals(Float.class) || OtaPackageId.class.equals(Double.class) || OtaPackageId.class.equals(Boolean.class) || OtaPackageId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((OtaPackageId.class.equals(Integer.class) || OtaPackageId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((OtaPackageId.class.equals(Float.class) || OtaPackageId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (OtaPackageId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (OtaPackageId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(OtaPackageId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'OtaPackageId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'OtaPackageId'", e); + } + + // deserialize ProductId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ProductId.class.equals(Integer.class) || ProductId.class.equals(Long.class) || ProductId.class.equals(Float.class) || ProductId.class.equals(Double.class) || ProductId.class.equals(Boolean.class) || ProductId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ProductId.class.equals(Integer.class) || ProductId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ProductId.class.equals(Float.class) || ProductId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ProductId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ProductId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ProductId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ProductId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ProductId'", e); + } + + // deserialize QueueId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (QueueId.class.equals(Integer.class) || QueueId.class.equals(Long.class) || QueueId.class.equals(Float.class) || QueueId.class.equals(Double.class) || QueueId.class.equals(Boolean.class) || QueueId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((QueueId.class.equals(Integer.class) || QueueId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((QueueId.class.equals(Float.class) || QueueId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (QueueId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (QueueId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(QueueId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'QueueId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'QueueId'", e); + } + + // deserialize QueueStatsId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (QueueStatsId.class.equals(Integer.class) || QueueStatsId.class.equals(Long.class) || QueueStatsId.class.equals(Float.class) || QueueStatsId.class.equals(Double.class) || QueueStatsId.class.equals(Boolean.class) || QueueStatsId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((QueueStatsId.class.equals(Integer.class) || QueueStatsId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((QueueStatsId.class.equals(Float.class) || QueueStatsId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (QueueStatsId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (QueueStatsId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(QueueStatsId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'QueueStatsId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'QueueStatsId'", e); + } + + // deserialize ReportId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ReportId.class.equals(Integer.class) || ReportId.class.equals(Long.class) || ReportId.class.equals(Float.class) || ReportId.class.equals(Double.class) || ReportId.class.equals(Boolean.class) || ReportId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ReportId.class.equals(Integer.class) || ReportId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ReportId.class.equals(Float.class) || ReportId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ReportId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ReportId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ReportId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ReportId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ReportId'", e); + } + + // deserialize ReportTemplateId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ReportTemplateId.class.equals(Integer.class) || ReportTemplateId.class.equals(Long.class) || ReportTemplateId.class.equals(Float.class) || ReportTemplateId.class.equals(Double.class) || ReportTemplateId.class.equals(Boolean.class) || ReportTemplateId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((ReportTemplateId.class.equals(Integer.class) || ReportTemplateId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((ReportTemplateId.class.equals(Float.class) || ReportTemplateId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (ReportTemplateId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (ReportTemplateId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(ReportTemplateId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'ReportTemplateId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'ReportTemplateId'", e); + } + + // deserialize RoleId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (RoleId.class.equals(Integer.class) || RoleId.class.equals(Long.class) || RoleId.class.equals(Float.class) || RoleId.class.equals(Double.class) || RoleId.class.equals(Boolean.class) || RoleId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((RoleId.class.equals(Integer.class) || RoleId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((RoleId.class.equals(Float.class) || RoleId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (RoleId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (RoleId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(RoleId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'RoleId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'RoleId'", e); + } + + // deserialize RpcId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (RpcId.class.equals(Integer.class) || RpcId.class.equals(Long.class) || RpcId.class.equals(Float.class) || RpcId.class.equals(Double.class) || RpcId.class.equals(Boolean.class) || RpcId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((RpcId.class.equals(Integer.class) || RpcId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((RpcId.class.equals(Float.class) || RpcId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (RpcId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (RpcId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(RpcId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'RpcId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'RpcId'", e); + } + + // deserialize RuleChainId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (RuleChainId.class.equals(Integer.class) || RuleChainId.class.equals(Long.class) || RuleChainId.class.equals(Float.class) || RuleChainId.class.equals(Double.class) || RuleChainId.class.equals(Boolean.class) || RuleChainId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((RuleChainId.class.equals(Integer.class) || RuleChainId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((RuleChainId.class.equals(Float.class) || RuleChainId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (RuleChainId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (RuleChainId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(RuleChainId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'RuleChainId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'RuleChainId'", e); + } + + // deserialize RuleNodeId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (RuleNodeId.class.equals(Integer.class) || RuleNodeId.class.equals(Long.class) || RuleNodeId.class.equals(Float.class) || RuleNodeId.class.equals(Double.class) || RuleNodeId.class.equals(Boolean.class) || RuleNodeId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((RuleNodeId.class.equals(Integer.class) || RuleNodeId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((RuleNodeId.class.equals(Float.class) || RuleNodeId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (RuleNodeId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (RuleNodeId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(RuleNodeId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'RuleNodeId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'RuleNodeId'", e); + } + + // deserialize SchedulerEventId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (SchedulerEventId.class.equals(Integer.class) || SchedulerEventId.class.equals(Long.class) || SchedulerEventId.class.equals(Float.class) || SchedulerEventId.class.equals(Double.class) || SchedulerEventId.class.equals(Boolean.class) || SchedulerEventId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((SchedulerEventId.class.equals(Integer.class) || SchedulerEventId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((SchedulerEventId.class.equals(Float.class) || SchedulerEventId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (SchedulerEventId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (SchedulerEventId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(SchedulerEventId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'SchedulerEventId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'SchedulerEventId'", e); + } + + // deserialize SecretId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (SecretId.class.equals(Integer.class) || SecretId.class.equals(Long.class) || SecretId.class.equals(Float.class) || SecretId.class.equals(Double.class) || SecretId.class.equals(Boolean.class) || SecretId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((SecretId.class.equals(Integer.class) || SecretId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((SecretId.class.equals(Float.class) || SecretId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (SecretId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (SecretId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(SecretId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'SecretId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'SecretId'", e); + } + + // deserialize SubscriptionAddonId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (SubscriptionAddonId.class.equals(Integer.class) || SubscriptionAddonId.class.equals(Long.class) || SubscriptionAddonId.class.equals(Float.class) || SubscriptionAddonId.class.equals(Double.class) || SubscriptionAddonId.class.equals(Boolean.class) || SubscriptionAddonId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((SubscriptionAddonId.class.equals(Integer.class) || SubscriptionAddonId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((SubscriptionAddonId.class.equals(Float.class) || SubscriptionAddonId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (SubscriptionAddonId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (SubscriptionAddonId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(SubscriptionAddonId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'SubscriptionAddonId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'SubscriptionAddonId'", e); + } + + // deserialize SubscriptionId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (SubscriptionId.class.equals(Integer.class) || SubscriptionId.class.equals(Long.class) || SubscriptionId.class.equals(Float.class) || SubscriptionId.class.equals(Double.class) || SubscriptionId.class.equals(Boolean.class) || SubscriptionId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((SubscriptionId.class.equals(Integer.class) || SubscriptionId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((SubscriptionId.class.equals(Float.class) || SubscriptionId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (SubscriptionId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (SubscriptionId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(SubscriptionId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'SubscriptionId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'SubscriptionId'", e); + } + + // deserialize SubscriptionPlanId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (SubscriptionPlanId.class.equals(Integer.class) || SubscriptionPlanId.class.equals(Long.class) || SubscriptionPlanId.class.equals(Float.class) || SubscriptionPlanId.class.equals(Double.class) || SubscriptionPlanId.class.equals(Boolean.class) || SubscriptionPlanId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((SubscriptionPlanId.class.equals(Integer.class) || SubscriptionPlanId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((SubscriptionPlanId.class.equals(Float.class) || SubscriptionPlanId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (SubscriptionPlanId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (SubscriptionPlanId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(SubscriptionPlanId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'SubscriptionPlanId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'SubscriptionPlanId'", e); + } + + // deserialize TbResourceId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (TbResourceId.class.equals(Integer.class) || TbResourceId.class.equals(Long.class) || TbResourceId.class.equals(Float.class) || TbResourceId.class.equals(Double.class) || TbResourceId.class.equals(Boolean.class) || TbResourceId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((TbResourceId.class.equals(Integer.class) || TbResourceId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((TbResourceId.class.equals(Float.class) || TbResourceId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (TbResourceId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (TbResourceId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(TbResourceId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'TbResourceId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'TbResourceId'", e); + } + + // deserialize TenantId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (TenantId.class.equals(Integer.class) || TenantId.class.equals(Long.class) || TenantId.class.equals(Float.class) || TenantId.class.equals(Double.class) || TenantId.class.equals(Boolean.class) || TenantId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((TenantId.class.equals(Integer.class) || TenantId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((TenantId.class.equals(Float.class) || TenantId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (TenantId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (TenantId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(TenantId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'TenantId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'TenantId'", e); + } + + // deserialize TenantProfileId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (TenantProfileId.class.equals(Integer.class) || TenantProfileId.class.equals(Long.class) || TenantProfileId.class.equals(Float.class) || TenantProfileId.class.equals(Double.class) || TenantProfileId.class.equals(Boolean.class) || TenantProfileId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((TenantProfileId.class.equals(Integer.class) || TenantProfileId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((TenantProfileId.class.equals(Float.class) || TenantProfileId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (TenantProfileId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (TenantProfileId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(TenantProfileId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'TenantProfileId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'TenantProfileId'", e); + } + + // deserialize UserId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (UserId.class.equals(Integer.class) || UserId.class.equals(Long.class) || UserId.class.equals(Float.class) || UserId.class.equals(Double.class) || UserId.class.equals(Boolean.class) || UserId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((UserId.class.equals(Integer.class) || UserId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((UserId.class.equals(Float.class) || UserId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (UserId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (UserId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(UserId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'UserId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'UserId'", e); + } + + // deserialize WidgetTypeId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (WidgetTypeId.class.equals(Integer.class) || WidgetTypeId.class.equals(Long.class) || WidgetTypeId.class.equals(Float.class) || WidgetTypeId.class.equals(Double.class) || WidgetTypeId.class.equals(Boolean.class) || WidgetTypeId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((WidgetTypeId.class.equals(Integer.class) || WidgetTypeId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((WidgetTypeId.class.equals(Float.class) || WidgetTypeId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (WidgetTypeId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (WidgetTypeId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(WidgetTypeId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'WidgetTypeId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'WidgetTypeId'", e); + } + + // deserialize WidgetsBundleId + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (WidgetsBundleId.class.equals(Integer.class) || WidgetsBundleId.class.equals(Long.class) || WidgetsBundleId.class.equals(Float.class) || WidgetsBundleId.class.equals(Double.class) || WidgetsBundleId.class.equals(Boolean.class) || WidgetsBundleId.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= ((WidgetsBundleId.class.equals(Integer.class) || WidgetsBundleId.class.equals(Long.class)) && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= ((WidgetsBundleId.class.equals(Float.class) || WidgetsBundleId.class.equals(Double.class)) && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= (WidgetsBundleId.class.equals(Boolean.class) && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= (WidgetsBundleId.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(WidgetsBundleId.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'WidgetsBundleId'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'WidgetsBundleId'", e); + } + + if (match == 1) { + GetManagedRelatedEntityIds200ResponseInner ret = new GetManagedRelatedEntityIds200ResponseInner(); + ret.setActualInstance(deserialized); + return ret; + } + throw new IOException(String.format(java.util.Locale.ROOT, "Failed deserialization for GetManagedRelatedEntityIds200ResponseInner: %d classes match result, expected 1", match)); + } + + /** + * Handle deserialization of the 'null' value. + */ + @Override + public GetManagedRelatedEntityIds200ResponseInner getNullValue(DeserializationContext ctxt) throws JsonMappingException { + throw new JsonMappingException(ctxt.getParser(), "GetManagedRelatedEntityIds200ResponseInner cannot be null"); + } + } + + // store a list of schema names defined in oneOf + public static final Map> schemas = new HashMap<>(); + + public GetManagedRelatedEntityIds200ResponseInner() { + super("oneOf", Boolean.FALSE); + } + + public GetManagedRelatedEntityIds200ResponseInner(AdminSettingsId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(AgentAppEventId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(AgentAppProfileId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(AgentAppUnitId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(AgentApplicationId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(AgentBulkActionId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(AgentId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(AgentProfileId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(AiModelId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(AlarmId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(ApiKeyId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(ApiUsageStateId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(AssetId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(AssetProfileId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(BillingCustomerId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(BlobEntityId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(CalculatedFieldId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(ConverterId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(CouponId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(CustomerId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(DashboardId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(DeviceId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(DeviceProfileId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(DomainId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(EdgeId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(EntityGroupId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(EntityViewId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(GroupPermissionId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(IntegrationId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(JobId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(MobileAppBundleId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(MobileAppId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(NotificationId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(NotificationRequestId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(NotificationRuleId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(NotificationTargetId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(NotificationTemplateId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(OAuth2ClientId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(OtaPackageId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(ProductId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(QueueId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(QueueStatsId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(ReportId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(ReportTemplateId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(RoleId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(RpcId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(RuleChainId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(RuleNodeId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(SchedulerEventId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(SecretId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(SubscriptionAddonId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(SubscriptionId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(SubscriptionPlanId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(TbResourceId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(TenantId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(TenantProfileId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(UserId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(WidgetTypeId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public GetManagedRelatedEntityIds200ResponseInner(WidgetsBundleId o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + static { + schemas.put("AdminSettingsId", AdminSettingsId.class); + schemas.put("AgentAppEventId", AgentAppEventId.class); + schemas.put("AgentAppProfileId", AgentAppProfileId.class); + schemas.put("AgentAppUnitId", AgentAppUnitId.class); + schemas.put("AgentApplicationId", AgentApplicationId.class); + schemas.put("AgentBulkActionId", AgentBulkActionId.class); + schemas.put("AgentId", AgentId.class); + schemas.put("AgentProfileId", AgentProfileId.class); + schemas.put("AiModelId", AiModelId.class); + schemas.put("AlarmId", AlarmId.class); + schemas.put("ApiKeyId", ApiKeyId.class); + schemas.put("ApiUsageStateId", ApiUsageStateId.class); + schemas.put("AssetId", AssetId.class); + schemas.put("AssetProfileId", AssetProfileId.class); + schemas.put("BillingCustomerId", BillingCustomerId.class); + schemas.put("BlobEntityId", BlobEntityId.class); + schemas.put("CalculatedFieldId", CalculatedFieldId.class); + schemas.put("ConverterId", ConverterId.class); + schemas.put("CouponId", CouponId.class); + schemas.put("CustomerId", CustomerId.class); + schemas.put("DashboardId", DashboardId.class); + schemas.put("DeviceId", DeviceId.class); + schemas.put("DeviceProfileId", DeviceProfileId.class); + schemas.put("DomainId", DomainId.class); + schemas.put("EdgeId", EdgeId.class); + schemas.put("EntityGroupId", EntityGroupId.class); + schemas.put("EntityViewId", EntityViewId.class); + schemas.put("GroupPermissionId", GroupPermissionId.class); + schemas.put("IntegrationId", IntegrationId.class); + schemas.put("JobId", JobId.class); + schemas.put("MobileAppBundleId", MobileAppBundleId.class); + schemas.put("MobileAppId", MobileAppId.class); + schemas.put("NotificationId", NotificationId.class); + schemas.put("NotificationRequestId", NotificationRequestId.class); + schemas.put("NotificationRuleId", NotificationRuleId.class); + schemas.put("NotificationTargetId", NotificationTargetId.class); + schemas.put("NotificationTemplateId", NotificationTemplateId.class); + schemas.put("OAuth2ClientId", OAuth2ClientId.class); + schemas.put("OtaPackageId", OtaPackageId.class); + schemas.put("ProductId", ProductId.class); + schemas.put("QueueId", QueueId.class); + schemas.put("QueueStatsId", QueueStatsId.class); + schemas.put("ReportId", ReportId.class); + schemas.put("ReportTemplateId", ReportTemplateId.class); + schemas.put("RoleId", RoleId.class); + schemas.put("RpcId", RpcId.class); + schemas.put("RuleChainId", RuleChainId.class); + schemas.put("RuleNodeId", RuleNodeId.class); + schemas.put("SchedulerEventId", SchedulerEventId.class); + schemas.put("SecretId", SecretId.class); + schemas.put("SubscriptionAddonId", SubscriptionAddonId.class); + schemas.put("SubscriptionId", SubscriptionId.class); + schemas.put("SubscriptionPlanId", SubscriptionPlanId.class); + schemas.put("TbResourceId", TbResourceId.class); + schemas.put("TenantId", TenantId.class); + schemas.put("TenantProfileId", TenantProfileId.class); + schemas.put("UserId", UserId.class); + schemas.put("WidgetTypeId", WidgetTypeId.class); + schemas.put("WidgetsBundleId", WidgetsBundleId.class); + JSON.registerDescendants(GetManagedRelatedEntityIds200ResponseInner.class, Collections.unmodifiableMap(schemas)); + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("ADMIN_SETTINGS", AdminSettingsId.class); + mappings.put("AGENT", AgentId.class); + mappings.put("AGENT_APPLICATION", AgentApplicationId.class); + mappings.put("AGENT_APP_EVENT", AgentAppEventId.class); + mappings.put("AGENT_APP_PROFILE", AgentAppProfileId.class); + mappings.put("AGENT_APP_UNIT", AgentAppUnitId.class); + mappings.put("AGENT_BULK_ACTION", AgentBulkActionId.class); + mappings.put("AGENT_PROFILE", AgentProfileId.class); + mappings.put("AI_MODEL", AiModelId.class); + mappings.put("ALARM", AlarmId.class); + mappings.put("API_KEY", ApiKeyId.class); + mappings.put("API_USAGE_STATE", ApiUsageStateId.class); + mappings.put("ASSET", AssetId.class); + mappings.put("ASSET_PROFILE", AssetProfileId.class); + mappings.put("BILLING_CUSTOMER", BillingCustomerId.class); + mappings.put("BLOB_ENTITY", BlobEntityId.class); + mappings.put("CALCULATED_FIELD", CalculatedFieldId.class); + mappings.put("CONVERTER", ConverterId.class); + mappings.put("COUPON", CouponId.class); + mappings.put("CUSTOMER", CustomerId.class); + mappings.put("DASHBOARD", DashboardId.class); + mappings.put("DEVICE", DeviceId.class); + mappings.put("DEVICE_PROFILE", DeviceProfileId.class); + mappings.put("DOMAIN", DomainId.class); + mappings.put("EDGE", EdgeId.class); + mappings.put("ENTITY_GROUP", EntityGroupId.class); + mappings.put("ENTITY_VIEW", EntityViewId.class); + mappings.put("GROUP_PERMISSION", GroupPermissionId.class); + mappings.put("INTEGRATION", IntegrationId.class); + mappings.put("JOB", JobId.class); + mappings.put("MOBILE_APP", MobileAppId.class); + mappings.put("MOBILE_APP_BUNDLE", MobileAppBundleId.class); + mappings.put("NOTIFICATION", NotificationId.class); + mappings.put("NOTIFICATION_REQUEST", NotificationRequestId.class); + mappings.put("NOTIFICATION_RULE", NotificationRuleId.class); + mappings.put("NOTIFICATION_TARGET", NotificationTargetId.class); + mappings.put("NOTIFICATION_TEMPLATE", NotificationTemplateId.class); + mappings.put("OAUTH2_CLIENT", OAuth2ClientId.class); + mappings.put("OTA_PACKAGE", OtaPackageId.class); + mappings.put("PRODUCT", ProductId.class); + mappings.put("QUEUE", QueueId.class); + mappings.put("QUEUE_STATS", QueueStatsId.class); + mappings.put("REPORT", ReportId.class); + mappings.put("REPORT_TEMPLATE", ReportTemplateId.class); + mappings.put("ROLE", RoleId.class); + mappings.put("RPC", RpcId.class); + mappings.put("RULE_CHAIN", RuleChainId.class); + mappings.put("RULE_NODE", RuleNodeId.class); + mappings.put("SCHEDULER_EVENT", SchedulerEventId.class); + mappings.put("SECRET", SecretId.class); + mappings.put("SUBSCRIPTION", SubscriptionId.class); + mappings.put("SUBSCRIPTION_ADDON", SubscriptionAddonId.class); + mappings.put("SUBSCRIPTION_PLAN", SubscriptionPlanId.class); + mappings.put("TB_RESOURCE", TbResourceId.class); + mappings.put("TENANT", TenantId.class); + mappings.put("TENANT_PROFILE", TenantProfileId.class); + mappings.put("USER", UserId.class); + mappings.put("WIDGETS_BUNDLE", WidgetsBundleId.class); + mappings.put("WIDGET_TYPE", WidgetTypeId.class); + mappings.put("getManagedRelatedEntityIds_200_response_inner", GetManagedRelatedEntityIds200ResponseInner.class); + JSON.registerDiscriminator(GetManagedRelatedEntityIds200ResponseInner.class, "entityType", mappings); + } + + @Override + public Map> getSchemas() { + return GetManagedRelatedEntityIds200ResponseInner.schemas; + } + + /** + * Set the instance that matches the oneOf child schema, check + * the instance parameter is valid against the oneOf child schemas: + * AdminSettingsId, AgentAppEventId, AgentAppProfileId, AgentAppUnitId, AgentApplicationId, AgentBulkActionId, AgentId, AgentProfileId, AiModelId, AlarmId, ApiKeyId, ApiUsageStateId, AssetId, AssetProfileId, BillingCustomerId, BlobEntityId, CalculatedFieldId, ConverterId, CouponId, CustomerId, DashboardId, DeviceId, DeviceProfileId, DomainId, EdgeId, EntityGroupId, EntityViewId, GroupPermissionId, IntegrationId, JobId, MobileAppBundleId, MobileAppId, NotificationId, NotificationRequestId, NotificationRuleId, NotificationTargetId, NotificationTemplateId, OAuth2ClientId, OtaPackageId, ProductId, QueueId, QueueStatsId, ReportId, ReportTemplateId, RoleId, RpcId, RuleChainId, RuleNodeId, SchedulerEventId, SecretId, SubscriptionAddonId, SubscriptionId, SubscriptionPlanId, TbResourceId, TenantId, TenantProfileId, UserId, WidgetTypeId, WidgetsBundleId + * + * It could be an instance of the 'oneOf' schemas. + * The oneOf child schemas may themselves be a composed schema (allOf, anyOf, oneOf). + */ + @Override + public void setActualInstance(Object instance) { + if (JSON.isInstanceOf(AdminSettingsId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(AgentAppEventId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(AgentAppProfileId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(AgentAppUnitId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(AgentApplicationId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(AgentBulkActionId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(AgentId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(AgentProfileId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(AiModelId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(AlarmId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ApiKeyId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ApiUsageStateId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(AssetId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(AssetProfileId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(BillingCustomerId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(BlobEntityId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(CalculatedFieldId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ConverterId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(CouponId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(CustomerId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(DashboardId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(DeviceId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(DeviceProfileId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(DomainId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(EdgeId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(EntityGroupId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(EntityViewId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(GroupPermissionId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(IntegrationId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(JobId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(MobileAppBundleId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(MobileAppId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(NotificationId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(NotificationRequestId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(NotificationRuleId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(NotificationTargetId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(NotificationTemplateId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(OAuth2ClientId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(OtaPackageId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ProductId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(QueueId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(QueueStatsId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ReportId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(ReportTemplateId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(RoleId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(RpcId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(RuleChainId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(RuleNodeId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(SchedulerEventId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(SecretId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(SubscriptionAddonId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(SubscriptionId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(SubscriptionPlanId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(TbResourceId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(TenantId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(TenantProfileId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(UserId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(WidgetTypeId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(WidgetsBundleId.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + throw new RuntimeException("Invalid instance type. Must be AdminSettingsId, AgentAppEventId, AgentAppProfileId, AgentAppUnitId, AgentApplicationId, AgentBulkActionId, AgentId, AgentProfileId, AiModelId, AlarmId, ApiKeyId, ApiUsageStateId, AssetId, AssetProfileId, BillingCustomerId, BlobEntityId, CalculatedFieldId, ConverterId, CouponId, CustomerId, DashboardId, DeviceId, DeviceProfileId, DomainId, EdgeId, EntityGroupId, EntityViewId, GroupPermissionId, IntegrationId, JobId, MobileAppBundleId, MobileAppId, NotificationId, NotificationRequestId, NotificationRuleId, NotificationTargetId, NotificationTemplateId, OAuth2ClientId, OtaPackageId, ProductId, QueueId, QueueStatsId, ReportId, ReportTemplateId, RoleId, RpcId, RuleChainId, RuleNodeId, SchedulerEventId, SecretId, SubscriptionAddonId, SubscriptionId, SubscriptionPlanId, TbResourceId, TenantId, TenantProfileId, UserId, WidgetTypeId, WidgetsBundleId"); + } + + /** + * Get the actual instance, which can be the following: + * AdminSettingsId, AgentAppEventId, AgentAppProfileId, AgentAppUnitId, AgentApplicationId, AgentBulkActionId, AgentId, AgentProfileId, AiModelId, AlarmId, ApiKeyId, ApiUsageStateId, AssetId, AssetProfileId, BillingCustomerId, BlobEntityId, CalculatedFieldId, ConverterId, CouponId, CustomerId, DashboardId, DeviceId, DeviceProfileId, DomainId, EdgeId, EntityGroupId, EntityViewId, GroupPermissionId, IntegrationId, JobId, MobileAppBundleId, MobileAppId, NotificationId, NotificationRequestId, NotificationRuleId, NotificationTargetId, NotificationTemplateId, OAuth2ClientId, OtaPackageId, ProductId, QueueId, QueueStatsId, ReportId, ReportTemplateId, RoleId, RpcId, RuleChainId, RuleNodeId, SchedulerEventId, SecretId, SubscriptionAddonId, SubscriptionId, SubscriptionPlanId, TbResourceId, TenantId, TenantProfileId, UserId, WidgetTypeId, WidgetsBundleId + * + * @return The actual instance (AdminSettingsId, AgentAppEventId, AgentAppProfileId, AgentAppUnitId, AgentApplicationId, AgentBulkActionId, AgentId, AgentProfileId, AiModelId, AlarmId, ApiKeyId, ApiUsageStateId, AssetId, AssetProfileId, BillingCustomerId, BlobEntityId, CalculatedFieldId, ConverterId, CouponId, CustomerId, DashboardId, DeviceId, DeviceProfileId, DomainId, EdgeId, EntityGroupId, EntityViewId, GroupPermissionId, IntegrationId, JobId, MobileAppBundleId, MobileAppId, NotificationId, NotificationRequestId, NotificationRuleId, NotificationTargetId, NotificationTemplateId, OAuth2ClientId, OtaPackageId, ProductId, QueueId, QueueStatsId, ReportId, ReportTemplateId, RoleId, RpcId, RuleChainId, RuleNodeId, SchedulerEventId, SecretId, SubscriptionAddonId, SubscriptionId, SubscriptionPlanId, TbResourceId, TenantId, TenantProfileId, UserId, WidgetTypeId, WidgetsBundleId) + */ + @Override + public Object getActualInstance() { + return super.getActualInstance(); + } + + /** + * Get the actual instance of `AdminSettingsId`. If the actual instance is not `AdminSettingsId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AdminSettingsId` + * @throws ClassCastException if the instance is not `AdminSettingsId` + */ + public AdminSettingsId getAdminSettingsId() throws ClassCastException { + return (AdminSettingsId)super.getActualInstance(); + } + + /** + * Get the actual instance of `AgentAppEventId`. If the actual instance is not `AgentAppEventId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AgentAppEventId` + * @throws ClassCastException if the instance is not `AgentAppEventId` + */ + public AgentAppEventId getAgentAppEventId() throws ClassCastException { + return (AgentAppEventId)super.getActualInstance(); + } + + /** + * Get the actual instance of `AgentAppProfileId`. If the actual instance is not `AgentAppProfileId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AgentAppProfileId` + * @throws ClassCastException if the instance is not `AgentAppProfileId` + */ + public AgentAppProfileId getAgentAppProfileId() throws ClassCastException { + return (AgentAppProfileId)super.getActualInstance(); + } + + /** + * Get the actual instance of `AgentAppUnitId`. If the actual instance is not `AgentAppUnitId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AgentAppUnitId` + * @throws ClassCastException if the instance is not `AgentAppUnitId` + */ + public AgentAppUnitId getAgentAppUnitId() throws ClassCastException { + return (AgentAppUnitId)super.getActualInstance(); + } + + /** + * Get the actual instance of `AgentApplicationId`. If the actual instance is not `AgentApplicationId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AgentApplicationId` + * @throws ClassCastException if the instance is not `AgentApplicationId` + */ + public AgentApplicationId getAgentApplicationId() throws ClassCastException { + return (AgentApplicationId)super.getActualInstance(); + } + + /** + * Get the actual instance of `AgentBulkActionId`. If the actual instance is not `AgentBulkActionId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AgentBulkActionId` + * @throws ClassCastException if the instance is not `AgentBulkActionId` + */ + public AgentBulkActionId getAgentBulkActionId() throws ClassCastException { + return (AgentBulkActionId)super.getActualInstance(); + } + + /** + * Get the actual instance of `AgentId`. If the actual instance is not `AgentId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AgentId` + * @throws ClassCastException if the instance is not `AgentId` + */ + public AgentId getAgentId() throws ClassCastException { + return (AgentId)super.getActualInstance(); + } + + /** + * Get the actual instance of `AgentProfileId`. If the actual instance is not `AgentProfileId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AgentProfileId` + * @throws ClassCastException if the instance is not `AgentProfileId` + */ + public AgentProfileId getAgentProfileId() throws ClassCastException { + return (AgentProfileId)super.getActualInstance(); + } + + /** + * Get the actual instance of `AiModelId`. If the actual instance is not `AiModelId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AiModelId` + * @throws ClassCastException if the instance is not `AiModelId` + */ + public AiModelId getAiModelId() throws ClassCastException { + return (AiModelId)super.getActualInstance(); + } + + /** + * Get the actual instance of `AlarmId`. If the actual instance is not `AlarmId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AlarmId` + * @throws ClassCastException if the instance is not `AlarmId` + */ + public AlarmId getAlarmId() throws ClassCastException { + return (AlarmId)super.getActualInstance(); + } + + /** + * Get the actual instance of `ApiKeyId`. If the actual instance is not `ApiKeyId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ApiKeyId` + * @throws ClassCastException if the instance is not `ApiKeyId` + */ + public ApiKeyId getApiKeyId() throws ClassCastException { + return (ApiKeyId)super.getActualInstance(); + } + + /** + * Get the actual instance of `ApiUsageStateId`. If the actual instance is not `ApiUsageStateId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ApiUsageStateId` + * @throws ClassCastException if the instance is not `ApiUsageStateId` + */ + public ApiUsageStateId getApiUsageStateId() throws ClassCastException { + return (ApiUsageStateId)super.getActualInstance(); + } + + /** + * Get the actual instance of `AssetId`. If the actual instance is not `AssetId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AssetId` + * @throws ClassCastException if the instance is not `AssetId` + */ + public AssetId getAssetId() throws ClassCastException { + return (AssetId)super.getActualInstance(); + } + + /** + * Get the actual instance of `AssetProfileId`. If the actual instance is not `AssetProfileId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `AssetProfileId` + * @throws ClassCastException if the instance is not `AssetProfileId` + */ + public AssetProfileId getAssetProfileId() throws ClassCastException { + return (AssetProfileId)super.getActualInstance(); + } + + /** + * Get the actual instance of `BillingCustomerId`. If the actual instance is not `BillingCustomerId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `BillingCustomerId` + * @throws ClassCastException if the instance is not `BillingCustomerId` + */ + public BillingCustomerId getBillingCustomerId() throws ClassCastException { + return (BillingCustomerId)super.getActualInstance(); + } + + /** + * Get the actual instance of `BlobEntityId`. If the actual instance is not `BlobEntityId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `BlobEntityId` + * @throws ClassCastException if the instance is not `BlobEntityId` + */ + public BlobEntityId getBlobEntityId() throws ClassCastException { + return (BlobEntityId)super.getActualInstance(); + } + + /** + * Get the actual instance of `CalculatedFieldId`. If the actual instance is not `CalculatedFieldId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `CalculatedFieldId` + * @throws ClassCastException if the instance is not `CalculatedFieldId` + */ + public CalculatedFieldId getCalculatedFieldId() throws ClassCastException { + return (CalculatedFieldId)super.getActualInstance(); + } + + /** + * Get the actual instance of `ConverterId`. If the actual instance is not `ConverterId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ConverterId` + * @throws ClassCastException if the instance is not `ConverterId` + */ + public ConverterId getConverterId() throws ClassCastException { + return (ConverterId)super.getActualInstance(); + } + + /** + * Get the actual instance of `CouponId`. If the actual instance is not `CouponId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `CouponId` + * @throws ClassCastException if the instance is not `CouponId` + */ + public CouponId getCouponId() throws ClassCastException { + return (CouponId)super.getActualInstance(); + } + + /** + * Get the actual instance of `CustomerId`. If the actual instance is not `CustomerId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `CustomerId` + * @throws ClassCastException if the instance is not `CustomerId` + */ + public CustomerId getCustomerId() throws ClassCastException { + return (CustomerId)super.getActualInstance(); + } + + /** + * Get the actual instance of `DashboardId`. If the actual instance is not `DashboardId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `DashboardId` + * @throws ClassCastException if the instance is not `DashboardId` + */ + public DashboardId getDashboardId() throws ClassCastException { + return (DashboardId)super.getActualInstance(); + } + + /** + * Get the actual instance of `DeviceId`. If the actual instance is not `DeviceId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `DeviceId` + * @throws ClassCastException if the instance is not `DeviceId` + */ + public DeviceId getDeviceId() throws ClassCastException { + return (DeviceId)super.getActualInstance(); + } + + /** + * Get the actual instance of `DeviceProfileId`. If the actual instance is not `DeviceProfileId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `DeviceProfileId` + * @throws ClassCastException if the instance is not `DeviceProfileId` + */ + public DeviceProfileId getDeviceProfileId() throws ClassCastException { + return (DeviceProfileId)super.getActualInstance(); + } + + /** + * Get the actual instance of `DomainId`. If the actual instance is not `DomainId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `DomainId` + * @throws ClassCastException if the instance is not `DomainId` + */ + public DomainId getDomainId() throws ClassCastException { + return (DomainId)super.getActualInstance(); + } + + /** + * Get the actual instance of `EdgeId`. If the actual instance is not `EdgeId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `EdgeId` + * @throws ClassCastException if the instance is not `EdgeId` + */ + public EdgeId getEdgeId() throws ClassCastException { + return (EdgeId)super.getActualInstance(); + } + + /** + * Get the actual instance of `EntityGroupId`. If the actual instance is not `EntityGroupId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `EntityGroupId` + * @throws ClassCastException if the instance is not `EntityGroupId` + */ + public EntityGroupId getEntityGroupId() throws ClassCastException { + return (EntityGroupId)super.getActualInstance(); + } + + /** + * Get the actual instance of `EntityViewId`. If the actual instance is not `EntityViewId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `EntityViewId` + * @throws ClassCastException if the instance is not `EntityViewId` + */ + public EntityViewId getEntityViewId() throws ClassCastException { + return (EntityViewId)super.getActualInstance(); + } + + /** + * Get the actual instance of `GroupPermissionId`. If the actual instance is not `GroupPermissionId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `GroupPermissionId` + * @throws ClassCastException if the instance is not `GroupPermissionId` + */ + public GroupPermissionId getGroupPermissionId() throws ClassCastException { + return (GroupPermissionId)super.getActualInstance(); + } + + /** + * Get the actual instance of `IntegrationId`. If the actual instance is not `IntegrationId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `IntegrationId` + * @throws ClassCastException if the instance is not `IntegrationId` + */ + public IntegrationId getIntegrationId() throws ClassCastException { + return (IntegrationId)super.getActualInstance(); + } + + /** + * Get the actual instance of `JobId`. If the actual instance is not `JobId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `JobId` + * @throws ClassCastException if the instance is not `JobId` + */ + public JobId getJobId() throws ClassCastException { + return (JobId)super.getActualInstance(); + } + + /** + * Get the actual instance of `MobileAppBundleId`. If the actual instance is not `MobileAppBundleId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `MobileAppBundleId` + * @throws ClassCastException if the instance is not `MobileAppBundleId` + */ + public MobileAppBundleId getMobileAppBundleId() throws ClassCastException { + return (MobileAppBundleId)super.getActualInstance(); + } + + /** + * Get the actual instance of `MobileAppId`. If the actual instance is not `MobileAppId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `MobileAppId` + * @throws ClassCastException if the instance is not `MobileAppId` + */ + public MobileAppId getMobileAppId() throws ClassCastException { + return (MobileAppId)super.getActualInstance(); + } + + /** + * Get the actual instance of `NotificationId`. If the actual instance is not `NotificationId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `NotificationId` + * @throws ClassCastException if the instance is not `NotificationId` + */ + public NotificationId getNotificationId() throws ClassCastException { + return (NotificationId)super.getActualInstance(); + } + + /** + * Get the actual instance of `NotificationRequestId`. If the actual instance is not `NotificationRequestId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `NotificationRequestId` + * @throws ClassCastException if the instance is not `NotificationRequestId` + */ + public NotificationRequestId getNotificationRequestId() throws ClassCastException { + return (NotificationRequestId)super.getActualInstance(); + } + + /** + * Get the actual instance of `NotificationRuleId`. If the actual instance is not `NotificationRuleId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `NotificationRuleId` + * @throws ClassCastException if the instance is not `NotificationRuleId` + */ + public NotificationRuleId getNotificationRuleId() throws ClassCastException { + return (NotificationRuleId)super.getActualInstance(); + } + + /** + * Get the actual instance of `NotificationTargetId`. If the actual instance is not `NotificationTargetId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `NotificationTargetId` + * @throws ClassCastException if the instance is not `NotificationTargetId` + */ + public NotificationTargetId getNotificationTargetId() throws ClassCastException { + return (NotificationTargetId)super.getActualInstance(); + } + + /** + * Get the actual instance of `NotificationTemplateId`. If the actual instance is not `NotificationTemplateId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `NotificationTemplateId` + * @throws ClassCastException if the instance is not `NotificationTemplateId` + */ + public NotificationTemplateId getNotificationTemplateId() throws ClassCastException { + return (NotificationTemplateId)super.getActualInstance(); + } + + /** + * Get the actual instance of `OAuth2ClientId`. If the actual instance is not `OAuth2ClientId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `OAuth2ClientId` + * @throws ClassCastException if the instance is not `OAuth2ClientId` + */ + public OAuth2ClientId getOAuth2ClientId() throws ClassCastException { + return (OAuth2ClientId)super.getActualInstance(); + } + + /** + * Get the actual instance of `OtaPackageId`. If the actual instance is not `OtaPackageId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `OtaPackageId` + * @throws ClassCastException if the instance is not `OtaPackageId` + */ + public OtaPackageId getOtaPackageId() throws ClassCastException { + return (OtaPackageId)super.getActualInstance(); + } + + /** + * Get the actual instance of `ProductId`. If the actual instance is not `ProductId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ProductId` + * @throws ClassCastException if the instance is not `ProductId` + */ + public ProductId getProductId() throws ClassCastException { + return (ProductId)super.getActualInstance(); + } + + /** + * Get the actual instance of `QueueId`. If the actual instance is not `QueueId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `QueueId` + * @throws ClassCastException if the instance is not `QueueId` + */ + public QueueId getQueueId() throws ClassCastException { + return (QueueId)super.getActualInstance(); + } + + /** + * Get the actual instance of `QueueStatsId`. If the actual instance is not `QueueStatsId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `QueueStatsId` + * @throws ClassCastException if the instance is not `QueueStatsId` + */ + public QueueStatsId getQueueStatsId() throws ClassCastException { + return (QueueStatsId)super.getActualInstance(); + } + + /** + * Get the actual instance of `ReportId`. If the actual instance is not `ReportId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ReportId` + * @throws ClassCastException if the instance is not `ReportId` + */ + public ReportId getReportId() throws ClassCastException { + return (ReportId)super.getActualInstance(); + } + + /** + * Get the actual instance of `ReportTemplateId`. If the actual instance is not `ReportTemplateId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ReportTemplateId` + * @throws ClassCastException if the instance is not `ReportTemplateId` + */ + public ReportTemplateId getReportTemplateId() throws ClassCastException { + return (ReportTemplateId)super.getActualInstance(); + } + + /** + * Get the actual instance of `RoleId`. If the actual instance is not `RoleId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `RoleId` + * @throws ClassCastException if the instance is not `RoleId` + */ + public RoleId getRoleId() throws ClassCastException { + return (RoleId)super.getActualInstance(); + } + + /** + * Get the actual instance of `RpcId`. If the actual instance is not `RpcId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `RpcId` + * @throws ClassCastException if the instance is not `RpcId` + */ + public RpcId getRpcId() throws ClassCastException { + return (RpcId)super.getActualInstance(); + } + + /** + * Get the actual instance of `RuleChainId`. If the actual instance is not `RuleChainId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `RuleChainId` + * @throws ClassCastException if the instance is not `RuleChainId` + */ + public RuleChainId getRuleChainId() throws ClassCastException { + return (RuleChainId)super.getActualInstance(); + } + + /** + * Get the actual instance of `RuleNodeId`. If the actual instance is not `RuleNodeId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `RuleNodeId` + * @throws ClassCastException if the instance is not `RuleNodeId` + */ + public RuleNodeId getRuleNodeId() throws ClassCastException { + return (RuleNodeId)super.getActualInstance(); + } + + /** + * Get the actual instance of `SchedulerEventId`. If the actual instance is not `SchedulerEventId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `SchedulerEventId` + * @throws ClassCastException if the instance is not `SchedulerEventId` + */ + public SchedulerEventId getSchedulerEventId() throws ClassCastException { + return (SchedulerEventId)super.getActualInstance(); + } + + /** + * Get the actual instance of `SecretId`. If the actual instance is not `SecretId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `SecretId` + * @throws ClassCastException if the instance is not `SecretId` + */ + public SecretId getSecretId() throws ClassCastException { + return (SecretId)super.getActualInstance(); + } + + /** + * Get the actual instance of `SubscriptionAddonId`. If the actual instance is not `SubscriptionAddonId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `SubscriptionAddonId` + * @throws ClassCastException if the instance is not `SubscriptionAddonId` + */ + public SubscriptionAddonId getSubscriptionAddonId() throws ClassCastException { + return (SubscriptionAddonId)super.getActualInstance(); + } + + /** + * Get the actual instance of `SubscriptionId`. If the actual instance is not `SubscriptionId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `SubscriptionId` + * @throws ClassCastException if the instance is not `SubscriptionId` + */ + public SubscriptionId getSubscriptionId() throws ClassCastException { + return (SubscriptionId)super.getActualInstance(); + } + + /** + * Get the actual instance of `SubscriptionPlanId`. If the actual instance is not `SubscriptionPlanId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `SubscriptionPlanId` + * @throws ClassCastException if the instance is not `SubscriptionPlanId` + */ + public SubscriptionPlanId getSubscriptionPlanId() throws ClassCastException { + return (SubscriptionPlanId)super.getActualInstance(); + } + + /** + * Get the actual instance of `TbResourceId`. If the actual instance is not `TbResourceId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `TbResourceId` + * @throws ClassCastException if the instance is not `TbResourceId` + */ + public TbResourceId getTbResourceId() throws ClassCastException { + return (TbResourceId)super.getActualInstance(); + } + + /** + * Get the actual instance of `TenantId`. If the actual instance is not `TenantId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `TenantId` + * @throws ClassCastException if the instance is not `TenantId` + */ + public TenantId getTenantId() throws ClassCastException { + return (TenantId)super.getActualInstance(); + } + + /** + * Get the actual instance of `TenantProfileId`. If the actual instance is not `TenantProfileId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `TenantProfileId` + * @throws ClassCastException if the instance is not `TenantProfileId` + */ + public TenantProfileId getTenantProfileId() throws ClassCastException { + return (TenantProfileId)super.getActualInstance(); + } + + /** + * Get the actual instance of `UserId`. If the actual instance is not `UserId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `UserId` + * @throws ClassCastException if the instance is not `UserId` + */ + public UserId getUserId() throws ClassCastException { + return (UserId)super.getActualInstance(); + } + + /** + * Get the actual instance of `WidgetTypeId`. If the actual instance is not `WidgetTypeId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `WidgetTypeId` + * @throws ClassCastException if the instance is not `WidgetTypeId` + */ + public WidgetTypeId getWidgetTypeId() throws ClassCastException { + return (WidgetTypeId)super.getActualInstance(); + } + + /** + * Get the actual instance of `WidgetsBundleId`. If the actual instance is not `WidgetsBundleId`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `WidgetsBundleId` + * @throws ClassCastException if the instance is not `WidgetsBundleId` + */ + public WidgetsBundleId getWidgetsBundleId() throws ClassCastException { + return (WidgetsBundleId)super.getActualInstance(); + } + + + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + if (getActualInstance() instanceof AdminSettingsId) { + if (getActualInstance() != null) { + joiner.add(((AdminSettingsId)getActualInstance()).toUrlQueryString(prefix + "one_of_0" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof AgentAppEventId) { + if (getActualInstance() != null) { + joiner.add(((AgentAppEventId)getActualInstance()).toUrlQueryString(prefix + "one_of_1" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof AgentAppProfileId) { + if (getActualInstance() != null) { + joiner.add(((AgentAppProfileId)getActualInstance()).toUrlQueryString(prefix + "one_of_2" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof AgentAppUnitId) { + if (getActualInstance() != null) { + joiner.add(((AgentAppUnitId)getActualInstance()).toUrlQueryString(prefix + "one_of_3" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof AgentApplicationId) { + if (getActualInstance() != null) { + joiner.add(((AgentApplicationId)getActualInstance()).toUrlQueryString(prefix + "one_of_4" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof AgentBulkActionId) { + if (getActualInstance() != null) { + joiner.add(((AgentBulkActionId)getActualInstance()).toUrlQueryString(prefix + "one_of_5" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof AgentId) { + if (getActualInstance() != null) { + joiner.add(((AgentId)getActualInstance()).toUrlQueryString(prefix + "one_of_6" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof AgentProfileId) { + if (getActualInstance() != null) { + joiner.add(((AgentProfileId)getActualInstance()).toUrlQueryString(prefix + "one_of_7" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof AiModelId) { + if (getActualInstance() != null) { + joiner.add(((AiModelId)getActualInstance()).toUrlQueryString(prefix + "one_of_8" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof AlarmId) { + if (getActualInstance() != null) { + joiner.add(((AlarmId)getActualInstance()).toUrlQueryString(prefix + "one_of_9" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ApiKeyId) { + if (getActualInstance() != null) { + joiner.add(((ApiKeyId)getActualInstance()).toUrlQueryString(prefix + "one_of_10" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ApiUsageStateId) { + if (getActualInstance() != null) { + joiner.add(((ApiUsageStateId)getActualInstance()).toUrlQueryString(prefix + "one_of_11" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof AssetId) { + if (getActualInstance() != null) { + joiner.add(((AssetId)getActualInstance()).toUrlQueryString(prefix + "one_of_12" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof AssetProfileId) { + if (getActualInstance() != null) { + joiner.add(((AssetProfileId)getActualInstance()).toUrlQueryString(prefix + "one_of_13" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof BillingCustomerId) { + if (getActualInstance() != null) { + joiner.add(((BillingCustomerId)getActualInstance()).toUrlQueryString(prefix + "one_of_14" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof BlobEntityId) { + if (getActualInstance() != null) { + joiner.add(((BlobEntityId)getActualInstance()).toUrlQueryString(prefix + "one_of_15" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof CalculatedFieldId) { + if (getActualInstance() != null) { + joiner.add(((CalculatedFieldId)getActualInstance()).toUrlQueryString(prefix + "one_of_16" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ConverterId) { + if (getActualInstance() != null) { + joiner.add(((ConverterId)getActualInstance()).toUrlQueryString(prefix + "one_of_17" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof CouponId) { + if (getActualInstance() != null) { + joiner.add(((CouponId)getActualInstance()).toUrlQueryString(prefix + "one_of_18" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof CustomerId) { + if (getActualInstance() != null) { + joiner.add(((CustomerId)getActualInstance()).toUrlQueryString(prefix + "one_of_19" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof DashboardId) { + if (getActualInstance() != null) { + joiner.add(((DashboardId)getActualInstance()).toUrlQueryString(prefix + "one_of_20" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof DeviceId) { + if (getActualInstance() != null) { + joiner.add(((DeviceId)getActualInstance()).toUrlQueryString(prefix + "one_of_21" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof DeviceProfileId) { + if (getActualInstance() != null) { + joiner.add(((DeviceProfileId)getActualInstance()).toUrlQueryString(prefix + "one_of_22" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof DomainId) { + if (getActualInstance() != null) { + joiner.add(((DomainId)getActualInstance()).toUrlQueryString(prefix + "one_of_23" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof EdgeId) { + if (getActualInstance() != null) { + joiner.add(((EdgeId)getActualInstance()).toUrlQueryString(prefix + "one_of_24" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof EntityGroupId) { + if (getActualInstance() != null) { + joiner.add(((EntityGroupId)getActualInstance()).toUrlQueryString(prefix + "one_of_25" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof EntityViewId) { + if (getActualInstance() != null) { + joiner.add(((EntityViewId)getActualInstance()).toUrlQueryString(prefix + "one_of_26" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof GroupPermissionId) { + if (getActualInstance() != null) { + joiner.add(((GroupPermissionId)getActualInstance()).toUrlQueryString(prefix + "one_of_27" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof IntegrationId) { + if (getActualInstance() != null) { + joiner.add(((IntegrationId)getActualInstance()).toUrlQueryString(prefix + "one_of_28" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof JobId) { + if (getActualInstance() != null) { + joiner.add(((JobId)getActualInstance()).toUrlQueryString(prefix + "one_of_29" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof MobileAppBundleId) { + if (getActualInstance() != null) { + joiner.add(((MobileAppBundleId)getActualInstance()).toUrlQueryString(prefix + "one_of_30" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof MobileAppId) { + if (getActualInstance() != null) { + joiner.add(((MobileAppId)getActualInstance()).toUrlQueryString(prefix + "one_of_31" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof NotificationId) { + if (getActualInstance() != null) { + joiner.add(((NotificationId)getActualInstance()).toUrlQueryString(prefix + "one_of_32" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof NotificationRequestId) { + if (getActualInstance() != null) { + joiner.add(((NotificationRequestId)getActualInstance()).toUrlQueryString(prefix + "one_of_33" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof NotificationRuleId) { + if (getActualInstance() != null) { + joiner.add(((NotificationRuleId)getActualInstance()).toUrlQueryString(prefix + "one_of_34" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof NotificationTargetId) { + if (getActualInstance() != null) { + joiner.add(((NotificationTargetId)getActualInstance()).toUrlQueryString(prefix + "one_of_35" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof NotificationTemplateId) { + if (getActualInstance() != null) { + joiner.add(((NotificationTemplateId)getActualInstance()).toUrlQueryString(prefix + "one_of_36" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof OAuth2ClientId) { + if (getActualInstance() != null) { + joiner.add(((OAuth2ClientId)getActualInstance()).toUrlQueryString(prefix + "one_of_37" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof OtaPackageId) { + if (getActualInstance() != null) { + joiner.add(((OtaPackageId)getActualInstance()).toUrlQueryString(prefix + "one_of_38" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ProductId) { + if (getActualInstance() != null) { + joiner.add(((ProductId)getActualInstance()).toUrlQueryString(prefix + "one_of_39" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof QueueId) { + if (getActualInstance() != null) { + joiner.add(((QueueId)getActualInstance()).toUrlQueryString(prefix + "one_of_40" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof QueueStatsId) { + if (getActualInstance() != null) { + joiner.add(((QueueStatsId)getActualInstance()).toUrlQueryString(prefix + "one_of_41" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ReportId) { + if (getActualInstance() != null) { + joiner.add(((ReportId)getActualInstance()).toUrlQueryString(prefix + "one_of_42" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof ReportTemplateId) { + if (getActualInstance() != null) { + joiner.add(((ReportTemplateId)getActualInstance()).toUrlQueryString(prefix + "one_of_43" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof RoleId) { + if (getActualInstance() != null) { + joiner.add(((RoleId)getActualInstance()).toUrlQueryString(prefix + "one_of_44" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof RpcId) { + if (getActualInstance() != null) { + joiner.add(((RpcId)getActualInstance()).toUrlQueryString(prefix + "one_of_45" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof RuleChainId) { + if (getActualInstance() != null) { + joiner.add(((RuleChainId)getActualInstance()).toUrlQueryString(prefix + "one_of_46" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof RuleNodeId) { + if (getActualInstance() != null) { + joiner.add(((RuleNodeId)getActualInstance()).toUrlQueryString(prefix + "one_of_47" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof SchedulerEventId) { + if (getActualInstance() != null) { + joiner.add(((SchedulerEventId)getActualInstance()).toUrlQueryString(prefix + "one_of_48" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof SecretId) { + if (getActualInstance() != null) { + joiner.add(((SecretId)getActualInstance()).toUrlQueryString(prefix + "one_of_49" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof SubscriptionAddonId) { + if (getActualInstance() != null) { + joiner.add(((SubscriptionAddonId)getActualInstance()).toUrlQueryString(prefix + "one_of_50" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof SubscriptionId) { + if (getActualInstance() != null) { + joiner.add(((SubscriptionId)getActualInstance()).toUrlQueryString(prefix + "one_of_51" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof SubscriptionPlanId) { + if (getActualInstance() != null) { + joiner.add(((SubscriptionPlanId)getActualInstance()).toUrlQueryString(prefix + "one_of_52" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof TbResourceId) { + if (getActualInstance() != null) { + joiner.add(((TbResourceId)getActualInstance()).toUrlQueryString(prefix + "one_of_53" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof TenantId) { + if (getActualInstance() != null) { + joiner.add(((TenantId)getActualInstance()).toUrlQueryString(prefix + "one_of_54" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof TenantProfileId) { + if (getActualInstance() != null) { + joiner.add(((TenantProfileId)getActualInstance()).toUrlQueryString(prefix + "one_of_55" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof UserId) { + if (getActualInstance() != null) { + joiner.add(((UserId)getActualInstance()).toUrlQueryString(prefix + "one_of_56" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof WidgetTypeId) { + if (getActualInstance() != null) { + joiner.add(((WidgetTypeId)getActualInstance()).toUrlQueryString(prefix + "one_of_57" + suffix)); + } + return joiner.toString(); + } + if (getActualInstance() instanceof WidgetsBundleId) { + if (getActualInstance() != null) { + joiner.add(((WidgetsBundleId)getActualInstance()).toUrlQueryString(prefix + "one_of_58" + suffix)); + } + return joiner.toString(); + } + return null; + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/LimitedApi.java b/paas/src/main/java/org/thingsboard/client/model/LimitedApi.java index 2942590f..addc3d18 100644 --- a/paas/src/main/java/org/thingsboard/client/model/LimitedApi.java +++ b/paas/src/main/java/org/thingsboard/client/model/LimitedApi.java @@ -68,6 +68,14 @@ public enum LimitedApi { EDGE_UPLINK_MESSAGES_PER_EDGE("EDGE_UPLINK_MESSAGES_PER_EDGE"), + AGENT_EVENTS("AGENT_EVENTS"), + + AGENT_EVENTS_PER_AGENT("AGENT_EVENTS_PER_AGENT"), + + AGENT_LOG_CHUNKS("AGENT_LOG_CHUNKS"), + + AGENT_LOG_CHUNKS_PER_AGENT("AGENT_LOG_CHUNKS_PER_AGENT"), + INTEGRATION_MSGS_PER_TENANT("INTEGRATION_MSGS_PER_TENANT"), INTEGRATION_MSGS_PER_DEVICE("INTEGRATION_MSGS_PER_DEVICE"), diff --git a/paas/src/main/java/org/thingsboard/client/model/LoginWhiteLabelingParams.java b/paas/src/main/java/org/thingsboard/client/model/LoginWhiteLabelingParams.java index 4f37b59b..66b02b32 100644 --- a/paas/src/main/java/org/thingsboard/client/model/LoginWhiteLabelingParams.java +++ b/paas/src/main/java/org/thingsboard/client/model/LoginWhiteLabelingParams.java @@ -46,6 +46,7 @@ LoginWhiteLabelingParams.JSON_PROPERTY_APP_TITLE, LoginWhiteLabelingParams.JSON_PROPERTY_FAVICON, LoginWhiteLabelingParams.JSON_PROPERTY_PALETTE_SETTINGS, + LoginWhiteLabelingParams.JSON_PROPERTY_PRIMARY_COLOR_PANELS, LoginWhiteLabelingParams.JSON_PROPERTY_HELP_LINK_BASE_URL, LoginWhiteLabelingParams.JSON_PROPERTY_UI_HELP_BASE_URL, LoginWhiteLabelingParams.JSON_PROPERTY_ENABLE_HELP_LINKS, @@ -91,6 +92,10 @@ public class LoginWhiteLabelingParams { @Nullable private PaletteSettings paletteSettings; + public static final String JSON_PROPERTY_PRIMARY_COLOR_PANELS = "primaryColorPanels"; + @Nullable + private Boolean primaryColorPanels; + public static final String JSON_PROPERTY_HELP_LINK_BASE_URL = "helpLinkBaseUrl"; @Nullable private String helpLinkBaseUrl; @@ -318,6 +323,30 @@ public void setPaletteSettings(@Nullable PaletteSettings paletteSettings) { } + public LoginWhiteLabelingParams primaryColorPanels(@Nullable Boolean primaryColorPanels) { + this.primaryColorPanels = primaryColorPanels; + return this; + } + + /** + * Whether primary-color panels (top toolbar, side navigation, dialog and entity-details headers) use the primary palette color as background. When false, they render on a white background + * @return primaryColorPanels + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PRIMARY_COLOR_PANELS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getPrimaryColorPanels() { + return primaryColorPanels; + } + + + @JsonProperty(value = JSON_PROPERTY_PRIMARY_COLOR_PANELS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setPrimaryColorPanels(@Nullable Boolean primaryColorPanels) { + this.primaryColorPanels = primaryColorPanels; + } + + public LoginWhiteLabelingParams helpLinkBaseUrl(@Nullable String helpLinkBaseUrl) { this.helpLinkBaseUrl = helpLinkBaseUrl; return this; @@ -758,6 +787,7 @@ public boolean equals(Object o) { Objects.equals(this.appTitle, loginWhiteLabelingParams.appTitle) && Objects.equals(this.favicon, loginWhiteLabelingParams.favicon) && Objects.equals(this.paletteSettings, loginWhiteLabelingParams.paletteSettings) && + Objects.equals(this.primaryColorPanels, loginWhiteLabelingParams.primaryColorPanels) && Objects.equals(this.helpLinkBaseUrl, loginWhiteLabelingParams.helpLinkBaseUrl) && Objects.equals(this.uiHelpBaseUrl, loginWhiteLabelingParams.uiHelpBaseUrl) && Objects.equals(this.enableHelpLinks, loginWhiteLabelingParams.enableHelpLinks) && @@ -780,7 +810,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(logoImageUrl, logoImageHeight, collapsedLogoImageUrl, appTitle, favicon, paletteSettings, helpLinkBaseUrl, uiHelpBaseUrl, enableHelpLinks, whiteLabelingEnabled, showNameVersion, platformName, platformVersion, customCss, hideConnectivityDialog, overrideTrendzName, hideChatBot, pageBackgroundColor, darkForeground, domainId, baseUrl, prohibitDifferentUrl, adminSettingsId, showNameBottom); + return Objects.hash(logoImageUrl, logoImageHeight, collapsedLogoImageUrl, appTitle, favicon, paletteSettings, primaryColorPanels, helpLinkBaseUrl, uiHelpBaseUrl, enableHelpLinks, whiteLabelingEnabled, showNameVersion, platformName, platformVersion, customCss, hideConnectivityDialog, overrideTrendzName, hideChatBot, pageBackgroundColor, darkForeground, domainId, baseUrl, prohibitDifferentUrl, adminSettingsId, showNameBottom); } @Override @@ -793,6 +823,7 @@ public String toString() { sb.append(" appTitle: ").append(toIndentedString(appTitle)).append("\n"); sb.append(" favicon: ").append(toIndentedString(favicon)).append("\n"); sb.append(" paletteSettings: ").append(toIndentedString(paletteSettings)).append("\n"); + sb.append(" primaryColorPanels: ").append(toIndentedString(primaryColorPanels)).append("\n"); sb.append(" helpLinkBaseUrl: ").append(toIndentedString(helpLinkBaseUrl)).append("\n"); sb.append(" uiHelpBaseUrl: ").append(toIndentedString(uiHelpBaseUrl)).append("\n"); sb.append(" enableHelpLinks: ").append(toIndentedString(enableHelpLinks)).append("\n"); @@ -888,6 +919,11 @@ public String toUrlQueryString(String prefix) { joiner.add(getPaletteSettings().toUrlQueryString(prefix + "paletteSettings" + suffix)); } + // add `primaryColorPanels` to the URL query string + if (getPrimaryColorPanels() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprimaryColorPanels%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getPrimaryColorPanels())))); + } + // add `helpLinkBaseUrl` to the URL query string if (getHelpLinkBaseUrl() != null) { joiner.add(String.format(java.util.Locale.ROOT, "%shelpLinkBaseUrl%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getHelpLinkBaseUrl())))); diff --git a/paas/src/main/java/org/thingsboard/client/model/LwM2MBootstrapServerCredential.java b/paas/src/main/java/org/thingsboard/client/model/LwM2MBootstrapServerCredential.java index a3e9241b..0cb8c4ad 100644 --- a/paas/src/main/java/org/thingsboard/client/model/LwM2MBootstrapServerCredential.java +++ b/paas/src/main/java/org/thingsboard/client/model/LwM2MBootstrapServerCredential.java @@ -50,10 +50,10 @@ ) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "securityMode", visible = true) @JsonSubTypes({ - @JsonSubTypes.Type(value = NoSecLwM2MBootstrapServerCredential.class, name = "NoSecLwM2MBootstrapServerCredential"), - @JsonSubTypes.Type(value = PSKLwM2MBootstrapServerCredential.class, name = "PSKLwM2MBootstrapServerCredential"), - @JsonSubTypes.Type(value = RPKLwM2MBootstrapServerCredential.class, name = "RPKLwM2MBootstrapServerCredential"), - @JsonSubTypes.Type(value = X509LwM2MBootstrapServerCredential.class, name = "X509LwM2MBootstrapServerCredential"), + @JsonSubTypes.Type(value = NoSecLwM2MBootstrapServerCredential.class, name = "NO_SEC"), + @JsonSubTypes.Type(value = PSKLwM2MBootstrapServerCredential.class, name = "PSK"), + @JsonSubTypes.Type(value = RPKLwM2MBootstrapServerCredential.class, name = "RPK"), + @JsonSubTypes.Type(value = X509LwM2MBootstrapServerCredential.class, name = "X509"), }) public class LwM2MBootstrapServerCredential { @@ -170,10 +170,10 @@ public String toUrlQueryString(String prefix) { static { // Initialize and register the discriminator mappings. Map> mappings = new HashMap>(); - mappings.put("NoSecLwM2MBootstrapServerCredential", NoSecLwM2MBootstrapServerCredential.class); - mappings.put("PSKLwM2MBootstrapServerCredential", PSKLwM2MBootstrapServerCredential.class); - mappings.put("RPKLwM2MBootstrapServerCredential", RPKLwM2MBootstrapServerCredential.class); - mappings.put("X509LwM2MBootstrapServerCredential", X509LwM2MBootstrapServerCredential.class); + mappings.put("NO_SEC", NoSecLwM2MBootstrapServerCredential.class); + mappings.put("PSK", PSKLwM2MBootstrapServerCredential.class); + mappings.put("RPK", RPKLwM2MBootstrapServerCredential.class); + mappings.put("X509", X509LwM2MBootstrapServerCredential.class); mappings.put("LwM2MBootstrapServerCredential", LwM2MBootstrapServerCredential.class); JSON.registerDiscriminator(LwM2MBootstrapServerCredential.class, "securityMode", mappings); } diff --git a/paas/src/main/java/org/thingsboard/client/model/NotificationTemplateConfig.java b/paas/src/main/java/org/thingsboard/client/model/NotificationTemplateConfig.java index 0219cf0c..8516d77f 100644 --- a/paas/src/main/java/org/thingsboard/client/model/NotificationTemplateConfig.java +++ b/paas/src/main/java/org/thingsboard/client/model/NotificationTemplateConfig.java @@ -47,7 +47,8 @@ NotificationTemplateConfig.JSON_PROPERTY_ATTACH_REPORT, NotificationTemplateConfig.JSON_PROPERTY_REPORT_TEMPLATE_ID, NotificationTemplateConfig.JSON_PROPERTY_USER_ID, - NotificationTemplateConfig.JSON_PROPERTY_TIMEZONE + NotificationTemplateConfig.JSON_PROPERTY_TIMEZONE, + NotificationTemplateConfig.JSON_PROPERTY_MAKE_PUBLIC }) @Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") public class NotificationTemplateConfig { @@ -71,6 +72,10 @@ public class NotificationTemplateConfig { @Nullable private String timezone; + public static final String JSON_PROPERTY_MAKE_PUBLIC = "makePublic"; + @Nullable + private Boolean makePublic; + public NotificationTemplateConfig() { } @@ -202,6 +207,30 @@ public void setTimezone(@Nullable String timezone) { } + public NotificationTemplateConfig makePublic(@Nullable Boolean makePublic) { + this.makePublic = makePublic; + return this; + } + + /** + * Get makePublic + * @return makePublic + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_MAKE_PUBLIC, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getMakePublic() { + return makePublic; + } + + + @JsonProperty(value = JSON_PROPERTY_MAKE_PUBLIC, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMakePublic(@Nullable Boolean makePublic) { + this.makePublic = makePublic; + } + + /** * Return true if this NotificationTemplateConfig object is equal to o. */ @@ -218,12 +247,13 @@ public boolean equals(Object o) { Objects.equals(this.attachReport, notificationTemplateConfig.attachReport) && Objects.equals(this.reportTemplateId, notificationTemplateConfig.reportTemplateId) && Objects.equals(this.userId, notificationTemplateConfig.userId) && - Objects.equals(this.timezone, notificationTemplateConfig.timezone); + Objects.equals(this.timezone, notificationTemplateConfig.timezone) && + Objects.equals(this.makePublic, notificationTemplateConfig.makePublic); } @Override public int hashCode() { - return Objects.hash(deliveryMethodsTemplates, attachReport, reportTemplateId, userId, timezone); + return Objects.hash(deliveryMethodsTemplates, attachReport, reportTemplateId, userId, timezone, makePublic); } @Override @@ -235,6 +265,7 @@ public String toString() { sb.append(" reportTemplateId: ").append(toIndentedString(reportTemplateId)).append("\n"); sb.append(" userId: ").append(toIndentedString(userId)).append("\n"); sb.append(" timezone: ").append(toIndentedString(timezone)).append("\n"); + sb.append(" makePublic: ").append(toIndentedString(makePublic)).append("\n"); sb.append("}"); return sb.toString(); } @@ -312,6 +343,11 @@ public String toUrlQueryString(String prefix) { joiner.add(String.format(java.util.Locale.ROOT, "%stimezone%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTimezone())))); } + // add `makePublic` to the URL query string + if (getMakePublic() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%smakePublic%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getMakePublic())))); + } + return joiner.toString(); } } diff --git a/paas/src/main/java/org/thingsboard/client/model/PageDataAgent.java b/paas/src/main/java/org/thingsboard/client/model/PageDataAgent.java new file mode 100644 index 00000000..9e3f6f94 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/PageDataAgent.java @@ -0,0 +1,261 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.Agent; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * PageDataAgent + */ +@JsonPropertyOrder({ + PageDataAgent.JSON_PROPERTY_DATA, + PageDataAgent.JSON_PROPERTY_TOTAL_PAGES, + PageDataAgent.JSON_PROPERTY_TOTAL_ELEMENTS, + PageDataAgent.JSON_PROPERTY_HAS_NEXT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class PageDataAgent { + public static final String JSON_PROPERTY_DATA = "data"; + @Nullable + private List data = new ArrayList<>(); + + public static final String JSON_PROPERTY_TOTAL_PAGES = "totalPages"; + @Nullable + private Integer totalPages; + + public static final String JSON_PROPERTY_TOTAL_ELEMENTS = "totalElements"; + @Nullable + private Long totalElements; + + public static final String JSON_PROPERTY_HAS_NEXT = "hasNext"; + @Nullable + private Boolean hasNext; + + public PageDataAgent() { + } + + @JsonCreator + public PageDataAgent( + @JsonProperty(JSON_PROPERTY_TOTAL_PAGES) Integer totalPages, + @JsonProperty(JSON_PROPERTY_TOTAL_ELEMENTS) Long totalElements, + @JsonProperty(JSON_PROPERTY_HAS_NEXT) Boolean hasNext + ) { + this(); + this.totalPages = totalPages; + this.totalElements = totalElements; + this.hasNext = hasNext; + } + + public PageDataAgent data(@Nullable List data) { + this.data = data; + return this; + } + + public PageDataAgent addDataItem(Agent dataItem) { + if (this.data == null) { + this.data = new ArrayList<>(); + } + this.data.add(dataItem); + return this; + } + + /** + * Array of the entities + * @return data + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getData() { + return data; + } + + + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setData(@Nullable List data) { + this.data = data; + } + + + /** + * Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria + * @return totalPages + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_PAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getTotalPages() { + return totalPages; + } + + + + + /** + * Total number of elements in all available pages + * @return totalElements + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_ELEMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getTotalElements() { + return totalElements; + } + + + + + /** + * 'false' value indicates the end of the result set + * @return hasNext + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_HAS_NEXT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getHasNext() { + return hasNext; + } + + + + + /** + * Return true if this PageDataAgent object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PageDataAgent pageDataAgent = (PageDataAgent) o; + return Objects.equals(this.data, pageDataAgent.data) && + Objects.equals(this.totalPages, pageDataAgent.totalPages) && + Objects.equals(this.totalElements, pageDataAgent.totalElements) && + Objects.equals(this.hasNext, pageDataAgent.hasNext); + } + + @Override + public int hashCode() { + return Objects.hash(data, totalPages, totalElements, hasNext); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class PageDataAgent {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" totalPages: ").append(toIndentedString(totalPages)).append("\n"); + sb.append(" totalElements: ").append(toIndentedString(totalElements)).append("\n"); + sb.append(" hasNext: ").append(toIndentedString(hasNext)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `data` to the URL query string + if (getData() != null) { + for (int i = 0; i < getData().size(); i++) { + if (getData().get(i) != null) { + joiner.add(getData().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sdata%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `totalPages` to the URL query string + if (getTotalPages() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalPages%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalPages())))); + } + + // add `totalElements` to the URL query string + if (getTotalElements() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalElements%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalElements())))); + } + + // add `hasNext` to the URL query string + if (getHasNext() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%shasNext%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getHasNext())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppEvent.java b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppEvent.java new file mode 100644 index 00000000..8ffef28d --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppEvent.java @@ -0,0 +1,261 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentAppEvent; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * PageDataAgentAppEvent + */ +@JsonPropertyOrder({ + PageDataAgentAppEvent.JSON_PROPERTY_DATA, + PageDataAgentAppEvent.JSON_PROPERTY_TOTAL_PAGES, + PageDataAgentAppEvent.JSON_PROPERTY_TOTAL_ELEMENTS, + PageDataAgentAppEvent.JSON_PROPERTY_HAS_NEXT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class PageDataAgentAppEvent { + public static final String JSON_PROPERTY_DATA = "data"; + @Nullable + private List data = new ArrayList<>(); + + public static final String JSON_PROPERTY_TOTAL_PAGES = "totalPages"; + @Nullable + private Integer totalPages; + + public static final String JSON_PROPERTY_TOTAL_ELEMENTS = "totalElements"; + @Nullable + private Long totalElements; + + public static final String JSON_PROPERTY_HAS_NEXT = "hasNext"; + @Nullable + private Boolean hasNext; + + public PageDataAgentAppEvent() { + } + + @JsonCreator + public PageDataAgentAppEvent( + @JsonProperty(JSON_PROPERTY_TOTAL_PAGES) Integer totalPages, + @JsonProperty(JSON_PROPERTY_TOTAL_ELEMENTS) Long totalElements, + @JsonProperty(JSON_PROPERTY_HAS_NEXT) Boolean hasNext + ) { + this(); + this.totalPages = totalPages; + this.totalElements = totalElements; + this.hasNext = hasNext; + } + + public PageDataAgentAppEvent data(@Nullable List data) { + this.data = data; + return this; + } + + public PageDataAgentAppEvent addDataItem(AgentAppEvent dataItem) { + if (this.data == null) { + this.data = new ArrayList<>(); + } + this.data.add(dataItem); + return this; + } + + /** + * Array of the entities + * @return data + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getData() { + return data; + } + + + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setData(@Nullable List data) { + this.data = data; + } + + + /** + * Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria + * @return totalPages + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_PAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getTotalPages() { + return totalPages; + } + + + + + /** + * Total number of elements in all available pages + * @return totalElements + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_ELEMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getTotalElements() { + return totalElements; + } + + + + + /** + * 'false' value indicates the end of the result set + * @return hasNext + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_HAS_NEXT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getHasNext() { + return hasNext; + } + + + + + /** + * Return true if this PageDataAgentAppEvent object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PageDataAgentAppEvent pageDataAgentAppEvent = (PageDataAgentAppEvent) o; + return Objects.equals(this.data, pageDataAgentAppEvent.data) && + Objects.equals(this.totalPages, pageDataAgentAppEvent.totalPages) && + Objects.equals(this.totalElements, pageDataAgentAppEvent.totalElements) && + Objects.equals(this.hasNext, pageDataAgentAppEvent.hasNext); + } + + @Override + public int hashCode() { + return Objects.hash(data, totalPages, totalElements, hasNext); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class PageDataAgentAppEvent {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" totalPages: ").append(toIndentedString(totalPages)).append("\n"); + sb.append(" totalElements: ").append(toIndentedString(totalElements)).append("\n"); + sb.append(" hasNext: ").append(toIndentedString(hasNext)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `data` to the URL query string + if (getData() != null) { + for (int i = 0; i < getData().size(); i++) { + if (getData().get(i) != null) { + joiner.add(getData().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sdata%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `totalPages` to the URL query string + if (getTotalPages() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalPages%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalPages())))); + } + + // add `totalElements` to the URL query string + if (getTotalElements() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalElements%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalElements())))); + } + + // add `hasNext` to the URL query string + if (getHasNext() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%shasNext%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getHasNext())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppEventInfo.java b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppEventInfo.java new file mode 100644 index 00000000..db451c78 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppEventInfo.java @@ -0,0 +1,261 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentAppEventInfo; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * PageDataAgentAppEventInfo + */ +@JsonPropertyOrder({ + PageDataAgentAppEventInfo.JSON_PROPERTY_DATA, + PageDataAgentAppEventInfo.JSON_PROPERTY_TOTAL_PAGES, + PageDataAgentAppEventInfo.JSON_PROPERTY_TOTAL_ELEMENTS, + PageDataAgentAppEventInfo.JSON_PROPERTY_HAS_NEXT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class PageDataAgentAppEventInfo { + public static final String JSON_PROPERTY_DATA = "data"; + @Nullable + private List data = new ArrayList<>(); + + public static final String JSON_PROPERTY_TOTAL_PAGES = "totalPages"; + @Nullable + private Integer totalPages; + + public static final String JSON_PROPERTY_TOTAL_ELEMENTS = "totalElements"; + @Nullable + private Long totalElements; + + public static final String JSON_PROPERTY_HAS_NEXT = "hasNext"; + @Nullable + private Boolean hasNext; + + public PageDataAgentAppEventInfo() { + } + + @JsonCreator + public PageDataAgentAppEventInfo( + @JsonProperty(JSON_PROPERTY_TOTAL_PAGES) Integer totalPages, + @JsonProperty(JSON_PROPERTY_TOTAL_ELEMENTS) Long totalElements, + @JsonProperty(JSON_PROPERTY_HAS_NEXT) Boolean hasNext + ) { + this(); + this.totalPages = totalPages; + this.totalElements = totalElements; + this.hasNext = hasNext; + } + + public PageDataAgentAppEventInfo data(@Nullable List data) { + this.data = data; + return this; + } + + public PageDataAgentAppEventInfo addDataItem(AgentAppEventInfo dataItem) { + if (this.data == null) { + this.data = new ArrayList<>(); + } + this.data.add(dataItem); + return this; + } + + /** + * Array of the entities + * @return data + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getData() { + return data; + } + + + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setData(@Nullable List data) { + this.data = data; + } + + + /** + * Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria + * @return totalPages + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_PAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getTotalPages() { + return totalPages; + } + + + + + /** + * Total number of elements in all available pages + * @return totalElements + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_ELEMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getTotalElements() { + return totalElements; + } + + + + + /** + * 'false' value indicates the end of the result set + * @return hasNext + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_HAS_NEXT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getHasNext() { + return hasNext; + } + + + + + /** + * Return true if this PageDataAgentAppEventInfo object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PageDataAgentAppEventInfo pageDataAgentAppEventInfo = (PageDataAgentAppEventInfo) o; + return Objects.equals(this.data, pageDataAgentAppEventInfo.data) && + Objects.equals(this.totalPages, pageDataAgentAppEventInfo.totalPages) && + Objects.equals(this.totalElements, pageDataAgentAppEventInfo.totalElements) && + Objects.equals(this.hasNext, pageDataAgentAppEventInfo.hasNext); + } + + @Override + public int hashCode() { + return Objects.hash(data, totalPages, totalElements, hasNext); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class PageDataAgentAppEventInfo {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" totalPages: ").append(toIndentedString(totalPages)).append("\n"); + sb.append(" totalElements: ").append(toIndentedString(totalElements)).append("\n"); + sb.append(" hasNext: ").append(toIndentedString(hasNext)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `data` to the URL query string + if (getData() != null) { + for (int i = 0; i < getData().size(); i++) { + if (getData().get(i) != null) { + joiner.add(getData().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sdata%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `totalPages` to the URL query string + if (getTotalPages() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalPages%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalPages())))); + } + + // add `totalElements` to the URL query string + if (getTotalElements() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalElements%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalElements())))); + } + + // add `hasNext` to the URL query string + if (getHasNext() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%shasNext%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getHasNext())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppProfile.java b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppProfile.java new file mode 100644 index 00000000..65239278 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppProfile.java @@ -0,0 +1,261 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentAppProfile; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * PageDataAgentAppProfile + */ +@JsonPropertyOrder({ + PageDataAgentAppProfile.JSON_PROPERTY_DATA, + PageDataAgentAppProfile.JSON_PROPERTY_TOTAL_PAGES, + PageDataAgentAppProfile.JSON_PROPERTY_TOTAL_ELEMENTS, + PageDataAgentAppProfile.JSON_PROPERTY_HAS_NEXT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class PageDataAgentAppProfile { + public static final String JSON_PROPERTY_DATA = "data"; + @Nullable + private List data = new ArrayList<>(); + + public static final String JSON_PROPERTY_TOTAL_PAGES = "totalPages"; + @Nullable + private Integer totalPages; + + public static final String JSON_PROPERTY_TOTAL_ELEMENTS = "totalElements"; + @Nullable + private Long totalElements; + + public static final String JSON_PROPERTY_HAS_NEXT = "hasNext"; + @Nullable + private Boolean hasNext; + + public PageDataAgentAppProfile() { + } + + @JsonCreator + public PageDataAgentAppProfile( + @JsonProperty(JSON_PROPERTY_TOTAL_PAGES) Integer totalPages, + @JsonProperty(JSON_PROPERTY_TOTAL_ELEMENTS) Long totalElements, + @JsonProperty(JSON_PROPERTY_HAS_NEXT) Boolean hasNext + ) { + this(); + this.totalPages = totalPages; + this.totalElements = totalElements; + this.hasNext = hasNext; + } + + public PageDataAgentAppProfile data(@Nullable List data) { + this.data = data; + return this; + } + + public PageDataAgentAppProfile addDataItem(AgentAppProfile dataItem) { + if (this.data == null) { + this.data = new ArrayList<>(); + } + this.data.add(dataItem); + return this; + } + + /** + * Array of the entities + * @return data + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getData() { + return data; + } + + + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setData(@Nullable List data) { + this.data = data; + } + + + /** + * Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria + * @return totalPages + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_PAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getTotalPages() { + return totalPages; + } + + + + + /** + * Total number of elements in all available pages + * @return totalElements + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_ELEMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getTotalElements() { + return totalElements; + } + + + + + /** + * 'false' value indicates the end of the result set + * @return hasNext + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_HAS_NEXT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getHasNext() { + return hasNext; + } + + + + + /** + * Return true if this PageDataAgentAppProfile object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PageDataAgentAppProfile pageDataAgentAppProfile = (PageDataAgentAppProfile) o; + return Objects.equals(this.data, pageDataAgentAppProfile.data) && + Objects.equals(this.totalPages, pageDataAgentAppProfile.totalPages) && + Objects.equals(this.totalElements, pageDataAgentAppProfile.totalElements) && + Objects.equals(this.hasNext, pageDataAgentAppProfile.hasNext); + } + + @Override + public int hashCode() { + return Objects.hash(data, totalPages, totalElements, hasNext); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class PageDataAgentAppProfile {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" totalPages: ").append(toIndentedString(totalPages)).append("\n"); + sb.append(" totalElements: ").append(toIndentedString(totalElements)).append("\n"); + sb.append(" hasNext: ").append(toIndentedString(hasNext)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `data` to the URL query string + if (getData() != null) { + for (int i = 0; i < getData().size(); i++) { + if (getData().get(i) != null) { + joiner.add(getData().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sdata%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `totalPages` to the URL query string + if (getTotalPages() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalPages%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalPages())))); + } + + // add `totalElements` to the URL query string + if (getTotalElements() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalElements%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalElements())))); + } + + // add `hasNext` to the URL query string + if (getHasNext() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%shasNext%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getHasNext())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppUnit.java b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppUnit.java new file mode 100644 index 00000000..c5143dc8 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentAppUnit.java @@ -0,0 +1,261 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentAppUnit; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * PageDataAgentAppUnit + */ +@JsonPropertyOrder({ + PageDataAgentAppUnit.JSON_PROPERTY_DATA, + PageDataAgentAppUnit.JSON_PROPERTY_TOTAL_PAGES, + PageDataAgentAppUnit.JSON_PROPERTY_TOTAL_ELEMENTS, + PageDataAgentAppUnit.JSON_PROPERTY_HAS_NEXT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class PageDataAgentAppUnit { + public static final String JSON_PROPERTY_DATA = "data"; + @Nullable + private List data = new ArrayList<>(); + + public static final String JSON_PROPERTY_TOTAL_PAGES = "totalPages"; + @Nullable + private Integer totalPages; + + public static final String JSON_PROPERTY_TOTAL_ELEMENTS = "totalElements"; + @Nullable + private Long totalElements; + + public static final String JSON_PROPERTY_HAS_NEXT = "hasNext"; + @Nullable + private Boolean hasNext; + + public PageDataAgentAppUnit() { + } + + @JsonCreator + public PageDataAgentAppUnit( + @JsonProperty(JSON_PROPERTY_TOTAL_PAGES) Integer totalPages, + @JsonProperty(JSON_PROPERTY_TOTAL_ELEMENTS) Long totalElements, + @JsonProperty(JSON_PROPERTY_HAS_NEXT) Boolean hasNext + ) { + this(); + this.totalPages = totalPages; + this.totalElements = totalElements; + this.hasNext = hasNext; + } + + public PageDataAgentAppUnit data(@Nullable List data) { + this.data = data; + return this; + } + + public PageDataAgentAppUnit addDataItem(AgentAppUnit dataItem) { + if (this.data == null) { + this.data = new ArrayList<>(); + } + this.data.add(dataItem); + return this; + } + + /** + * Array of the entities + * @return data + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getData() { + return data; + } + + + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setData(@Nullable List data) { + this.data = data; + } + + + /** + * Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria + * @return totalPages + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_PAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getTotalPages() { + return totalPages; + } + + + + + /** + * Total number of elements in all available pages + * @return totalElements + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_ELEMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getTotalElements() { + return totalElements; + } + + + + + /** + * 'false' value indicates the end of the result set + * @return hasNext + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_HAS_NEXT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getHasNext() { + return hasNext; + } + + + + + /** + * Return true if this PageDataAgentAppUnit object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PageDataAgentAppUnit pageDataAgentAppUnit = (PageDataAgentAppUnit) o; + return Objects.equals(this.data, pageDataAgentAppUnit.data) && + Objects.equals(this.totalPages, pageDataAgentAppUnit.totalPages) && + Objects.equals(this.totalElements, pageDataAgentAppUnit.totalElements) && + Objects.equals(this.hasNext, pageDataAgentAppUnit.hasNext); + } + + @Override + public int hashCode() { + return Objects.hash(data, totalPages, totalElements, hasNext); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class PageDataAgentAppUnit {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" totalPages: ").append(toIndentedString(totalPages)).append("\n"); + sb.append(" totalElements: ").append(toIndentedString(totalElements)).append("\n"); + sb.append(" hasNext: ").append(toIndentedString(hasNext)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `data` to the URL query string + if (getData() != null) { + for (int i = 0; i < getData().size(); i++) { + if (getData().get(i) != null) { + joiner.add(getData().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sdata%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `totalPages` to the URL query string + if (getTotalPages() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalPages%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalPages())))); + } + + // add `totalElements` to the URL query string + if (getTotalElements() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalElements%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalElements())))); + } + + // add `hasNext` to the URL query string + if (getHasNext() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%shasNext%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getHasNext())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/PageDataAgentApplicationInfo.java b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentApplicationInfo.java new file mode 100644 index 00000000..8b6b2621 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentApplicationInfo.java @@ -0,0 +1,261 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentApplicationInfo; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * PageDataAgentApplicationInfo + */ +@JsonPropertyOrder({ + PageDataAgentApplicationInfo.JSON_PROPERTY_DATA, + PageDataAgentApplicationInfo.JSON_PROPERTY_TOTAL_PAGES, + PageDataAgentApplicationInfo.JSON_PROPERTY_TOTAL_ELEMENTS, + PageDataAgentApplicationInfo.JSON_PROPERTY_HAS_NEXT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class PageDataAgentApplicationInfo { + public static final String JSON_PROPERTY_DATA = "data"; + @Nullable + private List data = new ArrayList<>(); + + public static final String JSON_PROPERTY_TOTAL_PAGES = "totalPages"; + @Nullable + private Integer totalPages; + + public static final String JSON_PROPERTY_TOTAL_ELEMENTS = "totalElements"; + @Nullable + private Long totalElements; + + public static final String JSON_PROPERTY_HAS_NEXT = "hasNext"; + @Nullable + private Boolean hasNext; + + public PageDataAgentApplicationInfo() { + } + + @JsonCreator + public PageDataAgentApplicationInfo( + @JsonProperty(JSON_PROPERTY_TOTAL_PAGES) Integer totalPages, + @JsonProperty(JSON_PROPERTY_TOTAL_ELEMENTS) Long totalElements, + @JsonProperty(JSON_PROPERTY_HAS_NEXT) Boolean hasNext + ) { + this(); + this.totalPages = totalPages; + this.totalElements = totalElements; + this.hasNext = hasNext; + } + + public PageDataAgentApplicationInfo data(@Nullable List data) { + this.data = data; + return this; + } + + public PageDataAgentApplicationInfo addDataItem(AgentApplicationInfo dataItem) { + if (this.data == null) { + this.data = new ArrayList<>(); + } + this.data.add(dataItem); + return this; + } + + /** + * Array of the entities + * @return data + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getData() { + return data; + } + + + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setData(@Nullable List data) { + this.data = data; + } + + + /** + * Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria + * @return totalPages + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_PAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getTotalPages() { + return totalPages; + } + + + + + /** + * Total number of elements in all available pages + * @return totalElements + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_ELEMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getTotalElements() { + return totalElements; + } + + + + + /** + * 'false' value indicates the end of the result set + * @return hasNext + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_HAS_NEXT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getHasNext() { + return hasNext; + } + + + + + /** + * Return true if this PageDataAgentApplicationInfo object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PageDataAgentApplicationInfo pageDataAgentApplicationInfo = (PageDataAgentApplicationInfo) o; + return Objects.equals(this.data, pageDataAgentApplicationInfo.data) && + Objects.equals(this.totalPages, pageDataAgentApplicationInfo.totalPages) && + Objects.equals(this.totalElements, pageDataAgentApplicationInfo.totalElements) && + Objects.equals(this.hasNext, pageDataAgentApplicationInfo.hasNext); + } + + @Override + public int hashCode() { + return Objects.hash(data, totalPages, totalElements, hasNext); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class PageDataAgentApplicationInfo {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" totalPages: ").append(toIndentedString(totalPages)).append("\n"); + sb.append(" totalElements: ").append(toIndentedString(totalElements)).append("\n"); + sb.append(" hasNext: ").append(toIndentedString(hasNext)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `data` to the URL query string + if (getData() != null) { + for (int i = 0; i < getData().size(); i++) { + if (getData().get(i) != null) { + joiner.add(getData().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sdata%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `totalPages` to the URL query string + if (getTotalPages() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalPages%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalPages())))); + } + + // add `totalElements` to the URL query string + if (getTotalElements() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalElements%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalElements())))); + } + + // add `hasNext` to the URL query string + if (getHasNext() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%shasNext%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getHasNext())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/PageDataAgentBulkAction.java b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentBulkAction.java new file mode 100644 index 00000000..135e77fa --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentBulkAction.java @@ -0,0 +1,261 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentBulkAction; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * PageDataAgentBulkAction + */ +@JsonPropertyOrder({ + PageDataAgentBulkAction.JSON_PROPERTY_DATA, + PageDataAgentBulkAction.JSON_PROPERTY_TOTAL_PAGES, + PageDataAgentBulkAction.JSON_PROPERTY_TOTAL_ELEMENTS, + PageDataAgentBulkAction.JSON_PROPERTY_HAS_NEXT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class PageDataAgentBulkAction { + public static final String JSON_PROPERTY_DATA = "data"; + @Nullable + private List data = new ArrayList<>(); + + public static final String JSON_PROPERTY_TOTAL_PAGES = "totalPages"; + @Nullable + private Integer totalPages; + + public static final String JSON_PROPERTY_TOTAL_ELEMENTS = "totalElements"; + @Nullable + private Long totalElements; + + public static final String JSON_PROPERTY_HAS_NEXT = "hasNext"; + @Nullable + private Boolean hasNext; + + public PageDataAgentBulkAction() { + } + + @JsonCreator + public PageDataAgentBulkAction( + @JsonProperty(JSON_PROPERTY_TOTAL_PAGES) Integer totalPages, + @JsonProperty(JSON_PROPERTY_TOTAL_ELEMENTS) Long totalElements, + @JsonProperty(JSON_PROPERTY_HAS_NEXT) Boolean hasNext + ) { + this(); + this.totalPages = totalPages; + this.totalElements = totalElements; + this.hasNext = hasNext; + } + + public PageDataAgentBulkAction data(@Nullable List data) { + this.data = data; + return this; + } + + public PageDataAgentBulkAction addDataItem(AgentBulkAction dataItem) { + if (this.data == null) { + this.data = new ArrayList<>(); + } + this.data.add(dataItem); + return this; + } + + /** + * Array of the entities + * @return data + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getData() { + return data; + } + + + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setData(@Nullable List data) { + this.data = data; + } + + + /** + * Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria + * @return totalPages + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_PAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getTotalPages() { + return totalPages; + } + + + + + /** + * Total number of elements in all available pages + * @return totalElements + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_ELEMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getTotalElements() { + return totalElements; + } + + + + + /** + * 'false' value indicates the end of the result set + * @return hasNext + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_HAS_NEXT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getHasNext() { + return hasNext; + } + + + + + /** + * Return true if this PageDataAgentBulkAction object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PageDataAgentBulkAction pageDataAgentBulkAction = (PageDataAgentBulkAction) o; + return Objects.equals(this.data, pageDataAgentBulkAction.data) && + Objects.equals(this.totalPages, pageDataAgentBulkAction.totalPages) && + Objects.equals(this.totalElements, pageDataAgentBulkAction.totalElements) && + Objects.equals(this.hasNext, pageDataAgentBulkAction.hasNext); + } + + @Override + public int hashCode() { + return Objects.hash(data, totalPages, totalElements, hasNext); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class PageDataAgentBulkAction {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" totalPages: ").append(toIndentedString(totalPages)).append("\n"); + sb.append(" totalElements: ").append(toIndentedString(totalElements)).append("\n"); + sb.append(" hasNext: ").append(toIndentedString(hasNext)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `data` to the URL query string + if (getData() != null) { + for (int i = 0; i < getData().size(); i++) { + if (getData().get(i) != null) { + joiner.add(getData().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sdata%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `totalPages` to the URL query string + if (getTotalPages() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalPages%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalPages())))); + } + + // add `totalElements` to the URL query string + if (getTotalElements() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalElements%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalElements())))); + } + + // add `hasNext` to the URL query string + if (getHasNext() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%shasNext%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getHasNext())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/PageDataAgentInfo.java b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentInfo.java new file mode 100644 index 00000000..936f18ea --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentInfo.java @@ -0,0 +1,261 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentInfo; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * PageDataAgentInfo + */ +@JsonPropertyOrder({ + PageDataAgentInfo.JSON_PROPERTY_DATA, + PageDataAgentInfo.JSON_PROPERTY_TOTAL_PAGES, + PageDataAgentInfo.JSON_PROPERTY_TOTAL_ELEMENTS, + PageDataAgentInfo.JSON_PROPERTY_HAS_NEXT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class PageDataAgentInfo { + public static final String JSON_PROPERTY_DATA = "data"; + @Nullable + private List data = new ArrayList<>(); + + public static final String JSON_PROPERTY_TOTAL_PAGES = "totalPages"; + @Nullable + private Integer totalPages; + + public static final String JSON_PROPERTY_TOTAL_ELEMENTS = "totalElements"; + @Nullable + private Long totalElements; + + public static final String JSON_PROPERTY_HAS_NEXT = "hasNext"; + @Nullable + private Boolean hasNext; + + public PageDataAgentInfo() { + } + + @JsonCreator + public PageDataAgentInfo( + @JsonProperty(JSON_PROPERTY_TOTAL_PAGES) Integer totalPages, + @JsonProperty(JSON_PROPERTY_TOTAL_ELEMENTS) Long totalElements, + @JsonProperty(JSON_PROPERTY_HAS_NEXT) Boolean hasNext + ) { + this(); + this.totalPages = totalPages; + this.totalElements = totalElements; + this.hasNext = hasNext; + } + + public PageDataAgentInfo data(@Nullable List data) { + this.data = data; + return this; + } + + public PageDataAgentInfo addDataItem(AgentInfo dataItem) { + if (this.data == null) { + this.data = new ArrayList<>(); + } + this.data.add(dataItem); + return this; + } + + /** + * Array of the entities + * @return data + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getData() { + return data; + } + + + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setData(@Nullable List data) { + this.data = data; + } + + + /** + * Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria + * @return totalPages + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_PAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getTotalPages() { + return totalPages; + } + + + + + /** + * Total number of elements in all available pages + * @return totalElements + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_ELEMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getTotalElements() { + return totalElements; + } + + + + + /** + * 'false' value indicates the end of the result set + * @return hasNext + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_HAS_NEXT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getHasNext() { + return hasNext; + } + + + + + /** + * Return true if this PageDataAgentInfo object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PageDataAgentInfo pageDataAgentInfo = (PageDataAgentInfo) o; + return Objects.equals(this.data, pageDataAgentInfo.data) && + Objects.equals(this.totalPages, pageDataAgentInfo.totalPages) && + Objects.equals(this.totalElements, pageDataAgentInfo.totalElements) && + Objects.equals(this.hasNext, pageDataAgentInfo.hasNext); + } + + @Override + public int hashCode() { + return Objects.hash(data, totalPages, totalElements, hasNext); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class PageDataAgentInfo {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" totalPages: ").append(toIndentedString(totalPages)).append("\n"); + sb.append(" totalElements: ").append(toIndentedString(totalElements)).append("\n"); + sb.append(" hasNext: ").append(toIndentedString(hasNext)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `data` to the URL query string + if (getData() != null) { + for (int i = 0; i < getData().size(); i++) { + if (getData().get(i) != null) { + joiner.add(getData().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sdata%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `totalPages` to the URL query string + if (getTotalPages() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalPages%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalPages())))); + } + + // add `totalElements` to the URL query string + if (getTotalElements() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalElements%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalElements())))); + } + + // add `hasNext` to the URL query string + if (getHasNext() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%shasNext%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getHasNext())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/PageDataAgentProfile.java b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentProfile.java new file mode 100644 index 00000000..d045a2f0 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentProfile.java @@ -0,0 +1,261 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentProfile; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * PageDataAgentProfile + */ +@JsonPropertyOrder({ + PageDataAgentProfile.JSON_PROPERTY_DATA, + PageDataAgentProfile.JSON_PROPERTY_TOTAL_PAGES, + PageDataAgentProfile.JSON_PROPERTY_TOTAL_ELEMENTS, + PageDataAgentProfile.JSON_PROPERTY_HAS_NEXT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class PageDataAgentProfile { + public static final String JSON_PROPERTY_DATA = "data"; + @Nullable + private List data = new ArrayList<>(); + + public static final String JSON_PROPERTY_TOTAL_PAGES = "totalPages"; + @Nullable + private Integer totalPages; + + public static final String JSON_PROPERTY_TOTAL_ELEMENTS = "totalElements"; + @Nullable + private Long totalElements; + + public static final String JSON_PROPERTY_HAS_NEXT = "hasNext"; + @Nullable + private Boolean hasNext; + + public PageDataAgentProfile() { + } + + @JsonCreator + public PageDataAgentProfile( + @JsonProperty(JSON_PROPERTY_TOTAL_PAGES) Integer totalPages, + @JsonProperty(JSON_PROPERTY_TOTAL_ELEMENTS) Long totalElements, + @JsonProperty(JSON_PROPERTY_HAS_NEXT) Boolean hasNext + ) { + this(); + this.totalPages = totalPages; + this.totalElements = totalElements; + this.hasNext = hasNext; + } + + public PageDataAgentProfile data(@Nullable List data) { + this.data = data; + return this; + } + + public PageDataAgentProfile addDataItem(AgentProfile dataItem) { + if (this.data == null) { + this.data = new ArrayList<>(); + } + this.data.add(dataItem); + return this; + } + + /** + * Array of the entities + * @return data + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getData() { + return data; + } + + + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setData(@Nullable List data) { + this.data = data; + } + + + /** + * Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria + * @return totalPages + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_PAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getTotalPages() { + return totalPages; + } + + + + + /** + * Total number of elements in all available pages + * @return totalElements + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_ELEMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getTotalElements() { + return totalElements; + } + + + + + /** + * 'false' value indicates the end of the result set + * @return hasNext + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_HAS_NEXT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getHasNext() { + return hasNext; + } + + + + + /** + * Return true if this PageDataAgentProfile object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PageDataAgentProfile pageDataAgentProfile = (PageDataAgentProfile) o; + return Objects.equals(this.data, pageDataAgentProfile.data) && + Objects.equals(this.totalPages, pageDataAgentProfile.totalPages) && + Objects.equals(this.totalElements, pageDataAgentProfile.totalElements) && + Objects.equals(this.hasNext, pageDataAgentProfile.hasNext); + } + + @Override + public int hashCode() { + return Objects.hash(data, totalPages, totalElements, hasNext); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class PageDataAgentProfile {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" totalPages: ").append(toIndentedString(totalPages)).append("\n"); + sb.append(" totalElements: ").append(toIndentedString(totalElements)).append("\n"); + sb.append(" hasNext: ").append(toIndentedString(hasNext)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `data` to the URL query string + if (getData() != null) { + for (int i = 0; i < getData().size(); i++) { + if (getData().get(i) != null) { + joiner.add(getData().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sdata%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `totalPages` to the URL query string + if (getTotalPages() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalPages%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalPages())))); + } + + // add `totalElements` to the URL query string + if (getTotalElements() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalElements%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalElements())))); + } + + // add `hasNext` to the URL query string + if (getHasNext() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%shasNext%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getHasNext())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/PageDataAgentProfileInfo.java b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentProfileInfo.java new file mode 100644 index 00000000..028f1698 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/PageDataAgentProfileInfo.java @@ -0,0 +1,261 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.thingsboard.client.model.AgentProfileInfo; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * PageDataAgentProfileInfo + */ +@JsonPropertyOrder({ + PageDataAgentProfileInfo.JSON_PROPERTY_DATA, + PageDataAgentProfileInfo.JSON_PROPERTY_TOTAL_PAGES, + PageDataAgentProfileInfo.JSON_PROPERTY_TOTAL_ELEMENTS, + PageDataAgentProfileInfo.JSON_PROPERTY_HAS_NEXT +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class PageDataAgentProfileInfo { + public static final String JSON_PROPERTY_DATA = "data"; + @Nullable + private List data = new ArrayList<>(); + + public static final String JSON_PROPERTY_TOTAL_PAGES = "totalPages"; + @Nullable + private Integer totalPages; + + public static final String JSON_PROPERTY_TOTAL_ELEMENTS = "totalElements"; + @Nullable + private Long totalElements; + + public static final String JSON_PROPERTY_HAS_NEXT = "hasNext"; + @Nullable + private Boolean hasNext; + + public PageDataAgentProfileInfo() { + } + + @JsonCreator + public PageDataAgentProfileInfo( + @JsonProperty(JSON_PROPERTY_TOTAL_PAGES) Integer totalPages, + @JsonProperty(JSON_PROPERTY_TOTAL_ELEMENTS) Long totalElements, + @JsonProperty(JSON_PROPERTY_HAS_NEXT) Boolean hasNext + ) { + this(); + this.totalPages = totalPages; + this.totalElements = totalElements; + this.hasNext = hasNext; + } + + public PageDataAgentProfileInfo data(@Nullable List data) { + this.data = data; + return this; + } + + public PageDataAgentProfileInfo addDataItem(AgentProfileInfo dataItem) { + if (this.data == null) { + this.data = new ArrayList<>(); + } + this.data.add(dataItem); + return this; + } + + /** + * Array of the entities + * @return data + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getData() { + return data; + } + + + @JsonProperty(value = JSON_PROPERTY_DATA, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setData(@Nullable List data) { + this.data = data; + } + + + /** + * Total number of available pages. Calculated based on the 'pageSize' request parameter and total number of entities that match search criteria + * @return totalPages + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_PAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getTotalPages() { + return totalPages; + } + + + + + /** + * Total number of elements in all available pages + * @return totalElements + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_TOTAL_ELEMENTS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getTotalElements() { + return totalElements; + } + + + + + /** + * 'false' value indicates the end of the result set + * @return hasNext + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_HAS_NEXT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getHasNext() { + return hasNext; + } + + + + + /** + * Return true if this PageDataAgentProfileInfo object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PageDataAgentProfileInfo pageDataAgentProfileInfo = (PageDataAgentProfileInfo) o; + return Objects.equals(this.data, pageDataAgentProfileInfo.data) && + Objects.equals(this.totalPages, pageDataAgentProfileInfo.totalPages) && + Objects.equals(this.totalElements, pageDataAgentProfileInfo.totalElements) && + Objects.equals(this.hasNext, pageDataAgentProfileInfo.hasNext); + } + + @Override + public int hashCode() { + return Objects.hash(data, totalPages, totalElements, hasNext); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class PageDataAgentProfileInfo {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" totalPages: ").append(toIndentedString(totalPages)).append("\n"); + sb.append(" totalElements: ").append(toIndentedString(totalElements)).append("\n"); + sb.append(" hasNext: ").append(toIndentedString(hasNext)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `data` to the URL query string + if (getData() != null) { + for (int i = 0; i < getData().size(); i++) { + if (getData().get(i) != null) { + joiner.add(getData().get(i).toUrlQueryString(String.format(java.util.Locale.ROOT, "%sdata%s%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix)))); + } + } + } + + // add `totalPages` to the URL query string + if (getTotalPages() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalPages%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalPages())))); + } + + // add `totalElements` to the URL query string + if (getTotalElements() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stotalElements%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTotalElements())))); + } + + // add `hasNext` to the URL query string + if (getHasNext() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%shasNext%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getHasNext())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/ProcessingStartStatus.java b/paas/src/main/java/org/thingsboard/client/model/ProcessingStartStatus.java new file mode 100644 index 00000000..562cddc6 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/ProcessingStartStatus.java @@ -0,0 +1,82 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets ProcessingStartStatus + */ +public enum ProcessingStartStatus { + + DELIVERY_FAIL("DELIVERY_FAIL"), + + PENDING("PENDING"), + + DELIVERED("DELIVERED"); + + private String value; + + ProcessingStartStatus(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static ProcessingStartStatus fromValue(String value) { + for (ProcessingStartStatus b : ProcessingStartStatus.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/RelationTypeGroup.java b/paas/src/main/java/org/thingsboard/client/model/RelationTypeGroup.java index 94ccc494..b31a941e 100644 --- a/paas/src/main/java/org/thingsboard/client/model/RelationTypeGroup.java +++ b/paas/src/main/java/org/thingsboard/client/model/RelationTypeGroup.java @@ -44,7 +44,9 @@ public enum RelationTypeGroup { EDGE("EDGE"), - EDGE_AUTO_ASSIGN_RULE_CHAIN("EDGE_AUTO_ASSIGN_RULE_CHAIN"); + EDGE_AUTO_ASSIGN_RULE_CHAIN("EDGE_AUTO_ASSIGN_RULE_CHAIN"), + + AGENT("AGENT"); private String value; diff --git a/paas/src/main/java/org/thingsboard/client/model/Report.java b/paas/src/main/java/org/thingsboard/client/model/Report.java index 876e49b1..b0207eb1 100644 --- a/paas/src/main/java/org/thingsboard/client/model/Report.java +++ b/paas/src/main/java/org/thingsboard/client/model/Report.java @@ -53,7 +53,9 @@ Report.JSON_PROPERTY_FORMAT, Report.JSON_PROPERTY_NAME, Report.JSON_PROPERTY_USER_ID, - Report.JSON_PROPERTY_OWNER_ID + Report.JSON_PROPERTY_PUBLIC_KEY, + Report.JSON_PROPERTY_OWNER_ID, + Report.JSON_PROPERTY_PUBLIC }) @Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") public class Report { @@ -89,10 +91,18 @@ public class Report { @Nonnull private UserId userId; + public static final String JSON_PROPERTY_PUBLIC_KEY = "publicKey"; + @Nullable + private String publicKey; + public static final String JSON_PROPERTY_OWNER_ID = "ownerId"; @Nullable private EntityId ownerId; + public static final String JSON_PROPERTY_PUBLIC = "public"; + @Nullable + private Boolean _public; + public Report() { } @@ -288,6 +298,30 @@ public void setUserId(@Nonnull UserId userId) { } + public Report publicKey(@Nullable String publicKey) { + this.publicKey = publicKey; + return this; + } + + /** + * Get publicKey + * @return publicKey + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PUBLIC_KEY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getPublicKey() { + return publicKey; + } + + + @JsonProperty(value = JSON_PROPERTY_PUBLIC_KEY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setPublicKey(@Nullable String publicKey) { + this.publicKey = publicKey; + } + + /** * JSON object with Customer or Tenant Id * @return ownerId @@ -302,6 +336,30 @@ public EntityId getOwnerId() { + public Report _public(@Nullable Boolean _public) { + this._public = _public; + return this; + } + + /** + * Get _public + * @return _public + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PUBLIC, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getPublic() { + return _public; + } + + + @JsonProperty(value = JSON_PROPERTY_PUBLIC, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setPublic(@Nullable Boolean _public) { + this._public = _public; + } + + /** * Return true if this Report object is equal to o. */ @@ -322,12 +380,14 @@ public boolean equals(Object o) { Objects.equals(this.format, report.format) && Objects.equals(this.name, report.name) && Objects.equals(this.userId, report.userId) && - Objects.equals(this.ownerId, report.ownerId); + Objects.equals(this.publicKey, report.publicKey) && + Objects.equals(this.ownerId, report.ownerId) && + Objects.equals(this._public, report._public); } @Override public int hashCode() { - return Objects.hash(id, createdTime, tenantId, customerId, templateId, format, name, userId, ownerId); + return Objects.hash(id, createdTime, tenantId, customerId, templateId, format, name, userId, publicKey, ownerId, _public); } @Override @@ -342,7 +402,9 @@ public String toString() { sb.append(" format: ").append(toIndentedString(format)).append("\n"); sb.append(" name: ").append(toIndentedString(name)).append("\n"); sb.append(" userId: ").append(toIndentedString(userId)).append("\n"); + sb.append(" publicKey: ").append(toIndentedString(publicKey)).append("\n"); sb.append(" ownerId: ").append(toIndentedString(ownerId)).append("\n"); + sb.append(" _public: ").append(toIndentedString(_public)).append("\n"); sb.append("}"); return sb.toString(); } @@ -430,11 +492,21 @@ public String toUrlQueryString(String prefix) { joiner.add(getUserId().toUrlQueryString(prefix + "userId" + suffix)); } + // add `publicKey` to the URL query string + if (getPublicKey() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%spublicKey%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getPublicKey())))); + } + // add `ownerId` to the URL query string if (getOwnerId() != null) { joiner.add(getOwnerId().toUrlQueryString(prefix + "ownerId" + suffix)); } + // add `public` to the URL query string + if (getPublic() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%spublic%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getPublic())))); + } + return joiner.toString(); } } diff --git a/paas/src/main/java/org/thingsboard/client/model/ReportInfo.java b/paas/src/main/java/org/thingsboard/client/model/ReportInfo.java index 46ec43b1..78898c1c 100644 --- a/paas/src/main/java/org/thingsboard/client/model/ReportInfo.java +++ b/paas/src/main/java/org/thingsboard/client/model/ReportInfo.java @@ -54,10 +54,12 @@ ReportInfo.JSON_PROPERTY_FORMAT, ReportInfo.JSON_PROPERTY_NAME, ReportInfo.JSON_PROPERTY_USER_ID, + ReportInfo.JSON_PROPERTY_PUBLIC_KEY, ReportInfo.JSON_PROPERTY_TEMPLATE_INFO, ReportInfo.JSON_PROPERTY_CUSTOMER_TITLE, ReportInfo.JSON_PROPERTY_USER_NAME, - ReportInfo.JSON_PROPERTY_OWNER_ID + ReportInfo.JSON_PROPERTY_OWNER_ID, + ReportInfo.JSON_PROPERTY_PUBLIC }) @Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") public class ReportInfo { @@ -93,6 +95,10 @@ public class ReportInfo { @Nonnull private UserId userId; + public static final String JSON_PROPERTY_PUBLIC_KEY = "publicKey"; + @Nullable + private String publicKey; + public static final String JSON_PROPERTY_TEMPLATE_INFO = "templateInfo"; @Nullable private EntityInfo templateInfo; @@ -109,6 +115,10 @@ public class ReportInfo { @Nullable private EntityId ownerId; + public static final String JSON_PROPERTY_PUBLIC = "public"; + @Nullable + private Boolean _public; + public ReportInfo() { } @@ -304,6 +314,30 @@ public void setUserId(@Nonnull UserId userId) { } + public ReportInfo publicKey(@Nullable String publicKey) { + this.publicKey = publicKey; + return this; + } + + /** + * Get publicKey + * @return publicKey + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PUBLIC_KEY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getPublicKey() { + return publicKey; + } + + + @JsonProperty(value = JSON_PROPERTY_PUBLIC_KEY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setPublicKey(@Nullable String publicKey) { + this.publicKey = publicKey; + } + + public ReportInfo templateInfo(@Nullable EntityInfo templateInfo) { this.templateInfo = templateInfo; return this; @@ -390,6 +424,30 @@ public EntityId getOwnerId() { + public ReportInfo _public(@Nullable Boolean _public) { + this._public = _public; + return this; + } + + /** + * Get _public + * @return _public + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PUBLIC, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getPublic() { + return _public; + } + + + @JsonProperty(value = JSON_PROPERTY_PUBLIC, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setPublic(@Nullable Boolean _public) { + this._public = _public; + } + + /** * Return true if this ReportInfo object is equal to o. */ @@ -410,15 +468,17 @@ public boolean equals(Object o) { Objects.equals(this.format, reportInfo.format) && Objects.equals(this.name, reportInfo.name) && Objects.equals(this.userId, reportInfo.userId) && + Objects.equals(this.publicKey, reportInfo.publicKey) && Objects.equals(this.templateInfo, reportInfo.templateInfo) && Objects.equals(this.customerTitle, reportInfo.customerTitle) && Objects.equals(this.userName, reportInfo.userName) && - Objects.equals(this.ownerId, reportInfo.ownerId); + Objects.equals(this.ownerId, reportInfo.ownerId) && + Objects.equals(this._public, reportInfo._public); } @Override public int hashCode() { - return Objects.hash(id, createdTime, tenantId, customerId, templateId, format, name, userId, templateInfo, customerTitle, userName, ownerId); + return Objects.hash(id, createdTime, tenantId, customerId, templateId, format, name, userId, publicKey, templateInfo, customerTitle, userName, ownerId, _public); } @Override @@ -433,10 +493,12 @@ public String toString() { sb.append(" format: ").append(toIndentedString(format)).append("\n"); sb.append(" name: ").append(toIndentedString(name)).append("\n"); sb.append(" userId: ").append(toIndentedString(userId)).append("\n"); + sb.append(" publicKey: ").append(toIndentedString(publicKey)).append("\n"); sb.append(" templateInfo: ").append(toIndentedString(templateInfo)).append("\n"); sb.append(" customerTitle: ").append(toIndentedString(customerTitle)).append("\n"); sb.append(" userName: ").append(toIndentedString(userName)).append("\n"); sb.append(" ownerId: ").append(toIndentedString(ownerId)).append("\n"); + sb.append(" _public: ").append(toIndentedString(_public)).append("\n"); sb.append("}"); return sb.toString(); } @@ -524,6 +586,11 @@ public String toUrlQueryString(String prefix) { joiner.add(getUserId().toUrlQueryString(prefix + "userId" + suffix)); } + // add `publicKey` to the URL query string + if (getPublicKey() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%spublicKey%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getPublicKey())))); + } + // add `templateInfo` to the URL query string if (getTemplateInfo() != null) { joiner.add(getTemplateInfo().toUrlQueryString(prefix + "templateInfo" + suffix)); @@ -544,6 +611,11 @@ public String toUrlQueryString(String prefix) { joiner.add(getOwnerId().toUrlQueryString(prefix + "ownerId" + suffix)); } + // add `public` to the URL query string + if (getPublic() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%spublic%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getPublic())))); + } + return joiner.toString(); } } diff --git a/paas/src/main/java/org/thingsboard/client/model/ReportJobConfiguration.java b/paas/src/main/java/org/thingsboard/client/model/ReportJobConfiguration.java index c329f6ef..afb8e511 100644 --- a/paas/src/main/java/org/thingsboard/client/model/ReportJobConfiguration.java +++ b/paas/src/main/java/org/thingsboard/client/model/ReportJobConfiguration.java @@ -57,6 +57,7 @@ ReportJobConfiguration.JSON_PROPERTY_REPORT_TEMPLATE_ID, ReportJobConfiguration.JSON_PROPERTY_USER_ID, ReportJobConfiguration.JSON_PROPERTY_TIMEZONE, + ReportJobConfiguration.JSON_PROPERTY_MAKE_PUBLIC, ReportJobConfiguration.JSON_PROPERTY_TARGETS, ReportJobConfiguration.JSON_PROPERTY_NOTIFICATION_TEMPLATE_ID, ReportJobConfiguration.JSON_PROPERTY_NOTIFICATION_REQUESTS, @@ -86,6 +87,10 @@ public class ReportJobConfiguration extends JobConfiguration { @Nullable private String timezone; + public static final String JSON_PROPERTY_MAKE_PUBLIC = "makePublic"; + @Nullable + private Boolean makePublic; + public static final String JSON_PROPERTY_TARGETS = "targets"; @Nullable private List targets = new ArrayList<>(); @@ -193,6 +198,30 @@ public void setTimezone(@Nullable String timezone) { } + public ReportJobConfiguration makePublic(@Nullable Boolean makePublic) { + this.makePublic = makePublic; + return this; + } + + /** + * Get makePublic + * @return makePublic + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_MAKE_PUBLIC, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getMakePublic() { + return makePublic; + } + + + @JsonProperty(value = JSON_PROPERTY_MAKE_PUBLIC, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMakePublic(@Nullable Boolean makePublic) { + this.makePublic = makePublic; + } + + public ReportJobConfiguration targets(@Nullable List targets) { this.targets = targets; return this; @@ -428,6 +457,7 @@ public boolean equals(Object o) { return Objects.equals(this.reportTemplateId, reportJobConfiguration.reportTemplateId) && Objects.equals(this.userId, reportJobConfiguration.userId) && Objects.equals(this.timezone, reportJobConfiguration.timezone) && + Objects.equals(this.makePublic, reportJobConfiguration.makePublic) && Objects.equals(this.targets, reportJobConfiguration.targets) && Objects.equals(this.notificationTemplateId, reportJobConfiguration.notificationTemplateId) && Objects.equals(this.notificationRequests, reportJobConfiguration.notificationRequests) && @@ -441,7 +471,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(reportTemplateId, userId, timezone, targets, notificationTemplateId, notificationRequests, originator, ruleNode, outputTbMsgProto, queueName, schedulerEventInfo, super.hashCode()); + return Objects.hash(reportTemplateId, userId, timezone, makePublic, targets, notificationTemplateId, notificationRequests, originator, ruleNode, outputTbMsgProto, queueName, schedulerEventInfo, super.hashCode()); } @Override @@ -452,6 +482,7 @@ public String toString() { sb.append(" reportTemplateId: ").append(toIndentedString(reportTemplateId)).append("\n"); sb.append(" userId: ").append(toIndentedString(userId)).append("\n"); sb.append(" timezone: ").append(toIndentedString(timezone)).append("\n"); + sb.append(" makePublic: ").append(toIndentedString(makePublic)).append("\n"); sb.append(" targets: ").append(toIndentedString(targets)).append("\n"); sb.append(" notificationTemplateId: ").append(toIndentedString(notificationTemplateId)).append("\n"); sb.append(" notificationRequests: ").append(toIndentedString(notificationRequests)).append("\n"); @@ -542,6 +573,11 @@ public String toUrlQueryString(String prefix) { joiner.add(String.format(java.util.Locale.ROOT, "%stimezone%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTimezone())))); } + // add `makePublic` to the URL query string + if (getMakePublic() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%smakePublic%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getMakePublic())))); + } + // add `targets` to the URL query string if (getTargets() != null) { for (int i = 0; i < getTargets().size(); i++) { diff --git a/paas/src/main/java/org/thingsboard/client/model/ReportRequest.java b/paas/src/main/java/org/thingsboard/client/model/ReportRequest.java index 57f3f2cc..436f074f 100644 --- a/paas/src/main/java/org/thingsboard/client/model/ReportRequest.java +++ b/paas/src/main/java/org/thingsboard/client/model/ReportRequest.java @@ -48,6 +48,7 @@ ReportRequest.JSON_PROPERTY_REPORT_TEMPLATE_CONFIG, ReportRequest.JSON_PROPERTY_TIMEZONE, ReportRequest.JSON_PROPERTY_USER_ID, + ReportRequest.JSON_PROPERTY_MAKE_PUBLIC, ReportRequest.JSON_PROPERTY_ORIGINATOR, ReportRequest.JSON_PROPERTY_TARGETS, ReportRequest.JSON_PROPERTY_NOTIFICATION_TEMPLATE_ID @@ -70,6 +71,10 @@ public class ReportRequest { @Nullable private String userId; + public static final String JSON_PROPERTY_MAKE_PUBLIC = "makePublic"; + @Nullable + private Boolean makePublic; + public static final String JSON_PROPERTY_ORIGINATOR = "originator"; @Nullable private EntityId originator; @@ -181,6 +186,30 @@ public void setUserId(@Nullable String userId) { } + public ReportRequest makePublic(@Nullable Boolean makePublic) { + this.makePublic = makePublic; + return this; + } + + /** + * A boolean value indicating whether the generated report should be made public. + * @return makePublic + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_MAKE_PUBLIC, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getMakePublic() { + return makePublic; + } + + + @JsonProperty(value = JSON_PROPERTY_MAKE_PUBLIC, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMakePublic(@Nullable Boolean makePublic) { + this.makePublic = makePublic; + } + + public ReportRequest originator(@Nullable EntityId originator) { this.originator = originator; return this; @@ -277,6 +306,7 @@ public boolean equals(Object o) { Objects.equals(this.reportTemplateConfig, reportRequest.reportTemplateConfig) && Objects.equals(this.timezone, reportRequest.timezone) && Objects.equals(this.userId, reportRequest.userId) && + Objects.equals(this.makePublic, reportRequest.makePublic) && Objects.equals(this.originator, reportRequest.originator) && Objects.equals(this.targets, reportRequest.targets) && Objects.equals(this.notificationTemplateId, reportRequest.notificationTemplateId); @@ -284,7 +314,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(reportTemplateId, reportTemplateConfig, timezone, userId, originator, targets, notificationTemplateId); + return Objects.hash(reportTemplateId, reportTemplateConfig, timezone, userId, makePublic, originator, targets, notificationTemplateId); } @Override @@ -295,6 +325,7 @@ public String toString() { sb.append(" reportTemplateConfig: ").append(toIndentedString(reportTemplateConfig)).append("\n"); sb.append(" timezone: ").append(toIndentedString(timezone)).append("\n"); sb.append(" userId: ").append(toIndentedString(userId)).append("\n"); + sb.append(" makePublic: ").append(toIndentedString(makePublic)).append("\n"); sb.append(" originator: ").append(toIndentedString(originator)).append("\n"); sb.append(" targets: ").append(toIndentedString(targets)).append("\n"); sb.append(" notificationTemplateId: ").append(toIndentedString(notificationTemplateId)).append("\n"); @@ -365,6 +396,11 @@ public String toUrlQueryString(String prefix) { joiner.add(String.format(java.util.Locale.ROOT, "%suserId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getUserId())))); } + // add `makePublic` to the URL query string + if (getMakePublic() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%smakePublic%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getMakePublic())))); + } + // add `originator` to the URL query string if (getOriginator() != null) { joiner.add(getOriginator().toUrlQueryString(prefix + "originator" + suffix)); diff --git a/paas/src/main/java/org/thingsboard/client/model/Resource.java b/paas/src/main/java/org/thingsboard/client/model/Resource.java index c9351b48..36008ee3 100644 --- a/paas/src/main/java/org/thingsboard/client/model/Resource.java +++ b/paas/src/main/java/org/thingsboard/client/model/Resource.java @@ -100,6 +100,8 @@ public enum Resource { DASHBOARD_GROUP("DASHBOARD_GROUP"), + AGENT_GROUP("AGENT_GROUP"), + ROLE("ROLE"), GROUP_PERMISSION("GROUP_PERMISSION"), @@ -138,6 +140,12 @@ public enum Resource { AI_MODEL("AI_MODEL"), + AGENT("AGENT"), + + AGENT_APP_PROFILE("AGENT_APP_PROFILE"), + + AGENT_PROFILE("AGENT_PROFILE"), + AI("AI"), API_KEY("API_KEY"); diff --git a/paas/src/main/java/org/thingsboard/client/model/RollBackStep.java b/paas/src/main/java/org/thingsboard/client/model/RollBackStep.java new file mode 100644 index 00000000..82eec383 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/RollBackStep.java @@ -0,0 +1,242 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStep; +import org.thingsboard.client.model.AgentAppStepType; +import org.thingsboard.client.model.RollBackStepState; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * RollBackStep + */ +@JsonPropertyOrder({ + RollBackStep.JSON_PROPERTY_STATE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class RollBackStep extends AgentAppStep { + public static final String JSON_PROPERTY_STATE = "state"; + @Nullable + private RollBackStepState state; + + public RollBackStep() { + } + + public RollBackStep state(@Nullable RollBackStepState state) { + this.state = state; + return this; + } + + /** + * Get state + * @return state + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_STATE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public RollBackStepState getState() { + return state; + } + + + @JsonProperty(value = JSON_PROPERTY_STATE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setState(@Nullable RollBackStepState state) { + this.state = state; + } + + + @Override + public RollBackStep id(@Nullable UUID id) { + this.setId(id); + return this; + } + + @Override + public RollBackStep nextId(@Nullable UUID nextId) { + this.setNextId(nextId); + return this; + } + + @Override + public RollBackStep templateOnly(@Nullable Boolean templateOnly) { + this.setTemplateOnly(templateOnly); + return this; + } + + @Override + public RollBackStep condition(@Nullable String condition) { + this.setCondition(condition); + return this; + } + + @Override + public RollBackStep stateful(@Nullable Boolean stateful) { + this.setStateful(stateful); + return this; + } + + /** + * Return true if this RollBackStep object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RollBackStep rollBackStep = (RollBackStep) o; + return Objects.equals(this.state, rollBackStep.state) && + super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(state, super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RollBackStep {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" state: ").append(toIndentedString(state)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `nextId` to the URL query string + if (getNextId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextId())))); + } + + // add `title` to the URL query string + if (getTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTitle())))); + } + + // add `templateOnly` to the URL query string + if (getTemplateOnly() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateOnly%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateOnly())))); + } + + // add `condition` to the URL query string + if (getCondition() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scondition%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCondition())))); + } + + // add `stateful` to the URL query string + if (getStateful() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstateful%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStateful())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `state` to the URL query string + if (getState() != null) { + joiner.add(getState().toUrlQueryString(prefix + "state" + suffix)); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("RollBackStep", RollBackStep.class); + JSON.registerDiscriminator(RollBackStep.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/RollBackStepState.java b/paas/src/main/java/org/thingsboard/client/model/RollBackStepState.java new file mode 100644 index 00000000..42dbef34 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/RollBackStepState.java @@ -0,0 +1,181 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppStepState; +import org.thingsboard.client.model.AgentAppStepType; +import org.thingsboard.client.model.StepFieldAgentAppEventId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * RollBackStepState + */ +@JsonPropertyOrder({ + RollBackStepState.JSON_PROPERTY_FAILED_EVENT_ID +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class RollBackStepState extends AgentAppStepState { + public static final String JSON_PROPERTY_FAILED_EVENT_ID = "failedEventId"; + @Nullable + private StepFieldAgentAppEventId failedEventId; + + public RollBackStepState() { + } + + public RollBackStepState failedEventId(@Nullable StepFieldAgentAppEventId failedEventId) { + this.failedEventId = failedEventId; + return this; + } + + /** + * Get failedEventId + * @return failedEventId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_FAILED_EVENT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldAgentAppEventId getFailedEventId() { + return failedEventId; + } + + + @JsonProperty(value = JSON_PROPERTY_FAILED_EVENT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setFailedEventId(@Nullable StepFieldAgentAppEventId failedEventId) { + this.failedEventId = failedEventId; + } + + + /** + * Return true if this RollBackStepState object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RollBackStepState rollBackStepState = (RollBackStepState) o; + return Objects.equals(this.failedEventId, rollBackStepState.failedEventId) && + super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(failedEventId, super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RollBackStepState {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" failedEventId: ").append(toIndentedString(failedEventId)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `failedEventId` to the URL query string + if (getFailedEventId() != null) { + joiner.add(getFailedEventId().toUrlQueryString(prefix + "failedEventId" + suffix)); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("RollBackStepState", RollBackStepState.class); + JSON.registerDiscriminator(RollBackStepState.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/RunJobStep.java b/paas/src/main/java/org/thingsboard/client/model/RunJobStep.java new file mode 100644 index 00000000..c215603f --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/RunJobStep.java @@ -0,0 +1,242 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.UUID; +import org.thingsboard.client.model.AgentAppStep; +import org.thingsboard.client.model.AgentAppStepType; +import org.thingsboard.client.model.RunJobStepState; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * RunJobStep + */ +@JsonPropertyOrder({ + RunJobStep.JSON_PROPERTY_STATE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class RunJobStep extends AgentAppStep { + public static final String JSON_PROPERTY_STATE = "state"; + @Nullable + private RunJobStepState state; + + public RunJobStep() { + } + + public RunJobStep state(@Nullable RunJobStepState state) { + this.state = state; + return this; + } + + /** + * Get state + * @return state + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_STATE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public RunJobStepState getState() { + return state; + } + + + @JsonProperty(value = JSON_PROPERTY_STATE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setState(@Nullable RunJobStepState state) { + this.state = state; + } + + + @Override + public RunJobStep id(@Nullable UUID id) { + this.setId(id); + return this; + } + + @Override + public RunJobStep nextId(@Nullable UUID nextId) { + this.setNextId(nextId); + return this; + } + + @Override + public RunJobStep templateOnly(@Nullable Boolean templateOnly) { + this.setTemplateOnly(templateOnly); + return this; + } + + @Override + public RunJobStep condition(@Nullable String condition) { + this.setCondition(condition); + return this; + } + + @Override + public RunJobStep stateful(@Nullable Boolean stateful) { + this.setStateful(stateful); + return this; + } + + /** + * Return true if this RunJobStep object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RunJobStep runJobStep = (RunJobStep) o; + return Objects.equals(this.state, runJobStep.state) && + super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(state, super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RunJobStep {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" state: ").append(toIndentedString(state)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `id` to the URL query string + if (getId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sid%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getId())))); + } + + // add `nextId` to the URL query string + if (getNextId() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%snextId%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getNextId())))); + } + + // add `title` to the URL query string + if (getTitle() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stitle%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTitle())))); + } + + // add `templateOnly` to the URL query string + if (getTemplateOnly() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stemplateOnly%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getTemplateOnly())))); + } + + // add `condition` to the URL query string + if (getCondition() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%scondition%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getCondition())))); + } + + // add `stateful` to the URL query string + if (getStateful() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sstateful%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getStateful())))); + } + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `state` to the URL query string + if (getState() != null) { + joiner.add(getState().toUrlQueryString(prefix + "state" + suffix)); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("RunJobStep", RunJobStep.class); + JSON.registerDiscriminator(RunJobStep.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/RunJobStepState.java b/paas/src/main/java/org/thingsboard/client/model/RunJobStepState.java new file mode 100644 index 00000000..ba5ef599 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/RunJobStepState.java @@ -0,0 +1,472 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppStepState; +import org.thingsboard.client.model.AgentAppStepType; +import org.thingsboard.client.model.StepFieldBoolean; +import org.thingsboard.client.model.StepFieldInteger; +import org.thingsboard.client.model.StepFieldListString; +import org.thingsboard.client.model.StepFieldString; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.JSON; +import org.thingsboard.client.ApiClient; +/** + * RunJobStepState + */ +@JsonPropertyOrder({ + RunJobStepState.JSON_PROPERTY_IMAGE, + RunJobStepState.JSON_PROPERTY_ENTRYPOINT, + RunJobStepState.JSON_PROPERTY_CMD, + RunJobStepState.JSON_PROPERTY_ENV, + RunJobStepState.JSON_PROPERTY_BINDS, + RunJobStepState.JSON_PROPERTY_NETWORKS, + RunJobStepState.JSON_PROPERTY_PULL_IMAGES, + RunJobStepState.JSON_PROPERTY_RETRIES, + RunJobStepState.JSON_PROPERTY_NETWORK_FROM_SERVICE_IMAGE_REGEX_PATTERN +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +@JsonIgnoreProperties( + value = "type", // ignore manually set type, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the type to be set during deserialization +) +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) + +public class RunJobStepState extends AgentAppStepState { + public static final String JSON_PROPERTY_IMAGE = "image"; + @Nullable + private StepFieldString image; + + public static final String JSON_PROPERTY_ENTRYPOINT = "entrypoint"; + @Nullable + private StepFieldListString entrypoint; + + public static final String JSON_PROPERTY_CMD = "cmd"; + @Nullable + private StepFieldListString cmd; + + public static final String JSON_PROPERTY_ENV = "env"; + @Nullable + private StepFieldListString env; + + public static final String JSON_PROPERTY_BINDS = "binds"; + @Nullable + private StepFieldListString binds; + + public static final String JSON_PROPERTY_NETWORKS = "networks"; + @Nullable + private StepFieldListString networks; + + public static final String JSON_PROPERTY_PULL_IMAGES = "pullImages"; + @Nullable + private StepFieldBoolean pullImages; + + public static final String JSON_PROPERTY_RETRIES = "retries"; + @Nullable + private StepFieldInteger retries; + + public static final String JSON_PROPERTY_NETWORK_FROM_SERVICE_IMAGE_REGEX_PATTERN = "networkFromServiceImageRegexPattern"; + @Nullable + private StepFieldString networkFromServiceImageRegexPattern; + + public RunJobStepState() { + } + + public RunJobStepState image(@Nullable StepFieldString image) { + this.image = image; + return this; + } + + /** + * Get image + * @return image + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_IMAGE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldString getImage() { + return image; + } + + + @JsonProperty(value = JSON_PROPERTY_IMAGE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setImage(@Nullable StepFieldString image) { + this.image = image; + } + + + public RunJobStepState entrypoint(@Nullable StepFieldListString entrypoint) { + this.entrypoint = entrypoint; + return this; + } + + /** + * Get entrypoint + * @return entrypoint + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ENTRYPOINT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldListString getEntrypoint() { + return entrypoint; + } + + + @JsonProperty(value = JSON_PROPERTY_ENTRYPOINT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setEntrypoint(@Nullable StepFieldListString entrypoint) { + this.entrypoint = entrypoint; + } + + + public RunJobStepState cmd(@Nullable StepFieldListString cmd) { + this.cmd = cmd; + return this; + } + + /** + * Get cmd + * @return cmd + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_CMD, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldListString getCmd() { + return cmd; + } + + + @JsonProperty(value = JSON_PROPERTY_CMD, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setCmd(@Nullable StepFieldListString cmd) { + this.cmd = cmd; + } + + + public RunJobStepState env(@Nullable StepFieldListString env) { + this.env = env; + return this; + } + + /** + * Get env + * @return env + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_ENV, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldListString getEnv() { + return env; + } + + + @JsonProperty(value = JSON_PROPERTY_ENV, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setEnv(@Nullable StepFieldListString env) { + this.env = env; + } + + + public RunJobStepState binds(@Nullable StepFieldListString binds) { + this.binds = binds; + return this; + } + + /** + * Get binds + * @return binds + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_BINDS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldListString getBinds() { + return binds; + } + + + @JsonProperty(value = JSON_PROPERTY_BINDS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBinds(@Nullable StepFieldListString binds) { + this.binds = binds; + } + + + public RunJobStepState networks(@Nullable StepFieldListString networks) { + this.networks = networks; + return this; + } + + /** + * Get networks + * @return networks + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_NETWORKS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldListString getNetworks() { + return networks; + } + + + @JsonProperty(value = JSON_PROPERTY_NETWORKS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNetworks(@Nullable StepFieldListString networks) { + this.networks = networks; + } + + + public RunJobStepState pullImages(@Nullable StepFieldBoolean pullImages) { + this.pullImages = pullImages; + return this; + } + + /** + * Get pullImages + * @return pullImages + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PULL_IMAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldBoolean getPullImages() { + return pullImages; + } + + + @JsonProperty(value = JSON_PROPERTY_PULL_IMAGES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setPullImages(@Nullable StepFieldBoolean pullImages) { + this.pullImages = pullImages; + } + + + public RunJobStepState retries(@Nullable StepFieldInteger retries) { + this.retries = retries; + return this; + } + + /** + * Get retries + * @return retries + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_RETRIES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldInteger getRetries() { + return retries; + } + + + @JsonProperty(value = JSON_PROPERTY_RETRIES, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setRetries(@Nullable StepFieldInteger retries) { + this.retries = retries; + } + + + public RunJobStepState networkFromServiceImageRegexPattern(@Nullable StepFieldString networkFromServiceImageRegexPattern) { + this.networkFromServiceImageRegexPattern = networkFromServiceImageRegexPattern; + return this; + } + + /** + * Get networkFromServiceImageRegexPattern + * @return networkFromServiceImageRegexPattern + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_NETWORK_FROM_SERVICE_IMAGE_REGEX_PATTERN, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public StepFieldString getNetworkFromServiceImageRegexPattern() { + return networkFromServiceImageRegexPattern; + } + + + @JsonProperty(value = JSON_PROPERTY_NETWORK_FROM_SERVICE_IMAGE_REGEX_PATTERN, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNetworkFromServiceImageRegexPattern(@Nullable StepFieldString networkFromServiceImageRegexPattern) { + this.networkFromServiceImageRegexPattern = networkFromServiceImageRegexPattern; + } + + + /** + * Return true if this RunJobStepState object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RunJobStepState runJobStepState = (RunJobStepState) o; + return Objects.equals(this.image, runJobStepState.image) && + Objects.equals(this.entrypoint, runJobStepState.entrypoint) && + Objects.equals(this.cmd, runJobStepState.cmd) && + Objects.equals(this.env, runJobStepState.env) && + Objects.equals(this.binds, runJobStepState.binds) && + Objects.equals(this.networks, runJobStepState.networks) && + Objects.equals(this.pullImages, runJobStepState.pullImages) && + Objects.equals(this.retries, runJobStepState.retries) && + Objects.equals(this.networkFromServiceImageRegexPattern, runJobStepState.networkFromServiceImageRegexPattern) && + super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(image, entrypoint, cmd, env, binds, networks, pullImages, retries, networkFromServiceImageRegexPattern, super.hashCode()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RunJobStepState {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" image: ").append(toIndentedString(image)).append("\n"); + sb.append(" entrypoint: ").append(toIndentedString(entrypoint)).append("\n"); + sb.append(" cmd: ").append(toIndentedString(cmd)).append("\n"); + sb.append(" env: ").append(toIndentedString(env)).append("\n"); + sb.append(" binds: ").append(toIndentedString(binds)).append("\n"); + sb.append(" networks: ").append(toIndentedString(networks)).append("\n"); + sb.append(" pullImages: ").append(toIndentedString(pullImages)).append("\n"); + sb.append(" retries: ").append(toIndentedString(retries)).append("\n"); + sb.append(" networkFromServiceImageRegexPattern: ").append(toIndentedString(networkFromServiceImageRegexPattern)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `type` to the URL query string + if (getType() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%stype%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getType())))); + } + + // add `image` to the URL query string + if (getImage() != null) { + joiner.add(getImage().toUrlQueryString(prefix + "image" + suffix)); + } + + // add `entrypoint` to the URL query string + if (getEntrypoint() != null) { + joiner.add(getEntrypoint().toUrlQueryString(prefix + "entrypoint" + suffix)); + } + + // add `cmd` to the URL query string + if (getCmd() != null) { + joiner.add(getCmd().toUrlQueryString(prefix + "cmd" + suffix)); + } + + // add `env` to the URL query string + if (getEnv() != null) { + joiner.add(getEnv().toUrlQueryString(prefix + "env" + suffix)); + } + + // add `binds` to the URL query string + if (getBinds() != null) { + joiner.add(getBinds().toUrlQueryString(prefix + "binds" + suffix)); + } + + // add `networks` to the URL query string + if (getNetworks() != null) { + joiner.add(getNetworks().toUrlQueryString(prefix + "networks" + suffix)); + } + + // add `pullImages` to the URL query string + if (getPullImages() != null) { + joiner.add(getPullImages().toUrlQueryString(prefix + "pullImages" + suffix)); + } + + // add `retries` to the URL query string + if (getRetries() != null) { + joiner.add(getRetries().toUrlQueryString(prefix + "retries" + suffix)); + } + + // add `networkFromServiceImageRegexPattern` to the URL query string + if (getNetworkFromServiceImageRegexPattern() != null) { + joiner.add(getNetworkFromServiceImageRegexPattern().toUrlQueryString(prefix + "networkFromServiceImageRegexPattern" + suffix)); + } + + return joiner.toString(); + } +static { + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("RunJobStepState", RunJobStepState.class); + JSON.registerDiscriminator(RunJobStepState.class, "type", mappings); +} +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/SkipReason.java b/paas/src/main/java/org/thingsboard/client/model/SkipReason.java new file mode 100644 index 00000000..929dcf73 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/SkipReason.java @@ -0,0 +1,84 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets SkipReason + */ +public enum SkipReason { + + VERSION_MISMATCH("VERSION_MISMATCH"), + + ACTIVE_EVENT("ACTIVE_EVENT"), + + RATE_LIMIT_EXCEEDED("RATE_LIMIT_EXCEEDED"), + + ERROR("ERROR"); + + private String value; + + SkipReason(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static SkipReason fromValue(String value) { + for (SkipReason b : SkipReason.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + if (prefix == null) { + prefix = ""; + } + + return String.format(java.util.Locale.ROOT, "%s=%s", prefix, this.toString()); + } + +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/SkippedApp.java b/paas/src/main/java/org/thingsboard/client/model/SkippedApp.java new file mode 100644 index 00000000..341728ef --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/SkippedApp.java @@ -0,0 +1,338 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentApplicationId; +import org.thingsboard.client.model.AgentId; +import org.thingsboard.client.model.SkipReason; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * SkippedApp + */ +@JsonPropertyOrder({ + SkippedApp.JSON_PROPERTY_AGENT_ID, + SkippedApp.JSON_PROPERTY_AGENT_NAME, + SkippedApp.JSON_PROPERTY_APPLICATION_ID, + SkippedApp.JSON_PROPERTY_APPLICATION_NAME, + SkippedApp.JSON_PROPERTY_REASON, + SkippedApp.JSON_PROPERTY_MSG +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class SkippedApp { + public static final String JSON_PROPERTY_AGENT_ID = "agentId"; + @Nullable + private AgentId agentId; + + public static final String JSON_PROPERTY_AGENT_NAME = "agentName"; + @Nullable + private String agentName; + + public static final String JSON_PROPERTY_APPLICATION_ID = "applicationId"; + @Nullable + private AgentApplicationId applicationId; + + public static final String JSON_PROPERTY_APPLICATION_NAME = "applicationName"; + @Nullable + private String applicationName; + + public static final String JSON_PROPERTY_REASON = "reason"; + @Nullable + private SkipReason reason; + + public static final String JSON_PROPERTY_MSG = "msg"; + @Nullable + private String msg; + + public SkippedApp() { + } + + public SkippedApp agentId(@Nullable AgentId agentId) { + this.agentId = agentId; + return this; + } + + /** + * Agent Id owning the application + * @return agentId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentId getAgentId() { + return agentId; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAgentId(@Nullable AgentId agentId) { + this.agentId = agentId; + } + + + public SkippedApp agentName(@Nullable String agentName) { + this.agentName = agentName; + return this; + } + + /** + * Agent name + * @return agentName + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_AGENT_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getAgentName() { + return agentName; + } + + + @JsonProperty(value = JSON_PROPERTY_AGENT_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAgentName(@Nullable String agentName) { + this.agentName = agentName; + } + + + public SkippedApp applicationId(@Nullable AgentApplicationId applicationId) { + this.applicationId = applicationId; + return this; + } + + /** + * Application Id + * @return applicationId + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_APPLICATION_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentApplicationId getApplicationId() { + return applicationId; + } + + + @JsonProperty(value = JSON_PROPERTY_APPLICATION_ID, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setApplicationId(@Nullable AgentApplicationId applicationId) { + this.applicationId = applicationId; + } + + + public SkippedApp applicationName(@Nullable String applicationName) { + this.applicationName = applicationName; + return this; + } + + /** + * Application name + * @return applicationName + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_APPLICATION_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getApplicationName() { + return applicationName; + } + + + @JsonProperty(value = JSON_PROPERTY_APPLICATION_NAME, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setApplicationName(@Nullable String applicationName) { + this.applicationName = applicationName; + } + + + public SkippedApp reason(@Nullable SkipReason reason) { + this.reason = reason; + return this; + } + + /** + * Reason for skipping + * @return reason + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_REASON, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public SkipReason getReason() { + return reason; + } + + + @JsonProperty(value = JSON_PROPERTY_REASON, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setReason(@Nullable SkipReason reason) { + this.reason = reason; + } + + + public SkippedApp msg(@Nullable String msg) { + this.msg = msg; + return this; + } + + /** + * Optional message in case of a failure + * @return msg + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_MSG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getMsg() { + return msg; + } + + + @JsonProperty(value = JSON_PROPERTY_MSG, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMsg(@Nullable String msg) { + this.msg = msg; + } + + + /** + * Return true if this SkippedApp object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + SkippedApp skippedApp = (SkippedApp) o; + return Objects.equals(this.agentId, skippedApp.agentId) && + Objects.equals(this.agentName, skippedApp.agentName) && + Objects.equals(this.applicationId, skippedApp.applicationId) && + Objects.equals(this.applicationName, skippedApp.applicationName) && + Objects.equals(this.reason, skippedApp.reason) && + Objects.equals(this.msg, skippedApp.msg); + } + + @Override + public int hashCode() { + return Objects.hash(agentId, agentName, applicationId, applicationName, reason, msg); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class SkippedApp {\n"); + sb.append(" agentId: ").append(toIndentedString(agentId)).append("\n"); + sb.append(" agentName: ").append(toIndentedString(agentName)).append("\n"); + sb.append(" applicationId: ").append(toIndentedString(applicationId)).append("\n"); + sb.append(" applicationName: ").append(toIndentedString(applicationName)).append("\n"); + sb.append(" reason: ").append(toIndentedString(reason)).append("\n"); + sb.append(" msg: ").append(toIndentedString(msg)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `agentId` to the URL query string + if (getAgentId() != null) { + joiner.add(getAgentId().toUrlQueryString(prefix + "agentId" + suffix)); + } + + // add `agentName` to the URL query string + if (getAgentName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sagentName%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getAgentName())))); + } + + // add `applicationId` to the URL query string + if (getApplicationId() != null) { + joiner.add(getApplicationId().toUrlQueryString(prefix + "applicationId" + suffix)); + } + + // add `applicationName` to the URL query string + if (getApplicationName() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sapplicationName%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getApplicationName())))); + } + + // add `reason` to the URL query string + if (getReason() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sreason%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getReason())))); + } + + // add `msg` to the URL query string + if (getMsg() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%smsg%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getMsg())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/StepFieldAgentAppEventId.java b/paas/src/main/java/org/thingsboard/client/model/StepFieldAgentAppEventId.java new file mode 100644 index 00000000..5cd8d65a --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/StepFieldAgentAppEventId.java @@ -0,0 +1,192 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import org.thingsboard.client.model.AgentAppEventId; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * StepFieldAgentAppEventId + */ +@JsonPropertyOrder({ + StepFieldAgentAppEventId.JSON_PROPERTY_VALUE, + StepFieldAgentAppEventId.JSON_PROPERTY_USER_CHOICE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class StepFieldAgentAppEventId { + public static final String JSON_PROPERTY_VALUE = "value"; + @Nullable + private AgentAppEventId value; + + public static final String JSON_PROPERTY_USER_CHOICE = "userChoice"; + @Nullable + private Boolean userChoice; + + public StepFieldAgentAppEventId() { + } + + public StepFieldAgentAppEventId value(@Nullable AgentAppEventId value) { + this.value = value; + return this; + } + + /** + * Get value + * @return value + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VALUE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public AgentAppEventId getValue() { + return value; + } + + + @JsonProperty(value = JSON_PROPERTY_VALUE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setValue(@Nullable AgentAppEventId value) { + this.value = value; + } + + + public StepFieldAgentAppEventId userChoice(@Nullable Boolean userChoice) { + this.userChoice = userChoice; + return this; + } + + /** + * Get userChoice + * @return userChoice + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_USER_CHOICE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getUserChoice() { + return userChoice; + } + + + @JsonProperty(value = JSON_PROPERTY_USER_CHOICE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUserChoice(@Nullable Boolean userChoice) { + this.userChoice = userChoice; + } + + + /** + * Return true if this StepFieldAgentAppEventId object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + StepFieldAgentAppEventId stepFieldAgentAppEventId = (StepFieldAgentAppEventId) o; + return Objects.equals(this.value, stepFieldAgentAppEventId.value) && + Objects.equals(this.userChoice, stepFieldAgentAppEventId.userChoice); + } + + @Override + public int hashCode() { + return Objects.hash(value, userChoice); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class StepFieldAgentAppEventId {\n"); + sb.append(" value: ").append(toIndentedString(value)).append("\n"); + sb.append(" userChoice: ").append(toIndentedString(userChoice)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `value` to the URL query string + if (getValue() != null) { + joiner.add(getValue().toUrlQueryString(prefix + "value" + suffix)); + } + + // add `userChoice` to the URL query string + if (getUserChoice() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%suserChoice%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getUserChoice())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/StepFieldBoolean.java b/paas/src/main/java/org/thingsboard/client/model/StepFieldBoolean.java new file mode 100644 index 00000000..1d727653 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/StepFieldBoolean.java @@ -0,0 +1,191 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * StepFieldBoolean + */ +@JsonPropertyOrder({ + StepFieldBoolean.JSON_PROPERTY_VALUE, + StepFieldBoolean.JSON_PROPERTY_USER_CHOICE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class StepFieldBoolean { + public static final String JSON_PROPERTY_VALUE = "value"; + @Nullable + private Boolean value; + + public static final String JSON_PROPERTY_USER_CHOICE = "userChoice"; + @Nullable + private Boolean userChoice; + + public StepFieldBoolean() { + } + + public StepFieldBoolean value(@Nullable Boolean value) { + this.value = value; + return this; + } + + /** + * Get value + * @return value + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VALUE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getValue() { + return value; + } + + + @JsonProperty(value = JSON_PROPERTY_VALUE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setValue(@Nullable Boolean value) { + this.value = value; + } + + + public StepFieldBoolean userChoice(@Nullable Boolean userChoice) { + this.userChoice = userChoice; + return this; + } + + /** + * Get userChoice + * @return userChoice + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_USER_CHOICE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getUserChoice() { + return userChoice; + } + + + @JsonProperty(value = JSON_PROPERTY_USER_CHOICE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUserChoice(@Nullable Boolean userChoice) { + this.userChoice = userChoice; + } + + + /** + * Return true if this StepFieldBoolean object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + StepFieldBoolean stepFieldBoolean = (StepFieldBoolean) o; + return Objects.equals(this.value, stepFieldBoolean.value) && + Objects.equals(this.userChoice, stepFieldBoolean.userChoice); + } + + @Override + public int hashCode() { + return Objects.hash(value, userChoice); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class StepFieldBoolean {\n"); + sb.append(" value: ").append(toIndentedString(value)).append("\n"); + sb.append(" userChoice: ").append(toIndentedString(userChoice)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `value` to the URL query string + if (getValue() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%svalue%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getValue())))); + } + + // add `userChoice` to the URL query string + if (getUserChoice() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%suserChoice%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getUserChoice())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/StepFieldInteger.java b/paas/src/main/java/org/thingsboard/client/model/StepFieldInteger.java new file mode 100644 index 00000000..9d40e2df --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/StepFieldInteger.java @@ -0,0 +1,191 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * StepFieldInteger + */ +@JsonPropertyOrder({ + StepFieldInteger.JSON_PROPERTY_VALUE, + StepFieldInteger.JSON_PROPERTY_USER_CHOICE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class StepFieldInteger { + public static final String JSON_PROPERTY_VALUE = "value"; + @Nullable + private Integer value; + + public static final String JSON_PROPERTY_USER_CHOICE = "userChoice"; + @Nullable + private Boolean userChoice; + + public StepFieldInteger() { + } + + public StepFieldInteger value(@Nullable Integer value) { + this.value = value; + return this; + } + + /** + * Get value + * @return value + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VALUE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Integer getValue() { + return value; + } + + + @JsonProperty(value = JSON_PROPERTY_VALUE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setValue(@Nullable Integer value) { + this.value = value; + } + + + public StepFieldInteger userChoice(@Nullable Boolean userChoice) { + this.userChoice = userChoice; + return this; + } + + /** + * Get userChoice + * @return userChoice + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_USER_CHOICE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getUserChoice() { + return userChoice; + } + + + @JsonProperty(value = JSON_PROPERTY_USER_CHOICE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUserChoice(@Nullable Boolean userChoice) { + this.userChoice = userChoice; + } + + + /** + * Return true if this StepFieldInteger object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + StepFieldInteger stepFieldInteger = (StepFieldInteger) o; + return Objects.equals(this.value, stepFieldInteger.value) && + Objects.equals(this.userChoice, stepFieldInteger.userChoice); + } + + @Override + public int hashCode() { + return Objects.hash(value, userChoice); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class StepFieldInteger {\n"); + sb.append(" value: ").append(toIndentedString(value)).append("\n"); + sb.append(" userChoice: ").append(toIndentedString(userChoice)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `value` to the URL query string + if (getValue() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%svalue%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getValue())))); + } + + // add `userChoice` to the URL query string + if (getUserChoice() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%suserChoice%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getUserChoice())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/StepFieldListString.java b/paas/src/main/java/org/thingsboard/client/model/StepFieldListString.java new file mode 100644 index 00000000..b2b48e9a --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/StepFieldListString.java @@ -0,0 +1,205 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * StepFieldListString + */ +@JsonPropertyOrder({ + StepFieldListString.JSON_PROPERTY_USER_CHOICE, + StepFieldListString.JSON_PROPERTY_VALUE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class StepFieldListString { + public static final String JSON_PROPERTY_USER_CHOICE = "userChoice"; + @Nullable + private Boolean userChoice; + + public static final String JSON_PROPERTY_VALUE = "value"; + @Nullable + private List value = new ArrayList<>(); + + public StepFieldListString() { + } + + public StepFieldListString userChoice(@Nullable Boolean userChoice) { + this.userChoice = userChoice; + return this; + } + + /** + * Get userChoice + * @return userChoice + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_USER_CHOICE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getUserChoice() { + return userChoice; + } + + + @JsonProperty(value = JSON_PROPERTY_USER_CHOICE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUserChoice(@Nullable Boolean userChoice) { + this.userChoice = userChoice; + } + + + public StepFieldListString value(@Nullable List value) { + this.value = value; + return this; + } + + public StepFieldListString addValueItem(String valueItem) { + if (this.value == null) { + this.value = new ArrayList<>(); + } + this.value.add(valueItem); + return this; + } + + /** + * Get value + * @return value + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VALUE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getValue() { + return value; + } + + + @JsonProperty(value = JSON_PROPERTY_VALUE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setValue(@Nullable List value) { + this.value = value; + } + + + /** + * Return true if this StepFieldListString object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + StepFieldListString stepFieldListString = (StepFieldListString) o; + return Objects.equals(this.userChoice, stepFieldListString.userChoice) && + Objects.equals(this.value, stepFieldListString.value); + } + + @Override + public int hashCode() { + return Objects.hash(userChoice, value); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class StepFieldListString {\n"); + sb.append(" userChoice: ").append(toIndentedString(userChoice)).append("\n"); + sb.append(" value: ").append(toIndentedString(value)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `userChoice` to the URL query string + if (getUserChoice() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%suserChoice%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getUserChoice())))); + } + + // add `value` to the URL query string + if (getValue() != null) { + for (int i = 0; i < getValue().size(); i++) { + joiner.add(String.format(java.util.Locale.ROOT, "%svalue%s%s=%s", prefix, suffix, + "".equals(suffix) ? "" : String.format(java.util.Locale.ROOT, "%s%d%s", containerPrefix, i, containerSuffix), + ApiClient.urlEncode(ApiClient.valueToString(getValue().get(i))))); + } + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/StepFieldString.java b/paas/src/main/java/org/thingsboard/client/model/StepFieldString.java new file mode 100644 index 00000000..d38a6f12 --- /dev/null +++ b/paas/src/main/java/org/thingsboard/client/model/StepFieldString.java @@ -0,0 +1,191 @@ +/** + * Copyright © 2026-2026 ThingsBoard, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.client.model; + +import javax.annotation.Generated; +import javax.annotation.Nullable; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; +import java.util.Objects; +import java.util.Map; +import java.util.HashMap; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + + +import org.thingsboard.client.ApiClient; +/** + * StepFieldString + */ +@JsonPropertyOrder({ + StepFieldString.JSON_PROPERTY_VALUE, + StepFieldString.JSON_PROPERTY_USER_CHOICE +}) +@Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.20.0") +public class StepFieldString { + public static final String JSON_PROPERTY_VALUE = "value"; + @Nullable + private String value; + + public static final String JSON_PROPERTY_USER_CHOICE = "userChoice"; + @Nullable + private Boolean userChoice; + + public StepFieldString() { + } + + public StepFieldString value(@Nullable String value) { + this.value = value; + return this; + } + + /** + * Get value + * @return value + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_VALUE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getValue() { + return value; + } + + + @JsonProperty(value = JSON_PROPERTY_VALUE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setValue(@Nullable String value) { + this.value = value; + } + + + public StepFieldString userChoice(@Nullable Boolean userChoice) { + this.userChoice = userChoice; + return this; + } + + /** + * Get userChoice + * @return userChoice + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_USER_CHOICE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getUserChoice() { + return userChoice; + } + + + @JsonProperty(value = JSON_PROPERTY_USER_CHOICE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setUserChoice(@Nullable Boolean userChoice) { + this.userChoice = userChoice; + } + + + /** + * Return true if this StepFieldString object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + StepFieldString stepFieldString = (StepFieldString) o; + return Objects.equals(this.value, stepFieldString.value) && + Objects.equals(this.userChoice, stepFieldString.userChoice); + } + + @Override + public int hashCode() { + return Objects.hash(value, userChoice); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class StepFieldString {\n"); + sb.append(" value: ").append(toIndentedString(value)).append("\n"); + sb.append(" userChoice: ").append(toIndentedString(userChoice)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** + * Convert the instance into URL query string. + * + * @return URL query string + */ + public String toUrlQueryString() { + return toUrlQueryString(null); + } + + /** + * Convert the instance into URL query string. + * + * @param prefix prefix of the query string + * @return URL query string + */ + public String toUrlQueryString(String prefix) { + String suffix = ""; + String containerSuffix = ""; + String containerPrefix = ""; + if (prefix == null) { + // style=form, explode=true, e.g. /pet?name=cat&type=manx + prefix = ""; + } else { + // deepObject style e.g. /pet?id[name]=cat&id[type]=manx + prefix = prefix + "["; + suffix = "]"; + containerSuffix = "]"; + containerPrefix = "["; + } + + StringJoiner joiner = new StringJoiner("&"); + + // add `value` to the URL query string + if (getValue() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%svalue%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getValue())))); + } + + // add `userChoice` to the URL query string + if (getUserChoice() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%suserChoice%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getUserChoice())))); + } + + return joiner.toString(); + } +} + diff --git a/paas/src/main/java/org/thingsboard/client/model/SubscriptionEntry.java b/paas/src/main/java/org/thingsboard/client/model/SubscriptionEntry.java index 9580f780..f7f1b148 100644 --- a/paas/src/main/java/org/thingsboard/client/model/SubscriptionEntry.java +++ b/paas/src/main/java/org/thingsboard/client/model/SubscriptionEntry.java @@ -55,6 +55,10 @@ public enum SubscriptionEntry { NUMBER_11(new BigDecimal("11")), + NUMBER_12(new BigDecimal("12")), + + NUMBER_13(new BigDecimal("13")), + NUMBER_30(new BigDecimal("30")), NUMBER_31(new BigDecimal("31")); diff --git a/paas/src/main/java/org/thingsboard/client/model/TaskResult.java b/paas/src/main/java/org/thingsboard/client/model/TaskResult.java index 89b7bbc2..c2b0dc27 100644 --- a/paas/src/main/java/org/thingsboard/client/model/TaskResult.java +++ b/paas/src/main/java/org/thingsboard/client/model/TaskResult.java @@ -56,9 +56,9 @@ ) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "jobType", visible = true) @JsonSubTypes({ - @JsonSubTypes.Type(value = CfReprocessingTaskResult.class, name = "CfReprocessingTaskResult"), - @JsonSubTypes.Type(value = DummyTaskResult.class, name = "DummyTaskResult"), - @JsonSubTypes.Type(value = ReportTaskResult.class, name = "ReportTaskResult"), + @JsonSubTypes.Type(value = CfReprocessingTaskResult.class, name = "CF_REPROCESSING"), + @JsonSubTypes.Type(value = DummyTaskResult.class, name = "DUMMY"), + @JsonSubTypes.Type(value = ReportTaskResult.class, name = "REPORT"), }) public class TaskResult { @@ -350,9 +350,9 @@ public String toUrlQueryString(String prefix) { static { // Initialize and register the discriminator mappings. Map> mappings = new HashMap>(); - mappings.put("CfReprocessingTaskResult", CfReprocessingTaskResult.class); - mappings.put("DummyTaskResult", DummyTaskResult.class); - mappings.put("ReportTaskResult", ReportTaskResult.class); + mappings.put("CF_REPROCESSING", CfReprocessingTaskResult.class); + mappings.put("DUMMY", DummyTaskResult.class); + mappings.put("REPORT", ReportTaskResult.class); mappings.put("TaskResult", TaskResult.class); JSON.registerDiscriminator(TaskResult.class, "jobType", mappings); } diff --git a/paas/src/main/java/org/thingsboard/client/model/TelemetryObserveStrategy.java b/paas/src/main/java/org/thingsboard/client/model/TelemetryObserveStrategy.java index 70724946..de9777d2 100644 --- a/paas/src/main/java/org/thingsboard/client/model/TelemetryObserveStrategy.java +++ b/paas/src/main/java/org/thingsboard/client/model/TelemetryObserveStrategy.java @@ -28,15 +28,15 @@ import com.fasterxml.jackson.annotation.JsonValue; /** - * Gets or Sets TelemetryObserveStrategy + * Observation strategy for telemetry. SINGLE (0): one resource equals one single observe request. COMPOSITE_ALL (1): all resources in one composite observe request. COMPOSITE_BY_OBJECT (2): grouped composite observe requests by object. */ public enum TelemetryObserveStrategy { - SINGLE_0_ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST("SINGLE (0): One resource equals one single observe request"), + SINGLE("SINGLE"), - COMPOSITE_ALL_1_ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST("COMPOSITE_ALL (1): All resources in one composite observe request"), + COMPOSITE_ALL("COMPOSITE_ALL"), - COMPOSITE_BY_OBJECT_2_GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT("COMPOSITE_BY_OBJECT (2): Grouped composite observe requests by object"); + COMPOSITE_BY_OBJECT("COMPOSITE_BY_OBJECT"); private String value; diff --git a/paas/src/main/java/org/thingsboard/client/model/WhiteLabelingParams.java b/paas/src/main/java/org/thingsboard/client/model/WhiteLabelingParams.java index 7ef69c54..fd09c694 100644 --- a/paas/src/main/java/org/thingsboard/client/model/WhiteLabelingParams.java +++ b/paas/src/main/java/org/thingsboard/client/model/WhiteLabelingParams.java @@ -45,6 +45,7 @@ WhiteLabelingParams.JSON_PROPERTY_APP_TITLE, WhiteLabelingParams.JSON_PROPERTY_FAVICON, WhiteLabelingParams.JSON_PROPERTY_PALETTE_SETTINGS, + WhiteLabelingParams.JSON_PROPERTY_PRIMARY_COLOR_PANELS, WhiteLabelingParams.JSON_PROPERTY_HELP_LINK_BASE_URL, WhiteLabelingParams.JSON_PROPERTY_UI_HELP_BASE_URL, WhiteLabelingParams.JSON_PROPERTY_ENABLE_HELP_LINKS, @@ -83,6 +84,10 @@ public class WhiteLabelingParams { @Nullable private PaletteSettings paletteSettings; + public static final String JSON_PROPERTY_PRIMARY_COLOR_PANELS = "primaryColorPanels"; + @Nullable + private Boolean primaryColorPanels; + public static final String JSON_PROPERTY_HELP_LINK_BASE_URL = "helpLinkBaseUrl"; @Nullable private String helpLinkBaseUrl; @@ -282,6 +287,30 @@ public void setPaletteSettings(@Nullable PaletteSettings paletteSettings) { } + public WhiteLabelingParams primaryColorPanels(@Nullable Boolean primaryColorPanels) { + this.primaryColorPanels = primaryColorPanels; + return this; + } + + /** + * Whether primary-color panels (top toolbar, side navigation, dialog and entity-details headers) use the primary palette color as background. When false, they render on a white background + * @return primaryColorPanels + */ + @Nullable + @JsonProperty(value = JSON_PROPERTY_PRIMARY_COLOR_PANELS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getPrimaryColorPanels() { + return primaryColorPanels; + } + + + @JsonProperty(value = JSON_PROPERTY_PRIMARY_COLOR_PANELS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setPrimaryColorPanels(@Nullable Boolean primaryColorPanels) { + this.primaryColorPanels = primaryColorPanels; + } + + public WhiteLabelingParams helpLinkBaseUrl(@Nullable String helpLinkBaseUrl) { this.helpLinkBaseUrl = helpLinkBaseUrl; return this; @@ -554,6 +583,7 @@ public boolean equals(Object o) { Objects.equals(this.appTitle, whiteLabelingParams.appTitle) && Objects.equals(this.favicon, whiteLabelingParams.favicon) && Objects.equals(this.paletteSettings, whiteLabelingParams.paletteSettings) && + Objects.equals(this.primaryColorPanels, whiteLabelingParams.primaryColorPanels) && Objects.equals(this.helpLinkBaseUrl, whiteLabelingParams.helpLinkBaseUrl) && Objects.equals(this.uiHelpBaseUrl, whiteLabelingParams.uiHelpBaseUrl) && Objects.equals(this.enableHelpLinks, whiteLabelingParams.enableHelpLinks) && @@ -569,7 +599,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(logoImageUrl, logoImageHeight, collapsedLogoImageUrl, appTitle, favicon, paletteSettings, helpLinkBaseUrl, uiHelpBaseUrl, enableHelpLinks, whiteLabelingEnabled, showNameVersion, platformName, platformVersion, customCss, hideConnectivityDialog, overrideTrendzName, hideChatBot); + return Objects.hash(logoImageUrl, logoImageHeight, collapsedLogoImageUrl, appTitle, favicon, paletteSettings, primaryColorPanels, helpLinkBaseUrl, uiHelpBaseUrl, enableHelpLinks, whiteLabelingEnabled, showNameVersion, platformName, platformVersion, customCss, hideConnectivityDialog, overrideTrendzName, hideChatBot); } @Override @@ -582,6 +612,7 @@ public String toString() { sb.append(" appTitle: ").append(toIndentedString(appTitle)).append("\n"); sb.append(" favicon: ").append(toIndentedString(favicon)).append("\n"); sb.append(" paletteSettings: ").append(toIndentedString(paletteSettings)).append("\n"); + sb.append(" primaryColorPanels: ").append(toIndentedString(primaryColorPanels)).append("\n"); sb.append(" helpLinkBaseUrl: ").append(toIndentedString(helpLinkBaseUrl)).append("\n"); sb.append(" uiHelpBaseUrl: ").append(toIndentedString(uiHelpBaseUrl)).append("\n"); sb.append(" enableHelpLinks: ").append(toIndentedString(enableHelpLinks)).append("\n"); @@ -670,6 +701,11 @@ public String toUrlQueryString(String prefix) { joiner.add(getPaletteSettings().toUrlQueryString(prefix + "paletteSettings" + suffix)); } + // add `primaryColorPanels` to the URL query string + if (getPrimaryColorPanels() != null) { + joiner.add(String.format(java.util.Locale.ROOT, "%sprimaryColorPanels%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getPrimaryColorPanels())))); + } + // add `helpLinkBaseUrl` to the URL query string if (getHelpLinkBaseUrl() != null) { joiner.add(String.format(java.util.Locale.ROOT, "%shelpLinkBaseUrl%s=%s", prefix, suffix, ApiClient.urlEncode(ApiClient.valueToString(getHelpLinkBaseUrl()))));