@solidxai/core 0.1.9-beta.8 → 0.1.10-alpha.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 (158) hide show
  1. package/LICENSE +89 -0
  2. package/README.md +3 -1
  3. package/dist/commands/run-tests.command.d.ts +2 -0
  4. package/dist/commands/run-tests.command.d.ts.map +1 -1
  5. package/dist/commands/run-tests.command.js +49 -17
  6. package/dist/commands/run-tests.command.js.map +1 -1
  7. package/dist/controllers/action-metadata.controller.js +1 -1
  8. package/dist/controllers/action-metadata.controller.js.map +1 -1
  9. package/dist/controllers/facebook-authentication.controller.js +1 -1
  10. package/dist/controllers/facebook-authentication.controller.js.map +1 -1
  11. package/dist/controllers/google-authentication.controller.js +1 -1
  12. package/dist/controllers/google-authentication.controller.js.map +1 -1
  13. package/dist/controllers/menu-item-metadata.controller.js +1 -1
  14. package/dist/controllers/menu-item-metadata.controller.js.map +1 -1
  15. package/dist/controllers/microsoft-authentication.controller.js +1 -1
  16. package/dist/controllers/microsoft-authentication.controller.js.map +1 -1
  17. package/dist/controllers/mq-message-queue.controller.js +1 -1
  18. package/dist/controllers/mq-message-queue.controller.js.map +1 -1
  19. package/dist/controllers/mq-message.controller.js +1 -1
  20. package/dist/controllers/mq-message.controller.js.map +1 -1
  21. package/dist/controllers/user.controller.d.ts.map +1 -1
  22. package/dist/controllers/user.controller.js.map +1 -1
  23. package/dist/controllers/view-metadata.controller.js +1 -1
  24. package/dist/controllers/view-metadata.controller.js.map +1 -1
  25. package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
  26. package/dist/helpers/bootstrap.helper.js +2 -0
  27. package/dist/helpers/bootstrap.helper.js.map +1 -1
  28. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js.map +1 -1
  29. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js.map +1 -1
  30. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  31. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  32. package/dist/passport-strategies/facebook-oauth.strategy.d.ts +5 -3
  33. package/dist/passport-strategies/facebook-oauth.strategy.d.ts.map +1 -1
  34. package/dist/passport-strategies/facebook-oauth.strategy.js +41 -18
  35. package/dist/passport-strategies/facebook-oauth.strategy.js.map +1 -1
  36. package/dist/repository/security-rule.repository.js.map +1 -1
  37. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  38. package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
  39. package/dist/seeders/seed-data/solid-core-metadata.json +14 -3
  40. package/dist/services/authentication.service.d.ts +12 -13
  41. package/dist/services/authentication.service.d.ts.map +1 -1
  42. package/dist/services/authentication.service.js +42 -18
  43. package/dist/services/authentication.service.js.map +1 -1
  44. package/dist/services/chatter-message.service.js.map +1 -1
  45. package/dist/services/crud.service.js.map +1 -1
  46. package/dist/services/csv.service.js.map +1 -1
  47. package/dist/services/dashboard.service.js.map +1 -1
  48. package/dist/services/database/database-bootstrap.service.js.map +1 -1
  49. package/dist/services/excel.service.js.map +1 -1
  50. package/dist/services/export-transaction.service.js.map +1 -1
  51. package/dist/services/field-metadata.service.js +2 -2
  52. package/dist/services/field-metadata.service.js.map +1 -1
  53. package/dist/services/fixtures.service.js.map +1 -1
  54. package/dist/services/import-transaction.service.js.map +1 -1
  55. package/dist/services/list-of-values.service.js.map +1 -1
  56. package/dist/services/model-metadata.service.d.ts.map +1 -1
  57. package/dist/services/model-metadata.service.js +3 -13
  58. package/dist/services/model-metadata.service.js.map +1 -1
  59. package/dist/services/module-metadata.service.js.map +1 -1
  60. package/dist/services/queues/database-publisher.service.js +3 -3
  61. package/dist/services/queues/database-publisher.service.js.map +1 -1
  62. package/dist/services/queues/database-subscriber.service.js +3 -3
  63. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  64. package/dist/services/queues/rabbitmq-publisher.service.js +3 -3
  65. package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
  66. package/dist/services/queues/rabbitmq-subscriber.service.js +4 -4
  67. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  68. package/dist/services/queues/redis-publisher.service.d.ts.map +1 -1
  69. package/dist/services/queues/redis-publisher.service.js +4 -1
  70. package/dist/services/queues/redis-publisher.service.js.map +1 -1
  71. package/dist/services/queues/redis-subscriber.service.d.ts.map +1 -1
  72. package/dist/services/queues/redis-subscriber.service.js +4 -1
  73. package/dist/services/queues/redis-subscriber.service.js.map +1 -1
  74. package/dist/services/role-metadata.service.js.map +1 -1
  75. package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
  76. package/dist/services/settings/default-settings-provider.service.d.ts +74 -8
  77. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  78. package/dist/services/settings/default-settings-provider.service.js +96 -16
  79. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  80. package/dist/services/sms/TwilioSMSService.js.map +1 -1
  81. package/dist/services/solid-introspect.service.js.map +1 -1
  82. package/dist/services/user-activity-history.service.js.map +1 -1
  83. package/dist/services/user.service.d.ts +10 -8
  84. package/dist/services/user.service.d.ts.map +1 -1
  85. package/dist/services/user.service.js +85 -46
  86. package/dist/services/user.service.js.map +1 -1
  87. package/dist/services/view-metadata.service.d.ts.map +1 -1
  88. package/dist/services/view-metadata.service.js +17 -2
  89. package/dist/services/view-metadata.service.js.map +1 -1
  90. package/dist/solid-core.module.d.ts +1 -0
  91. package/dist/solid-core.module.d.ts.map +1 -1
  92. package/dist/solid-core.module.js +1 -0
  93. package/dist/solid-core.module.js.map +1 -1
  94. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  95. package/dist/subscribers/security-rule.subscriber.d.ts.map +1 -1
  96. package/dist/subscribers/security-rule.subscriber.js.map +1 -1
  97. package/dist/subscribers/view-metadata.subscriber.js.map +1 -1
  98. package/dist/testing/core/testing-engine.js.map +1 -1
  99. package/dist/testing/reporter/webhook-reporter.d.ts +54 -0
  100. package/dist/testing/reporter/webhook-reporter.d.ts.map +1 -0
  101. package/dist/testing/reporter/webhook-reporter.js +74 -0
  102. package/dist/testing/reporter/webhook-reporter.js.map +1 -0
  103. package/package.json +6 -2
  104. package/src/commands/run-tests.command.ts +45 -17
  105. package/src/controllers/action-metadata.controller.ts +1 -1
  106. package/src/controllers/facebook-authentication.controller.ts +1 -1
  107. package/src/controllers/google-authentication.controller.ts +1 -1
  108. package/src/controllers/menu-item-metadata.controller.ts +1 -1
  109. package/src/controllers/microsoft-authentication.controller.ts +1 -1
  110. package/src/controllers/mq-message-queue.controller.ts +1 -1
  111. package/src/controllers/mq-message.controller.ts +1 -1
  112. package/src/controllers/user.controller.ts +16 -16
  113. package/src/controllers/view-metadata.controller.ts +1 -1
  114. package/src/helpers/bootstrap.helper.ts +3 -0
  115. package/src/helpers/field-crud-managers/BigIntFieldCrudManager.ts +1 -1
  116. package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +1 -1
  117. package/src/helpers/module-metadata-helper.service.ts +1 -1
  118. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +1 -1
  119. package/src/passport-strategies/facebook-oauth.strategy.ts +82 -31
  120. package/src/repository/security-rule.repository.ts +1 -1
  121. package/src/seeders/module-metadata-seeder.service.ts +4 -4
  122. package/src/seeders/permission-metadata-seeder.service.ts +1 -1
  123. package/src/seeders/seed-data/solid-core-metadata.json +14 -3
  124. package/src/services/authentication.service.ts +215 -151
  125. package/src/services/chatter-message.service.ts +1 -1
  126. package/src/services/crud.service.ts +3 -3
  127. package/src/services/csv.service.ts +1 -1
  128. package/src/services/dashboard.service.ts +1 -1
  129. package/src/services/database/database-bootstrap.service.ts +1 -1
  130. package/src/services/excel.service.ts +1 -1
  131. package/src/services/export-transaction.service.ts +2 -2
  132. package/src/services/field-metadata.service.ts +3 -3
  133. package/src/services/fixtures.service.ts +2 -2
  134. package/src/services/import-transaction.service.ts +2 -2
  135. package/src/services/list-of-values.service.ts +1 -1
  136. package/src/services/model-metadata.service.ts +22 -21
  137. package/src/services/module-metadata.service.ts +7 -7
  138. package/src/services/queues/database-publisher.service.ts +4 -4
  139. package/src/services/queues/database-subscriber.service.ts +7 -7
  140. package/src/services/queues/rabbitmq-publisher.service.ts +7 -7
  141. package/src/services/queues/rabbitmq-subscriber.service.ts +13 -13
  142. package/src/services/queues/redis-publisher.service.ts +7 -4
  143. package/src/services/queues/redis-subscriber.service.ts +9 -6
  144. package/src/services/role-metadata.service.ts +1 -1
  145. package/src/services/scheduled-jobs/scheduler.service.ts +5 -5
  146. package/src/services/settings/default-settings-provider.service.ts +101 -21
  147. package/src/services/sms/TwilioSMSService.ts +2 -2
  148. package/src/services/solid-introspect.service.ts +2 -2
  149. package/src/services/user-activity-history.service.ts +1 -1
  150. package/src/services/user.service.ts +149 -77
  151. package/src/services/view-metadata.service.ts +25 -8
  152. package/src/solid-core.module.ts +1 -0
  153. package/src/subscribers/computed-entity-field.subscriber.ts +1 -1
  154. package/src/subscribers/security-rule.subscriber.ts +8 -8
  155. package/src/subscribers/view-metadata.subscriber.ts +1 -1
  156. package/src/testing/core/testing-engine.ts +2 -2
  157. package/src/testing/reporter/webhook-reporter.ts +116 -0
  158. package/dev-grooming-docs/ozzy-prompts.txt +0 -70
