@appxdigital/appx-core 0.1.89 → 0.1.90
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/dist/config/admin/templates/admin.template.d.ts +1 -1
- package/dist/config/admin/templates/admin.template.d.ts.map +1 -1
- package/dist/config/admin/templates/admin.template.js +1 -1
- package/dist/graphql/generic.resolver.js +1 -1
- package/dist/modules/auth/auth.service.js +3 -3
- package/dist/modules/auth/refresh-token.strategy.js +1 -1
- package/dist/modules/auth/session/session-serializer.js +1 -1
- package/dist/modules/auth/session/session-store.js +4 -4
- package/dist/modules/core/core.service.js +6 -6
- package/dist/modules/user/user.service.js +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const adminJsModuleCode = "\nimport {DynamicModule} from '@nestjs/common';\nimport {addBasicFilters, createActions, createPermissionHandler, dynamicImport, getAdminJSResources} from './utils';\nimport {initializeComponents} from './component-loader';\nimport {readFileSync} from 'fs';\nimport {getDMMF} from '@prisma/sdk';\nimport {PrismaService} from '@appxdigital/appx-core';\nimport {PrismaModule} from \"../prisma/prisma.module\";\n\nconst DEFAULT_ADMIN = {\n email: 'joao.duvido@appx.pt',\n password: 'password',\n};\n\nconst authenticate = async (email: string, password: string) => {\n if (email === DEFAULT_ADMIN.email && password === DEFAULT_ADMIN.password) {\n return Promise.resolve(DEFAULT_ADMIN);\n }\n return null;\n};\n\nexport async function createAdminJsModule(): Promise<DynamicModule> {\n const {default: AdminJS} = await dynamicImport('adminjs');\n const {Database, Resource} = await dynamicImport('@adminjs/prisma');\n const {AdminModule} = await dynamicImport('@adminjs/nestjs');\n const {default: importExportFeature} = await dynamicImport('@adminjs/import-export');\n const {default: passwordFeature} = await dynamicImport('@adminjs/passwords');\n const argon2 = await dynamicImport('argon2');\n\n const resources = getAdminJSResources();\n const {componentLoader, Components} = await initializeComponents();\n const schemaPath = './prisma/schema.prisma';\n const schema = readFileSync(schemaPath, 'utf-8');\n const dmmf = await getDMMF({datamodel: schema});\n\n const models = [];\n\n for (const resource of resources) {\n const model = dmmf.datamodel.models.find(\n (model) => model.name === resource.name,\n );\n\n models.push({\n model,\n options: resource.options,\n features: model.name === 'User' ? [\n passwordFeature({\n properties: {\n encryptedPassword: 'password',\n password: 'plainPassword',\n },\n hash: argon2.hash,\n componentLoader,\n }),\n ] : [],\n });\n }\n\n AdminJS.registerAdapter({Database, Resource});\n\n return AdminModule.createAdminAsync({\n imports: [PrismaModule],\n inject: [PrismaService],\n useFactory: async (prisma: PrismaService) => {\n const authenticate = async (email: string, password: string) => {\n const user = await prisma.user.
|
|
1
|
+
export declare const adminJsModuleCode = "\nimport {DynamicModule} from '@nestjs/common';\nimport {addBasicFilters, createActions, createPermissionHandler, dynamicImport, getAdminJSResources} from './utils';\nimport {initializeComponents} from './component-loader';\nimport {readFileSync} from 'fs';\nimport {getDMMF} from '@prisma/sdk';\nimport {PrismaService} from '@appxdigital/appx-core';\nimport {PrismaModule} from \"../prisma/prisma.module\";\n\nconst DEFAULT_ADMIN = {\n email: 'joao.duvido@appx.pt',\n password: 'password',\n};\n\nconst authenticate = async (email: string, password: string) => {\n if (email === DEFAULT_ADMIN.email && password === DEFAULT_ADMIN.password) {\n return Promise.resolve(DEFAULT_ADMIN);\n }\n return null;\n};\n\nexport async function createAdminJsModule(): Promise<DynamicModule> {\n const {default: AdminJS} = await dynamicImport('adminjs');\n const {Database, Resource} = await dynamicImport('@adminjs/prisma');\n const {AdminModule} = await dynamicImport('@adminjs/nestjs');\n const {default: importExportFeature} = await dynamicImport('@adminjs/import-export');\n const {default: passwordFeature} = await dynamicImport('@adminjs/passwords');\n const argon2 = await dynamicImport('argon2');\n\n const resources = getAdminJSResources();\n const {componentLoader, Components} = await initializeComponents();\n const schemaPath = './prisma/schema.prisma';\n const schema = readFileSync(schemaPath, 'utf-8');\n const dmmf = await getDMMF({datamodel: schema});\n\n const models = [];\n\n for (const resource of resources) {\n const model = dmmf.datamodel.models.find(\n (model) => model.name === resource.name,\n );\n\n models.push({\n model,\n options: resource.options,\n features: model.name === 'User' ? [\n passwordFeature({\n properties: {\n encryptedPassword: 'password',\n password: 'plainPassword',\n },\n hash: argon2.hash,\n componentLoader,\n }),\n ] : [],\n });\n }\n\n AdminJS.registerAdapter({Database, Resource});\n\n return AdminModule.createAdminAsync({\n imports: [PrismaModule],\n inject: [PrismaService],\n useFactory: async (prisma: PrismaService) => {\n const authenticate = async (email: string, password: string) => {\n const user = await prisma.user.findFirst({\n where: {\n email\n }\n });\n\n if (!user || user.role !== 'ADMIN') {\n return null;\n }\n\n const isPasswordValid = await argon2.verify(user.password, password);\n\n return isPasswordValid ? Promise.resolve({email: user.email, role: user.role, id: user.id}) : null;\n }\n\n return {\n adminJsOptions: {\n rootPath: '/admin',\n dashboard: {\n component: Components.Dashboard,\n handler: async () => {\n return {some: 'output'};\n },\n },\n branding: {\n companyName: 'AppX Core Wizard',\n withMadeWithLove: false,\n logo: 'https://i.ibb.co/XZNRS5m/appxdigitalcom-logo.jpg',\n },\n resources: models.map((m) => {\n return {\n resource: {model: m.model, client: prisma},\n options: {\n ...m.options,\n actions: createActions(),\n },\n features: [...(m.features || []), importExportFeature({\n componentLoader\n })],\n };\n }),\n componentLoader,\n },\n auth: {\n authenticate,\n cookieName: process.env.SESSION_COOKIE_NAME,\n cookiePassword: process.env.SESSION_SECRET,\n },\n sessionOptions: {\n resave: false,\n saveUninitialized: true,\n secret: process.env.SESSION_SECRET,\n cookie: {\n httpOnly: process.env.NODE_ENV === 'production',\n secure: false,\n },\n name: process.env.SESSION_COOKIE_NAME,\n },\n };\n },\n });\n}\n";
|
|
2
2
|
//# sourceMappingURL=admin.template.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.template.d.ts","sourceRoot":"","sources":["../../../../src/config/admin/templates/admin.template.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"admin.template.d.ts","sourceRoot":"","sources":["../../../../src/config/admin/templates/admin.template.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,+vJA+H7B,CAAC"}
|
|
@@ -66,7 +66,7 @@ export async function createAdminJsModule(): Promise<DynamicModule> {
|
|
|
66
66
|
inject: [PrismaService],
|
|
67
67
|
useFactory: async (prisma: PrismaService) => {
|
|
68
68
|
const authenticate = async (email: string, password: string) => {
|
|
69
|
-
const user = await prisma.user.
|
|
69
|
+
const user = await prisma.user.findFirst({
|
|
70
70
|
where: {
|
|
71
71
|
email
|
|
72
72
|
}
|
|
@@ -37,7 +37,7 @@ function GenericResolverFactory(model, returnType, createInputType, updateInputT
|
|
|
37
37
|
async findOne(where, info) {
|
|
38
38
|
const select = new plugins_1.PrismaSelect(info).value;
|
|
39
39
|
const modelDelegate = this.prisma.getModelDelegate(model);
|
|
40
|
-
return modelDelegate.
|
|
40
|
+
return modelDelegate.findFirst({
|
|
41
41
|
where,
|
|
42
42
|
...select,
|
|
43
43
|
});
|
|
@@ -138,7 +138,7 @@ let AuthService = class AuthService {
|
|
|
138
138
|
if (!req?.user?.id) {
|
|
139
139
|
throw new common_1.UnauthorizedException('Please log-in');
|
|
140
140
|
}
|
|
141
|
-
return this.prisma.user.
|
|
141
|
+
return this.prisma.user.findFirst({
|
|
142
142
|
where: {
|
|
143
143
|
id: req?.user?.id,
|
|
144
144
|
},
|
|
@@ -186,7 +186,7 @@ let AuthService = class AuthService {
|
|
|
186
186
|
});
|
|
187
187
|
}
|
|
188
188
|
async closeSpecificSession(sessionId) {
|
|
189
|
-
const deleted = await this.prisma.session.
|
|
189
|
+
const deleted = await this.prisma.session.deleteMany({
|
|
190
190
|
where: { id: sessionId },
|
|
191
191
|
}).catch(() => null);
|
|
192
192
|
return !!deleted;
|
|
@@ -232,7 +232,7 @@ let AuthService = class AuthService {
|
|
|
232
232
|
const currentTokenId = userFromRefreshTokenGuard.refreshTokenId;
|
|
233
233
|
const providedTokenString = userFromRefreshTokenGuard.currentRefreshToken;
|
|
234
234
|
// Invalidate the used refresh token
|
|
235
|
-
await this.prisma.userRefreshToken.
|
|
235
|
+
await this.prisma.userRefreshToken.updateMany({
|
|
236
236
|
where: { id: currentTokenId },
|
|
237
237
|
data: { revokedAt: new Date() },
|
|
238
238
|
},
|
|
@@ -39,7 +39,7 @@ let RefreshTokenStrategy = class RefreshTokenStrategy extends (0, passport_1.Pas
|
|
|
39
39
|
if (!user) {
|
|
40
40
|
throw new common_1.UnauthorizedException('User not found');
|
|
41
41
|
}
|
|
42
|
-
const tokenRecord = await this.prisma.userRefreshToken.
|
|
42
|
+
const tokenRecord = await this.prisma.userRefreshToken.findFirst({
|
|
43
43
|
where: { token: refreshToken },
|
|
44
44
|
});
|
|
45
45
|
if (!tokenRecord) {
|
|
@@ -26,7 +26,7 @@ let SessionSerializer = class SessionSerializer extends passport_1.PassportSeria
|
|
|
26
26
|
return done(new Error('No userId provided'), null);
|
|
27
27
|
}
|
|
28
28
|
try {
|
|
29
|
-
const user = await this.prisma.user.
|
|
29
|
+
const user = await this.prisma.user.findFirstOrThrow({
|
|
30
30
|
where: { id: Number(userId) },
|
|
31
31
|
select: {
|
|
32
32
|
id: true,
|
|
@@ -9,12 +9,12 @@ class CorePrismaSessionStore extends express_session_1.Store {
|
|
|
9
9
|
super();
|
|
10
10
|
this.get = async (sid, callback) => {
|
|
11
11
|
try {
|
|
12
|
-
const record = await this.prisma.session.
|
|
12
|
+
const record = await this.prisma.session.findFirst({ where: { sid } }, { BYPASS_FILTERING: true });
|
|
13
13
|
if (!record) {
|
|
14
14
|
return callback(null, null);
|
|
15
15
|
}
|
|
16
16
|
if (record.expiresAt && record.expiresAt <= new Date()) {
|
|
17
|
-
await this.prisma.session.
|
|
17
|
+
await this.prisma.session.deleteMany({ where: { sid } }, { BYPASS_FILTERING: true });
|
|
18
18
|
return callback(null, null);
|
|
19
19
|
}
|
|
20
20
|
const session = JSON.parse(record.data);
|
|
@@ -60,7 +60,7 @@ class CorePrismaSessionStore extends express_session_1.Store {
|
|
|
60
60
|
};
|
|
61
61
|
this.destroy = async (sid, callback) => {
|
|
62
62
|
try {
|
|
63
|
-
await this.prisma.session.
|
|
63
|
+
await this.prisma.session.deleteMany({ where: { sid } }, { BYPASS_FILTERING: true });
|
|
64
64
|
callback?.();
|
|
65
65
|
}
|
|
66
66
|
catch (err) {
|
|
@@ -82,7 +82,7 @@ class CorePrismaSessionStore extends express_session_1.Store {
|
|
|
82
82
|
else {
|
|
83
83
|
expiresAt = new Date(Date.now() + this.options.ttl * 1000);
|
|
84
84
|
}
|
|
85
|
-
await this.prisma.session.
|
|
85
|
+
await this.prisma.session.updateMany({
|
|
86
86
|
where: { sid },
|
|
87
87
|
data: { expiresAt },
|
|
88
88
|
}, { BYPASS_FILTERING: true });
|
|
@@ -36,7 +36,7 @@ let CoreService = class CoreService {
|
|
|
36
36
|
* @returns A promise of the record
|
|
37
37
|
*/
|
|
38
38
|
async findOne(where, options = {}) {
|
|
39
|
-
const record = this.modelDelegate.
|
|
39
|
+
const record = this.modelDelegate.findFirst({
|
|
40
40
|
where,
|
|
41
41
|
...options
|
|
42
42
|
});
|
|
@@ -51,7 +51,7 @@ let CoreService = class CoreService {
|
|
|
51
51
|
* @returns A promise of the record
|
|
52
52
|
*/
|
|
53
53
|
async findById(id) {
|
|
54
|
-
const record = await this.modelDelegate.
|
|
54
|
+
const record = await this.modelDelegate.findFirst({
|
|
55
55
|
where: this._generateWhereFromIdField(id)
|
|
56
56
|
});
|
|
57
57
|
if (!record) {
|
|
@@ -80,10 +80,10 @@ let CoreService = class CoreService {
|
|
|
80
80
|
*/
|
|
81
81
|
async updateById(id, data) {
|
|
82
82
|
try {
|
|
83
|
-
return await this.modelDelegate.
|
|
83
|
+
return (await this.modelDelegate.updateMany({
|
|
84
84
|
where: this._generateWhereFromIdField(id),
|
|
85
85
|
data,
|
|
86
|
-
});
|
|
86
|
+
}))[0];
|
|
87
87
|
}
|
|
88
88
|
catch (error) {
|
|
89
89
|
(0, error_handler_1.handleError)(error);
|
|
@@ -96,9 +96,9 @@ let CoreService = class CoreService {
|
|
|
96
96
|
*/
|
|
97
97
|
async deleteById(id) {
|
|
98
98
|
try {
|
|
99
|
-
return await this.modelDelegate.
|
|
99
|
+
return (await this.modelDelegate.deleteMany({
|
|
100
100
|
where: this._generateWhereFromIdField(id)
|
|
101
|
-
});
|
|
101
|
+
}))[0];
|
|
102
102
|
}
|
|
103
103
|
catch (error) {
|
|
104
104
|
(0, error_handler_1.handleError)(error);
|
package/package.json
CHANGED