@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
@@ -20,37 +20,37 @@ export class UserController {
20
20
  @ApiBearerAuth("jwt")
21
21
  @Post()
22
22
  @UseInterceptors(AnyFilesInterceptor())
23
- create(@Body() createDto: CreateUserDto, @UploadedFiles() files: Array<Express.Multer.File>,@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
24
- return this.service.create(createDto, files,solidRequestContext);
23
+ create(@Body() createDto: CreateUserDto, @UploadedFiles() files: Array<Express.Multer.File>, @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
24
+ return this.service.create(createDto, files, solidRequestContext);
25
25
  }
26
26
 
27
27
  @ApiBearerAuth("jwt")
28
28
  @Post('/bulk')
29
29
  @UseInterceptors(AnyFilesInterceptor())
30
- insertMany(@Body() createDtos: CreateUserDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = [],@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
31
- return this.service.insertMany(createDtos, filesArray,solidRequestContext);
30
+ insertMany(@Body() createDtos: CreateUserDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = [], @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
31
+ return this.service.insertMany(createDtos, filesArray, solidRequestContext);
32
32
  }
33
33
 
34
34
 
35
35
  @ApiBearerAuth("jwt")
36
36
  @Put(':id')
37
37
  @UseInterceptors(AnyFilesInterceptor())
38
- update(@Param('id') id: number, @Body() updateDto: UpdateUserDto, @UploadedFiles() files: Array<Express.Multer.File> ,@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
39
- return this.service.update(id, updateDto, files,false,solidRequestContext);
38
+ update(@Param('id') id: number, @Body() updateDto: UpdateUserDto, @UploadedFiles() files: Array<Express.Multer.File>, @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
39
+ return this.service.update(id, updateDto, files, false, solidRequestContext);
40
40
  }
41
41
 
42
42
 
43
43
  @ApiBearerAuth("jwt")
44
44
  @Patch(':id/update-user-and-roles')
45
- updateUser(@Param('id') id: number,@Body() updateDto: any, @UploadedFiles() files: Array<Express.Multer.File>, @SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
46
- return this.service.updateUser(id, updateDto, files,solidRequestContext);
45
+ updateUser(@Param('id') id: number, @Body() updateDto: any, @UploadedFiles() files: Array<Express.Multer.File>, @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
46
+ return this.service.updateUser(id, updateDto, files, solidRequestContext);
47
47
  }
48
48
 
49
49
 
50
50
  @ApiBearerAuth("jwt")
51
51
  @Patch(':id')
52
52
  @UseInterceptors(AnyFilesInterceptor())
53
- partialUpdate(@Param('id') id: number, @Body() updateDto: UpdateUserDto, @UploadedFiles() files: Array<Express.Multer.File>,@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
53
+ partialUpdate(@Param('id') id: number, @Body() updateDto: UpdateUserDto, @UploadedFiles() files: Array<Express.Multer.File>, @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
54
54
  return this.service.update(id, updateDto, files, true, solidRequestContext);
55
55
  }
56
56
 
@@ -67,8 +67,8 @@ export class UserController {
67
67
  @ApiQuery({ name: 'populateMedia', required: false, type: Array })
68
68
  @ApiQuery({ name: 'filters', required: false, type: Array })
69
69
  @Get()
70
- async findMany(@Query() query: any, @SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
71
- return this.service.find(query,solidRequestContext);
70
+ async findMany(@Query() query: any, @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
71
+ return this.service.find(query, solidRequestContext);
72
72
  }
73
73
 
74
74
  @ApiBearerAuth("jwt")
@@ -81,18 +81,18 @@ export class UserController {
81
81
 
82
82
  @ApiBearerAuth("jwt")
83
83
  @Get(':id')
84
- async findOne(@Param('id') id: string, @Query() query: any,@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
85
- return this.service.findOne(+id, query,solidRequestContext);
84
+ async findOne(@Param('id') id: string, @Query() query: any, @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
85
+ return this.service.findOne(+id, query, solidRequestContext);
86
86
  }
87
87
 
88
88
  @Delete('/bulk')
89
- async deleteMany(@Body() ids: number[],@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
90
- return this.service.deleteMany(ids,solidRequestContext);
89
+ async deleteMany(@Body() ids: number[], @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
90
+ return this.service.deleteMany(ids, solidRequestContext);
91
91
  }
92
92
 
93
93
  @ApiBearerAuth("jwt")
94
94
  @Delete(':id')
95
- async delete(@Param('id') id: number,@SolidRequestContextDecorator() solidRequestContext:SolidRequestContextDto) {
95
+ async delete(@Param('id') id: number, @SolidRequestContextDecorator() solidRequestContext: SolidRequestContextDto) {
96
96
  return this.service.delete(id, solidRequestContext);
97
97
  }
98
98
 
@@ -9,7 +9,7 @@ import { SolidRequestContextDto } from 'src/dtos/solid-request-context.dto';
9
9
  import { ActiveUser } from 'src/decorators/active-user.decorator';
10
10
  import { ActiveUserData } from 'src/interfaces/active-user-data.interface';
11
11
 
12
- @ApiTags('App Builder')
12
+ @ApiTags('Solid Core')
13
13
  @Controller('view-metadata') //FIXME: Change this to the model plural name
14
14
  export class ViewMetadataController {
15
15
  constructor(private readonly service: ViewMetadataService) { }
@@ -1,5 +1,6 @@
1
1
  import { ValidationPipe } from '@nestjs/common';
2
2
  import { NestFactory } from '@nestjs/core';
3
+ import { WsAdapter } from '@nestjs/platform-ws';
3
4
  import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
4
5
  import { NextFunction, Request, Response } from 'express';
5
6
  import helmet from 'helmet';
@@ -178,6 +179,8 @@ export async function bootstrapSolidApp(
178
179
  const types = require('pg').types;
179
180
  types.setTypeParser(types.builtins.INT8, (val: string) => parseInt(val));
180
181
 
182
+ app.useWebSocketAdapter(new WsAdapter(app));
183
+
181
184
  await app.listen(port);
182
185
  }
183
186
 
@@ -20,7 +20,7 @@ export class BigIntFieldCrudManager implements FieldCrudManager {
20
20
  if (typeof fieldValue === 'string' || typeof fieldValue === 'number') {
21
21
  fieldValue = BigInt(fieldValue);
22
22
  }
23
- } catch (err) {
23
+ } catch (err: any) {
24
24
  return [{ field: this.options.fieldName, error: 'Invalid numeric value' }];
25
25
  }
26
26
  }
@@ -119,7 +119,7 @@ export class SelectionDynamicFieldCrudManager implements FieldCrudManager {
119
119
  }
120
120
  return false;
121
121
  }
122
- catch (error) {
122
+ catch (error: any) {
123
123
  // Use the values method as a fallback, if the value method is not implemented
124
124
  const values = await providerInstance.values('', ctxt);
125
125
  const isValid = values.some(v => v.value === fieldValue);
@@ -23,7 +23,7 @@ export class ModuleMetadataHelperService {
23
23
  const fileContent = await fs.readFile(configFilePath, 'utf8');
24
24
  return JSON.parse(fileContent);
25
25
  }
26
- catch (error) {
26
+ catch (error: any) {
27
27
  this.logger.error(`module metadata configuration non existent at: ${configFilePath}`);
28
28
  }
29
29
 
@@ -60,7 +60,7 @@ export class TriggerMcpClientSubscriberDatabase extends DatabaseSubscriber<Trigg
60
60
  // Fallback
61
61
  nestedResponse = String(raw);
62
62
  }
63
- } catch (err) {
63
+ } catch (err: any) {
64
64
  this.triggerMcpClientSubscriberLogger.error("Error processing AI response:", err);
65
65
  nestedResponse = `Error handling response: ${err?.message || String(err)}`;
66
66
  }
@@ -1,64 +1,115 @@
1
- import { Injectable, Logger } from '@nestjs/common';
2
- import { AuthGuard, PassportStrategy } from '@nestjs/passport';
3
- import { Strategy } from 'passport-facebook';
4
- import { FacebookAuthConfiguration, isFacebookOAuthConfigured } from 'src/helpers/facebook-oauth.helper';
5
- import { v4 as uuid } from 'uuid';
6
- import { UserService } from '../services/user.service';
1
+ import { Injectable, Logger } from "@nestjs/common";
2
+ import { AuthGuard, PassportStrategy } from "@nestjs/passport";
3
+ import { Strategy } from "passport-facebook";
4
+ import {
5
+ FacebookAuthConfiguration,
6
+ isFacebookOAuthConfigured,
7
+ } from "src/helpers/facebook-oauth.helper";
8
+ import { v4 as uuid } from "uuid";
9
+ import type { SolidCoreSetting } from "../services/settings/default-settings-provider.service";
10
+ import { SettingService } from "../services/setting.service";
11
+ import { UserService } from "../services/user.service";
7
12
 
8
- const DUMMY_CLIENT_ID = 'DUMMY_CLIENT_ID';
9
- const DUMMY_CLIENT_SECRET = 'DUMMY_CLIENT_SECRET';
10
- const DUMMY_CALLBACK_URL = 'DUMMY_CALLBACK_URL';
13
+ const DUMMY_CLIENT_ID = "DUMMY_CLIENT_ID";
14
+ const DUMMY_CLIENT_SECRET = "DUMMY_CLIENT_SECRET";
15
+ const DUMMY_CALLBACK_URL = "DUMMY_CALLBACK_URL";
11
16
 
12
17
  @Injectable()
13
- export class FacebookOauthGuard extends AuthGuard('facebook') { }
18
+ export class FacebookOauthGuard extends AuthGuard("facebook") {}
14
19
 
15
20
  @Injectable()
16
- export class FacebookOAuthStrategy extends PassportStrategy(Strategy, 'facebook') {
21
+ export class FacebookOAuthStrategy extends PassportStrategy(
22
+ Strategy,
23
+ "facebook",
24
+ ) {
17
25
  private readonly logger = new Logger(FacebookOAuthStrategy.name);
18
26
 
19
- constructor(private readonly userService: UserService) {
20
- // Reading configuration from environment variables (Static approach like Google)
21
- const clientID = process.env.IAM_FACEBOOK_OAUTH_CLIENT_ID ?? DUMMY_CLIENT_ID;
22
- const clientSecret = process.env.IAM_FACEBOOK_OAUTH_CLIENT_SECRET ?? DUMMY_CLIENT_SECRET;
23
- const callbackURL = process.env.IAM_FACEBOOK_OAUTH_CALLBACK_URL ?? DUMMY_CALLBACK_URL;
24
- const redirectURL = process.env.IAM_FACEBOOK_OAUTH_REDIRECT_URL;
27
+ constructor(
28
+ private readonly userService: UserService,
29
+ private readonly settingService: SettingService,
30
+ ) {
31
+ // Prefer settings cache (same source used by controller validation), fall back to env.
32
+ const clientID =
33
+ settingService.getConfigValue<SolidCoreSetting>("FACEBOOK_CLIENT_ID") ??
34
+ process.env.IAM_FACEBOOK_OAUTH_CLIENT_ID ??
35
+ DUMMY_CLIENT_ID;
36
+ const clientSecret =
37
+ settingService.getConfigValue<SolidCoreSetting>(
38
+ "FACEBOOK_CLIENT_SECRET",
39
+ ) ??
40
+ process.env.IAM_FACEBOOK_OAUTH_CLIENT_SECRET ??
41
+ DUMMY_CLIENT_SECRET;
42
+ const callbackURL =
43
+ settingService.getConfigValue<SolidCoreSetting>(
44
+ "FACEBOOK_CALLBACK_URL",
45
+ ) ??
46
+ process.env.IAM_FACEBOOK_OAUTH_CALLBACK_URL ??
47
+ DUMMY_CALLBACK_URL;
48
+ const redirectURL =
49
+ settingService.getConfigValue<SolidCoreSetting>(
50
+ "FACEBOOK_REDIRECT_URL",
51
+ ) ?? process.env.IAM_FACEBOOK_OAUTH_REDIRECT_URL;
25
52
 
26
53
  super({
27
54
  clientID,
28
55
  clientSecret,
29
56
  callbackURL,
30
- scope: ['email'],
31
- profileFields: ['id', 'emails', 'name', 'photos'],
57
+ scope: ["email"],
58
+ // Facebook Graph API expects "email" and "picture", not "emails"/"photos".
59
+ profileFields: ["id", "name", "email", "picture.type(large)"],
32
60
  });
33
61
 
34
- const facebookOauth: FacebookAuthConfiguration = { clientID, clientSecret, callbackURL, redirectURL };
62
+ const facebookOauth: FacebookAuthConfiguration = {
63
+ clientID,
64
+ clientSecret,
65
+ callbackURL,
66
+ redirectURL,
67
+ };
35
68
  if (!isFacebookOAuthConfigured(facebookOauth)) {
36
- this.logger.debug('Facebook OAuth strategy is not configured');
69
+ this.logger.debug("Facebook OAuth strategy is not configured");
70
+ } else {
71
+ this.logger.debug(
72
+ `Facebook OAuth configured with callbackURL=${callbackURL}`,
73
+ );
37
74
  }
38
75
  }
39
76
 
40
- async validate(_accessToken: string, _refreshToken: string, profile: any, done: any): Promise<any> {
77
+ async validate(
78
+ _accessToken: string,
79
+ _refreshToken: string,
80
+ profile: any,
81
+ done: any,
82
+ ): Promise<any> {
41
83
  const { id, name, emails, photos } = profile;
42
84
 
43
- // generate a unique access code.
85
+ // generate a unique access code.
44
86
  const loginAccessCode: string = uuid();
45
87
 
88
+ const email = emails && emails.length > 0 ? emails[0].value : null;
89
+
90
+ const firstName = name?.givenName || "";
91
+ const lastName = name?.familyName || "";
92
+ const fullName =
93
+ firstName || lastName
94
+ ? `${firstName} ${lastName}`.trim()
95
+ : profile.displayName;
96
+
46
97
  const user = {
47
- provider: 'facebook',
98
+ provider: "facebook",
48
99
  providerId: id,
49
- email: emails?.[0]?.value,
100
+ email: email,
50
101
  name: `${name.givenName} ${name.familyName}`,
51
102
  picture: photos?.[0]?.value,
52
103
  accessCode: loginAccessCode,
53
104
  };
54
105
 
55
- // store the access code and the access token in the database.
56
- await this.userService.resolveUserOnOauthFacebook({
57
- ...user,
58
- accessToken: _accessToken,
59
- refreshToken: null
106
+ // store the access code and the access token in the database.
107
+ await this.userService.resolveUserOnOauthFacebook({
108
+ ...user,
109
+ accessToken: _accessToken,
110
+ refreshToken: null,
60
111
  });
61
112
 
62
113
  done(null, user);
63
114
  }
64
- }
115
+ }
@@ -56,7 +56,7 @@ export class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {
56
56
 
57
57
  evaluatedRules.push(evaluatedRule);
58
58
 
59
- } catch (error) {
59
+ } catch (error: any) {
60
60
  this.logger.error(`Error parsing security rule: ${rule.securityRuleConfig}`, error);
61
61
  this.logger.error(error.stack);
62
62
  throw error;
@@ -238,7 +238,7 @@ export class ModuleMetadataSeederService {
238
238
 
239
239
  //FIXME: Handle displaying the created users credentials in a better way.
240
240
  // this.logger.log(`Newly created username is: ${usersDetail?.length > 0 ? usersDetail[0]?.username : ''} and password is ${usersDetail?.length > 0 ? usersDetail[0]?.password : ''}`);
241
- } catch (error) {
241
+ } catch (error: any) {
242
242
  this.logSeedFailureForCli(error, {
243
243
  moduleName: currentModule,
244
244
  step: currentStep,
@@ -463,7 +463,7 @@ export class ModuleMetadataSeederService {
463
463
  await this.createPermissionIfNotExists(permissionName);
464
464
  }
465
465
 
466
- } catch (error) {
466
+ } catch (error: any) {
467
467
  this.logger.error(error);
468
468
  }
469
469
  }
@@ -544,7 +544,7 @@ export class ModuleMetadataSeederService {
544
544
  moduleRoot = path.dirname(
545
545
  require.resolve('@solidxai/core/package.json'),
546
546
  );
547
- } catch (err) {
547
+ } catch (err: any) {
548
548
  this.logger.debug(
549
549
  'Could not resolve @solidxai/core from node_modules, assuming local execution',
550
550
  );
@@ -610,7 +610,7 @@ export class ModuleMetadataSeederService {
610
610
  moduleRoot = path.dirname(
611
611
  require.resolve('@solidxai/core/package.json'),
612
612
  );
613
- } catch (err) {
613
+ } catch (err: any) {
614
614
  this.logger.debug(
615
615
  'Could not resolve @solidxai/core from node_modules, assuming local execution',
616
616
  );
@@ -52,7 +52,7 @@ export class PermissionMetadataSeederService {
52
52
  }
53
53
  }
54
54
 
55
- } catch (error) {
55
+ } catch (error: any) {
56
56
  this.logger.error(error);
57
57
  }
58
58
  }
@@ -3900,7 +3900,7 @@
3900
3900
  "type": "selectionStatic",
3901
3901
  "defaultValue": "pending",
3902
3902
  "length": 256,
3903
- "required": true,
3903
+ "required": false,
3904
3904
  "index": false,
3905
3905
  "isSystem": false,
3906
3906
  "selectionValueType": "string",
@@ -11552,7 +11552,7 @@
11552
11552
  "enableGlobalSearch": true,
11553
11553
  "create": true,
11554
11554
  "edit": true,
11555
- "delete": false
11555
+ "delete": true
11556
11556
  },
11557
11557
  "children": [
11558
11558
  {
@@ -11570,7 +11570,18 @@
11570
11570
  "name": "name",
11571
11571
  "label": "Name",
11572
11572
  "sortable": true,
11573
- "filterable": true
11573
+ "filterable": true,
11574
+ "isSearchable": true
11575
+ }
11576
+ },
11577
+ {
11578
+ "type": "field",
11579
+ "attrs": {
11580
+ "name": "description",
11581
+ "label": "Description",
11582
+ "sortable": true,
11583
+ "filterable": true,
11584
+ "isSearchable": true
11574
11585
  }
11575
11586
  }
11576
11587
  ]