@@ -140,7 +140,7 @@ export class ListOfValuesService extends CRUDService<ListOfValues> {
140
140
  const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);
141
141
  try {
142
142
  await fs.access(filePath);
143
- } catch (error) {
143
+ } catch (error: any) {
144
144
  throw new Error(`Configuration file not found for module: ${moduleName}`);
145
145
  }
146
146
  const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);
@@ -154,7 +154,7 @@ export class ModelMetadataService {
154
154
 
155
155
  return model
156
156
  });
157
- } catch (error) {
157
+ } catch (error: any) {
158
158
  // console.error('Transaction failed:', error);
159
159
  this.logger.error('Transaction failed:', error);
160
160
  throw error;
@@ -189,7 +189,7 @@ export class ModelMetadataService {
189
189
 
190
190
  // return model
191
191
  });
192
- } catch (error) {
192
+ } catch (error: any) {
193
193
  // console.error('Transaction failed:', error);
194
194
  this.logger.error('Transaction failed:', error);
195
195
  throw error;
@@ -309,7 +309,7 @@ export class ModelMetadataService {
309
309
  const updatedContent = JSON.stringify(metaData, null, 2);
310
310
  await fs.writeFile(filePath, updatedContent);
311
311
 
312
- } catch (error) {
312
+ } catch (error: any) {
313
313
  // console.error('File creation failed:', error);
314
314
  this.logger.error('File creation failed:', error);
315
315
  throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback
@@ -490,7 +490,7 @@ export class ModelMetadataService {
490
490
  const updatedContent = JSON.stringify(metaData, null, 2);
491
491
  await fs.writeFile(filePath, updatedContent);
492
492
 
493
- } catch (error) {
493
+ } catch (error: any) {
494
494
  // console.error('File creation failed:', error);
495
495
  this.logger.error('File creation failed:', error);
496
496
  throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback
@@ -524,7 +524,7 @@ export class ModelMetadataService {
524
524
  await this.cleanupOnDelete(entity.id);
525
525
  const r = await this.modelMetadataRepo.remove(entity);
526
526
  return r;
527
- } catch (error) {
527
+ } catch (error: any) {
528
528
  }
529
529
  }
530
530
 
@@ -621,7 +621,7 @@ export class ModelMetadataService {
621
621
  try {
622
622
  await fs.unlink(fileToDelete);
623
623
  this.logger.log(`Deleted file: ${fileToDelete}`);
624
- } catch (error) {
624
+ } catch (error: any) {
625
625
  this.logger.error(`Error deleting file: ${fileToDelete}`, error);
626
626
  }
627
627
  }
@@ -725,7 +725,7 @@ export class ModelMetadataService {
725
725
  );
726
726
  this.solidTsMorphService.removeModuleMembers(moduleFilePath, removedIdentifiers);
727
727
  await this.solidTsMorphService.commit();
728
- } catch (error) {
728
+ } catch (error: any) {
729
729
  this.solidTsMorphService.rollback();
730
730
  this.logger.error(`Failed to clean up module file for model '${modelEntity.singularName}':`, error);
731
731
  }
@@ -789,7 +789,7 @@ export class ModelMetadataService {
789
789
  await this.populateVAMConfigInDb(model);
790
790
  await this.populateVAMConfigInFile(model);
791
791
  });
