@solidstarters/solid-core 1.2.174 → 1.2.175
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dev-grooming-docs/ozzy-prompts.txt +13 -0
- package/dist/config/iam.config.js +2 -2
- package/dist/config/iam.config.js.map +1 -1
- package/dist/constants/chatter-message.constants.d.ts +11 -0
- package/dist/constants/chatter-message.constants.d.ts.map +1 -0
- package/dist/constants/chatter-message.constants.js +14 -0
- package/dist/constants/chatter-message.constants.js.map +1 -0
- package/dist/controllers/authentication.controller.d.ts +1 -2
- package/dist/controllers/authentication.controller.d.ts.map +1 -1
- package/dist/controllers/chatter-message-details.controller.d.ts +0 -16
- package/dist/controllers/chatter-message-details.controller.d.ts.map +1 -1
- package/dist/controllers/chatter-message-details.controller.js +0 -109
- package/dist/controllers/chatter-message-details.controller.js.map +1 -1
- package/dist/controllers/chatter-message.controller.d.ts +10 -13
- package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
- package/dist/controllers/chatter-message.controller.js +19 -88
- package/dist/controllers/chatter-message.controller.js.map +1 -1
- package/dist/entities/chatter-message-details.entity.d.ts +1 -0
- package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message-details.entity.js +5 -1
- package/dist/entities/chatter-message-details.entity.js.map +1 -1
- package/dist/entities/chatter-message.entity.d.ts +4 -0
- package/dist/entities/chatter-message.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message.entity.js +14 -1
- package/dist/entities/chatter-message.entity.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +39 -1
- package/dist/services/authentication.service.d.ts +2 -3
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +4 -4
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts +16 -3
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +120 -25
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/refresh-token-ids-storage.service.d.ts +2 -1
- package/dist/services/refresh-token-ids-storage.service.d.ts.map +1 -1
- package/dist/services/refresh-token-ids-storage.service.js +6 -7
- package/dist/services/refresh-token-ids-storage.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/config/iam.config.ts +2 -2
- package/src/constants/chatter-message.constants.ts +11 -0
- package/src/controllers/chatter-message-details.controller.ts +44 -44
- package/src/controllers/chatter-message.controller.ts +58 -38
- package/src/entities/chatter-message-details.entity.ts +3 -0
- package/src/entities/chatter-message.entity.ts +9 -2
- package/src/seeders/seed-data/solid-core-metadata.json +39 -1
- package/src/services/authentication.service.ts +9 -4
- package/src/services/chatter-message.service.ts +143 -24
- package/src/services/refresh-token-ids-storage.service.ts +11 -7
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solidstarters/solid-core",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.175",
|
|
4
4
|
"description": "This module is a NestJS module containing all the required core providers required by a Solid application",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
package/src/config/iam.config.ts
CHANGED
|
@@ -32,7 +32,7 @@ export const jwtConfig = registerAs('jwt', () => {
|
|
|
32
32
|
secret: process.env.IAM_JWT_SECRET,
|
|
33
33
|
audience: process.env.IAM_JWT_TOKEN_AUDIENCE,
|
|
34
34
|
issuer: process.env.IAM_JWT_TOKEN_ISSUER,
|
|
35
|
-
accessTokenTtl: parseInt(process.env.IAM_JWT_ACCESS_TOKEN_TTL ?? '
|
|
36
|
-
refreshTokenTtl: parseInt(process.env.IAM_JWT_REFRESH_TOKEN_TTL ?? '
|
|
35
|
+
accessTokenTtl: parseInt(process.env.IAM_JWT_ACCESS_TOKEN_TTL ?? '1200', 10), // 20 minutes
|
|
36
|
+
refreshTokenTtl: parseInt(process.env.IAM_JWT_REFRESH_TOKEN_TTL ?? '604800', 10), // 7 days
|
|
37
37
|
};
|
|
38
38
|
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const CHATTER_MESSAGE_TYPE = {
|
|
2
|
+
AUDIT: 'audit',
|
|
3
|
+
CUSTOM: 'custom',
|
|
4
|
+
} as const;
|
|
5
|
+
|
|
6
|
+
export const CHATTER_MESSAGE_SUBTYPE = {
|
|
7
|
+
AUDIT_INSERT: 'audit_insert',
|
|
8
|
+
AUDIT_UPDATE: 'audit_update',
|
|
9
|
+
AUDIT_DELETE: 'audit_delete',
|
|
10
|
+
CUSTOM: 'custom',
|
|
11
|
+
} as const;
|
|
@@ -15,46 +15,46 @@ enum ShowSoftDeleted {
|
|
|
15
15
|
export class ChatterMessageDetailsController {
|
|
16
16
|
constructor(private readonly service: ChatterMessageDetailsService) {}
|
|
17
17
|
|
|
18
|
-
@ApiBearerAuth("jwt")
|
|
19
|
-
@Post()
|
|
20
|
-
@UseInterceptors(AnyFilesInterceptor())
|
|
21
|
-
create(@Body() createDto: CreateChatterMessageDetailsDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
22
|
-
|
|
23
|
-
}
|
|
18
|
+
// @ApiBearerAuth("jwt")
|
|
19
|
+
// @Post()
|
|
20
|
+
// @UseInterceptors(AnyFilesInterceptor())
|
|
21
|
+
// create(@Body() createDto: CreateChatterMessageDetailsDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
22
|
+
// return this.service.create(createDto, files);
|
|
23
|
+
// }
|
|
24
24
|
|
|
25
|
-
@ApiBearerAuth("jwt")
|
|
26
|
-
@Post('/bulk')
|
|
27
|
-
@UseInterceptors(AnyFilesInterceptor())
|
|
28
|
-
insertMany(@Body() createDtos: CreateChatterMessageDetailsDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = []) {
|
|
29
|
-
|
|
30
|
-
}
|
|
25
|
+
// @ApiBearerAuth("jwt")
|
|
26
|
+
// @Post('/bulk')
|
|
27
|
+
// @UseInterceptors(AnyFilesInterceptor())
|
|
28
|
+
// insertMany(@Body() createDtos: CreateChatterMessageDetailsDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = []) {
|
|
29
|
+
// return this.service.insertMany(createDtos, filesArray);
|
|
30
|
+
// }
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
@ApiBearerAuth("jwt")
|
|
34
|
-
@Put(':id')
|
|
35
|
-
@UseInterceptors(AnyFilesInterceptor())
|
|
36
|
-
update(@Param('id') id: number, @Body() updateDto: UpdateChatterMessageDetailsDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
37
|
-
|
|
38
|
-
}
|
|
33
|
+
// @ApiBearerAuth("jwt")
|
|
34
|
+
// @Put(':id')
|
|
35
|
+
// @UseInterceptors(AnyFilesInterceptor())
|
|
36
|
+
// update(@Param('id') id: number, @Body() updateDto: UpdateChatterMessageDetailsDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
37
|
+
// return this.service.update(id, updateDto, files);
|
|
38
|
+
// }
|
|
39
39
|
|
|
40
|
-
@ApiBearerAuth("jwt")
|
|
41
|
-
@Patch(':id')
|
|
42
|
-
@UseInterceptors(AnyFilesInterceptor())
|
|
43
|
-
partialUpdate(@Param('id') id: number, @Body() updateDto: UpdateChatterMessageDetailsDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
44
|
-
|
|
45
|
-
}
|
|
40
|
+
// @ApiBearerAuth("jwt")
|
|
41
|
+
// @Patch(':id')
|
|
42
|
+
// @UseInterceptors(AnyFilesInterceptor())
|
|
43
|
+
// partialUpdate(@Param('id') id: number, @Body() updateDto: UpdateChatterMessageDetailsDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
44
|
+
// return this.service.update(id, updateDto, files, true);
|
|
45
|
+
// }
|
|
46
46
|
|
|
47
|
-
@ApiBearerAuth("jwt")
|
|
48
|
-
@Post('/bulk-recover')
|
|
49
|
-
async recoverMany(@Body() ids: number[]) {
|
|
50
|
-
|
|
51
|
-
}
|
|
47
|
+
// @ApiBearerAuth("jwt")
|
|
48
|
+
// @Post('/bulk-recover')
|
|
49
|
+
// async recoverMany(@Body() ids: number[]) {
|
|
50
|
+
// return this.service.recoverMany(ids);
|
|
51
|
+
// }
|
|
52
52
|
|
|
53
|
-
@ApiBearerAuth("jwt")
|
|
54
|
-
@Get('/recover/:id')
|
|
55
|
-
async recover(@Param('id') id: number) {
|
|
56
|
-
|
|
57
|
-
}
|
|
53
|
+
// @ApiBearerAuth("jwt")
|
|
54
|
+
// @Get('/recover/:id')
|
|
55
|
+
// async recover(@Param('id') id: number) {
|
|
56
|
+
// return this.service.recover(id);
|
|
57
|
+
// }
|
|
58
58
|
|
|
59
59
|
@ApiBearerAuth("jwt")
|
|
60
60
|
@ApiQuery({ name: 'showSoftDeleted', required: false, enum: ShowSoftDeleted })
|
|
@@ -77,16 +77,16 @@ export class ChatterMessageDetailsController {
|
|
|
77
77
|
return this.service.findOne(+id, query);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
@ApiBearerAuth("jwt")
|
|
81
|
-
@Delete('/bulk')
|
|
82
|
-
async deleteMany(@Body() ids: number[]) {
|
|
83
|
-
|
|
84
|
-
}
|
|
80
|
+
// @ApiBearerAuth("jwt")
|
|
81
|
+
// @Delete('/bulk')
|
|
82
|
+
// async deleteMany(@Body() ids: number[]) {
|
|
83
|
+
// return this.service.deleteMany(ids);
|
|
84
|
+
// }
|
|
85
85
|
|
|
86
|
-
@ApiBearerAuth("jwt")
|
|
87
|
-
@Delete(':id')
|
|
88
|
-
async delete(@Param('id') id: number) {
|
|
89
|
-
|
|
90
|
-
}
|
|
86
|
+
// @ApiBearerAuth("jwt")
|
|
87
|
+
// @Delete(':id')
|
|
88
|
+
// async delete(@Param('id') id: number) {
|
|
89
|
+
// return this.service.delete(id);
|
|
90
|
+
// }
|
|
91
91
|
|
|
92
92
|
}
|
|
@@ -7,6 +7,7 @@ import { UpdateChatterMessageDto } from '../dtos/update-chatter-message.dto';
|
|
|
7
7
|
import { PostChatterMessageDto } from '../dtos/post-chatter-message.dto';
|
|
8
8
|
import { SolidRequestContextDecorator } from 'src/decorators/solid-request-context.decorator';
|
|
9
9
|
import { SolidRequestContextDto } from 'src/dtos/solid-request-context.dto';
|
|
10
|
+
import { Public } from 'src/decorators/public.decorator';
|
|
10
11
|
|
|
11
12
|
enum ShowSoftDeleted {
|
|
12
13
|
INCLUSIVE = "inclusive",
|
|
@@ -25,40 +26,59 @@ export class ChatterMessageController {
|
|
|
25
26
|
return this.service.create(createDto, files);
|
|
26
27
|
}
|
|
27
28
|
|
|
28
|
-
@ApiBearerAuth("jwt")
|
|
29
|
-
@Post('/bulk')
|
|
30
|
-
@UseInterceptors(AnyFilesInterceptor())
|
|
31
|
-
insertMany(@Body() createDtos: CreateChatterMessageDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = []) {
|
|
32
|
-
|
|
33
|
-
}
|
|
29
|
+
// @ApiBearerAuth("jwt")
|
|
30
|
+
// @Post('/bulk')
|
|
31
|
+
// @UseInterceptors(AnyFilesInterceptor())
|
|
32
|
+
// insertMany(@Body() createDtos: CreateChatterMessageDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = []) {
|
|
33
|
+
// return this.service.insertMany(createDtos, filesArray);
|
|
34
|
+
// }
|
|
34
35
|
|
|
35
36
|
|
|
36
|
-
@ApiBearerAuth("jwt")
|
|
37
|
-
@Put(':id')
|
|
38
|
-
@UseInterceptors(AnyFilesInterceptor())
|
|
39
|
-
update(@Param('id') id: number, @Body() updateDto: UpdateChatterMessageDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
40
|
-
|
|
41
|
-
}
|
|
37
|
+
// @ApiBearerAuth("jwt")
|
|
38
|
+
// @Put(':id')
|
|
39
|
+
// @UseInterceptors(AnyFilesInterceptor())
|
|
40
|
+
// update(@Param('id') id: number, @Body() updateDto: UpdateChatterMessageDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
41
|
+
// return this.service.update(id, updateDto, files);
|
|
42
|
+
// }
|
|
42
43
|
|
|
43
|
-
@ApiBearerAuth("jwt")
|
|
44
|
-
@Patch(':id')
|
|
45
|
-
@UseInterceptors(AnyFilesInterceptor())
|
|
46
|
-
partialUpdate(@Param('id') id: number, @Body() updateDto: UpdateChatterMessageDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
47
|
-
|
|
48
|
-
}
|
|
44
|
+
// @ApiBearerAuth("jwt")
|
|
45
|
+
// @Patch(':id')
|
|
46
|
+
// @UseInterceptors(AnyFilesInterceptor())
|
|
47
|
+
// partialUpdate(@Param('id') id: number, @Body() updateDto: UpdateChatterMessageDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
48
|
+
// return this.service.update(id, updateDto, files, true);
|
|
49
|
+
// }
|
|
49
50
|
|
|
50
|
-
@ApiBearerAuth("jwt")
|
|
51
|
-
@Post('/bulk-recover')
|
|
52
|
-
async recoverMany(@Body() ids: number[]) {
|
|
53
|
-
|
|
54
|
-
}
|
|
51
|
+
// @ApiBearerAuth("jwt")
|
|
52
|
+
// @Post('/bulk-recover')
|
|
53
|
+
// async recoverMany(@Body() ids: number[]) {
|
|
54
|
+
// return this.service.recoverMany(ids);
|
|
55
|
+
// }
|
|
55
56
|
|
|
56
|
-
@ApiBearerAuth("jwt")
|
|
57
|
-
@Get('/recover/:id')
|
|
58
|
-
async recover(@Param('id') id: number) {
|
|
59
|
-
|
|
57
|
+
// @ApiBearerAuth("jwt")
|
|
58
|
+
// @Get('/recover/:id')
|
|
59
|
+
// async recover(@Param('id') id: number) {
|
|
60
|
+
// return this.service.recover(id);
|
|
61
|
+
// }
|
|
62
|
+
|
|
63
|
+
@Public()
|
|
64
|
+
@Get('/getChatterMessages/:entityId/:entityName')
|
|
65
|
+
@ApiQuery({ name: 'showSoftDeleted', required: false, enum: ShowSoftDeleted })
|
|
66
|
+
@ApiQuery({ name: 'limit', required: false, type: Number })
|
|
67
|
+
@ApiQuery({ name: 'offset', required: false, type: Number })
|
|
68
|
+
@ApiQuery({ name: 'fields', required: false, type: Array })
|
|
69
|
+
@ApiQuery({ name: 'sort', required: false, type: Array })
|
|
70
|
+
@ApiQuery({ name: 'groupBy', required: false, type: Array })
|
|
71
|
+
@ApiQuery({ name: 'populate', required: false, type: Array })
|
|
72
|
+
@ApiQuery({ name: 'populateMedia', required: false, type: Array })
|
|
73
|
+
@ApiQuery({ name: 'filters', required: false, type: Array })
|
|
74
|
+
async getChatterMessages(
|
|
75
|
+
@Param('entityId') entityId: number,
|
|
76
|
+
@Param('entityName') entityName: string,
|
|
77
|
+
@Query() query: any
|
|
78
|
+
) {
|
|
79
|
+
return this.service.getChatterMessages(entityId, entityName, query);
|
|
60
80
|
}
|
|
61
|
-
|
|
81
|
+
|
|
62
82
|
@ApiBearerAuth("jwt")
|
|
63
83
|
@ApiQuery({ name: 'showSoftDeleted', required: false, enum: ShowSoftDeleted })
|
|
64
84
|
@ApiQuery({ name: 'limit', required: false, type: Number })
|
|
@@ -80,17 +100,17 @@ export class ChatterMessageController {
|
|
|
80
100
|
return this.service.findOne(+id, query);
|
|
81
101
|
}
|
|
82
102
|
|
|
83
|
-
@ApiBearerAuth("jwt")
|
|
84
|
-
@Delete('/bulk')
|
|
85
|
-
async deleteMany(@Body() ids: number[]) {
|
|
86
|
-
|
|
87
|
-
}
|
|
103
|
+
// @ApiBearerAuth("jwt")
|
|
104
|
+
// @Delete('/bulk')
|
|
105
|
+
// async deleteMany(@Body() ids: number[]) {
|
|
106
|
+
// return this.service.deleteMany(ids);
|
|
107
|
+
// }
|
|
88
108
|
|
|
89
|
-
@ApiBearerAuth("jwt")
|
|
90
|
-
@Delete(':id')
|
|
91
|
-
async delete(@Param('id') id: number) {
|
|
92
|
-
|
|
93
|
-
}
|
|
109
|
+
// @ApiBearerAuth("jwt")
|
|
110
|
+
// @Delete(':id')
|
|
111
|
+
// async delete(@Param('id') id: number) {
|
|
112
|
+
// return this.service.delete(id);
|
|
113
|
+
// }
|
|
94
114
|
|
|
95
115
|
@ApiBearerAuth("jwt")
|
|
96
116
|
@Post('post')
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CommonEntity } from 'src/entities/common.entity'
|
|
2
|
-
import {
|
|
2
|
+
import {Entity, Column, Index, JoinColumn, ManyToOne, OneToMany} from 'typeorm';
|
|
3
3
|
import { User } from 'src/entities/user.entity'
|
|
4
|
+
import { ChatterMessageDetails } from './chatter-message-details.entity';
|
|
4
5
|
|
|
5
6
|
@Entity("ss_chatter_message")
|
|
6
7
|
export class ChatterMessage extends CommonEntity {
|
|
@@ -8,7 +9,7 @@ export class ChatterMessage extends CommonEntity {
|
|
|
8
9
|
@Column({ type: "varchar" })
|
|
9
10
|
messageType: string; // audit | custom
|
|
10
11
|
@Column({ type: "varchar" })
|
|
11
|
-
messageSubType: string; //
|
|
12
|
+
messageSubType: string; // audit_update | audit_insert | audit_delete | custom
|
|
12
13
|
@Column({ type: "text" })
|
|
13
14
|
messageBody: string;
|
|
14
15
|
@Index()
|
|
@@ -19,4 +20,10 @@ export class ChatterMessage extends CommonEntity {
|
|
|
19
20
|
@ManyToOne(() => User, { onDelete: "CASCADE", nullable: true })
|
|
20
21
|
@JoinColumn()
|
|
21
22
|
user: User;
|
|
23
|
+
@OneToMany(() => ChatterMessageDetails, (chatterMessageDetails) => chatterMessageDetails.chatterMessage, { cascade: true })
|
|
24
|
+
chatterMessageDetails: ChatterMessageDetails[];
|
|
25
|
+
@Column({ type: "text", nullable: true })
|
|
26
|
+
modelDisplayName: string;
|
|
27
|
+
@Column({ type: "text", nullable: true })
|
|
28
|
+
modelUserKey: string;
|
|
22
29
|
}
|
|
@@ -3748,7 +3748,8 @@
|
|
|
3748
3748
|
"selectionStaticValues": [
|
|
3749
3749
|
"audit_insert:audit_insert",
|
|
3750
3750
|
"audit_update:audit_update",
|
|
3751
|
-
"audit_delete:audit_delete"
|
|
3751
|
+
"audit_delete:audit_delete",
|
|
3752
|
+
"custom:custom"
|
|
3752
3753
|
]
|
|
3753
3754
|
},
|
|
3754
3755
|
{
|
|
@@ -3835,6 +3836,30 @@
|
|
|
3835
3836
|
"columnName": null,
|
|
3836
3837
|
"relationJoinTableName": "",
|
|
3837
3838
|
"isRelationManyToManyOwner": null
|
|
3839
|
+
},
|
|
3840
|
+
{
|
|
3841
|
+
"name": "modelDisplayName",
|
|
3842
|
+
"displayName": "Model Display Name",
|
|
3843
|
+
"type": "shortText",
|
|
3844
|
+
"ormType": "text",
|
|
3845
|
+
"required": false,
|
|
3846
|
+
"unique": false,
|
|
3847
|
+
"index": false,
|
|
3848
|
+
"private": false,
|
|
3849
|
+
"encrypt": false,
|
|
3850
|
+
"isSystem": false
|
|
3851
|
+
},
|
|
3852
|
+
{
|
|
3853
|
+
"name": "modelUserKey",
|
|
3854
|
+
"displayName": "Model User Key",
|
|
3855
|
+
"type": "shortText",
|
|
3856
|
+
"ormType": "text",
|
|
3857
|
+
"required": false,
|
|
3858
|
+
"unique": false,
|
|
3859
|
+
"index": false,
|
|
3860
|
+
"private": false,
|
|
3861
|
+
"encrypt": false,
|
|
3862
|
+
"isSystem": false
|
|
3838
3863
|
}
|
|
3839
3864
|
]
|
|
3840
3865
|
},
|
|
@@ -3910,6 +3935,19 @@
|
|
|
3910
3935
|
"encrypt": false,
|
|
3911
3936
|
"isSystem": false
|
|
3912
3937
|
},
|
|
3938
|
+
{
|
|
3939
|
+
"name": "fieldDisplayName",
|
|
3940
|
+
"displayName": "Field Display Name",
|
|
3941
|
+
"type": "shortText",
|
|
3942
|
+
"ormType": "varchar",
|
|
3943
|
+
"length": 512,
|
|
3944
|
+
"required": false,
|
|
3945
|
+
"unique": false,
|
|
3946
|
+
"index": false,
|
|
3947
|
+
"private": false,
|
|
3948
|
+
"encrypt": false,
|
|
3949
|
+
"isSystem": false
|
|
3950
|
+
},
|
|
3913
3951
|
{
|
|
3914
3952
|
"name": "chatterMessage",
|
|
3915
3953
|
"displayName": "Chatter Message",
|
|
@@ -986,7 +986,7 @@ export class AuthenticationService {
|
|
|
986
986
|
return accessToken;
|
|
987
987
|
}
|
|
988
988
|
|
|
989
|
-
async generateRefreshToken(user: User) {
|
|
989
|
+
async generateRefreshToken(user: User, previousRefreshToken?: string) {
|
|
990
990
|
const refreshTokenId = randomUUID();
|
|
991
991
|
|
|
992
992
|
const refreshToken = await this.signToken(user.id, this.jwtConfiguration.refreshTokenTtl, {
|
|
@@ -994,7 +994,7 @@ export class AuthenticationService {
|
|
|
994
994
|
})
|
|
995
995
|
|
|
996
996
|
// store the refresh token id in the redis storage.
|
|
997
|
-
await this.refreshTokenIdsStorage.insert(user.id, refreshToken);
|
|
997
|
+
await this.refreshTokenIdsStorage.insert(user.id, refreshToken, previousRefreshToken);
|
|
998
998
|
|
|
999
999
|
return refreshToken;
|
|
1000
1000
|
}
|
|
@@ -1164,7 +1164,11 @@ export class AuthenticationService {
|
|
|
1164
1164
|
roles: true
|
|
1165
1165
|
}
|
|
1166
1166
|
});
|
|
1167
|
-
|
|
1167
|
+
|
|
1168
|
+
// const tokens = await this.generateTokens(user);
|
|
1169
|
+
|
|
1170
|
+
// Get the refresh token for a user from refresh token storage.
|
|
1171
|
+
const refreshTokenState = await this.refreshTokenIdsStorage.getCurrentRefreshTokenState(user.id);
|
|
1168
1172
|
|
|
1169
1173
|
const response = {
|
|
1170
1174
|
user: {
|
|
@@ -1175,7 +1179,8 @@ export class AuthenticationService {
|
|
|
1175
1179
|
id: user.id,
|
|
1176
1180
|
roles: user.roles.map((role) => role.name)
|
|
1177
1181
|
},
|
|
1178
|
-
|
|
1182
|
+
refreshToken: refreshTokenState.currentRefreshToken,
|
|
1183
|
+
// ...tokens
|
|
1179
1184
|
}
|
|
1180
1185
|
return response;
|
|
1181
1186
|
}
|