@memberjunction/server 2.112.0 → 2.113.0

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 (250) hide show
  1. package/dist/agents/skip-agent.d.ts +4 -4
  2. package/dist/agents/skip-agent.d.ts.map +1 -1
  3. package/dist/agents/skip-agent.js +951 -808
  4. package/dist/agents/skip-agent.js.map +1 -1
  5. package/dist/agents/skip-sdk.d.ts +1 -1
  6. package/dist/agents/skip-sdk.d.ts.map +1 -1
  7. package/dist/agents/skip-sdk.js +43 -53
  8. package/dist/agents/skip-sdk.js.map +1 -1
  9. package/dist/apolloServer/index.js +1 -1
  10. package/dist/auth/AuthProviderFactory.d.ts +1 -1
  11. package/dist/auth/AuthProviderFactory.d.ts.map +1 -1
  12. package/dist/auth/AuthProviderFactory.js +3 -1
  13. package/dist/auth/AuthProviderFactory.js.map +1 -1
  14. package/dist/auth/BaseAuthProvider.d.ts +1 -1
  15. package/dist/auth/BaseAuthProvider.d.ts.map +1 -1
  16. package/dist/auth/BaseAuthProvider.js +2 -3
  17. package/dist/auth/BaseAuthProvider.js.map +1 -1
  18. package/dist/auth/IAuthProvider.d.ts +1 -1
  19. package/dist/auth/IAuthProvider.d.ts.map +1 -1
  20. package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -1
  21. package/dist/auth/exampleNewUserSubClass.js +1 -1
  22. package/dist/auth/exampleNewUserSubClass.js.map +1 -1
  23. package/dist/auth/index.d.ts +1 -1
  24. package/dist/auth/index.d.ts.map +1 -1
  25. package/dist/auth/index.js +6 -6
  26. package/dist/auth/index.js.map +1 -1
  27. package/dist/auth/initializeProviders.js +1 -1
  28. package/dist/auth/initializeProviders.js.map +1 -1
  29. package/dist/auth/newUsers.d.ts +1 -1
  30. package/dist/auth/newUsers.d.ts.map +1 -1
  31. package/dist/auth/newUsers.js +7 -7
  32. package/dist/auth/newUsers.js.map +1 -1
  33. package/dist/auth/providers/Auth0Provider.d.ts +1 -1
  34. package/dist/auth/providers/Auth0Provider.d.ts.map +1 -1
  35. package/dist/auth/providers/Auth0Provider.js +1 -1
  36. package/dist/auth/providers/Auth0Provider.js.map +1 -1
  37. package/dist/auth/providers/CognitoProvider.d.ts +1 -1
  38. package/dist/auth/providers/CognitoProvider.d.ts.map +1 -1
  39. package/dist/auth/providers/CognitoProvider.js +6 -3
  40. package/dist/auth/providers/CognitoProvider.js.map +1 -1
  41. package/dist/auth/providers/GoogleProvider.d.ts +1 -1
  42. package/dist/auth/providers/GoogleProvider.d.ts.map +1 -1
  43. package/dist/auth/providers/GoogleProvider.js +1 -1
  44. package/dist/auth/providers/GoogleProvider.js.map +1 -1
  45. package/dist/auth/providers/MSALProvider.d.ts +1 -1
  46. package/dist/auth/providers/MSALProvider.d.ts.map +1 -1
  47. package/dist/auth/providers/MSALProvider.js +1 -1
  48. package/dist/auth/providers/MSALProvider.js.map +1 -1
  49. package/dist/auth/providers/OktaProvider.d.ts +1 -1
  50. package/dist/auth/providers/OktaProvider.d.ts.map +1 -1
  51. package/dist/auth/providers/OktaProvider.js +1 -1
  52. package/dist/auth/providers/OktaProvider.js.map +1 -1
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +10 -22
  55. package/dist/config.js.map +1 -1
  56. package/dist/context.d.ts +1 -1
  57. package/dist/context.d.ts.map +1 -1
  58. package/dist/context.js +7 -9
  59. package/dist/context.js.map +1 -1
  60. package/dist/entitySubclasses/entityPermissions.server.d.ts +1 -1
  61. package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -1
  62. package/dist/entitySubclasses/entityPermissions.server.js +1 -1
  63. package/dist/entitySubclasses/entityPermissions.server.js.map +1 -1
  64. package/dist/generated/generated.d.ts +788 -658
  65. package/dist/generated/generated.d.ts.map +1 -1
  66. package/dist/generated/generated.js +2050 -3054
  67. package/dist/generated/generated.js.map +1 -1
  68. package/dist/generic/KeyInputOutputTypes.d.ts +1 -1
  69. package/dist/generic/KeyInputOutputTypes.d.ts.map +1 -1
  70. package/dist/generic/KeyInputOutputTypes.js +1 -1
  71. package/dist/generic/KeyInputOutputTypes.js.map +1 -1
  72. package/dist/generic/ResolverBase.d.ts +1 -1
  73. package/dist/generic/ResolverBase.d.ts.map +1 -1
  74. package/dist/generic/ResolverBase.js +10 -15
  75. package/dist/generic/ResolverBase.js.map +1 -1
  76. package/dist/generic/RunViewResolver.d.ts +1 -1
  77. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  78. package/dist/generic/RunViewResolver.js +15 -15
  79. package/dist/generic/RunViewResolver.js.map +1 -1
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +13 -18
  82. package/dist/index.js.map +1 -1
  83. package/dist/resolvers/ActionResolver.d.ts +2 -2
  84. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  85. package/dist/resolvers/ActionResolver.js +30 -28
  86. package/dist/resolvers/ActionResolver.js.map +1 -1
  87. package/dist/resolvers/AskSkipResolver.d.ts +2 -2
  88. package/dist/resolvers/AskSkipResolver.d.ts.map +1 -1
  89. package/dist/resolvers/AskSkipResolver.js +50 -60
  90. package/dist/resolvers/AskSkipResolver.js.map +1 -1
  91. package/dist/resolvers/ComponentRegistryResolver.d.ts.map +1 -1
  92. package/dist/resolvers/ComponentRegistryResolver.js +38 -36
  93. package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
  94. package/dist/resolvers/CreateQueryResolver.d.ts +1 -1
  95. package/dist/resolvers/CreateQueryResolver.d.ts.map +1 -1
  96. package/dist/resolvers/CreateQueryResolver.js +40 -43
  97. package/dist/resolvers/CreateQueryResolver.js.map +1 -1
  98. package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
  99. package/dist/resolvers/DatasetResolver.js +1 -1
  100. package/dist/resolvers/DatasetResolver.js.map +1 -1
  101. package/dist/resolvers/EntityRecordNameResolver.d.ts +1 -1
  102. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
  103. package/dist/resolvers/EntityRecordNameResolver.js +1 -1
  104. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  105. package/dist/resolvers/EntityResolver.d.ts.map +1 -1
  106. package/dist/resolvers/EntityResolver.js +1 -1
  107. package/dist/resolvers/EntityResolver.js.map +1 -1
  108. package/dist/resolvers/FileCategoryResolver.js +1 -1
  109. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  110. package/dist/resolvers/FileResolver.js +1 -1
  111. package/dist/resolvers/FileResolver.js.map +1 -1
  112. package/dist/resolvers/GetDataContextDataResolver.d.ts +1 -1
  113. package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
  114. package/dist/resolvers/GetDataContextDataResolver.js +5 -5
  115. package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
  116. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  117. package/dist/resolvers/GetDataResolver.js +6 -8
  118. package/dist/resolvers/GetDataResolver.js.map +1 -1
  119. package/dist/resolvers/MergeRecordsResolver.d.ts +3 -3
  120. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  121. package/dist/resolvers/MergeRecordsResolver.js +3 -3
  122. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  123. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +1 -1
  124. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
  125. package/dist/resolvers/PotentialDuplicateRecordResolver.js +1 -1
  126. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
  127. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  128. package/dist/resolvers/QueryResolver.js +11 -11
  129. package/dist/resolvers/QueryResolver.js.map +1 -1
  130. package/dist/resolvers/ReportResolver.js +1 -1
  131. package/dist/resolvers/ReportResolver.js.map +1 -1
  132. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  133. package/dist/resolvers/RunAIAgentResolver.js +28 -27
  134. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  135. package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
  136. package/dist/resolvers/RunAIPromptResolver.js +31 -31
  137. package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
  138. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  139. package/dist/resolvers/RunTemplateResolver.js +9 -9
  140. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  141. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  142. package/dist/resolvers/SqlLoggingConfigResolver.js +10 -10
  143. package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
  144. package/dist/resolvers/SyncDataResolver.d.ts +1 -1
  145. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  146. package/dist/resolvers/SyncDataResolver.js +14 -15
  147. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  148. package/dist/resolvers/SyncRolesUsersResolver.d.ts +1 -1
  149. package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
  150. package/dist/resolvers/SyncRolesUsersResolver.js +44 -48
  151. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  152. package/dist/resolvers/TaskResolver.d.ts.map +1 -1
  153. package/dist/resolvers/TaskResolver.js +7 -7
  154. package/dist/resolvers/TaskResolver.js.map +1 -1
  155. package/dist/resolvers/TransactionGroupResolver.d.ts +1 -1
  156. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  157. package/dist/resolvers/TransactionGroupResolver.js +12 -12
  158. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  159. package/dist/resolvers/UserFavoriteResolver.d.ts +1 -1
  160. package/dist/resolvers/UserFavoriteResolver.d.ts.map +1 -1
  161. package/dist/resolvers/UserFavoriteResolver.js +1 -1
  162. package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
  163. package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
  164. package/dist/resolvers/UserViewResolver.js.map +1 -1
  165. package/dist/rest/EntityCRUDHandler.d.ts +1 -1
  166. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  167. package/dist/rest/EntityCRUDHandler.js +16 -14
  168. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  169. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  170. package/dist/rest/RESTEndpointHandler.js +25 -23
  171. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  172. package/dist/rest/ViewOperationsHandler.d.ts +1 -1
  173. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  174. package/dist/rest/ViewOperationsHandler.js +21 -17
  175. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  176. package/dist/scheduler/LearningCycleScheduler.d.ts.map +1 -1
  177. package/dist/scheduler/LearningCycleScheduler.js.map +1 -1
  178. package/dist/services/ScheduledJobsService.d.ts.map +1 -1
  179. package/dist/services/ScheduledJobsService.js +6 -4
  180. package/dist/services/ScheduledJobsService.js.map +1 -1
  181. package/dist/services/TaskOrchestrator.d.ts +1 -1
  182. package/dist/services/TaskOrchestrator.d.ts.map +1 -1
  183. package/dist/services/TaskOrchestrator.js +30 -30
  184. package/dist/services/TaskOrchestrator.js.map +1 -1
  185. package/dist/types.d.ts +3 -3
  186. package/dist/types.d.ts.map +1 -1
  187. package/dist/types.js +1 -0
  188. package/dist/types.js.map +1 -1
  189. package/dist/util.d.ts +1 -1
  190. package/dist/util.d.ts.map +1 -1
  191. package/dist/util.js +2 -2
  192. package/dist/util.js.map +1 -1
  193. package/package.json +39 -36
  194. package/src/agents/skip-agent.ts +1200 -1067
  195. package/src/agents/skip-sdk.ts +851 -877
  196. package/src/apolloServer/index.ts +2 -2
  197. package/src/auth/AuthProviderFactory.ts +14 -8
  198. package/src/auth/BaseAuthProvider.ts +4 -5
  199. package/src/auth/IAuthProvider.ts +2 -2
  200. package/src/auth/exampleNewUserSubClass.ts +2 -9
  201. package/src/auth/index.ts +26 -31
  202. package/src/auth/initializeProviders.ts +3 -3
  203. package/src/auth/newUsers.ts +134 -166
  204. package/src/auth/providers/Auth0Provider.ts +5 -5
  205. package/src/auth/providers/CognitoProvider.ts +10 -7
  206. package/src/auth/providers/GoogleProvider.ts +5 -4
  207. package/src/auth/providers/MSALProvider.ts +5 -5
  208. package/src/auth/providers/OktaProvider.ts +7 -6
  209. package/src/config.ts +54 -63
  210. package/src/context.ts +30 -42
  211. package/src/entitySubclasses/entityPermissions.server.ts +3 -3
  212. package/src/generated/generated.ts +40442 -48106
  213. package/src/generic/KeyInputOutputTypes.ts +6 -3
  214. package/src/generic/ResolverBase.ts +78 -119
  215. package/src/generic/RunViewResolver.ts +23 -27
  216. package/src/index.ts +48 -66
  217. package/src/resolvers/ActionResolver.ts +57 -46
  218. package/src/resolvers/AskSkipResolver.ts +533 -607
  219. package/src/resolvers/ComponentRegistryResolver.ts +562 -547
  220. package/src/resolvers/CreateQueryResolver.ts +655 -683
  221. package/src/resolvers/DatasetResolver.ts +6 -5
  222. package/src/resolvers/EntityCommunicationsResolver.ts +1 -1
  223. package/src/resolvers/EntityRecordNameResolver.ts +5 -9
  224. package/src/resolvers/EntityResolver.ts +7 -9
  225. package/src/resolvers/FileCategoryResolver.ts +2 -2
  226. package/src/resolvers/FileResolver.ts +4 -4
  227. package/src/resolvers/GetDataContextDataResolver.ts +118 -106
  228. package/src/resolvers/GetDataResolver.ts +205 -194
  229. package/src/resolvers/MergeRecordsResolver.ts +5 -5
  230. package/src/resolvers/PotentialDuplicateRecordResolver.ts +1 -1
  231. package/src/resolvers/QueryResolver.ts +78 -95
  232. package/src/resolvers/ReportResolver.ts +2 -2
  233. package/src/resolvers/RunAIAgentResolver.ts +828 -818
  234. package/src/resolvers/RunAIPromptResolver.ts +709 -693
  235. package/src/resolvers/RunTemplateResolver.ts +103 -105
  236. package/src/resolvers/SqlLoggingConfigResolver.ts +72 -69
  237. package/src/resolvers/SyncDataResolver.ts +352 -386
  238. package/src/resolvers/SyncRolesUsersResolver.ts +350 -387
  239. package/src/resolvers/TaskResolver.ts +115 -110
  240. package/src/resolvers/TransactionGroupResolver.ts +138 -143
  241. package/src/resolvers/UserFavoriteResolver.ts +8 -17
  242. package/src/resolvers/UserViewResolver.ts +12 -17
  243. package/src/rest/EntityCRUDHandler.ts +268 -291
  244. package/src/rest/RESTEndpointHandler.ts +776 -782
  245. package/src/rest/ViewOperationsHandler.ts +195 -191
  246. package/src/scheduler/LearningCycleScheduler.ts +52 -8
  247. package/src/services/ScheduledJobsService.ts +132 -129
  248. package/src/services/TaskOrchestrator.ts +776 -792
  249. package/src/types.ts +9 -15
  250. package/src/util.ts +109 -112