792
- } catch (error) {
792
+ } catch (error: any) {
793
793
  this.logger.error('generateVAMConfig Transaction failed:', error);
794
794
  throw error;
795
795
  }
@@ -816,7 +816,7 @@ export class ModelMetadataService {
816
816
  const updatedContent = JSON.stringify(metaData, null, 2);
817
817
  await fs.writeFile(filePath, updatedContent);
818
818
 
819
- } catch (error) {
819
+ } catch (error: any) {
820
820
  // console.error('File creation failed:', error);
821
821
  this.logger.error('File updation failed for View, action, menus config:', error);
822
822
  throw new Error('File updation failed for View, action, menus config'); // Trigger rollback
@@ -826,15 +826,15 @@ export class ModelMetadataService {
826
826
  // Populate the View, Actions and Menus in the config file
827
827
  private populateVAMConfigInFileInternal(formViewLayoutFields: any[], model: ModelMetadata, listViewLayoutFields: { type: string; attrs: { name: string; }; }[], treeViewLayoutFields: { type: string; attrs: { name: string; }; }[], metaData: any) {
828
828
  const column1Fields = [];
829
- const column2Fields = [];
829
+ // const column2Fields = [];
830
830
 
831
831
  // Distribute fields between two columns
832
832
  for (let i = 0; i < formViewLayoutFields.length; i++) {
833
- if (i % 2 === 0) {
834
- column1Fields.push(formViewLayoutFields[i]);
835
- } else {
836
- column2Fields.push(formViewLayoutFields[i]);
837
- }
833
+ // if (i % 2 === 0) {
834
+ column1Fields.push(formViewLayoutFields[i]);
835
+ // } else {
836
+ // column2Fields.push(formViewLayoutFields[i]);
837
+ // }
838
838
  }
839
839
  const actionName = `${model.singularName}-list-action`;
840
840
  const treeViewActionName = `${model.singularName}-tree-action`;
@@ -842,6 +842,7 @@ export class ModelMetadataService {
842
842
  const treeViewName = `${model.singularName}-tree-view`;
843
843
  const formViewName = `${model.singularName}-form-view`;
844
844
  const menuName = `${model.singularName}-menu-item`;
845
+ const nextMenuSequenceNumber = (metaData.menus?.length ?? 0) + 1;
845
846
 
846
847
  const action = {
847
848
  displayName: `${model.displayName} List Action`,
@@ -874,7 +875,7 @@ export class ModelMetadataService {
874
875
  const menu = {
875
876
  displayName: `${model.displayName}`,
876
877
  name: menuName,
877
- sequenceNumber: 1,
878
+ sequenceNumber: nextMenuSequenceNumber,
878
879
  actionUserKey: actionName,
879
880
  moduleUserKey: `${model.module.name}`,
880
881
  parentMenuItemUserKey: "",
@@ -955,11 +956,11 @@ export class ModelMetadataService {
955
956
  attrs: { name: "group-1", label: "", className: "col-12 sm:col-12 md:col-6 lg:col-6" },
956
957
  children: column1Fields
957
958
  },
958
- {
959
- type: "column",
960
- attrs: { name: "group-2", label: "", className: "col-12 sm:col-12 md:col-6 lg:col-6" },
961
- children: column2Fields
962
- }
959
+ // {
960
+ // type: "column",
961
+ // attrs: { name: "group-2", label: "", className: "col-12 sm:col-12 md:col-6 lg:col-6" },
962
+ // children: column2Fields
963
+ // }
963
964
  ]
964
965
  },
965
966
  ]
@@ -123,7 +123,7 @@ export class ModuleMetadataService {
123
123
  await this.createInFile(module);
124
124
  return module
125
125
  });
126
- } catch (error) {
126
+ } catch (error: any) {
127
127
  // console.error('Transaction failed:', error);
128
128
  this.logger.error('Transaction failed:', error);
129
129
  throw error;
@@ -181,7 +181,7 @@ export class ModuleMetadataService {
181
181
  actionUserKey: `${module?.name}-home-action`,
182
182
  moduleUserKey: module?.name,
183
183
  parentMenuItemUserKey: "",
184
- iconName : "home"
184
+ iconName: "home"
185
185
  }
186
186
  ],
187
187
  views: [],
@@ -204,7 +204,7 @@ export class ModuleMetadataService {
204
204
  // Write the JSON to the file
205
205
  await fs.writeFile(filePath, metadataJson);
206
206
 
207
- } catch (error) {
207
+ } catch (error: any) {
208
208
  // console.error('File creation failed:', error);
209
209
  this.logger.error('File creation failed:', error);
210
210
  throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback
@@ -219,7 +219,7 @@ export class ModuleMetadataService {
219
219
  await this.updateInFile(module);
220
220
  return module
221
221
  });
222
- } catch (error) {
222
+ } catch (error: any) {
223
223
  // console.error('Transaction failed:', error);
224
224
  this.logger.error('Transaction failed:', error);
225
225
  throw error;
@@ -255,7 +255,7 @@ export class ModuleMetadataService {
255
255
  try {
256
256
  metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);
257
257
 
258
- } catch (error) {
258
+ } catch (error: any) {
259
259
  metaData = {
260
260
  moduleMetadata: {
261
261
  name: null,
@@ -290,7 +290,7 @@ export class ModuleMetadataService {
290
290
  const updatedContent = JSON.stringify(metaData, null, 2);
291
291
  await fs.writeFile(filePath, updatedContent);
292
292
 
293
- } catch (error) {
293
+ } catch (error: any) {
294
294
  // console.error('File creation failed:', error);
295
295
  this.logger.error('File creation failed:', error);
296
296
  throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback
@@ -365,7 +365,7 @@ export class ModuleMetadataService {
365
365
  await fs.rm(modulePath, { recursive: true, force: true });
366
366
  await fs.rm(moduleMetadataPAth, { recursive: true, force: true });
367
367
  this.logger.log(`Deleted file: ${moduleMetadataPAth}`);
368
- } catch (error) {
368
+ } catch (error: any) {
369
369
  this.logger.error(`Error deleting file: ${moduleMetadataPAth}`, error);
370
370
  throw new Error(ERROR_MESSAGES.FILE_DELETE_FAILED); // Trigger rollback
371
371
  }
@@ -15,9 +15,9 @@ export abstract class DatabasePublisher<T> implements QueuePublisher<T> {
15
15
  protected readonly mqMessageService: MqMessageService,
16
16
  protected readonly mqMessageQueueService: MqMessageQueueService,
17
17
  ) {
18
- this.serviceRole = process.env.QUEUES_SERVICE_ROLE;
19
- if (!this.serviceRole) {
20
- this.logger.debug('Queue service Role is not defined in the environment variables');
18
+ this.serviceRole = process.env.QUEUES_SERVICE_ROLE || 'both';
19
+ if (!process.env.QUEUES_SERVICE_ROLE) {
20
+ this.logger.debug('QUEUES_SERVICE_ROLE is not defined. Defaulting DatabasePublisher service role to "both".');
21
21
  }
22
22
  // this.logger.debug(`DatabasePublisher instance created with options: ${JSON.stringify(this.options())}`);
23
23
  }
@@ -74,7 +74,7 @@ export abstract class DatabasePublisher<T> implements QueuePublisher<T> {
74
74
  mqMessageQueueId: mqMessageQueue.id,
75
75
  });
76
76
  }
77
- catch (error) {
77
+ catch (error: any) {
78
78
  this.logger.error(error.message, error.stack);
79
79
  }
80
80
 
@@ -16,9 +16,9 @@ export abstract class DatabaseSubscriber<T> implements OnModuleInit, QueueSubscr
16
16
  protected readonly mqMessageQueueService: MqMessageQueueService,
17
17
  protected readonly poller: PollerService,
18
18
  ) {
19
- this.serviceRole = process.env.QUEUES_SERVICE_ROLE;
20
- if (!this.serviceRole) {
21
- this.logger.debug('Queue service Role is not defined in the environment variables');
19
+ this.serviceRole = process.env.QUEUES_SERVICE_ROLE || 'both';
20
+ if (!process.env.QUEUES_SERVICE_ROLE) {
21
+ this.logger.debug('QUEUES_SERVICE_ROLE is not defined. Defaulting DatabaseSubscriber service role to "both".');
22
22
  }
23
23
  // this.logger.debug(`DatabaseSubscriber instance created with options: ${JSON.stringify(this.options())}`);
24
24
  }
@@ -60,7 +60,7 @@ export abstract class DatabaseSubscriber<T> implements OnModuleInit, QueueSubscr
60
60
 
61
61
  await this.processMessage(message);
62
62
  }
63
- catch (error) {
63
+ catch (error: any) {
64
64
  this.logger.error(`Error processing message: ${error.message}`);
65
65
 
66
66
  // if an error occurs then if retryCount is set we start retrying.
@@ -108,7 +108,7 @@ export abstract class DatabaseSubscriber<T> implements OnModuleInit, QueueSubscr
108
108
  this.logger.log(`DatabaseSubscriber for queue ${queueName} is disabled because it does not match QUEUES_QUEUE_NAME_REGEX_TO_ENABLE=${queueNameRegex}`);
109
109
  return;
110
110
  }
111
- } catch (error) {
111
+ } catch (error: any) {
112
112
  this.logger.error(`Invalid QUEUES_QUEUE_NAME_REGEX_TO_ENABLE regex "${queueNameRegex}". Subscriber for queue ${queueName} will not start.`);
113
113
  return;
114
114
  }
@@ -152,7 +152,7 @@ export abstract class DatabaseSubscriber<T> implements OnModuleInit, QueueSubscr
152
152
  private async retryMessage(message: QueueMessage<T>) {
153
153
  try {
154
154
  await this.processMessage(message);
155
- } catch (error) {
155
+ } catch (error: any) {
156
156
  if (message.currentRetry < message.retryCount) {
157
157
  await this.updateStatusInDatabase('retrying', message);
158
158
 
@@ -203,7 +203,7 @@ export abstract class DatabaseSubscriber<T> implements OnModuleInit, QueueSubscr
203
203
  this.logger.debug(`Message status updated to ${stage} for messageId: ${mqMessage.id}`);
204
204
  }
205
205
  }
206
- catch (error) {
206
+ catch (error: any) {
207
207
  this.logger.error(error.message, error.stack);
208
208
  }
209
209
  }
@@ -22,12 +22,12 @@ export abstract class RabbitMqPublisher<T> implements OnModuleDestroy, QueuePubl
22
22
  protected readonly mqMessageQueueService: MqMessageQueueService,
23
23
  ) {
24
24
  this.url = process.env.QUEUES_RABBIT_MQ_URL;
25
- this.serviceRole = process.env.QUEUES_SERVICE_ROLE;
25
+ this.serviceRole = process.env.QUEUES_SERVICE_ROLE || 'both';
26
26
  if (!this.url) {
27
27
  this.logger.debug('RabbitMqPublisher url is not defined in the environment variables');
28
28
  }
29
- if (!this.serviceRole) {
30
- this.logger.debug('Queue service Role is not defined in the environment variables');
29
+ if (!process.env.QUEUES_SERVICE_ROLE) {
30
+ this.logger.debug('QUEUES_SERVICE_ROLE is not defined. Defaulting RabbitMqPublisher service role to "both".');
31
31
  }
32
32
  // this.logger.debug(`RabbitMqPublisher instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);
33
33
  }
@@ -118,7 +118,7 @@ export abstract class RabbitMqPublisher<T> implements OnModuleDestroy, QueuePubl
118
118
  if (this.channel) {
119
119
  try {
120
120
  await this.channel.close();
121
- } catch (err) {
121
+ } catch (err: any) {
122
122
  this.logger.warn(
123
123
  `RabbitMqPublisher error closing channel: ${(err as Error).message}`,
124
124
  );
@@ -130,7 +130,7 @@ export abstract class RabbitMqPublisher<T> implements OnModuleDestroy, QueuePubl
130
130
  if (this.connection) {
131
131
  try {
132
132
  await this.connection.close();
133
- } catch (err) {
133
+ } catch (err: any) {
134
134
  this.logger.warn(
135
135
  `RabbitMqPublisher error closing connection: ${(err as Error).message}`,
136
136
  );
@@ -189,7 +189,7 @@ export abstract class RabbitMqPublisher<T> implements OnModuleDestroy, QueuePubl
189
189
  // }
190
190
  // await channel.waitForConfirms();
191
191
  // this.logger.debug('RabbitMqPublisher Message published successfully');
192
- } catch (err) {
192
+ } catch (err: any) {
193
193
  this.logger.error(`RabbitMqPublisher Message publish failed: ${JSON.stringify(err)}`);
194
194
  if (err instanceof Error) {
195
195
  this.logger.error(`RabbitMqPublisher Error stack: ${err.stack}`);
@@ -224,7 +224,7 @@ export abstract class RabbitMqPublisher<T> implements OnModuleDestroy, QueuePubl
224
224
  mqMessageQueueId: mqMessageQueue.id,
225
225
  });
226
226
  }
227
- catch (error) {
227
+ catch (error: any) {
228
228
  this.logger.error(error.message, error.stack);
229
229
  }
230
230
 
@@ -31,12 +31,12 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
31
31
 
32
32
  constructor(protected readonly mqMessageService: MqMessageService, protected readonly mqMessageQueueService: MqMessageQueueService) {
33
33
  this.url = process.env.QUEUES_RABBIT_MQ_URL;
34
- this.serviceRole = process.env.QUEUES_SERVICE_ROLE;
34
+ this.serviceRole = process.env.QUEUES_SERVICE_ROLE || 'both';
35
35
  if (!this.url) {
36
36
  this.logger.debug('RabbitMqPublisher url is not defined in the environment variables');
37
37
  }
38
- if (!this.serviceRole) {
39
- this.logger.debug('Queue service Role is not defined in the environment variables');
38
+ if (!process.env.QUEUES_SERVICE_ROLE) {
39
+ this.logger.debug('QUEUES_SERVICE_ROLE is not defined. Defaulting RabbitMqSubscriber service role to "both".');
40
40
  }
41
41
  // this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);
42
42
  }
@@ -85,7 +85,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
85
85
  async onModuleInit(): Promise<void> {
86
86
  // Not using SettingService here as that will necessitate all implementors of RabbitMqSubscriber to also inject SettingService which is not ideal.
87
87
  // Instead we directly read the environment variables here.
88
- const defaultBroker = process.env.QUEUES_DEFAULT_BROKER || 'rabbitmq';
88
+ const defaultBroker = process.env.QUEUES_DEFAULT_BROKER || 'database';
89
89
  const solidCliRunning = process.env.SOLID_CLI_RUNNING || "false";
90
90
  const queueNameRegex = (process.env.QUEUES_QUEUE_NAME_REGEX_TO_ENABLE || '').trim();
91
91
  const roleAllowed = ['both', 'subscriber'].includes(this.serviceRole);
@@ -107,7 +107,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
107
107
  this.logger.log(`RabbitMqSubscriber for queue ${queueName} is disabled because it does not match QUEUES_QUEUE_NAME_REGEX_TO_ENABLE=${queueNameRegex}`);
108
108
  return;
109
109
  }
110
- } catch (error) {
110
+ } catch (error: any) {
111
111
  this.logger.error(`Invalid QUEUES_QUEUE_NAME_REGEX_TO_ENABLE regex "${queueNameRegex}". Subscriber for queue ${queueName} will not start.`);
112
112
  return;
113
113
  }
@@ -116,7 +116,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
116
116
  const namespacedQueueName = buildNamespacedQueueName(queueName);
117
117
  try {
118
118
  await this.connectAndConsume(namespacedQueueName);
119
- } catch (err) {
119
+ } catch (err: any) {
120
120
  this.logger.error(`Failed to connect to RabbitMQ for queue ${namespacedQueueName}: ${(err as Error).message}`, (err as Error).stack);
121
121
  this.triggerReconnect(namespacedQueueName, 'initial connection failure');
122
122
  }
@@ -142,7 +142,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
142
142
  let connection: amqp.Connection;
143
143
  try {
144
144
  connection = await this.establishConnection();
145
- } catch (err) {
145
+ } catch (err: any) {
146
146
  this.logger.error(`Failed to connect to RabbitMQ for queue ${queueName}: ${(err as Error).message}`, (err as Error).stack);
147
147
  throw err;
148
148
  }
@@ -210,7 +210,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
210
210
  const messageContentString = rawMessage.content.toString();
211
211
  message = JSON.parse(messageContentString) as QueueMessage<T>;
212
212
  this.logger.debug(`rabbitmq subscriber received message with id: ${message.messageId} for queue ${queueName}`);
213
- } catch (error) {
213
+ } catch (error: any) {
214
214
  this.logger.error(`Invalid JSON message on queue ${queueName}: ${(error as Error).message}`);
215
215
  await this.publishToFailedQueue(queueName, rawMessage.content, channel, error);
216
216
  channel.ack(rawMessage);
@@ -223,7 +223,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
223
223
 
224
224
  try {
225
225
  await this.processMessage(message, rawMessage, channel, queueName);
226
- } catch (error) {
226
+ } catch (error: any) {
227
227
  await this.handleProcessingError(message, rawMessage, channel, error, queueName);
228
228
  }
229
229
  },
@@ -277,7 +277,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
277
277
  channel.sendToQueue(failedQueue, body, errorMessage ? {
278
278
  headers: { 'x-error': errorMessage }
279
279
  } : undefined);
280
- } catch (err) {
280
+ } catch (err: any) {
281
281
  this.logger.error(`Failed to publish to failed queue ${failedQueue}: ${(err as Error).message}`);
282
282
  }
283
283
  }
@@ -302,7 +302,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
302
302
  this.reconnectAttempt = 0;
303
303
  this.logger.log(`RabbitMqSubscriber reconnected for queue ${queueName}`);
304
304
  return;
305
- } catch (err) {
305
+ } catch (err: any) {
306
306
  this.reconnectAttempt += 1;
307
307
  const delay = this.backoff();
308
308
  this.logger.warn(`RabbitMqSubscriber reconnect failed for queue ${queueName}; retrying in ${delay}ms`);
@@ -407,7 +407,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
407
407
  await this.mqMessageService.repo.update(mqMessage.id, updatedFields);
408
408
  }
409
409
  }
410
- catch (error) {
410
+ catch (error: any) {
411
411
  this.logger.error(error.message, error.stack);
412
412
  }
413
413
 
@@ -485,7 +485,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
485
485
  // - If timeoutPromise rejects first, we fail fast with timeout error.
486
486
  // This ensures we mark DB status via normal error handling before broker ack-timeout.
487
487
  return await Promise.race([subscribePromise, timeoutPromise]);
488
- } catch (error) {
488
+ } catch (error: any) {
489
489
  const errorMessage = (error as Error)?.message || String(error);
490
490
  this.logger.error(
491
491
  `Subscriber execution failed for queue ${queueName} and messageId ${messageId}: ${errorMessage}`,
@@ -16,7 +16,10 @@ export abstract class RedisPublisher<T> implements OnModuleDestroy, QueuePublish
16
16
  protected readonly mqMessageService: MqMessageService,
17
17
  protected readonly mqMessageQueueService: MqMessageQueueService,
18
18
  ) {
19
- this.serviceRole = process.env.QUEUES_SERVICE_ROLE;
19
+ this.serviceRole = process.env.QUEUES_SERVICE_ROLE || 'both';
20
+ if (!process.env.QUEUES_SERVICE_ROLE) {
21
+ this.logger.debug('QUEUES_SERVICE_ROLE is not defined. Defaulting RedisPublisher service role to "both".');
22
+ }
20
23
  if (!process.env.QUEUES_REDIS_URL) {
21
24
  this.logger.debug('RedisPublisher: QUEUES_REDIS_URL is not defined in the environment variables');
22
25
  }
@@ -65,7 +68,7 @@ export abstract class RedisPublisher<T> implements OnModuleDestroy, QueuePublish
65
68
  const client = this.getClient();
66
69
  await client.publish(namespacedQueueName, JSON.stringify(message));
67
70
  this.logger.debug(`RedisPublisher published message ${message.messageId} to channel ${namespacedQueueName}`);
68
- } catch (err) {
71
+ } catch (err: any) {
69
72
  this.logger.error(`RedisPublisher failed to publish message: ${(err as Error).message}`, (err as Error).stack);
70
73
  }
71
74
 
@@ -87,8 +90,8 @@ export abstract class RedisPublisher<T> implements OnModuleDestroy, QueuePublish
87
90
  parentEntity: message.parentEntity,
88
91
  mqMessageQueueId: mqMessageQueue.id,
89
92
  });
90
- } catch (error) {
93
+ } catch (error: any) {
91
94
  this.logger.error(error.message, error.stack);
92
95
  }
93
96
  }
94
- }
97
+ }
@@ -17,7 +17,10 @@ export abstract class RedisSubscriber<T> implements OnModuleInit, OnModuleDestro
17
17
  protected readonly mqMessageService: MqMessageService,
