@actschurch/ccms-sdk 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -1
- package/dist/core/Config.d.ts +21 -2
- package/dist/core/Config.d.ts.map +1 -1
- package/dist/core/Config.js.map +1 -1
- package/dist/core/HttpClient.d.ts +5 -0
- package/dist/core/HttpClient.d.ts.map +1 -1
- package/dist/core/HttpClient.js +75 -0
- package/dist/core/HttpClient.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/models/file/Folder.d.ts +179 -0
- package/dist/models/file/Folder.d.ts.map +1 -0
- package/dist/models/file/Folder.js +6 -0
- package/dist/models/file/Folder.js.map +1 -0
- package/dist/models/file/ModelView/FileRecordModelView.d.ts +3 -0
- package/dist/models/file/ModelView/FileRecordModelView.d.ts.map +1 -1
- package/dist/models/file/PresignUploadRequest.d.ts +4 -0
- package/dist/models/file/PresignUploadRequest.d.ts.map +1 -1
- package/dist/models/file/index.d.ts +1 -0
- package/dist/models/file/index.d.ts.map +1 -1
- package/dist/models/file/index.js +1 -0
- package/dist/models/file/index.js.map +1 -1
- package/dist/models/index.d.ts +1 -0
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +2 -0
- package/dist/models/index.js.map +1 -1
- package/dist/models/socialmedia/index.d.ts +322 -0
- package/dist/models/socialmedia/index.d.ts.map +1 -0
- package/dist/models/socialmedia/index.js +6 -0
- package/dist/models/socialmedia/index.js.map +1 -0
- package/dist/models/system/ModelView/Health.d.ts +14 -11
- package/dist/models/system/ModelView/Health.d.ts.map +1 -1
- package/dist/models/system/ModelView/Health.js +1 -0
- package/dist/models/system/ModelView/Health.js.map +1 -1
- package/dist/models/system/ModelView/RabbitMQManagement.d.ts +93 -92
- package/dist/models/system/ModelView/RabbitMQManagement.d.ts.map +1 -1
- package/dist/models/system/ModelView/RedisManagement.d.ts +94 -42
- package/dist/models/system/ModelView/RedisManagement.d.ts.map +1 -1
- package/dist/models/task/ModelView/CreateTask.d.ts +14 -17
- package/dist/models/task/ModelView/CreateTask.d.ts.map +1 -1
- package/dist/models/task/ModelView/UpdateTaskPriorityRequest.d.ts +10 -0
- package/dist/models/task/ModelView/UpdateTaskPriorityRequest.d.ts.map +1 -0
- package/dist/models/task/ModelView/UpdateTaskPriorityRequest.js +2 -0
- package/dist/models/task/ModelView/UpdateTaskPriorityRequest.js.map +1 -0
- package/dist/models/task/ModelView/UpdateTaskProjectRequest.d.ts +10 -0
- package/dist/models/task/ModelView/UpdateTaskProjectRequest.d.ts.map +1 -0
- package/dist/models/task/ModelView/UpdateTaskProjectRequest.js +2 -0
- package/dist/models/task/ModelView/UpdateTaskProjectRequest.js.map +1 -0
- package/dist/models/task/ModelView/index.d.ts +2 -0
- package/dist/models/task/ModelView/index.d.ts.map +1 -1
- package/dist/models/task/ModelView/index.js +2 -0
- package/dist/models/task/ModelView/index.js.map +1 -1
- package/dist/react/CCMSProvider.d.ts +1 -19
- package/dist/react/CCMSProvider.d.ts.map +1 -1
- package/dist/react/CCMSProvider.js +71 -56
- package/dist/react/CCMSProvider.js.map +1 -1
- package/dist/react/hooks/index.d.ts +0 -1
- package/dist/react/hooks/index.d.ts.map +1 -1
- package/dist/react/hooks/index.js +1 -3
- package/dist/react/hooks/index.js.map +1 -1
- package/dist/react/hooks/services/index.d.ts +1 -0
- package/dist/react/hooks/services/index.d.ts.map +1 -1
- package/dist/react/hooks/services/index.js +2 -0
- package/dist/react/hooks/services/index.js.map +1 -1
- package/dist/react/hooks/services/useSocialMediaServices.d.ts +43 -0
- package/dist/react/hooks/services/useSocialMediaServices.d.ts.map +1 -0
- package/dist/react/hooks/services/useSocialMediaServices.js +65 -0
- package/dist/react/hooks/services/useSocialMediaServices.js.map +1 -0
- package/dist/react/hooks/services/useUsersServices.d.ts +5 -1
- package/dist/react/hooks/services/useUsersServices.d.ts.map +1 -1
- package/dist/react/hooks/services/useUsersServices.js +6 -0
- package/dist/react/hooks/services/useUsersServices.js.map +1 -1
- package/dist/react/hooks/useCCMS.d.ts +7 -4
- package/dist/react/hooks/useCCMS.d.ts.map +1 -1
- package/dist/react/hooks/useCCMS.js +8 -4
- package/dist/react/hooks/useCCMS.js.map +1 -1
- package/dist/realtime/index.d.ts +1 -1
- package/dist/realtime/index.d.ts.map +1 -1
- package/dist/realtime/index.js +2 -5
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime/presence/ActivityTracker.d.ts +141 -0
- package/dist/realtime/presence/ActivityTracker.d.ts.map +1 -0
- package/dist/realtime/presence/ActivityTracker.js +342 -0
- package/dist/realtime/presence/ActivityTracker.js.map +1 -0
- package/dist/realtime/presence/AutoHeartbeatManager.d.ts +68 -0
- package/dist/realtime/presence/AutoHeartbeatManager.d.ts.map +1 -0
- package/dist/realtime/presence/AutoHeartbeatManager.js +160 -0
- package/dist/realtime/presence/AutoHeartbeatManager.js.map +1 -0
- package/dist/realtime/presence/IdleDetector.d.ts +107 -0
- package/dist/realtime/presence/IdleDetector.d.ts.map +1 -0
- package/dist/realtime/presence/IdleDetector.js +270 -0
- package/dist/realtime/presence/IdleDetector.js.map +1 -0
- package/dist/realtime/presence/PresenceClient.d.ts +26 -2
- package/dist/realtime/presence/PresenceClient.d.ts.map +1 -1
- package/dist/realtime/presence/PresenceClient.js +111 -17
- package/dist/realtime/presence/PresenceClient.js.map +1 -1
- package/dist/realtime/presence/PresenceManager.d.ts +191 -0
- package/dist/realtime/presence/PresenceManager.d.ts.map +1 -0
- package/dist/realtime/presence/PresenceManager.js +314 -0
- package/dist/realtime/presence/PresenceManager.js.map +1 -0
- package/dist/realtime/presence/PresenceProvider.d.ts +16 -0
- package/dist/realtime/presence/PresenceProvider.d.ts.map +1 -1
- package/dist/realtime/presence/PresenceProvider.js +92 -20
- package/dist/realtime/presence/PresenceProvider.js.map +1 -1
- package/dist/realtime/presence/index.d.ts +5 -0
- package/dist/realtime/presence/index.d.ts.map +1 -1
- package/dist/realtime/presence/index.js +10 -0
- package/dist/realtime/presence/index.js.map +1 -1
- package/dist/realtime/presence/types.d.ts +32 -13
- package/dist/realtime/presence/types.d.ts.map +1 -1
- package/dist/realtime/presence/types.js +6 -5
- package/dist/realtime/presence/types.js.map +1 -1
- package/dist/realtime/presence/utils/platformDetector.d.ts +23 -0
- package/dist/realtime/presence/utils/platformDetector.d.ts.map +1 -0
- package/dist/realtime/presence/utils/platformDetector.js +88 -0
- package/dist/realtime/presence/utils/platformDetector.js.map +1 -0
- package/dist/realtime/presence/utils.d.ts +87 -0
- package/dist/realtime/presence/utils.d.ts.map +1 -0
- package/dist/realtime/presence/utils.js +191 -0
- package/dist/realtime/presence/utils.js.map +1 -0
- package/dist/realtime/shared/BaseSignalRClient.d.ts.map +1 -1
- package/dist/realtime/shared/BaseSignalRClient.js +38 -4
- package/dist/realtime/shared/BaseSignalRClient.js.map +1 -1
- package/dist/services/departments/DepartmentService.d.ts.map +1 -1
- package/dist/services/departments/DepartmentService.js +1 -1
- package/dist/services/departments/DepartmentService.js.map +1 -1
- package/dist/services/departments/DesignationService.d.ts.map +1 -1
- package/dist/services/departments/DesignationService.js +1 -1
- package/dist/services/departments/DesignationService.js.map +1 -1
- package/dist/services/departments/DesignationTaskService.d.ts.map +1 -1
- package/dist/services/departments/DesignationTaskService.js +1 -1
- package/dist/services/departments/DesignationTaskService.js.map +1 -1
- package/dist/services/departments/MemberDesignationService.d.ts.map +1 -1
- package/dist/services/departments/MemberDesignationService.js +1 -1
- package/dist/services/departments/MemberDesignationService.js.map +1 -1
- package/dist/services/departments/MemberInDepartmentService.d.ts.map +1 -1
- package/dist/services/departments/MemberInDepartmentService.js +1 -1
- package/dist/services/departments/MemberInDepartmentService.js.map +1 -1
- package/dist/services/departments/MinistryActivityService.d.ts.map +1 -1
- package/dist/services/departments/MinistryActivityService.js +1 -1
- package/dist/services/departments/MinistryActivityService.js.map +1 -1
- package/dist/services/departments/MinistryEquipmentService.d.ts.map +1 -1
- package/dist/services/departments/MinistryEquipmentService.js +1 -1
- package/dist/services/departments/MinistryEquipmentService.js.map +1 -1
- package/dist/services/departments/MinistryRoleService.d.ts.map +1 -1
- package/dist/services/departments/MinistryRoleService.js +1 -1
- package/dist/services/departments/MinistryRoleService.js.map +1 -1
- package/dist/services/departments/MinistryService.d.ts.map +1 -1
- package/dist/services/departments/MinistryService.js +1 -1
- package/dist/services/departments/MinistryService.js.map +1 -1
- package/dist/services/departments/MinistryTeamService.d.ts.map +1 -1
- package/dist/services/departments/MinistryTeamService.js +1 -1
- package/dist/services/departments/MinistryTeamService.js.map +1 -1
- package/dist/services/feedback/FeedbackCategoryRecipientService.d.ts.map +1 -1
- package/dist/services/feedback/FeedbackCategoryRecipientService.js +1 -1
- package/dist/services/feedback/FeedbackCategoryRecipientService.js.map +1 -1
- package/dist/services/feedback/FeedbackCategoryService.d.ts.map +1 -1
- package/dist/services/feedback/FeedbackCategoryService.js +1 -1
- package/dist/services/feedback/FeedbackCategoryService.js.map +1 -1
- package/dist/services/feedback/FeedbackNotificationQueueService.d.ts.map +1 -1
- package/dist/services/feedback/FeedbackNotificationQueueService.js +1 -1
- package/dist/services/feedback/FeedbackNotificationQueueService.js.map +1 -1
- package/dist/services/feedback/FeedbackService.d.ts.map +1 -1
- package/dist/services/feedback/FeedbackService.js +1 -1
- package/dist/services/feedback/FeedbackService.js.map +1 -1
- package/dist/services/feedback/FeedbackTypeService.d.ts.map +1 -1
- package/dist/services/feedback/FeedbackTypeService.js +1 -1
- package/dist/services/feedback/FeedbackTypeService.js.map +1 -1
- package/dist/services/file/FileService.d.ts +55 -1
- package/dist/services/file/FileService.d.ts.map +1 -1
- package/dist/services/file/FileService.js +114 -0
- package/dist/services/file/FileService.js.map +1 -1
- package/dist/services/file/FolderService.d.ts +99 -0
- package/dist/services/file/FolderService.d.ts.map +1 -0
- package/dist/services/file/FolderService.js +147 -0
- package/dist/services/file/FolderService.js.map +1 -0
- package/dist/services/file/index.d.ts +3 -0
- package/dist/services/file/index.d.ts.map +1 -1
- package/dist/services/file/index.js +3 -0
- package/dist/services/file/index.js.map +1 -1
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/locations/AddressService.d.ts.map +1 -1
- package/dist/services/locations/AddressService.js +1 -1
- package/dist/services/locations/AddressService.js.map +1 -1
- package/dist/services/locations/LocationInfoService.d.ts.map +1 -1
- package/dist/services/locations/LocationInfoService.js +1 -1
- package/dist/services/locations/LocationInfoService.js.map +1 -1
- package/dist/services/locations/LocationLeaderService.d.ts.map +1 -1
- package/dist/services/locations/LocationLeaderService.js +1 -1
- package/dist/services/locations/LocationLeaderService.js.map +1 -1
- package/dist/services/locations/LocationService.d.ts.map +1 -1
- package/dist/services/locations/LocationService.js +1 -1
- package/dist/services/locations/LocationService.js.map +1 -1
- package/dist/services/locations/LocationSocialMediaService.d.ts.map +1 -1
- package/dist/services/locations/LocationSocialMediaService.js +1 -1
- package/dist/services/locations/LocationSocialMediaService.js.map +1 -1
- package/dist/services/locations/LocationVenueService.d.ts.map +1 -1
- package/dist/services/locations/LocationVenueService.js +1 -1
- package/dist/services/locations/LocationVenueService.js.map +1 -1
- package/dist/services/locations/ServiceTimeService.d.ts.map +1 -1
- package/dist/services/locations/ServiceTimeService.js +1 -1
- package/dist/services/locations/ServiceTimeService.js.map +1 -1
- package/dist/services/locations/SocialMediaService.d.ts.map +1 -1
- package/dist/services/locations/SocialMediaService.js +1 -1
- package/dist/services/locations/SocialMediaService.js.map +1 -1
- package/dist/services/meetings/LocationVenueRequestService.d.ts.map +1 -1
- package/dist/services/meetings/LocationVenueRequestService.js +1 -1
- package/dist/services/meetings/LocationVenueRequestService.js.map +1 -1
- package/dist/services/meetings/LocationVenueSetupService.d.ts.map +1 -1
- package/dist/services/meetings/LocationVenueSetupService.js +1 -1
- package/dist/services/meetings/LocationVenueSetupService.js.map +1 -1
- package/dist/services/meetings/MeetingAttendanceStatusService.d.ts.map +1 -1
- package/dist/services/meetings/MeetingAttendanceStatusService.js +1 -1
- package/dist/services/meetings/MeetingAttendanceStatusService.js.map +1 -1
- package/dist/services/meetings/MeetingAttendeeService.d.ts.map +1 -1
- package/dist/services/meetings/MeetingAttendeeService.js +1 -1
- package/dist/services/meetings/MeetingAttendeeService.js.map +1 -1
- package/dist/services/meetings/MeetingCommentService.d.ts.map +1 -1
- package/dist/services/meetings/MeetingCommentService.js +1 -1
- package/dist/services/meetings/MeetingCommentService.js.map +1 -1
- package/dist/services/meetings/MeetingFileService.d.ts.map +1 -1
- package/dist/services/meetings/MeetingFileService.js +1 -1
- package/dist/services/meetings/MeetingFileService.js.map +1 -1
- package/dist/services/meetings/MeetingRequestService.d.ts.map +1 -1
- package/dist/services/meetings/MeetingRequestService.js +1 -1
- package/dist/services/meetings/MeetingRequestService.js.map +1 -1
- package/dist/services/meetings/MeetingService.d.ts.map +1 -1
- package/dist/services/meetings/MeetingService.js +1 -1
- package/dist/services/meetings/MeetingService.js.map +1 -1
- package/dist/services/meetings/MeetingSetupService.d.ts.map +1 -1
- package/dist/services/meetings/MeetingSetupService.js +1 -1
- package/dist/services/meetings/MeetingSetupService.js.map +1 -1
- package/dist/services/meetings/MeetingStatusService.d.ts.map +1 -1
- package/dist/services/meetings/MeetingStatusService.js +1 -1
- package/dist/services/meetings/MeetingStatusService.js.map +1 -1
- package/dist/services/meetings/MeetingTypeService.d.ts.map +1 -1
- package/dist/services/meetings/MeetingTypeService.js +1 -1
- package/dist/services/meetings/MeetingTypeService.js.map +1 -1
- package/dist/services/meetings/MeetingVenueService.d.ts.map +1 -1
- package/dist/services/meetings/MeetingVenueService.js +1 -1
- package/dist/services/meetings/MeetingVenueService.js.map +1 -1
- package/dist/services/meetings/RequestInMeetingService.d.ts.map +1 -1
- package/dist/services/meetings/RequestInMeetingService.js +1 -1
- package/dist/services/meetings/RequestInMeetingService.js.map +1 -1
- package/dist/services/meetings/SetupInMeetingService.d.ts.map +1 -1
- package/dist/services/meetings/SetupInMeetingService.js +1 -1
- package/dist/services/meetings/SetupInMeetingService.js.map +1 -1
- package/dist/services/members/AllergyService.d.ts.map +1 -1
- package/dist/services/members/AllergyService.js +1 -1
- package/dist/services/members/AllergyService.js.map +1 -1
- package/dist/services/members/DisabilityService.d.ts.map +1 -1
- package/dist/services/members/DisabilityService.js +1 -1
- package/dist/services/members/DisabilityService.js.map +1 -1
- package/dist/services/members/FamilyService.d.ts.map +1 -1
- package/dist/services/members/FamilyService.js +1 -1
- package/dist/services/members/FamilyService.js.map +1 -1
- package/dist/services/members/MaritalStatusService.d.ts.map +1 -1
- package/dist/services/members/MaritalStatusService.js +1 -1
- package/dist/services/members/MaritalStatusService.js.map +1 -1
- package/dist/services/members/MemberAddressService.d.ts.map +1 -1
- package/dist/services/members/MemberAddressService.js +1 -1
- package/dist/services/members/MemberAddressService.js.map +1 -1
- package/dist/services/members/MemberLocationService.d.ts.map +1 -1
- package/dist/services/members/MemberLocationService.js +1 -1
- package/dist/services/members/MemberLocationService.js.map +1 -1
- package/dist/services/members/MemberService.d.ts.map +1 -1
- package/dist/services/members/MemberService.js +1 -1
- package/dist/services/members/MemberService.js.map +1 -1
- package/dist/services/members/MemberTypeService.d.ts.map +1 -1
- package/dist/services/members/MemberTypeService.js +1 -1
- package/dist/services/members/MemberTypeService.js.map +1 -1
- package/dist/services/members/RelationshipService.d.ts.map +1 -1
- package/dist/services/members/RelationshipService.js +1 -1
- package/dist/services/members/RelationshipService.js.map +1 -1
- package/dist/services/orders/OrderLineModelViewService.d.ts.map +1 -1
- package/dist/services/orders/OrderLineModelViewService.js +1 -1
- package/dist/services/orders/OrderLineModelViewService.js.map +1 -1
- package/dist/services/orders/OrderLineService.d.ts.map +1 -1
- package/dist/services/orders/OrderLineService.js +1 -1
- package/dist/services/orders/OrderLineService.js.map +1 -1
- package/dist/services/orders/OrderModelViewService.d.ts.map +1 -1
- package/dist/services/orders/OrderModelViewService.js +1 -1
- package/dist/services/orders/OrderModelViewService.js.map +1 -1
- package/dist/services/orders/OrderNotificationService.d.ts.map +1 -1
- package/dist/services/orders/OrderNotificationService.js +1 -1
- package/dist/services/orders/OrderNotificationService.js.map +1 -1
- package/dist/services/orders/OrderPaymentModelViewService.d.ts.map +1 -1
- package/dist/services/orders/OrderPaymentModelViewService.js +1 -1
- package/dist/services/orders/OrderPaymentModelViewService.js.map +1 -1
- package/dist/services/orders/OrderPaymentService.d.ts.map +1 -1
- package/dist/services/orders/OrderPaymentService.js +1 -1
- package/dist/services/orders/OrderPaymentService.js.map +1 -1
- package/dist/services/orders/OrderService.d.ts.map +1 -1
- package/dist/services/orders/OrderService.js +1 -1
- package/dist/services/orders/OrderService.js.map +1 -1
- package/dist/services/orders/OrderStatusService.d.ts.map +1 -1
- package/dist/services/orders/OrderStatusService.js +1 -1
- package/dist/services/orders/OrderStatusService.js.map +1 -1
- package/dist/services/orders/PaymentStatusService.d.ts.map +1 -1
- package/dist/services/orders/PaymentStatusService.js +1 -1
- package/dist/services/orders/PaymentStatusService.js.map +1 -1
- package/dist/services/procurements/AuditLogService.d.ts.map +1 -1
- package/dist/services/procurements/AuditLogService.js +1 -1
- package/dist/services/procurements/AuditLogService.js.map +1 -1
- package/dist/services/procurements/InvoiceLineService.d.ts.map +1 -1
- package/dist/services/procurements/InvoiceLineService.js +1 -1
- package/dist/services/procurements/InvoiceLineService.js.map +1 -1
- package/dist/services/procurements/InvoiceService.d.ts.map +1 -1
- package/dist/services/procurements/InvoiceService.js +1 -1
- package/dist/services/procurements/InvoiceService.js.map +1 -1
- package/dist/services/procurements/InvoiceStatusService.d.ts.map +1 -1
- package/dist/services/procurements/InvoiceStatusService.js +1 -1
- package/dist/services/procurements/InvoiceStatusService.js.map +1 -1
- package/dist/services/procurements/NotificationService.d.ts.map +1 -1
- package/dist/services/procurements/NotificationService.js +1 -1
- package/dist/services/procurements/NotificationService.js.map +1 -1
- package/dist/services/procurements/ProcurementRoleTypeService.d.ts.map +1 -1
- package/dist/services/procurements/ProcurementRoleTypeService.js +1 -1
- package/dist/services/procurements/ProcurementRoleTypeService.js.map +1 -1
- package/dist/services/procurements/PurchaseRequestService.d.ts.map +1 -1
- package/dist/services/procurements/PurchaseRequestService.js +1 -1
- package/dist/services/procurements/PurchaseRequestService.js.map +1 -1
- package/dist/services/procurements/QuotationLineService.d.ts.map +1 -1
- package/dist/services/procurements/QuotationLineService.js +1 -1
- package/dist/services/procurements/QuotationLineService.js.map +1 -1
- package/dist/services/procurements/QuotationService.d.ts.map +1 -1
- package/dist/services/procurements/QuotationService.js +1 -1
- package/dist/services/procurements/QuotationService.js.map +1 -1
- package/dist/services/procurements/QuotationStatusService.d.ts.map +1 -1
- package/dist/services/procurements/QuotationStatusService.js +1 -1
- package/dist/services/procurements/QuotationStatusService.js.map +1 -1
- package/dist/services/procurements/RequestApprovalStatusService.d.ts.map +1 -1
- package/dist/services/procurements/RequestApprovalStatusService.js +1 -1
- package/dist/services/procurements/RequestApprovalStatusService.js.map +1 -1
- package/dist/services/procurements/RequestAttachmentService.d.ts.map +1 -1
- package/dist/services/procurements/RequestAttachmentService.js +1 -1
- package/dist/services/procurements/RequestAttachmentService.js.map +1 -1
- package/dist/services/procurements/RequestCommentService.d.ts.map +1 -1
- package/dist/services/procurements/RequestCommentService.js +1 -1
- package/dist/services/procurements/RequestCommentService.js.map +1 -1
- package/dist/services/procurements/RequestStageService.d.ts.map +1 -1
- package/dist/services/procurements/RequestStageService.js +1 -1
- package/dist/services/procurements/RequestStageService.js.map +1 -1
- package/dist/services/procurements/RequestStatusService.d.ts.map +1 -1
- package/dist/services/procurements/RequestStatusService.js +1 -1
- package/dist/services/procurements/RequestStatusService.js.map +1 -1
- package/dist/services/procurements/RequestTypeService.d.ts.map +1 -1
- package/dist/services/procurements/RequestTypeService.js +1 -1
- package/dist/services/procurements/RequestTypeService.js.map +1 -1
- package/dist/services/procurements/SageItemService.d.ts.map +1 -1
- package/dist/services/procurements/SageItemService.js +1 -1
- package/dist/services/procurements/SageItemService.js.map +1 -1
- package/dist/services/procurements/SagePurchaseOrderService.d.ts.map +1 -1
- package/dist/services/procurements/SagePurchaseOrderService.js +1 -1
- package/dist/services/procurements/SagePurchaseOrderService.js.map +1 -1
- package/dist/services/socialmedia/SocialMediaAccountService.d.ts +38 -0
- package/dist/services/socialmedia/SocialMediaAccountService.d.ts.map +1 -0
- package/dist/services/socialmedia/SocialMediaAccountService.js +59 -0
- package/dist/services/socialmedia/SocialMediaAccountService.js.map +1 -0
- package/dist/services/socialmedia/SocialMediaAdsService.d.ts +74 -0
- package/dist/services/socialmedia/SocialMediaAdsService.d.ts.map +1 -0
- package/dist/services/socialmedia/SocialMediaAdsService.js +130 -0
- package/dist/services/socialmedia/SocialMediaAdsService.js.map +1 -0
- package/dist/services/socialmedia/SocialMediaDashboardService.d.ts +137 -0
- package/dist/services/socialmedia/SocialMediaDashboardService.d.ts.map +1 -0
- package/dist/services/socialmedia/SocialMediaDashboardService.js +179 -0
- package/dist/services/socialmedia/SocialMediaDashboardService.js.map +1 -0
- package/dist/services/socialmedia/SocialMediaMetricsService.d.ts +56 -0
- package/dist/services/socialmedia/SocialMediaMetricsService.d.ts.map +1 -0
- package/dist/services/socialmedia/SocialMediaMetricsService.js +105 -0
- package/dist/services/socialmedia/SocialMediaMetricsService.js.map +1 -0
- package/dist/services/socialmedia/SocialMediaPostService.d.ts +56 -0
- package/dist/services/socialmedia/SocialMediaPostService.d.ts.map +1 -0
- package/dist/services/socialmedia/SocialMediaPostService.js +94 -0
- package/dist/services/socialmedia/SocialMediaPostService.js.map +1 -0
- package/dist/services/socialmedia/SocialMediaStoryService.d.ts +47 -0
- package/dist/services/socialmedia/SocialMediaStoryService.d.ts.map +1 -0
- package/dist/services/socialmedia/SocialMediaStoryService.js +77 -0
- package/dist/services/socialmedia/SocialMediaStoryService.js.map +1 -0
- package/dist/services/socialmedia/SocialMediaThresholdService.d.ts +47 -0
- package/dist/services/socialmedia/SocialMediaThresholdService.d.ts.map +1 -0
- package/dist/services/socialmedia/SocialMediaThresholdService.js +75 -0
- package/dist/services/socialmedia/SocialMediaThresholdService.js.map +1 -0
- package/dist/services/socialmedia/SocialMediaVideoService.d.ts +47 -0
- package/dist/services/socialmedia/SocialMediaVideoService.d.ts.map +1 -0
- package/dist/services/socialmedia/SocialMediaVideoService.js +77 -0
- package/dist/services/socialmedia/SocialMediaVideoService.js.map +1 -0
- package/dist/services/socialmedia/index.d.ts +43 -0
- package/dist/services/socialmedia/index.d.ts.map +1 -0
- package/dist/services/socialmedia/index.js +41 -0
- package/dist/services/socialmedia/index.js.map +1 -0
- package/dist/services/system/HealthService.d.ts +15 -0
- package/dist/services/system/HealthService.d.ts.map +1 -1
- package/dist/services/system/HealthService.js +21 -15
- package/dist/services/system/HealthService.js.map +1 -1
- package/dist/services/system/RabbitMQManagementService.d.ts +13 -9
- package/dist/services/system/RabbitMQManagementService.d.ts.map +1 -1
- package/dist/services/system/RabbitMQManagementService.js +23 -40
- package/dist/services/system/RabbitMQManagementService.js.map +1 -1
- package/dist/services/system/RedisManagementService.d.ts +13 -6
- package/dist/services/system/RedisManagementService.d.ts.map +1 -1
- package/dist/services/system/RedisManagementService.js +42 -20
- package/dist/services/system/RedisManagementService.js.map +1 -1
- package/dist/services/task/LogTypeService.d.ts.map +1 -1
- package/dist/services/task/LogTypeService.js +1 -1
- package/dist/services/task/LogTypeService.js.map +1 -1
- package/dist/services/task/TaskAssignmentService.d.ts.map +1 -1
- package/dist/services/task/TaskAssignmentService.js +1 -1
- package/dist/services/task/TaskAssignmentService.js.map +1 -1
- package/dist/services/task/TaskAttachmentService.d.ts.map +1 -1
- package/dist/services/task/TaskAttachmentService.js +1 -1
- package/dist/services/task/TaskAttachmentService.js.map +1 -1
- package/dist/services/task/TaskCommentService.d.ts.map +1 -1
- package/dist/services/task/TaskCommentService.js +1 -1
- package/dist/services/task/TaskCommentService.js.map +1 -1
- package/dist/services/task/TaskLogService.d.ts.map +1 -1
- package/dist/services/task/TaskLogService.js +1 -1
- package/dist/services/task/TaskLogService.js.map +1 -1
- package/dist/services/task/TaskNoteService.d.ts.map +1 -1
- package/dist/services/task/TaskNoteService.js +1 -1
- package/dist/services/task/TaskNoteService.js.map +1 -1
- package/dist/services/task/TaskNotificationQueueService.d.ts.map +1 -1
- package/dist/services/task/TaskNotificationQueueService.js +1 -1
- package/dist/services/task/TaskNotificationQueueService.js.map +1 -1
- package/dist/services/task/TaskNotificationService.d.ts.map +1 -1
- package/dist/services/task/TaskNotificationService.js +1 -1
- package/dist/services/task/TaskNotificationService.js.map +1 -1
- package/dist/services/task/TaskPriorityService.d.ts.map +1 -1
- package/dist/services/task/TaskPriorityService.js +1 -1
- package/dist/services/task/TaskPriorityService.js.map +1 -1
- package/dist/services/task/TaskProgressStageService.d.ts.map +1 -1
- package/dist/services/task/TaskProgressStageService.js +1 -1
- package/dist/services/task/TaskProgressStageService.js.map +1 -1
- package/dist/services/task/TaskService.d.ts +100 -1
- package/dist/services/task/TaskService.d.ts.map +1 -1
- package/dist/services/task/TaskService.js +167 -0
- package/dist/services/task/TaskService.js.map +1 -1
- package/dist/services/task/TaskStatusService.d.ts.map +1 -1
- package/dist/services/task/TaskStatusService.js +1 -1
- package/dist/services/task/TaskStatusService.js.map +1 -1
- package/dist/services/types.d.ts +2 -0
- package/dist/services/types.d.ts.map +1 -1
- package/dist/services/users/AdminService.d.ts.map +1 -1
- package/dist/services/users/AdminService.js +30 -3
- package/dist/services/users/AdminService.js.map +1 -1
- package/dist/services/users/PresenceAnalyticsService.d.ts +179 -0
- package/dist/services/users/PresenceAnalyticsService.d.ts.map +1 -0
- package/dist/services/users/PresenceAnalyticsService.js +232 -0
- package/dist/services/users/PresenceAnalyticsService.js.map +1 -0
- package/dist/services/users/RightService.d.ts +16 -20
- package/dist/services/users/RightService.d.ts.map +1 -1
- package/dist/services/users/RightService.js +3 -37
- package/dist/services/users/RightService.js.map +1 -1
- package/dist/services/users/RoleService.d.ts +27 -0
- package/dist/services/users/RoleService.d.ts.map +1 -1
- package/dist/services/users/RoleService.js +54 -0
- package/dist/services/users/RoleService.js.map +1 -1
- package/dist/services/users/SystemService.d.ts +9 -0
- package/dist/services/users/SystemService.d.ts.map +1 -1
- package/dist/services/users/SystemService.js +20 -0
- package/dist/services/users/SystemService.js.map +1 -1
- package/dist/services/users/UserPreferencesService.d.ts +27 -0
- package/dist/services/users/UserPreferencesService.d.ts.map +1 -1
- package/dist/services/users/UserPreferencesService.js +54 -0
- package/dist/services/users/UserPreferencesService.js.map +1 -1
- package/dist/services/users/UserPushDeviceService.d.ts +18 -0
- package/dist/services/users/UserPushDeviceService.d.ts.map +1 -1
- package/dist/services/users/UserPushDeviceService.js +35 -0
- package/dist/services/users/UserPushDeviceService.js.map +1 -1
- package/dist/services/users/UserService.d.ts +142 -1
- package/dist/services/users/UserService.d.ts.map +1 -1
- package/dist/services/users/UserService.js +265 -0
- package/dist/services/users/UserService.js.map +1 -1
- package/dist/services/users/index.d.ts +5 -2
- package/dist/services/users/index.d.ts.map +1 -1
- package/dist/services/users/index.js +3 -0
- package/dist/services/users/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/react/hooks/useRealtime.d.ts +0 -63
- package/dist/react/hooks/useRealtime.d.ts.map +0 -1
- package/dist/react/hooks/useRealtime.js +0 -146
- package/dist/react/hooks/useRealtime.js.map +0 -1
- package/dist/realtime/RealtimeClient.d.ts +0 -99
- package/dist/realtime/RealtimeClient.d.ts.map +0 -1
- package/dist/realtime/RealtimeClient.js +0 -278
- package/dist/realtime/RealtimeClient.js.map +0 -1
- package/dist/realtime/types.d.ts +0 -76
- package/dist/realtime/types.d.ts.map +0 -1
- package/dist/realtime/types.js +0 -55
- package/dist/realtime/types.js.map +0 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IdleDetector
|
|
3
|
+
* Detects user inactivity and auto-switches to Away status
|
|
4
|
+
* Matches the test app's idle detection implementation
|
|
5
|
+
*/
|
|
6
|
+
import { PresenceClient } from './PresenceClient';
|
|
7
|
+
import { ActivityTracker } from './ActivityTracker';
|
|
8
|
+
export type IdleCallback = (isIdle: boolean) => void;
|
|
9
|
+
export declare class IdleDetector {
|
|
10
|
+
private presenceClient;
|
|
11
|
+
private activityTracker;
|
|
12
|
+
private idleTimeoutMinutes;
|
|
13
|
+
private gracePeriodSeconds;
|
|
14
|
+
private checkInterval;
|
|
15
|
+
private isIdle;
|
|
16
|
+
private isRunning;
|
|
17
|
+
private idleCallback;
|
|
18
|
+
private previousStatus;
|
|
19
|
+
private stateChangeUnsubscribe;
|
|
20
|
+
private wasPausedDueToDisconnect;
|
|
21
|
+
/**
|
|
22
|
+
* Create IdleDetector
|
|
23
|
+
* @param presenceClient - PresenceClient instance
|
|
24
|
+
* @param activityTracker - ActivityTracker instance to monitor activity
|
|
25
|
+
* @param idleTimeoutMinutes - Minutes of inactivity before going idle (default: 5)
|
|
26
|
+
* @param gracePeriodSeconds - Grace period in seconds before marking idle (default: 30)
|
|
27
|
+
*/
|
|
28
|
+
constructor(presenceClient: PresenceClient, activityTracker: ActivityTracker, idleTimeoutMinutes?: number, gracePeriodSeconds?: number);
|
|
29
|
+
/**
|
|
30
|
+
* Start idle detection
|
|
31
|
+
* Begins monitoring activity and auto-switching to Away when idle
|
|
32
|
+
* @param onIdleChange - Optional callback when idle state changes
|
|
33
|
+
*/
|
|
34
|
+
start(onIdleChange?: IdleCallback): void;
|
|
35
|
+
/**
|
|
36
|
+
* Stop idle detection
|
|
37
|
+
*/
|
|
38
|
+
stop(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Handle connection state changes
|
|
41
|
+
* Pauses idle detection when disconnected/reconnecting, resumes when connected
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
private handleConnectionStateChange;
|
|
45
|
+
/**
|
|
46
|
+
* Check current idle status and trigger state changes
|
|
47
|
+
* @private
|
|
48
|
+
*/
|
|
49
|
+
private checkIdleStatus;
|
|
50
|
+
/**
|
|
51
|
+
* Set idle state and update presence status
|
|
52
|
+
* @param idle - True to set idle, false to clear idle
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
private setIdle;
|
|
56
|
+
/**
|
|
57
|
+
* Get current idle state
|
|
58
|
+
* @returns True if currently idle, false otherwise
|
|
59
|
+
*/
|
|
60
|
+
getIdleStatus(): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Get remaining time before going idle
|
|
63
|
+
* @returns Remaining seconds until idle, or 0 if already idle
|
|
64
|
+
*/
|
|
65
|
+
getRemainingTime(): number;
|
|
66
|
+
/**
|
|
67
|
+
* Get formatted remaining time string (e.g., "4m 32s")
|
|
68
|
+
* @returns Formatted time string
|
|
69
|
+
*/
|
|
70
|
+
getFormattedRemainingTime(): string;
|
|
71
|
+
/**
|
|
72
|
+
* Update the idle timeout
|
|
73
|
+
* @param minutes - New timeout in minutes
|
|
74
|
+
*/
|
|
75
|
+
setIdleTimeout(minutes: number): void;
|
|
76
|
+
/**
|
|
77
|
+
* Get current timeout setting
|
|
78
|
+
* @returns Timeout in minutes
|
|
79
|
+
*/
|
|
80
|
+
getIdleTimeout(): number;
|
|
81
|
+
/**
|
|
82
|
+
* Check if idle detection is currently running
|
|
83
|
+
* @returns True if running, false otherwise
|
|
84
|
+
*/
|
|
85
|
+
isActive(): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Manually force idle state
|
|
88
|
+
* @param idle - True to force idle, false to force active
|
|
89
|
+
*/
|
|
90
|
+
forceIdleState(idle: boolean): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* Cleanup and destroy the idle detector
|
|
93
|
+
* Stops detection and unsubscribes from connection state changes
|
|
94
|
+
*/
|
|
95
|
+
destroy(): void;
|
|
96
|
+
/**
|
|
97
|
+
* Update the grace period
|
|
98
|
+
* @param seconds - New grace period in seconds
|
|
99
|
+
*/
|
|
100
|
+
setGracePeriod(seconds: number): void;
|
|
101
|
+
/**
|
|
102
|
+
* Get current grace period setting
|
|
103
|
+
* @returns Grace period in seconds
|
|
104
|
+
*/
|
|
105
|
+
getGracePeriod(): number;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=IdleDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdleDetector.d.ts","sourceRoot":"","sources":["../../../src/realtime/presence/IdleDetector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAErD,qBAAa,YAAY;IAiBrB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,kBAAkB;IAnB5B,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,sBAAsB,CAAmC;IACjE,OAAO,CAAC,wBAAwB,CAAkB;IAElD;;;;;;OAMG;gBAEO,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,EAChC,kBAAkB,GAAE,MAAU,EAC9B,kBAAkB,GAAE,MAAW;IAQzC;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI;IAkBxC;;OAEG;IACH,IAAI,IAAI,IAAI;IAUZ;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAuBnC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAmBvB;;;;OAIG;YACW,OAAO;IA8CrB;;;OAGG;IACH,aAAa,IAAI,OAAO;IAIxB;;;OAGG;IACH,gBAAgB,IAAI,MAAM;IAe1B;;;OAGG;IACH,yBAAyB,IAAI,MAAM;IAgBnC;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAcrC;;;OAGG;IACH,cAAc,IAAI,MAAM;IAIxB;;;OAGG;IACH,QAAQ,IAAI,OAAO;IAInB;;;OAGG;IACG,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD;;;OAGG;IACH,OAAO,IAAI,IAAI;IAQf;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAcrC;;;OAGG;IACH,cAAc,IAAI,MAAM;CAGzB"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IdleDetector
|
|
3
|
+
* Detects user inactivity and auto-switches to Away status
|
|
4
|
+
* Matches the test app's idle detection implementation
|
|
5
|
+
*/
|
|
6
|
+
import { PresenceStatus } from './types';
|
|
7
|
+
import { ConnectionState } from '../shared/types';
|
|
8
|
+
export class IdleDetector {
|
|
9
|
+
/**
|
|
10
|
+
* Create IdleDetector
|
|
11
|
+
* @param presenceClient - PresenceClient instance
|
|
12
|
+
* @param activityTracker - ActivityTracker instance to monitor activity
|
|
13
|
+
* @param idleTimeoutMinutes - Minutes of inactivity before going idle (default: 5)
|
|
14
|
+
* @param gracePeriodSeconds - Grace period in seconds before marking idle (default: 30)
|
|
15
|
+
*/
|
|
16
|
+
constructor(presenceClient, activityTracker, idleTimeoutMinutes = 5, gracePeriodSeconds = 30) {
|
|
17
|
+
this.presenceClient = presenceClient;
|
|
18
|
+
this.activityTracker = activityTracker;
|
|
19
|
+
this.idleTimeoutMinutes = idleTimeoutMinutes;
|
|
20
|
+
this.gracePeriodSeconds = gracePeriodSeconds;
|
|
21
|
+
this.checkInterval = null;
|
|
22
|
+
this.isIdle = false;
|
|
23
|
+
this.isRunning = false;
|
|
24
|
+
this.idleCallback = null;
|
|
25
|
+
this.previousStatus = null;
|
|
26
|
+
this.stateChangeUnsubscribe = null;
|
|
27
|
+
this.wasPausedDueToDisconnect = false;
|
|
28
|
+
// Listen for connection state changes
|
|
29
|
+
this.stateChangeUnsubscribe = this.presenceClient.onStateChange((state) => {
|
|
30
|
+
this.handleConnectionStateChange(state);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Start idle detection
|
|
35
|
+
* Begins monitoring activity and auto-switching to Away when idle
|
|
36
|
+
* @param onIdleChange - Optional callback when idle state changes
|
|
37
|
+
*/
|
|
38
|
+
start(onIdleChange) {
|
|
39
|
+
if (this.isRunning) {
|
|
40
|
+
console.warn('[IdleDetector] Already running');
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
console.log(`[IdleDetector] Starting with ${this.idleTimeoutMinutes} minute timeout`);
|
|
44
|
+
this.idleCallback = onIdleChange || null;
|
|
45
|
+
// Check for idleness every second
|
|
46
|
+
this.checkInterval = setInterval(() => {
|
|
47
|
+
this.checkIdleStatus();
|
|
48
|
+
}, 1000);
|
|
49
|
+
this.isRunning = true;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Stop idle detection
|
|
53
|
+
*/
|
|
54
|
+
stop() {
|
|
55
|
+
if (this.checkInterval) {
|
|
56
|
+
clearInterval(this.checkInterval);
|
|
57
|
+
this.checkInterval = null;
|
|
58
|
+
}
|
|
59
|
+
this.isRunning = false;
|
|
60
|
+
this.isIdle = false;
|
|
61
|
+
console.log('[IdleDetector] Stopped');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Handle connection state changes
|
|
65
|
+
* Pauses idle detection when disconnected/reconnecting, resumes when connected
|
|
66
|
+
* @private
|
|
67
|
+
*/
|
|
68
|
+
handleConnectionStateChange(state) {
|
|
69
|
+
if (state === ConnectionState.Disconnected || state === ConnectionState.Reconnecting) {
|
|
70
|
+
// Pause if running
|
|
71
|
+
if (this.isRunning) {
|
|
72
|
+
console.log(`[IdleDetector] Pausing due to connection state: ${state}`);
|
|
73
|
+
if (this.checkInterval) {
|
|
74
|
+
clearInterval(this.checkInterval);
|
|
75
|
+
this.checkInterval = null;
|
|
76
|
+
}
|
|
77
|
+
this.wasPausedDueToDisconnect = true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if (state === ConnectionState.Connected) {
|
|
81
|
+
// Resume if was paused due to disconnect
|
|
82
|
+
if (this.wasPausedDueToDisconnect && this.isRunning) {
|
|
83
|
+
console.log('[IdleDetector] Resuming after reconnection');
|
|
84
|
+
this.checkInterval = setInterval(() => {
|
|
85
|
+
this.checkIdleStatus();
|
|
86
|
+
}, 1000);
|
|
87
|
+
this.wasPausedDueToDisconnect = false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check current idle status and trigger state changes
|
|
93
|
+
* @private
|
|
94
|
+
*/
|
|
95
|
+
checkIdleStatus() {
|
|
96
|
+
const now = Date.now();
|
|
97
|
+
const lastActivity = this.activityTracker.getLastActivityTime();
|
|
98
|
+
const idleThresholdMs = this.idleTimeoutMinutes * 60 * 1000;
|
|
99
|
+
const gracePeriodMs = this.gracePeriodSeconds * 1000;
|
|
100
|
+
const timeSinceActivity = now - lastActivity;
|
|
101
|
+
// Check if we should transition to idle (with grace period)
|
|
102
|
+
if (timeSinceActivity >= (idleThresholdMs + gracePeriodMs) && !this.isIdle) {
|
|
103
|
+
console.log(`[IdleDetector] User idle after ${timeSinceActivity}ms (threshold: ${idleThresholdMs}ms + grace: ${gracePeriodMs}ms)`);
|
|
104
|
+
this.setIdle(true);
|
|
105
|
+
}
|
|
106
|
+
// Check if we should transition back from idle
|
|
107
|
+
else if (timeSinceActivity < idleThresholdMs && this.isIdle) {
|
|
108
|
+
console.log(`[IdleDetector] User active again after ${timeSinceActivity}ms`);
|
|
109
|
+
this.setIdle(false);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Set idle state and update presence status
|
|
114
|
+
* @param idle - True to set idle, false to clear idle
|
|
115
|
+
* @private
|
|
116
|
+
*/
|
|
117
|
+
async setIdle(idle) {
|
|
118
|
+
this.isIdle = idle;
|
|
119
|
+
console.log(`[IdleDetector] Idle state changed: ${idle}`);
|
|
120
|
+
// Notify callback if provided
|
|
121
|
+
if (this.idleCallback) {
|
|
122
|
+
try {
|
|
123
|
+
this.idleCallback(idle);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
console.error('[IdleDetector] Error in idle callback:', error);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Handle status change
|
|
130
|
+
if (idle) {
|
|
131
|
+
// Going idle - switch to Away
|
|
132
|
+
try {
|
|
133
|
+
// Check if connected before invoking hub method
|
|
134
|
+
if (!this.presenceClient.isConnected()) {
|
|
135
|
+
console.warn('[IdleDetector] Not connected, skipping status update');
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
// Store current status before going idle
|
|
139
|
+
const currentPresence = this.presenceClient.getCurrentUserPresence();
|
|
140
|
+
if (currentPresence) {
|
|
141
|
+
this.previousStatus = currentPresence.status;
|
|
142
|
+
}
|
|
143
|
+
// Switch to Away with idle message
|
|
144
|
+
await this.presenceClient.updateStatus(PresenceStatus.Away, 'Away - Idle');
|
|
145
|
+
console.log('[IdleDetector] Auto-switched to Away status');
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
console.error('[IdleDetector] Failed to set Away status:', error);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// Returning from idle
|
|
153
|
+
console.log('[IdleDetector] User is active again');
|
|
154
|
+
// Optionally restore previous status
|
|
155
|
+
// For now, we let the activity tracker handle status updates
|
|
156
|
+
// The backend's RecordActivity will auto-switch Away → Online
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get current idle state
|
|
161
|
+
* @returns True if currently idle, false otherwise
|
|
162
|
+
*/
|
|
163
|
+
getIdleStatus() {
|
|
164
|
+
return this.isIdle;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get remaining time before going idle
|
|
168
|
+
* @returns Remaining seconds until idle, or 0 if already idle
|
|
169
|
+
*/
|
|
170
|
+
getRemainingTime() {
|
|
171
|
+
if (this.isIdle) {
|
|
172
|
+
return 0;
|
|
173
|
+
}
|
|
174
|
+
const now = Date.now();
|
|
175
|
+
const lastActivity = this.activityTracker.getLastActivityTime();
|
|
176
|
+
const idleThresholdMs = this.idleTimeoutMinutes * 60 * 1000;
|
|
177
|
+
const gracePeriodMs = this.gracePeriodSeconds * 1000;
|
|
178
|
+
const totalThresholdMs = idleThresholdMs + gracePeriodMs;
|
|
179
|
+
const remainingMs = totalThresholdMs - (now - lastActivity);
|
|
180
|
+
return Math.max(0, Math.ceil(remainingMs / 1000)); // Return seconds
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get formatted remaining time string (e.g., "4m 32s")
|
|
184
|
+
* @returns Formatted time string
|
|
185
|
+
*/
|
|
186
|
+
getFormattedRemainingTime() {
|
|
187
|
+
const totalSeconds = this.getRemainingTime();
|
|
188
|
+
if (totalSeconds === 0) {
|
|
189
|
+
return 'Idle';
|
|
190
|
+
}
|
|
191
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
192
|
+
const seconds = totalSeconds % 60;
|
|
193
|
+
if (minutes > 0) {
|
|
194
|
+
return `${minutes}m ${seconds}s`;
|
|
195
|
+
}
|
|
196
|
+
return `${seconds}s`;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Update the idle timeout
|
|
200
|
+
* @param minutes - New timeout in minutes
|
|
201
|
+
*/
|
|
202
|
+
setIdleTimeout(minutes) {
|
|
203
|
+
if (minutes < 1) {
|
|
204
|
+
console.warn('[IdleDetector] Timeout too short, using minimum 1 minute');
|
|
205
|
+
minutes = 1;
|
|
206
|
+
}
|
|
207
|
+
if (minutes > 60) {
|
|
208
|
+
console.warn('[IdleDetector] Timeout too long, using maximum 60 minutes');
|
|
209
|
+
minutes = 60;
|
|
210
|
+
}
|
|
211
|
+
this.idleTimeoutMinutes = minutes;
|
|
212
|
+
console.log(`[IdleDetector] Timeout updated to ${minutes} minutes`);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get current timeout setting
|
|
216
|
+
* @returns Timeout in minutes
|
|
217
|
+
*/
|
|
218
|
+
getIdleTimeout() {
|
|
219
|
+
return this.idleTimeoutMinutes;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Check if idle detection is currently running
|
|
223
|
+
* @returns True if running, false otherwise
|
|
224
|
+
*/
|
|
225
|
+
isActive() {
|
|
226
|
+
return this.isRunning;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Manually force idle state
|
|
230
|
+
* @param idle - True to force idle, false to force active
|
|
231
|
+
*/
|
|
232
|
+
async forceIdleState(idle) {
|
|
233
|
+
await this.setIdle(idle);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Cleanup and destroy the idle detector
|
|
237
|
+
* Stops detection and unsubscribes from connection state changes
|
|
238
|
+
*/
|
|
239
|
+
destroy() {
|
|
240
|
+
this.stop();
|
|
241
|
+
if (this.stateChangeUnsubscribe) {
|
|
242
|
+
this.stateChangeUnsubscribe();
|
|
243
|
+
this.stateChangeUnsubscribe = null;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Update the grace period
|
|
248
|
+
* @param seconds - New grace period in seconds
|
|
249
|
+
*/
|
|
250
|
+
setGracePeriod(seconds) {
|
|
251
|
+
if (seconds < 0) {
|
|
252
|
+
console.warn('[IdleDetector] Grace period cannot be negative, using 0');
|
|
253
|
+
seconds = 0;
|
|
254
|
+
}
|
|
255
|
+
if (seconds > 120) {
|
|
256
|
+
console.warn('[IdleDetector] Grace period too long, using maximum 120 seconds');
|
|
257
|
+
seconds = 120;
|
|
258
|
+
}
|
|
259
|
+
this.gracePeriodSeconds = seconds;
|
|
260
|
+
console.log(`[IdleDetector] Grace period updated to ${seconds} seconds`);
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Get current grace period setting
|
|
264
|
+
* @returns Grace period in seconds
|
|
265
|
+
*/
|
|
266
|
+
getGracePeriod() {
|
|
267
|
+
return this.gracePeriodSeconds;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=IdleDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdleDetector.js","sourceRoot":"","sources":["../../../src/realtime/presence/IdleDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Manages real-time user presence tracking and status updates
|
|
5
5
|
*/
|
|
6
6
|
import { BaseSignalRClient } from '../shared/BaseSignalRClient';
|
|
7
|
-
import { PresenceStatus, UserPresenceUpdate, PresenceClientOptions } from './types';
|
|
7
|
+
import { PresenceStatus, UserPresenceUpdate, PresenceClientOptions, PresenceStats } from './types';
|
|
8
8
|
/**
|
|
9
9
|
* Presence hub client
|
|
10
10
|
*/
|
|
@@ -23,7 +23,7 @@ export declare class PresenceClient extends BaseSignalRClient {
|
|
|
23
23
|
/**
|
|
24
24
|
* Update current user's status
|
|
25
25
|
*/
|
|
26
|
-
updateStatus(status: PresenceStatus, activityMessage?: string): Promise<void>;
|
|
26
|
+
updateStatus(status: PresenceStatus | string, activityMessage?: string): Promise<void>;
|
|
27
27
|
/**
|
|
28
28
|
* Get list of online user IDs
|
|
29
29
|
*/
|
|
@@ -36,6 +36,30 @@ export declare class PresenceClient extends BaseSignalRClient {
|
|
|
36
36
|
* Get all presence records (online + recent offline)
|
|
37
37
|
*/
|
|
38
38
|
getAllPresence(): Promise<UserPresenceUpdate[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Send heartbeat to server (for activity tracking)
|
|
41
|
+
*/
|
|
42
|
+
heartbeat(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Record activity (automatically changes Away → Online if needed)
|
|
45
|
+
*/
|
|
46
|
+
recordActivity(): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Get presence statistics (Admin only)
|
|
49
|
+
* Returns detailed statistics about user presence status distribution
|
|
50
|
+
*/
|
|
51
|
+
getPresenceStats(): Promise<PresenceStats>;
|
|
52
|
+
/**
|
|
53
|
+
* Set all users offline - maintenance mode (Admin only)
|
|
54
|
+
* Sets all users to offline status, useful for maintenance or system reset
|
|
55
|
+
*/
|
|
56
|
+
setAllUsersOffline(): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Force disconnect a specific user (Admin only)
|
|
59
|
+
* Forcefully disconnects a user from the presence hub
|
|
60
|
+
* @param userId - The user ID to disconnect
|
|
61
|
+
*/
|
|
62
|
+
forceDisconnectUser(userId: string): Promise<void>;
|
|
39
63
|
/**
|
|
40
64
|
* Setup server-side method handlers
|
|
41
65
|
* Registers handlers for events sent from the server
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresenceClient.d.ts","sourceRoot":"","sources":["../../../src/realtime/presence/PresenceClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"PresenceClient.d.ts","sourceRoot":"","sources":["../../../src/realtime/presence/PresenceClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEnG;;GAEG;AACH,qBAAa,cAAe,SAAQ,iBAAiB;IACnD,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,mBAAmB,CAAmC;gBAG5D,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EACtC,OAAO,GAAE,qBAA0B;IAKrC;;OAEG;IACI,sBAAsB,IAAI,kBAAkB,GAAG,IAAI;IAI1D;;OAEG;IACI,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAI3D;;OAEG;IACU,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BnG;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIhD;;OAEG;IACU,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIhF;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAI5D;;OAEG;IACU,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAUvC;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5C;;;OAGG;IACU,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;IAIvD;;;OAGG;IACU,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhD;;;;OAIG;IACU,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D;;;OAGG;IACH,SAAS,CAAC,kBAAkB,IAAI,IAAI;IA8CpC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BrC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAKzC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Manages real-time user presence tracking and status updates
|
|
5
5
|
*/
|
|
6
6
|
import { BaseSignalRClient } from '../shared/BaseSignalRClient';
|
|
7
|
+
import { PresenceStatus } from './types';
|
|
7
8
|
/**
|
|
8
9
|
* Presence hub client
|
|
9
10
|
*/
|
|
@@ -29,7 +30,31 @@ export class PresenceClient extends BaseSignalRClient {
|
|
|
29
30
|
* Update current user's status
|
|
30
31
|
*/
|
|
31
32
|
async updateStatus(status, activityMessage) {
|
|
32
|
-
|
|
33
|
+
// Additional safety check - ensure we're actually connected
|
|
34
|
+
if (!this.isConnected()) {
|
|
35
|
+
console.warn('[PresenceClient] Cannot update status - not connected');
|
|
36
|
+
throw new Error('Cannot update status: not connected to presence hub');
|
|
37
|
+
}
|
|
38
|
+
// Convert status to numeric value for SignalR serialization (backend expects int enum)
|
|
39
|
+
let numericStatus;
|
|
40
|
+
if (typeof status === 'string') {
|
|
41
|
+
// Handle string enum names (for backwards compatibility)
|
|
42
|
+
const statusMap = {
|
|
43
|
+
'Offline': PresenceStatus.Offline,
|
|
44
|
+
'Online': PresenceStatus.Online,
|
|
45
|
+
'Away': PresenceStatus.Away,
|
|
46
|
+
'Busy': PresenceStatus.Busy,
|
|
47
|
+
};
|
|
48
|
+
numericStatus = statusMap[status];
|
|
49
|
+
if (numericStatus === undefined) {
|
|
50
|
+
throw new Error(`Invalid presence status: ${status}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// Already a numeric enum value
|
|
55
|
+
numericStatus = Number(status);
|
|
56
|
+
}
|
|
57
|
+
await this.invoke('UpdateStatus', numericStatus, activityMessage || null);
|
|
33
58
|
}
|
|
34
59
|
/**
|
|
35
60
|
* Get list of online user IDs
|
|
@@ -49,6 +74,46 @@ export class PresenceClient extends BaseSignalRClient {
|
|
|
49
74
|
async getAllPresence() {
|
|
50
75
|
return await this.invoke('GetAllPresence');
|
|
51
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Send heartbeat to server (for activity tracking)
|
|
79
|
+
*/
|
|
80
|
+
async heartbeat() {
|
|
81
|
+
// Additional safety check - ensure we're actually connected
|
|
82
|
+
if (!this.isConnected()) {
|
|
83
|
+
console.warn('[PresenceClient] Cannot send heartbeat - not connected');
|
|
84
|
+
throw new Error('Cannot send heartbeat: not connected to presence hub');
|
|
85
|
+
}
|
|
86
|
+
await this.invoke('Heartbeat');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Record activity (automatically changes Away → Online if needed)
|
|
90
|
+
*/
|
|
91
|
+
async recordActivity() {
|
|
92
|
+
await this.invoke('RecordActivity');
|
|
93
|
+
}
|
|
94
|
+
// ===== ADMIN METHODS (Require Admin role in JWT) =====
|
|
95
|
+
/**
|
|
96
|
+
* Get presence statistics (Admin only)
|
|
97
|
+
* Returns detailed statistics about user presence status distribution
|
|
98
|
+
*/
|
|
99
|
+
async getPresenceStats() {
|
|
100
|
+
return await this.invoke('GetPresenceStats');
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Set all users offline - maintenance mode (Admin only)
|
|
104
|
+
* Sets all users to offline status, useful for maintenance or system reset
|
|
105
|
+
*/
|
|
106
|
+
async setAllUsersOffline() {
|
|
107
|
+
await this.invoke('SetAllUsersOffline');
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Force disconnect a specific user (Admin only)
|
|
111
|
+
* Forcefully disconnects a user from the presence hub
|
|
112
|
+
* @param userId - The user ID to disconnect
|
|
113
|
+
*/
|
|
114
|
+
async forceDisconnectUser(userId) {
|
|
115
|
+
await this.invoke('ForceDisconnectUser', userId);
|
|
116
|
+
}
|
|
52
117
|
/**
|
|
53
118
|
* Setup server-side method handlers
|
|
54
119
|
* Registers handlers for events sent from the server
|
|
@@ -56,24 +121,41 @@ export class PresenceClient extends BaseSignalRClient {
|
|
|
56
121
|
setupServerMethods() {
|
|
57
122
|
if (!this.connection)
|
|
58
123
|
return;
|
|
124
|
+
// Get current user ID from auth state (will be set after connection)
|
|
125
|
+
const getCurrentUserId = () => {
|
|
126
|
+
return this.currentUserPresence?.userId || null;
|
|
127
|
+
};
|
|
59
128
|
// User comes online (first connection)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
129
|
+
// Backend sends: PresenceUpdate object directly
|
|
130
|
+
this.connection.on('UserIsOnline', (presence) => {
|
|
131
|
+
const currentUserId = getCurrentUserId();
|
|
132
|
+
// Check if this is the current user receiving their own status
|
|
133
|
+
if (presence.userId === currentUserId || !currentUserId) {
|
|
134
|
+
this.currentUserPresence = presence;
|
|
135
|
+
this.emit('currentUserPresenceChanged', presence);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
this.onlineUsers.set(presence.userId, presence);
|
|
139
|
+
this.emit('userOnline', presence); // Emit presence directly, not wrapped
|
|
140
|
+
}
|
|
63
141
|
});
|
|
64
142
|
// User goes offline (last connection closed)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
this.
|
|
143
|
+
// Backend sends: PresenceUpdate object directly
|
|
144
|
+
this.connection.on('UserIsOffline', (presence) => {
|
|
145
|
+
this.onlineUsers.delete(presence.userId);
|
|
146
|
+
this.emit('userOffline', presence); // Emit presence directly, not just userId
|
|
68
147
|
});
|
|
69
148
|
// User status changed (manual status update or activity change)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if
|
|
149
|
+
// Backend sends: PresenceUpdate object directly
|
|
150
|
+
this.connection.on('UserStatusChanged', (presence) => {
|
|
151
|
+
const currentUserId = getCurrentUserId();
|
|
152
|
+
// Check if this is the current user's status change
|
|
153
|
+
if (presence.userId === currentUserId) {
|
|
74
154
|
this.currentUserPresence = presence;
|
|
155
|
+
this.emit('currentUserPresenceChanged', presence);
|
|
75
156
|
}
|
|
76
|
-
this.
|
|
157
|
+
this.onlineUsers.set(presence.userId, presence);
|
|
158
|
+
this.emit('statusChanged', presence); // Emit presence directly, not wrapped
|
|
77
159
|
});
|
|
78
160
|
}
|
|
79
161
|
/**
|
|
@@ -81,14 +163,26 @@ export class PresenceClient extends BaseSignalRClient {
|
|
|
81
163
|
*/
|
|
82
164
|
async connect() {
|
|
83
165
|
await super.connect();
|
|
84
|
-
//
|
|
166
|
+
// Wait for connection to be fully established before calling hub methods
|
|
167
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
168
|
+
// Load initial presence data after connection
|
|
85
169
|
try {
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
170
|
+
const onlineUserIds = await this.getOnlineUsers();
|
|
171
|
+
console.log('[PresenceClient] Loaded online users:', onlineUserIds.length);
|
|
172
|
+
const allPresence = await this.getAllPresence();
|
|
173
|
+
console.log('[PresenceClient] Loaded all presence:', allPresence.length);
|
|
174
|
+
// Emit initial state for all online users
|
|
175
|
+
allPresence.forEach(presence => {
|
|
176
|
+
if (presence.isOnline) {
|
|
177
|
+
this.onlineUsers.set(presence.userId, presence);
|
|
178
|
+
this.emit('userOnline', presence);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
89
181
|
}
|
|
90
182
|
catch (error) {
|
|
91
|
-
console.
|
|
183
|
+
console.error('[PresenceClient] Failed to load initial presence:', error);
|
|
184
|
+
// Don't throw - allow connection to proceed
|
|
185
|
+
// The server will send real-time updates as they happen
|
|
92
186
|
}
|
|
93
187
|
}
|
|
94
188
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresenceClient.js","sourceRoot":"","sources":["../../../src/realtime/presence/PresenceClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"PresenceClient.js","sourceRoot":"","sources":["../../../src/realtime/presence/PresenceClient.ts"],"names":[],"mappings":"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"}
|