@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.
Files changed (495) hide show
  1. package/README.md +55 -1
  2. package/dist/core/Config.d.ts +21 -2
  3. package/dist/core/Config.d.ts.map +1 -1
  4. package/dist/core/Config.js.map +1 -1
  5. package/dist/core/HttpClient.d.ts +5 -0
  6. package/dist/core/HttpClient.d.ts.map +1 -1
  7. package/dist/core/HttpClient.js +75 -0
  8. package/dist/core/HttpClient.js.map +1 -1
  9. package/dist/index.d.ts +3 -3
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/models/file/Folder.d.ts +179 -0
  14. package/dist/models/file/Folder.d.ts.map +1 -0
  15. package/dist/models/file/Folder.js +6 -0
  16. package/dist/models/file/Folder.js.map +1 -0
  17. package/dist/models/file/ModelView/FileRecordModelView.d.ts +3 -0
  18. package/dist/models/file/ModelView/FileRecordModelView.d.ts.map +1 -1
  19. package/dist/models/file/PresignUploadRequest.d.ts +4 -0
  20. package/dist/models/file/PresignUploadRequest.d.ts.map +1 -1
  21. package/dist/models/file/index.d.ts +1 -0
  22. package/dist/models/file/index.d.ts.map +1 -1
  23. package/dist/models/file/index.js +1 -0
  24. package/dist/models/file/index.js.map +1 -1
  25. package/dist/models/index.d.ts +1 -0
  26. package/dist/models/index.d.ts.map +1 -1
  27. package/dist/models/index.js +2 -0
  28. package/dist/models/index.js.map +1 -1
  29. package/dist/models/socialmedia/index.d.ts +322 -0
  30. package/dist/models/socialmedia/index.d.ts.map +1 -0
  31. package/dist/models/socialmedia/index.js +6 -0
  32. package/dist/models/socialmedia/index.js.map +1 -0
  33. package/dist/models/system/ModelView/Health.d.ts +14 -11
  34. package/dist/models/system/ModelView/Health.d.ts.map +1 -1
  35. package/dist/models/system/ModelView/Health.js +1 -0
  36. package/dist/models/system/ModelView/Health.js.map +1 -1
  37. package/dist/models/system/ModelView/RabbitMQManagement.d.ts +93 -92
  38. package/dist/models/system/ModelView/RabbitMQManagement.d.ts.map +1 -1
  39. package/dist/models/system/ModelView/RedisManagement.d.ts +94 -42
  40. package/dist/models/system/ModelView/RedisManagement.d.ts.map +1 -1
  41. package/dist/models/task/ModelView/CreateTask.d.ts +14 -17
  42. package/dist/models/task/ModelView/CreateTask.d.ts.map +1 -1
  43. package/dist/models/task/ModelView/UpdateTaskPriorityRequest.d.ts +10 -0
  44. package/dist/models/task/ModelView/UpdateTaskPriorityRequest.d.ts.map +1 -0
  45. package/dist/models/task/ModelView/UpdateTaskPriorityRequest.js +2 -0
  46. package/dist/models/task/ModelView/UpdateTaskPriorityRequest.js.map +1 -0
  47. package/dist/models/task/ModelView/UpdateTaskProjectRequest.d.ts +10 -0
  48. package/dist/models/task/ModelView/UpdateTaskProjectRequest.d.ts.map +1 -0
  49. package/dist/models/task/ModelView/UpdateTaskProjectRequest.js +2 -0
  50. package/dist/models/task/ModelView/UpdateTaskProjectRequest.js.map +1 -0
  51. package/dist/models/task/ModelView/index.d.ts +2 -0
  52. package/dist/models/task/ModelView/index.d.ts.map +1 -1
  53. package/dist/models/task/ModelView/index.js +2 -0
  54. package/dist/models/task/ModelView/index.js.map +1 -1
  55. package/dist/react/CCMSProvider.d.ts +1 -19
  56. package/dist/react/CCMSProvider.d.ts.map +1 -1
  57. package/dist/react/CCMSProvider.js +71 -56
  58. package/dist/react/CCMSProvider.js.map +1 -1
  59. package/dist/react/hooks/index.d.ts +0 -1
  60. package/dist/react/hooks/index.d.ts.map +1 -1
  61. package/dist/react/hooks/index.js +1 -3
  62. package/dist/react/hooks/index.js.map +1 -1
  63. package/dist/react/hooks/services/index.d.ts +1 -0
  64. package/dist/react/hooks/services/index.d.ts.map +1 -1
  65. package/dist/react/hooks/services/index.js +2 -0
  66. package/dist/react/hooks/services/index.js.map +1 -1
  67. package/dist/react/hooks/services/useSocialMediaServices.d.ts +43 -0
  68. package/dist/react/hooks/services/useSocialMediaServices.d.ts.map +1 -0
  69. package/dist/react/hooks/services/useSocialMediaServices.js +65 -0
  70. package/dist/react/hooks/services/useSocialMediaServices.js.map +1 -0
  71. package/dist/react/hooks/services/useUsersServices.d.ts +5 -1
  72. package/dist/react/hooks/services/useUsersServices.d.ts.map +1 -1
  73. package/dist/react/hooks/services/useUsersServices.js +6 -0
  74. package/dist/react/hooks/services/useUsersServices.js.map +1 -1
  75. package/dist/react/hooks/useCCMS.d.ts +7 -4
  76. package/dist/react/hooks/useCCMS.d.ts.map +1 -1
  77. package/dist/react/hooks/useCCMS.js +8 -4
  78. package/dist/react/hooks/useCCMS.js.map +1 -1
  79. package/dist/realtime/index.d.ts +1 -1
  80. package/dist/realtime/index.d.ts.map +1 -1
  81. package/dist/realtime/index.js +2 -5
  82. package/dist/realtime/index.js.map +1 -1
  83. package/dist/realtime/presence/ActivityTracker.d.ts +141 -0
  84. package/dist/realtime/presence/ActivityTracker.d.ts.map +1 -0
  85. package/dist/realtime/presence/ActivityTracker.js +342 -0
  86. package/dist/realtime/presence/ActivityTracker.js.map +1 -0
  87. package/dist/realtime/presence/AutoHeartbeatManager.d.ts +68 -0
  88. package/dist/realtime/presence/AutoHeartbeatManager.d.ts.map +1 -0
  89. package/dist/realtime/presence/AutoHeartbeatManager.js +160 -0
  90. package/dist/realtime/presence/AutoHeartbeatManager.js.map +1 -0
  91. package/dist/realtime/presence/IdleDetector.d.ts +107 -0
  92. package/dist/realtime/presence/IdleDetector.d.ts.map +1 -0
  93. package/dist/realtime/presence/IdleDetector.js +270 -0
  94. package/dist/realtime/presence/IdleDetector.js.map +1 -0
  95. package/dist/realtime/presence/PresenceClient.d.ts +26 -2
  96. package/dist/realtime/presence/PresenceClient.d.ts.map +1 -1
  97. package/dist/realtime/presence/PresenceClient.js +111 -17
  98. package/dist/realtime/presence/PresenceClient.js.map +1 -1
  99. package/dist/realtime/presence/PresenceManager.d.ts +191 -0
  100. package/dist/realtime/presence/PresenceManager.d.ts.map +1 -0
  101. package/dist/realtime/presence/PresenceManager.js +314 -0
  102. package/dist/realtime/presence/PresenceManager.js.map +1 -0
  103. package/dist/realtime/presence/PresenceProvider.d.ts +16 -0
  104. package/dist/realtime/presence/PresenceProvider.d.ts.map +1 -1
  105. package/dist/realtime/presence/PresenceProvider.js +92 -20
  106. package/dist/realtime/presence/PresenceProvider.js.map +1 -1
  107. package/dist/realtime/presence/index.d.ts +5 -0
  108. package/dist/realtime/presence/index.d.ts.map +1 -1
  109. package/dist/realtime/presence/index.js +10 -0
  110. package/dist/realtime/presence/index.js.map +1 -1
  111. package/dist/realtime/presence/types.d.ts +32 -13
  112. package/dist/realtime/presence/types.d.ts.map +1 -1
  113. package/dist/realtime/presence/types.js +6 -5
  114. package/dist/realtime/presence/types.js.map +1 -1
  115. package/dist/realtime/presence/utils/platformDetector.d.ts +23 -0
  116. package/dist/realtime/presence/utils/platformDetector.d.ts.map +1 -0
  117. package/dist/realtime/presence/utils/platformDetector.js +88 -0
  118. package/dist/realtime/presence/utils/platformDetector.js.map +1 -0
  119. package/dist/realtime/presence/utils.d.ts +87 -0
  120. package/dist/realtime/presence/utils.d.ts.map +1 -0
  121. package/dist/realtime/presence/utils.js +191 -0
  122. package/dist/realtime/presence/utils.js.map +1 -0
  123. package/dist/realtime/shared/BaseSignalRClient.d.ts.map +1 -1
  124. package/dist/realtime/shared/BaseSignalRClient.js +38 -4
  125. package/dist/realtime/shared/BaseSignalRClient.js.map +1 -1
  126. package/dist/services/departments/DepartmentService.d.ts.map +1 -1
  127. package/dist/services/departments/DepartmentService.js +1 -1
  128. package/dist/services/departments/DepartmentService.js.map +1 -1
  129. package/dist/services/departments/DesignationService.d.ts.map +1 -1
  130. package/dist/services/departments/DesignationService.js +1 -1
  131. package/dist/services/departments/DesignationService.js.map +1 -1
  132. package/dist/services/departments/DesignationTaskService.d.ts.map +1 -1
  133. package/dist/services/departments/DesignationTaskService.js +1 -1
  134. package/dist/services/departments/DesignationTaskService.js.map +1 -1
  135. package/dist/services/departments/MemberDesignationService.d.ts.map +1 -1
  136. package/dist/services/departments/MemberDesignationService.js +1 -1
  137. package/dist/services/departments/MemberDesignationService.js.map +1 -1
  138. package/dist/services/departments/MemberInDepartmentService.d.ts.map +1 -1
  139. package/dist/services/departments/MemberInDepartmentService.js +1 -1
  140. package/dist/services/departments/MemberInDepartmentService.js.map +1 -1
  141. package/dist/services/departments/MinistryActivityService.d.ts.map +1 -1
  142. package/dist/services/departments/MinistryActivityService.js +1 -1
  143. package/dist/services/departments/MinistryActivityService.js.map +1 -1
  144. package/dist/services/departments/MinistryEquipmentService.d.ts.map +1 -1
  145. package/dist/services/departments/MinistryEquipmentService.js +1 -1
  146. package/dist/services/departments/MinistryEquipmentService.js.map +1 -1
  147. package/dist/services/departments/MinistryRoleService.d.ts.map +1 -1
  148. package/dist/services/departments/MinistryRoleService.js +1 -1
  149. package/dist/services/departments/MinistryRoleService.js.map +1 -1
  150. package/dist/services/departments/MinistryService.d.ts.map +1 -1
  151. package/dist/services/departments/MinistryService.js +1 -1
  152. package/dist/services/departments/MinistryService.js.map +1 -1
  153. package/dist/services/departments/MinistryTeamService.d.ts.map +1 -1
  154. package/dist/services/departments/MinistryTeamService.js +1 -1
  155. package/dist/services/departments/MinistryTeamService.js.map +1 -1
  156. package/dist/services/feedback/FeedbackCategoryRecipientService.d.ts.map +1 -1
  157. package/dist/services/feedback/FeedbackCategoryRecipientService.js +1 -1
  158. package/dist/services/feedback/FeedbackCategoryRecipientService.js.map +1 -1
  159. package/dist/services/feedback/FeedbackCategoryService.d.ts.map +1 -1
  160. package/dist/services/feedback/FeedbackCategoryService.js +1 -1
  161. package/dist/services/feedback/FeedbackCategoryService.js.map +1 -1
  162. package/dist/services/feedback/FeedbackNotificationQueueService.d.ts.map +1 -1
  163. package/dist/services/feedback/FeedbackNotificationQueueService.js +1 -1
  164. package/dist/services/feedback/FeedbackNotificationQueueService.js.map +1 -1
  165. package/dist/services/feedback/FeedbackService.d.ts.map +1 -1
  166. package/dist/services/feedback/FeedbackService.js +1 -1
  167. package/dist/services/feedback/FeedbackService.js.map +1 -1
  168. package/dist/services/feedback/FeedbackTypeService.d.ts.map +1 -1
  169. package/dist/services/feedback/FeedbackTypeService.js +1 -1
  170. package/dist/services/feedback/FeedbackTypeService.js.map +1 -1
  171. package/dist/services/file/FileService.d.ts +55 -1
  172. package/dist/services/file/FileService.d.ts.map +1 -1
  173. package/dist/services/file/FileService.js +114 -0
  174. package/dist/services/file/FileService.js.map +1 -1
  175. package/dist/services/file/FolderService.d.ts +99 -0
  176. package/dist/services/file/FolderService.d.ts.map +1 -0
  177. package/dist/services/file/FolderService.js +147 -0
  178. package/dist/services/file/FolderService.js.map +1 -0
  179. package/dist/services/file/index.d.ts +3 -0
  180. package/dist/services/file/index.d.ts.map +1 -1
  181. package/dist/services/file/index.js +3 -0
  182. package/dist/services/file/index.js.map +1 -1
  183. package/dist/services/index.d.ts +1 -0
  184. package/dist/services/index.d.ts.map +1 -1
  185. package/dist/services/index.js +2 -0
  186. package/dist/services/index.js.map +1 -1
  187. package/dist/services/locations/AddressService.d.ts.map +1 -1
  188. package/dist/services/locations/AddressService.js +1 -1
  189. package/dist/services/locations/AddressService.js.map +1 -1
  190. package/dist/services/locations/LocationInfoService.d.ts.map +1 -1
  191. package/dist/services/locations/LocationInfoService.js +1 -1
  192. package/dist/services/locations/LocationInfoService.js.map +1 -1
  193. package/dist/services/locations/LocationLeaderService.d.ts.map +1 -1
  194. package/dist/services/locations/LocationLeaderService.js +1 -1
  195. package/dist/services/locations/LocationLeaderService.js.map +1 -1
  196. package/dist/services/locations/LocationService.d.ts.map +1 -1
  197. package/dist/services/locations/LocationService.js +1 -1
  198. package/dist/services/locations/LocationService.js.map +1 -1
  199. package/dist/services/locations/LocationSocialMediaService.d.ts.map +1 -1
  200. package/dist/services/locations/LocationSocialMediaService.js +1 -1
  201. package/dist/services/locations/LocationSocialMediaService.js.map +1 -1
  202. package/dist/services/locations/LocationVenueService.d.ts.map +1 -1
  203. package/dist/services/locations/LocationVenueService.js +1 -1
  204. package/dist/services/locations/LocationVenueService.js.map +1 -1
  205. package/dist/services/locations/ServiceTimeService.d.ts.map +1 -1
  206. package/dist/services/locations/ServiceTimeService.js +1 -1
  207. package/dist/services/locations/ServiceTimeService.js.map +1 -1
  208. package/dist/services/locations/SocialMediaService.d.ts.map +1 -1
  209. package/dist/services/locations/SocialMediaService.js +1 -1
  210. package/dist/services/locations/SocialMediaService.js.map +1 -1
  211. package/dist/services/meetings/LocationVenueRequestService.d.ts.map +1 -1
  212. package/dist/services/meetings/LocationVenueRequestService.js +1 -1
  213. package/dist/services/meetings/LocationVenueRequestService.js.map +1 -1
  214. package/dist/services/meetings/LocationVenueSetupService.d.ts.map +1 -1
  215. package/dist/services/meetings/LocationVenueSetupService.js +1 -1
  216. package/dist/services/meetings/LocationVenueSetupService.js.map +1 -1
  217. package/dist/services/meetings/MeetingAttendanceStatusService.d.ts.map +1 -1
  218. package/dist/services/meetings/MeetingAttendanceStatusService.js +1 -1
  219. package/dist/services/meetings/MeetingAttendanceStatusService.js.map +1 -1
  220. package/dist/services/meetings/MeetingAttendeeService.d.ts.map +1 -1
  221. package/dist/services/meetings/MeetingAttendeeService.js +1 -1
  222. package/dist/services/meetings/MeetingAttendeeService.js.map +1 -1
  223. package/dist/services/meetings/MeetingCommentService.d.ts.map +1 -1
  224. package/dist/services/meetings/MeetingCommentService.js +1 -1
  225. package/dist/services/meetings/MeetingCommentService.js.map +1 -1
  226. package/dist/services/meetings/MeetingFileService.d.ts.map +1 -1
  227. package/dist/services/meetings/MeetingFileService.js +1 -1
  228. package/dist/services/meetings/MeetingFileService.js.map +1 -1
  229. package/dist/services/meetings/MeetingRequestService.d.ts.map +1 -1
  230. package/dist/services/meetings/MeetingRequestService.js +1 -1
  231. package/dist/services/meetings/MeetingRequestService.js.map +1 -1
  232. package/dist/services/meetings/MeetingService.d.ts.map +1 -1
  233. package/dist/services/meetings/MeetingService.js +1 -1
  234. package/dist/services/meetings/MeetingService.js.map +1 -1
  235. package/dist/services/meetings/MeetingSetupService.d.ts.map +1 -1
  236. package/dist/services/meetings/MeetingSetupService.js +1 -1
  237. package/dist/services/meetings/MeetingSetupService.js.map +1 -1
  238. package/dist/services/meetings/MeetingStatusService.d.ts.map +1 -1
  239. package/dist/services/meetings/MeetingStatusService.js +1 -1
  240. package/dist/services/meetings/MeetingStatusService.js.map +1 -1
  241. package/dist/services/meetings/MeetingTypeService.d.ts.map +1 -1
  242. package/dist/services/meetings/MeetingTypeService.js +1 -1
  243. package/dist/services/meetings/MeetingTypeService.js.map +1 -1
  244. package/dist/services/meetings/MeetingVenueService.d.ts.map +1 -1
  245. package/dist/services/meetings/MeetingVenueService.js +1 -1
  246. package/dist/services/meetings/MeetingVenueService.js.map +1 -1
  247. package/dist/services/meetings/RequestInMeetingService.d.ts.map +1 -1
  248. package/dist/services/meetings/RequestInMeetingService.js +1 -1
  249. package/dist/services/meetings/RequestInMeetingService.js.map +1 -1
  250. package/dist/services/meetings/SetupInMeetingService.d.ts.map +1 -1
  251. package/dist/services/meetings/SetupInMeetingService.js +1 -1
  252. package/dist/services/meetings/SetupInMeetingService.js.map +1 -1
  253. package/dist/services/members/AllergyService.d.ts.map +1 -1
  254. package/dist/services/members/AllergyService.js +1 -1
  255. package/dist/services/members/AllergyService.js.map +1 -1
  256. package/dist/services/members/DisabilityService.d.ts.map +1 -1
  257. package/dist/services/members/DisabilityService.js +1 -1
  258. package/dist/services/members/DisabilityService.js.map +1 -1
  259. package/dist/services/members/FamilyService.d.ts.map +1 -1
  260. package/dist/services/members/FamilyService.js +1 -1
  261. package/dist/services/members/FamilyService.js.map +1 -1
  262. package/dist/services/members/MaritalStatusService.d.ts.map +1 -1
  263. package/dist/services/members/MaritalStatusService.js +1 -1
  264. package/dist/services/members/MaritalStatusService.js.map +1 -1
  265. package/dist/services/members/MemberAddressService.d.ts.map +1 -1
  266. package/dist/services/members/MemberAddressService.js +1 -1
  267. package/dist/services/members/MemberAddressService.js.map +1 -1
  268. package/dist/services/members/MemberLocationService.d.ts.map +1 -1
  269. package/dist/services/members/MemberLocationService.js +1 -1
  270. package/dist/services/members/MemberLocationService.js.map +1 -1
  271. package/dist/services/members/MemberService.d.ts.map +1 -1
  272. package/dist/services/members/MemberService.js +1 -1
  273. package/dist/services/members/MemberService.js.map +1 -1
  274. package/dist/services/members/MemberTypeService.d.ts.map +1 -1
  275. package/dist/services/members/MemberTypeService.js +1 -1
  276. package/dist/services/members/MemberTypeService.js.map +1 -1
  277. package/dist/services/members/RelationshipService.d.ts.map +1 -1
  278. package/dist/services/members/RelationshipService.js +1 -1
  279. package/dist/services/members/RelationshipService.js.map +1 -1
  280. package/dist/services/orders/OrderLineModelViewService.d.ts.map +1 -1
  281. package/dist/services/orders/OrderLineModelViewService.js +1 -1
  282. package/dist/services/orders/OrderLineModelViewService.js.map +1 -1
  283. package/dist/services/orders/OrderLineService.d.ts.map +1 -1
  284. package/dist/services/orders/OrderLineService.js +1 -1
  285. package/dist/services/orders/OrderLineService.js.map +1 -1
  286. package/dist/services/orders/OrderModelViewService.d.ts.map +1 -1
  287. package/dist/services/orders/OrderModelViewService.js +1 -1
  288. package/dist/services/orders/OrderModelViewService.js.map +1 -1
  289. package/dist/services/orders/OrderNotificationService.d.ts.map +1 -1
  290. package/dist/services/orders/OrderNotificationService.js +1 -1
  291. package/dist/services/orders/OrderNotificationService.js.map +1 -1
  292. package/dist/services/orders/OrderPaymentModelViewService.d.ts.map +1 -1
  293. package/dist/services/orders/OrderPaymentModelViewService.js +1 -1
  294. package/dist/services/orders/OrderPaymentModelViewService.js.map +1 -1
  295. package/dist/services/orders/OrderPaymentService.d.ts.map +1 -1
  296. package/dist/services/orders/OrderPaymentService.js +1 -1
  297. package/dist/services/orders/OrderPaymentService.js.map +1 -1
  298. package/dist/services/orders/OrderService.d.ts.map +1 -1
  299. package/dist/services/orders/OrderService.js +1 -1
  300. package/dist/services/orders/OrderService.js.map +1 -1
  301. package/dist/services/orders/OrderStatusService.d.ts.map +1 -1
  302. package/dist/services/orders/OrderStatusService.js +1 -1
  303. package/dist/services/orders/OrderStatusService.js.map +1 -1
  304. package/dist/services/orders/PaymentStatusService.d.ts.map +1 -1
  305. package/dist/services/orders/PaymentStatusService.js +1 -1
  306. package/dist/services/orders/PaymentStatusService.js.map +1 -1
  307. package/dist/services/procurements/AuditLogService.d.ts.map +1 -1
  308. package/dist/services/procurements/AuditLogService.js +1 -1
  309. package/dist/services/procurements/AuditLogService.js.map +1 -1
  310. package/dist/services/procurements/InvoiceLineService.d.ts.map +1 -1
  311. package/dist/services/procurements/InvoiceLineService.js +1 -1
  312. package/dist/services/procurements/InvoiceLineService.js.map +1 -1
  313. package/dist/services/procurements/InvoiceService.d.ts.map +1 -1
  314. package/dist/services/procurements/InvoiceService.js +1 -1
  315. package/dist/services/procurements/InvoiceService.js.map +1 -1
  316. package/dist/services/procurements/InvoiceStatusService.d.ts.map +1 -1
  317. package/dist/services/procurements/InvoiceStatusService.js +1 -1
  318. package/dist/services/procurements/InvoiceStatusService.js.map +1 -1
  319. package/dist/services/procurements/NotificationService.d.ts.map +1 -1
  320. package/dist/services/procurements/NotificationService.js +1 -1
  321. package/dist/services/procurements/NotificationService.js.map +1 -1
  322. package/dist/services/procurements/ProcurementRoleTypeService.d.ts.map +1 -1
  323. package/dist/services/procurements/ProcurementRoleTypeService.js +1 -1
  324. package/dist/services/procurements/ProcurementRoleTypeService.js.map +1 -1
  325. package/dist/services/procurements/PurchaseRequestService.d.ts.map +1 -1
  326. package/dist/services/procurements/PurchaseRequestService.js +1 -1
  327. package/dist/services/procurements/PurchaseRequestService.js.map +1 -1
  328. package/dist/services/procurements/QuotationLineService.d.ts.map +1 -1
  329. package/dist/services/procurements/QuotationLineService.js +1 -1
  330. package/dist/services/procurements/QuotationLineService.js.map +1 -1
  331. package/dist/services/procurements/QuotationService.d.ts.map +1 -1
  332. package/dist/services/procurements/QuotationService.js +1 -1
  333. package/dist/services/procurements/QuotationService.js.map +1 -1
  334. package/dist/services/procurements/QuotationStatusService.d.ts.map +1 -1
  335. package/dist/services/procurements/QuotationStatusService.js +1 -1
  336. package/dist/services/procurements/QuotationStatusService.js.map +1 -1
  337. package/dist/services/procurements/RequestApprovalStatusService.d.ts.map +1 -1
  338. package/dist/services/procurements/RequestApprovalStatusService.js +1 -1
  339. package/dist/services/procurements/RequestApprovalStatusService.js.map +1 -1
  340. package/dist/services/procurements/RequestAttachmentService.d.ts.map +1 -1
  341. package/dist/services/procurements/RequestAttachmentService.js +1 -1
  342. package/dist/services/procurements/RequestAttachmentService.js.map +1 -1
  343. package/dist/services/procurements/RequestCommentService.d.ts.map +1 -1
  344. package/dist/services/procurements/RequestCommentService.js +1 -1
  345. package/dist/services/procurements/RequestCommentService.js.map +1 -1
  346. package/dist/services/procurements/RequestStageService.d.ts.map +1 -1
  347. package/dist/services/procurements/RequestStageService.js +1 -1
  348. package/dist/services/procurements/RequestStageService.js.map +1 -1
  349. package/dist/services/procurements/RequestStatusService.d.ts.map +1 -1
  350. package/dist/services/procurements/RequestStatusService.js +1 -1
  351. package/dist/services/procurements/RequestStatusService.js.map +1 -1
  352. package/dist/services/procurements/RequestTypeService.d.ts.map +1 -1
  353. package/dist/services/procurements/RequestTypeService.js +1 -1
  354. package/dist/services/procurements/RequestTypeService.js.map +1 -1
  355. package/dist/services/procurements/SageItemService.d.ts.map +1 -1
  356. package/dist/services/procurements/SageItemService.js +1 -1
  357. package/dist/services/procurements/SageItemService.js.map +1 -1
  358. package/dist/services/procurements/SagePurchaseOrderService.d.ts.map +1 -1
  359. package/dist/services/procurements/SagePurchaseOrderService.js +1 -1
  360. package/dist/services/procurements/SagePurchaseOrderService.js.map +1 -1
  361. package/dist/services/socialmedia/SocialMediaAccountService.d.ts +38 -0
  362. package/dist/services/socialmedia/SocialMediaAccountService.d.ts.map +1 -0
  363. package/dist/services/socialmedia/SocialMediaAccountService.js +59 -0
  364. package/dist/services/socialmedia/SocialMediaAccountService.js.map +1 -0
  365. package/dist/services/socialmedia/SocialMediaAdsService.d.ts +74 -0
  366. package/dist/services/socialmedia/SocialMediaAdsService.d.ts.map +1 -0
  367. package/dist/services/socialmedia/SocialMediaAdsService.js +130 -0
  368. package/dist/services/socialmedia/SocialMediaAdsService.js.map +1 -0
  369. package/dist/services/socialmedia/SocialMediaDashboardService.d.ts +137 -0
  370. package/dist/services/socialmedia/SocialMediaDashboardService.d.ts.map +1 -0
  371. package/dist/services/socialmedia/SocialMediaDashboardService.js +179 -0
  372. package/dist/services/socialmedia/SocialMediaDashboardService.js.map +1 -0
  373. package/dist/services/socialmedia/SocialMediaMetricsService.d.ts +56 -0
  374. package/dist/services/socialmedia/SocialMediaMetricsService.d.ts.map +1 -0
  375. package/dist/services/socialmedia/SocialMediaMetricsService.js +105 -0
  376. package/dist/services/socialmedia/SocialMediaMetricsService.js.map +1 -0
  377. package/dist/services/socialmedia/SocialMediaPostService.d.ts +56 -0
  378. package/dist/services/socialmedia/SocialMediaPostService.d.ts.map +1 -0
  379. package/dist/services/socialmedia/SocialMediaPostService.js +94 -0
  380. package/dist/services/socialmedia/SocialMediaPostService.js.map +1 -0
  381. package/dist/services/socialmedia/SocialMediaStoryService.d.ts +47 -0
  382. package/dist/services/socialmedia/SocialMediaStoryService.d.ts.map +1 -0
  383. package/dist/services/socialmedia/SocialMediaStoryService.js +77 -0
  384. package/dist/services/socialmedia/SocialMediaStoryService.js.map +1 -0
  385. package/dist/services/socialmedia/SocialMediaThresholdService.d.ts +47 -0
  386. package/dist/services/socialmedia/SocialMediaThresholdService.d.ts.map +1 -0
  387. package/dist/services/socialmedia/SocialMediaThresholdService.js +75 -0
  388. package/dist/services/socialmedia/SocialMediaThresholdService.js.map +1 -0
  389. package/dist/services/socialmedia/SocialMediaVideoService.d.ts +47 -0
  390. package/dist/services/socialmedia/SocialMediaVideoService.d.ts.map +1 -0
  391. package/dist/services/socialmedia/SocialMediaVideoService.js +77 -0
  392. package/dist/services/socialmedia/SocialMediaVideoService.js.map +1 -0
  393. package/dist/services/socialmedia/index.d.ts +43 -0
  394. package/dist/services/socialmedia/index.d.ts.map +1 -0
  395. package/dist/services/socialmedia/index.js +41 -0
  396. package/dist/services/socialmedia/index.js.map +1 -0
  397. package/dist/services/system/HealthService.d.ts +15 -0
  398. package/dist/services/system/HealthService.d.ts.map +1 -1
  399. package/dist/services/system/HealthService.js +21 -15
  400. package/dist/services/system/HealthService.js.map +1 -1
  401. package/dist/services/system/RabbitMQManagementService.d.ts +13 -9
  402. package/dist/services/system/RabbitMQManagementService.d.ts.map +1 -1
  403. package/dist/services/system/RabbitMQManagementService.js +23 -40
  404. package/dist/services/system/RabbitMQManagementService.js.map +1 -1
  405. package/dist/services/system/RedisManagementService.d.ts +13 -6
  406. package/dist/services/system/RedisManagementService.d.ts.map +1 -1
  407. package/dist/services/system/RedisManagementService.js +42 -20
  408. package/dist/services/system/RedisManagementService.js.map +1 -1
  409. package/dist/services/task/LogTypeService.d.ts.map +1 -1
  410. package/dist/services/task/LogTypeService.js +1 -1
  411. package/dist/services/task/LogTypeService.js.map +1 -1
  412. package/dist/services/task/TaskAssignmentService.d.ts.map +1 -1
  413. package/dist/services/task/TaskAssignmentService.js +1 -1
  414. package/dist/services/task/TaskAssignmentService.js.map +1 -1
  415. package/dist/services/task/TaskAttachmentService.d.ts.map +1 -1
  416. package/dist/services/task/TaskAttachmentService.js +1 -1
  417. package/dist/services/task/TaskAttachmentService.js.map +1 -1
  418. package/dist/services/task/TaskCommentService.d.ts.map +1 -1
  419. package/dist/services/task/TaskCommentService.js +1 -1
  420. package/dist/services/task/TaskCommentService.js.map +1 -1
  421. package/dist/services/task/TaskLogService.d.ts.map +1 -1
  422. package/dist/services/task/TaskLogService.js +1 -1
  423. package/dist/services/task/TaskLogService.js.map +1 -1
  424. package/dist/services/task/TaskNoteService.d.ts.map +1 -1
  425. package/dist/services/task/TaskNoteService.js +1 -1
  426. package/dist/services/task/TaskNoteService.js.map +1 -1
  427. package/dist/services/task/TaskNotificationQueueService.d.ts.map +1 -1
  428. package/dist/services/task/TaskNotificationQueueService.js +1 -1
  429. package/dist/services/task/TaskNotificationQueueService.js.map +1 -1
  430. package/dist/services/task/TaskNotificationService.d.ts.map +1 -1
  431. package/dist/services/task/TaskNotificationService.js +1 -1
  432. package/dist/services/task/TaskNotificationService.js.map +1 -1
  433. package/dist/services/task/TaskPriorityService.d.ts.map +1 -1
  434. package/dist/services/task/TaskPriorityService.js +1 -1
  435. package/dist/services/task/TaskPriorityService.js.map +1 -1
  436. package/dist/services/task/TaskProgressStageService.d.ts.map +1 -1
  437. package/dist/services/task/TaskProgressStageService.js +1 -1
  438. package/dist/services/task/TaskProgressStageService.js.map +1 -1
  439. package/dist/services/task/TaskService.d.ts +100 -1
  440. package/dist/services/task/TaskService.d.ts.map +1 -1
  441. package/dist/services/task/TaskService.js +167 -0
  442. package/dist/services/task/TaskService.js.map +1 -1
  443. package/dist/services/task/TaskStatusService.d.ts.map +1 -1
  444. package/dist/services/task/TaskStatusService.js +1 -1
  445. package/dist/services/task/TaskStatusService.js.map +1 -1
  446. package/dist/services/types.d.ts +2 -0
  447. package/dist/services/types.d.ts.map +1 -1
  448. package/dist/services/users/AdminService.d.ts.map +1 -1
  449. package/dist/services/users/AdminService.js +30 -3
  450. package/dist/services/users/AdminService.js.map +1 -1
  451. package/dist/services/users/PresenceAnalyticsService.d.ts +179 -0
  452. package/dist/services/users/PresenceAnalyticsService.d.ts.map +1 -0
  453. package/dist/services/users/PresenceAnalyticsService.js +232 -0
  454. package/dist/services/users/PresenceAnalyticsService.js.map +1 -0
  455. package/dist/services/users/RightService.d.ts +16 -20
  456. package/dist/services/users/RightService.d.ts.map +1 -1
  457. package/dist/services/users/RightService.js +3 -37
  458. package/dist/services/users/RightService.js.map +1 -1
  459. package/dist/services/users/RoleService.d.ts +27 -0
  460. package/dist/services/users/RoleService.d.ts.map +1 -1
  461. package/dist/services/users/RoleService.js +54 -0
  462. package/dist/services/users/RoleService.js.map +1 -1
  463. package/dist/services/users/SystemService.d.ts +9 -0
  464. package/dist/services/users/SystemService.d.ts.map +1 -1
  465. package/dist/services/users/SystemService.js +20 -0
  466. package/dist/services/users/SystemService.js.map +1 -1
  467. package/dist/services/users/UserPreferencesService.d.ts +27 -0
  468. package/dist/services/users/UserPreferencesService.d.ts.map +1 -1
  469. package/dist/services/users/UserPreferencesService.js +54 -0
  470. package/dist/services/users/UserPreferencesService.js.map +1 -1
  471. package/dist/services/users/UserPushDeviceService.d.ts +18 -0
  472. package/dist/services/users/UserPushDeviceService.d.ts.map +1 -1
  473. package/dist/services/users/UserPushDeviceService.js +35 -0
  474. package/dist/services/users/UserPushDeviceService.js.map +1 -1
  475. package/dist/services/users/UserService.d.ts +142 -1
  476. package/dist/services/users/UserService.d.ts.map +1 -1
  477. package/dist/services/users/UserService.js +265 -0
  478. package/dist/services/users/UserService.js.map +1 -1
  479. package/dist/services/users/index.d.ts +5 -2
  480. package/dist/services/users/index.d.ts.map +1 -1
  481. package/dist/services/users/index.js +3 -0
  482. package/dist/services/users/index.js.map +1 -1
  483. package/package.json +1 -1
  484. package/dist/react/hooks/useRealtime.d.ts +0 -63
  485. package/dist/react/hooks/useRealtime.d.ts.map +0 -1
  486. package/dist/react/hooks/useRealtime.js +0 -146
  487. package/dist/react/hooks/useRealtime.js.map +0 -1
  488. package/dist/realtime/RealtimeClient.d.ts +0 -99
  489. package/dist/realtime/RealtimeClient.d.ts.map +0 -1
  490. package/dist/realtime/RealtimeClient.js +0 -278
  491. package/dist/realtime/RealtimeClient.js.map +0 -1
  492. package/dist/realtime/types.d.ts +0 -76
  493. package/dist/realtime/types.d.ts.map +0 -1
  494. package/dist/realtime/types.js +0 -55
  495. 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;AAEpF;;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,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1F;;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;;;OAGG;IACH,SAAS,CAAC,kBAAkB,IAAI,IAAI;IA4BpC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAarC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAKzC"}
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
- await this.invoke('UpdateStatus', status, activityMessage || null);
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
- this.connection.on('UserIsOnline', (userId, presence) => {
61
- this.onlineUsers.set(userId, presence);
62
- this.emit('userOnline', { userId, presence });
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
- this.connection.on('UserIsOffline', (userId) => {
66
- this.onlineUsers.delete(userId);
67
- this.emit('userOffline', { userId });
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
- this.connection.on('UserStatusChanged', (userId, presence) => {
71
- this.onlineUsers.set(userId, presence);
72
- // Update current user presence if it's our own status change
73
- if (this.currentUserPresence && this.currentUserPresence.userId === userId) {
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.emit('statusChanged', { userId, presence });
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
- // Load initial online users after connection
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 userIds = await this.getOnlineUsers();
87
- // Note: We could fetch full presence for each user, but that might be expensive
88
- // The server will send UserStatusChanged events as updates come in
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.warn('[PresenceClient] Failed to load initial online users:', error);
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":"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"}
1
+ {"version":3,"file":"PresenceClient.js","sourceRoot":"","sources":["../../../src/realtime/presence/PresenceClient.ts"],"names":[],"mappings":"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"}