18
18
  protected readonly mqMessageQueueService: MqMessageQueueService,
19
19
  ) {
20
- this.serviceRole = process.env.QUEUES_SERVICE_ROLE;
20
+ this.serviceRole = process.env.QUEUES_SERVICE_ROLE || 'both';
21
+ if (!process.env.QUEUES_SERVICE_ROLE) {
22
+ this.logger.debug('QUEUES_SERVICE_ROLE is not defined. Defaulting RedisSubscriber service role to "both".');
23
+ }
21
24
  if (!process.env.QUEUES_REDIS_URL) {
22
25
  this.logger.debug('RedisSubscriber: QUEUES_REDIS_URL is not defined in the environment variables');
23
26
  }
@@ -50,7 +53,7 @@ export abstract class RedisSubscriber<T> implements OnModuleInit, OnModuleDestro
50
53
  );
51
54
  return;
52
55
  }
53
- } catch (error) {
56
+ } catch (error: any) {
54
57
  this.logger.error(
55
58
  `Invalid QUEUES_QUEUE_NAME_REGEX_TO_ENABLE regex "${queueNameRegex}". Subscriber for queue ${queueName} will not start.`,
56
59
  );
@@ -92,7 +95,7 @@ export abstract class RedisSubscriber<T> implements OnModuleInit, OnModuleDestro
92
95
  let message: QueueMessage<T> = null;
93
96
  try {
94
97
  message = JSON.parse(rawMessage) as QueueMessage<T>;
95
- } catch (error) {
98
+ } catch (error: any) {
96
99
  this.logger.error(`RedisSubscriber invalid JSON on channel ${channel}: ${(error as Error).message}`);
97
100
  return;
98
101
  }
@@ -103,7 +106,7 @@ export abstract class RedisSubscriber<T> implements OnModuleInit, OnModuleDestro
103
106
 
104
107
  try {
105
108
  await this.processMessage(message);
106
- } catch (error) {
109
+ } catch (error: any) {
107
110
  await this.handleProcessingError(message, error, channel);
108
111
  }
109
112
  });