@@ -3,7 +3,7 @@
3
3
  * @module MJServer/services
4
4
  */
5
5
 
6
- import { LogError, LogStatus, UserInfo } from '@memberjunction/global';
6
+ import { LogError, LogStatus, UserInfo } from '@memberjunction/core';
7
7
  import { UserCache } from '@memberjunction/sqlserver-dataprovider';
8
8
  import { SchedulingEngine } from '@memberjunction/scheduling-engine';
9
9
  import { ScheduledJobsConfig } from '../config.js';
@@ -13,149 +13,152 @@ import { ScheduledJobsConfig } from '../config.js';
13
13
  * Handles initialization, starting/stopping polling, and graceful shutdown
14
14
  */
15
15
  export class ScheduledJobsService {
16
- private engine: SchedulingEngine;
17
- private systemUser: UserInfo | null = null;
18
- private isRunning: boolean = false;
19
- private config: ScheduledJobsConfig;
20
-
21
- constructor(config: ScheduledJobsConfig) {
22
- this.config = config;
23
- this.engine = SchedulingEngine.Instance;
24
- }
25
-
26
- /**
27
- * Initialize the scheduled jobs service
28
- * Loads metadata and prepares the engine
29
- */
30
- public async Initialize(): Promise<void> {
31
- if (!this.config.enabled) {
32
- LogStatus('[ScheduledJobsService] Scheduled jobs are disabled in configuration');
33
- return;
16
+ private engine: SchedulingEngine;
17
+ private systemUser: UserInfo | null = null;
18
+ private isRunning: boolean = false;
19
+ private config: ScheduledJobsConfig;
20
+
21
+ constructor(config: ScheduledJobsConfig) {
22
+ this.config = config;
23
+ this.engine = SchedulingEngine.Instance;
34
24
  }
35
25
 
36
- try {
37
- // Get system user for job execution
38
- this.systemUser = await this.getSystemUser();
26
+ /**
27
+ * Initialize the scheduled jobs service
28
+ * Loads metadata and prepares the engine
29
+ */
30
+ public async Initialize(): Promise<void> {
31
+ if (!this.config.enabled) {
32
+ LogStatus('[ScheduledJobsService] Scheduled jobs are disabled in configuration');
33
+ return;
34
+ }
39
35
 
40
- if (!this.systemUser) {
41
- throw new Error(`System user not found with email: ${this.config.systemUserEmail}`);
42
- }
36
+ try {
37
+ // Get system user for job execution
38
+ this.systemUser = await this.getSystemUser();
43
39
 
44
- // Pre-load metadata cache
45
- await this.engine.Config(false, this.systemUser);
46
- } catch (error) {
47
- LogError('[ScheduledJobsService] Failed to initialize', undefined, error);
48
- throw error;
49
- }
50
- }
51
-
52
- /**
53
- * Start the scheduled jobs polling
54
- */
55
- public async Start(): Promise<void> {
56
- if (!this.config.enabled) {
57
- return;
58
- }
40
+ if (!this.systemUser) {
41
+ throw new Error(`System user not found with email: ${this.config.systemUserEmail}`);
42
+ }
59
43
 
60
- if (this.isRunning) {
61
- LogStatus('[ScheduledJobsService] Already running');
62
- return;
44
+ // Pre-load metadata cache
45
+ await this.engine.Config(false, this.systemUser);
46
+ } catch (error) {
47
+ LogError('[ScheduledJobsService] Failed to initialize', undefined, error);
48
+ throw error;
49
+ }
63
50
  }
64
51
 
65
- if (!this.systemUser) {
66
- throw new Error('Service not initialized - call Initialize() first');
67
- }
52
+ /**
53
+ * Start the scheduled jobs polling
54
+ */
55
+ public async Start(): Promise<void> {
56
+ if (!this.config.enabled) {
57
+ return;
58
+ }
68
59
 
69
- try {
70
- this.engine.StartPolling(this.systemUser);
71
- this.isRunning = true;
72
-
73
- // Single consolidated console message
74
- const jobCount = this.engine.ScheduledJobs.length;
75
- if (jobCount === 0) {
76
- console.log(`📅 Scheduled Jobs: No active jobs, polling suspended (will auto-start when jobs are added)`);
77
- } else {
78
- const interval = this.engine.ActivePollingInterval;
79
- if (interval !== null) {
80
- const intervalDisplay =
81
- interval >= 60000 ? `${Math.round(interval / 60000)} minute(s)` : `${Math.round(interval / 1000)} second(s)`;
82
- console.log(`📅 Scheduled Jobs: ${jobCount} active job(s), polling every ${intervalDisplay}`);
83
- } else {
84
- // This shouldn't happen if jobCount > 0, but handle it gracefully
85
- console.log(`📅 Scheduled Jobs: ${jobCount} active job(s), polling interval not set`);
60
+ if (this.isRunning) {
61
+ LogStatus('[ScheduledJobsService] Already running');
62
+ return;
63
+ }
64
+
65
+ if (!this.systemUser) {
66
+ throw new Error('Service not initialized - call Initialize() first');
67
+ }
68
+
69
+ try {
70
+ this.engine.StartPolling(this.systemUser);
71
+ this.isRunning = true;
72
+
73
+ // Single consolidated console message
74
+ const jobCount = this.engine.ScheduledJobs.length;
75
+ if (jobCount === 0) {
76
+ console.log(`📅 Scheduled Jobs: No active jobs, polling suspended (will auto-start when jobs are added)`);
77
+ } else {
78
+ const interval = this.engine.ActivePollingInterval;
79
+ if (interval !== null) {
80
+ const intervalDisplay = interval >= 60000
81
+ ? `${Math.round(interval / 60000)} minute(s)`
82
+ : `${Math.round(interval / 1000)} second(s)`;
83
+ console.log(`📅 Scheduled Jobs: ${jobCount} active job(s), polling every ${intervalDisplay}`);
84
+ } else {
85
+ // This shouldn't happen if jobCount > 0, but handle it gracefully
86
+ console.log(`📅 Scheduled Jobs: ${jobCount} active job(s), polling interval not set`);
87
+ }
88
+ }
89
+ } catch (error) {
90
+ LogError('[ScheduledJobsService] Failed to start polling', undefined, error);
91
+ throw error;
86
92
  }
87
- }
88
- } catch (error) {
89
- LogError('[ScheduledJobsService] Failed to start polling', undefined, error);
90
- throw error;
91
- }
92
- }
93
-
94
- /**
95
- * Stop the scheduled jobs polling gracefully
96
- */
97
- public async Stop(): Promise<void> {
98
- if (!this.isRunning) {
99
- return;
100
93
  }
101
94
 
102
- try {
103
- LogStatus('[ScheduledJobsService] Stopping scheduled job polling');
104
- this.engine.StopPolling();
105
- this.isRunning = false;
106
- LogStatus('[ScheduledJobsService] Polling stopped successfully');
107
- } catch (error) {
108
- LogError('[ScheduledJobsService] Error stopping polling', undefined, error);
109
- throw error;
95
+ /**
96
+ * Stop the scheduled jobs polling gracefully
97
+ */
98
+ public async Stop(): Promise<void> {
99
+ if (!this.isRunning) {
100
+ return;
101
+ }
102
+
103
+ try {
104
+ LogStatus('[ScheduledJobsService] Stopping scheduled job polling');
105
+ this.engine.StopPolling();
106
+ this.isRunning = false;
107
+ LogStatus('[ScheduledJobsService] Polling stopped successfully');
108
+ } catch (error) {
109
+ LogError('[ScheduledJobsService] Error stopping polling', undefined, error);
110
+ throw error;
111
+ }
110
112
  }
111
- }
112
113
 
113
- /**
114
- * Get the system user for job execution
115
- * Uses the email configured in scheduledJobs.systemUserEmail
116
- */
117
- private async getSystemUser(): Promise<UserInfo | null> {
118
- const systemUserEmail = this.config.systemUserEmail;
114
+ /**
115
+ * Get the system user for job execution
116
+ * Uses the email configured in scheduledJobs.systemUserEmail
117
+ */
118
+ private async getSystemUser(): Promise<UserInfo | null> {
119
+ const systemUserEmail = this.config.systemUserEmail;
120
+
121
+ // Search UserCache for system user
122
+ const user = UserCache.Users.find(u =>
123
+ u.Email?.toLowerCase() === systemUserEmail.toLowerCase()
124
+ );
125
+
126
+ if (user) {
127
+ return user;
128
+ }
119
129
 
120
- // Search UserCache for system user
121
- const user = UserCache.Users.find((u) => u.Email?.toLowerCase() === systemUserEmail.toLowerCase());
130
+ LogError(`[ScheduledJobsService] System user not found with email: ${systemUserEmail}`);
131
+ return null;
132
+ }
122
133
 
123
- if (user) {
124
- return user;
134
+ /**
135
+ * Get current service status
136
+ */
137
+ public GetStatus(): {
138
+ enabled: boolean;
139
+ running: boolean;
140
+ activeJobs: number;
141
+ pollingInterval: number;
142
+ } {
143
+ return {
144
+ enabled: this.config.enabled,
145
+ running: this.isRunning,
146
+ activeJobs: this.engine?.ScheduledJobs?.length || 0,
147
+ pollingInterval: this.engine?.ActivePollingInterval || 0
148
+ };
125
149
  }
126
150
 
127
- LogError(`[ScheduledJobsService] System user not found with email: ${systemUserEmail}`);
128
- return null;
129
- }
130
-
131
- /**
132
- * Get current service status
133
- */
134
- public GetStatus(): {
135
- enabled: boolean;
136
- running: boolean;
137
- activeJobs: number;
138
- pollingInterval: number;
139
- } {
140
- return {
141
- enabled: this.config.enabled,
142
- running: this.isRunning,
143
- activeJobs: this.engine?.ScheduledJobs?.length || 0,
144
- pollingInterval: this.engine?.ActivePollingInterval || 0,
145
- };
146
- }
147
-
148
- /**
149
- * Check if service is enabled in configuration
150
- */
151
- public get IsEnabled(): boolean {
152
- return this.config.enabled;
153
- }
154
-
155
- /**
156
- * Check if service is currently running
157
- */
158
- public get IsRunning(): boolean {
159
- return this.isRunning;
160
- }
151
+ /**
152
+ * Check if service is enabled in configuration
153
+ */
154
+ public get IsEnabled(): boolean {
155
+ return this.config.enabled;
156
+ }
157
+
158
+ /**
159
+ * Check if service is currently running
160
+ */
161
+ public get IsRunning(): boolean {
162
+ return this.isRunning;
163
+ }
161
164
  }