@@ -147,7 +150,7 @@ export abstract class RedisSubscriber<T> implements OnModuleInit, OnModuleDestro
147
150
  try {
148
151
  await this.connectAndSubscribe(channel);
149
152
  this.logger.log(`RedisSubscriber reconnected for channel ${channel}`);
150
- } catch (err) {
153
+ } catch (err: any) {
151
154
  this.triggerReconnect(channel, `reconnect failed: ${(err as Error).message}`);
152
155
  }
153
156
  }, delay);
@@ -201,7 +204,7 @@ export abstract class RedisSubscriber<T> implements OnModuleInit, OnModuleDestro
201
204
  if (stage === 'failed') updatedFields['error'] = error;
202
205
  await this.mqMessageService.repo.update(mqMessage.id, updatedFields);
203
206
  }
204
- } catch (err) {
207
+ } catch (err: any) {
205
208
  this.logger.error(err.message, err.stack);
206
209
  }
207
210
  }
@@ -91,7 +91,7 @@ export class RoleMetadataService extends CRUDService<RoleMetadata> {
91
91
  }
92
92
  */
93
93
  }
94
- } catch (error) {
94
+ } catch (error: any) {
95
95
  this.logger.error(error);
96
96
  }
97
97
  }
@@ -36,7 +36,7 @@ export class SchedulerServiceImpl implements ISchedulerService {
36
36
  if (jobsRegexToEnable && jobsRegexToEnable !== "all") {
37
37
  try {
38
38
  jobsRegex = new RegExp(jobsRegexToEnable);
39
- } catch (error) {
39
+ } catch (error: any) {
40
40
  this.logger.error(`Invalid SOLID_SCHEDULER_JOBS_REGEX_TO_ENABLE regex "${jobsRegexToEnable}". Scheduler loop will skip this run.`);
41
41
  return;
42
42
  }
@@ -101,7 +101,7 @@ export class SchedulerServiceImpl implements ISchedulerService {
101
101
 
102
102
  await this.scheduledJobRepo.save(job);
103
103
  this.logger.log(`[${now.getTime()}]: scheduler service finished running job: ${job.job}`);
104
- } catch (err) {
104
+ } catch (err: any) {
105
105
  this.logger.error(`[${now.getTime()}]: scheduler service failed to run job ${job.job}`, err.stack);
106
106
  } finally {
107
107
  this.runningJobs.delete(jobKey);
@@ -153,7 +153,7 @@ export class SchedulerServiceImpl implements ISchedulerService {
153
153
  try {
154
154
  const parsed = JSON.parse(dayOfWeek);
155
155
  return Array.isArray(parsed) ? parsed : [];
156
- } catch (error) {
156
+ } catch (error: any) {
157
157
  this.logger.warn(`Invalid dayOfWeek JSON '${dayOfWeek}'`, error as any);
158
158
  return [];
159
159
  }
@@ -217,10 +217,10 @@ export class SchedulerServiceImpl implements ISchedulerService {
217
217
  if (runAfterNext.getTime() - nextRun.getTime() < 60000) {
218
218
  throw new Error('Cron expression interval must be at least 1 minute');
219
219
  }
220
-
220
+
221
221
  this.logger.log(`Custom cron '${job.cronExpression}' next run: ${nextRun}`);
222
222
  return nextRun;
223
- } catch (error) {
223
+ } catch (error: any) {
224
224
  this.logger.error(`Invalid cron expression for job ${job.scheduleName}: ${job.cronExpression}. Reason: ${(error as Error).message}`);
225
225
  // Fallback to daily if cron parsing fails
226
226
  return new Date(base.getTime() + 24 * 60 * 60 * 1000);