@appxdigital/appx-core 0.1.68
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/appx-core.module.d.ts +7 -0
- package/dist/appx-core.module.d.ts.map +1 -0
- package/dist/appx-core.module.js +46 -0
- package/dist/common/config/default-permissions.config.d.ts +3 -0
- package/dist/common/config/default-permissions.config.d.ts.map +1 -0
- package/dist/common/config/default-permissions.config.js +6 -0
- package/dist/common/config/permissions.config.provider.d.ts +8 -0
- package/dist/common/config/permissions.config.provider.d.ts.map +1 -0
- package/dist/common/config/permissions.config.provider.js +12 -0
- package/dist/common/config/permissions.service.d.ts +7 -0
- package/dist/common/config/permissions.service.d.ts.map +1 -0
- package/dist/common/config/permissions.service.js +31 -0
- package/dist/common/config/permissionsConfigTypes.d.ts +18 -0
- package/dist/common/config/permissionsConfigTypes.d.ts.map +1 -0
- package/dist/common/config/permissionsConfigTypes.js +2 -0
- package/dist/common/contants.d.ts +3 -0
- package/dist/common/contants.d.ts.map +1 -0
- package/dist/common/contants.js +5 -0
- package/dist/common/decorators/guard.decorator.d.ts +5 -0
- package/dist/common/decorators/guard.decorator.d.ts.map +1 -0
- package/dist/common/decorators/guard.decorator.js +22 -0
- package/dist/common/decorators/permission.decorator.d.ts +3 -0
- package/dist/common/decorators/permission.decorator.d.ts.map +1 -0
- package/dist/common/decorators/permission.decorator.js +7 -0
- package/dist/common/decorators/transaction.decorator.d.ts +8 -0
- package/dist/common/decorators/transaction.decorator.d.ts.map +1 -0
- package/dist/common/decorators/transaction.decorator.js +12 -0
- package/dist/common/enums/role.enum.d.ts +6 -0
- package/dist/common/enums/role.enum.d.ts.map +1 -0
- package/dist/common/enums/role.enum.js +9 -0
- package/dist/common/guards/rbac.guard.d.ts +10 -0
- package/dist/common/guards/rbac.guard.d.ts.map +1 -0
- package/dist/common/guards/rbac.guard.js +56 -0
- package/dist/common/guards/role.guard.d.ts +12 -0
- package/dist/common/guards/role.guard.d.ts.map +1 -0
- package/dist/common/guards/role.guard.js +44 -0
- package/dist/common/interceptors/file.interceptor.d.ts +9 -0
- package/dist/common/interceptors/file.interceptor.d.ts.map +1 -0
- package/dist/common/interceptors/file.interceptor.js +74 -0
- package/dist/common/interceptors/prisma.interceptor.d.ts +14 -0
- package/dist/common/interceptors/prisma.interceptor.d.ts.map +1 -0
- package/dist/common/interceptors/prisma.interceptor.js +82 -0
- package/dist/common/interfaces/file-upload.interface.d.ts +13 -0
- package/dist/common/interfaces/file-upload.interface.d.ts.map +1 -0
- package/dist/common/interfaces/file-upload.interface.js +2 -0
- package/dist/common/interfaces/storage-service.interface.d.ts +4 -0
- package/dist/common/interfaces/storage-service.interface.d.ts.map +1 -0
- package/dist/common/interfaces/storage-service.interface.js +2 -0
- package/dist/common/interfaces/user.interface.d.ts +12 -0
- package/dist/common/interfaces/user.interface.d.ts.map +1 -0
- package/dist/common/interfaces/user.interface.js +2 -0
- package/dist/common/providers/aws-storage.service.d.ts +10 -0
- package/dist/common/providers/aws-storage.service.d.ts.map +1 -0
- package/dist/common/providers/aws-storage.service.js +60 -0
- package/dist/common/providers/gcp-storage.service.d.ts +10 -0
- package/dist/common/providers/gcp-storage.service.d.ts.map +1 -0
- package/dist/common/providers/gcp-storage.service.js +87 -0
- package/dist/common/providers/local-storage.service.d.ts +7 -0
- package/dist/common/providers/local-storage.service.d.ts.map +1 -0
- package/dist/common/providers/local-storage.service.js +80 -0
- package/dist/common/types.d.ts +21 -0
- package/dist/common/types.d.ts.map +1 -0
- package/dist/common/types.js +3 -0
- package/dist/common/utils/context-transformer.util.d.ts +6 -0
- package/dist/common/utils/context-transformer.util.d.ts.map +1 -0
- package/dist/common/utils/context-transformer.util.js +28 -0
- package/dist/common/utils/error-handler.d.ts +2 -0
- package/dist/common/utils/error-handler.d.ts.map +1 -0
- package/dist/common/utils/error-handler.js +38 -0
- package/dist/config/admin/create.d.ts +2 -0
- package/dist/config/admin/create.d.ts.map +1 -0
- package/dist/config/admin/create.js +25 -0
- package/dist/config/admin/generate-admin.d.ts +2 -0
- package/dist/config/admin/generate-admin.d.ts.map +1 -0
- package/dist/config/admin/generate-admin.js +75 -0
- package/dist/config/admin/templates/admin.template.d.ts +2 -0
- package/dist/config/admin/templates/admin.template.d.ts.map +1 -0
- package/dist/config/admin/templates/admin.template.js +131 -0
- package/dist/config/admin/templates/component-loader.template.d.ts +2 -0
- package/dist/config/admin/templates/component-loader.template.d.ts.map +1 -0
- package/dist/config/admin/templates/component-loader.template.js +17 -0
- package/dist/config/admin/templates/dashboard.template.d.ts +2 -0
- package/dist/config/admin/templates/dashboard.template.d.ts.map +1 -0
- package/dist/config/admin/templates/dashboard.template.js +40 -0
- package/dist/config/admin/templates/utils.template.d.ts +2 -0
- package/dist/config/admin/templates/utils.template.d.ts.map +1 -0
- package/dist/config/admin/templates/utils.template.js +135 -0
- package/dist/config/generate-all.d.ts +3 -0
- package/dist/config/generate-all.d.ts.map +1 -0
- package/dist/config/generate-all.js +64 -0
- package/dist/config/generate-controllers.d.ts +2 -0
- package/dist/config/generate-controllers.d.ts.map +1 -0
- package/dist/config/generate-controllers.js +83 -0
- package/dist/config/generate-modules.d.ts +2 -0
- package/dist/config/generate-modules.d.ts.map +1 -0
- package/dist/config/generate-modules.js +158 -0
- package/dist/config/generate-resolvers.d.ts +2 -0
- package/dist/config/generate-resolvers.d.ts.map +1 -0
- package/dist/config/generate-resolvers.js +97 -0
- package/dist/config/generate-services.d.ts +2 -0
- package/dist/config/generate-services.d.ts.map +1 -0
- package/dist/config/generate-services.js +72 -0
- package/dist/config/generate-session-schema.d.ts +2 -0
- package/dist/config/generate-session-schema.d.ts.map +1 -0
- package/dist/config/generate-session-schema.js +78 -0
- package/dist/config/setup-fileupload.d.ts +3 -0
- package/dist/config/setup-fileupload.d.ts.map +1 -0
- package/dist/config/setup-fileupload.js +265 -0
- package/dist/config/utils.d.ts +3 -0
- package/dist/config/utils.d.ts.map +1 -0
- package/dist/config/utils.js +55 -0
- package/dist/graphql/batch.payload.d.ts +4 -0
- package/dist/graphql/batch.payload.d.ts.map +1 -0
- package/dist/graphql/batch.payload.js +23 -0
- package/dist/graphql/generic.resolver.d.ts +15 -0
- package/dist/graphql/generic.resolver.d.ts.map +1 -0
- package/dist/graphql/generic.resolver.js +107 -0
- package/dist/graphql/graphql.module.d.ts +3 -0
- package/dist/graphql/graphql.module.d.ts.map +1 -0
- package/dist/graphql/graphql.module.js +28 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/modules/auth/auth-field.decorator.d.ts +10 -0
- package/dist/modules/auth/auth-field.decorator.d.ts.map +1 -0
- package/dist/modules/auth/auth-field.decorator.js +18 -0
- package/dist/modules/auth/auth.controller.d.ts +25 -0
- package/dist/modules/auth/auth.controller.d.ts.map +1 -0
- package/dist/modules/auth/auth.controller.js +158 -0
- package/dist/modules/auth/auth.module.d.ts +3 -0
- package/dist/modules/auth/auth.module.d.ts.map +1 -0
- package/dist/modules/auth/auth.module.js +28 -0
- package/dist/modules/auth/auth.resolver.d.ts +6 -0
- package/dist/modules/auth/auth.resolver.d.ts.map +1 -0
- package/dist/modules/auth/auth.resolver.js +24 -0
- package/dist/modules/auth/auth.service.d.ts +28 -0
- package/dist/modules/auth/auth.service.d.ts.map +1 -0
- package/dist/modules/auth/auth.service.js +197 -0
- package/dist/modules/auth/authenticated.guard.d.ts +5 -0
- package/dist/modules/auth/authenticated.guard.d.ts.map +1 -0
- package/dist/modules/auth/authenticated.guard.js +20 -0
- package/dist/modules/auth/dto/register.dto.d.ts +6 -0
- package/dist/modules/auth/dto/register.dto.d.ts.map +1 -0
- package/dist/modules/auth/dto/register.dto.js +21 -0
- package/dist/modules/auth/dto/user.dto.d.ts +5 -0
- package/dist/modules/auth/dto/user.dto.d.ts.map +1 -0
- package/dist/modules/auth/dto/user.dto.js +36 -0
- package/dist/modules/auth/local-auth.guard.d.ts +7 -0
- package/dist/modules/auth/local-auth.guard.d.ts.map +1 -0
- package/dist/modules/auth/local-auth.guard.js +31 -0
- package/dist/modules/auth/local.strategy.d.ts +15 -0
- package/dist/modules/auth/local.strategy.d.ts.map +1 -0
- package/dist/modules/auth/local.strategy.js +48 -0
- package/dist/modules/auth/session/session-auth.guard.d.ts +5 -0
- package/dist/modules/auth/session/session-auth.guard.d.ts.map +1 -0
- package/dist/modules/auth/session/session-auth.guard.js +30 -0
- package/dist/modules/auth/session/session-serializer.d.ts +9 -0
- package/dist/modules/auth/session/session-serializer.d.ts.map +1 -0
- package/dist/modules/auth/session/session-serializer.js +44 -0
- package/dist/modules/auth/session/session-store.d.ts +11 -0
- package/dist/modules/auth/session/session-store.d.ts.map +1 -0
- package/dist/modules/auth/session/session-store.js +97 -0
- package/dist/modules/common.module.d.ts +3 -0
- package/dist/modules/common.module.d.ts.map +1 -0
- package/dist/modules/common.module.js +20 -0
- package/dist/modules/core/core.controller.d.ts +14 -0
- package/dist/modules/core/core.controller.d.ts.map +1 -0
- package/dist/modules/core/core.controller.js +114 -0
- package/dist/modules/core/core.module.d.ts +3 -0
- package/dist/modules/core/core.module.d.ts.map +1 -0
- package/dist/modules/core/core.module.js +22 -0
- package/dist/modules/core/core.service.d.ts +44 -0
- package/dist/modules/core/core.service.d.ts.map +1 -0
- package/dist/modules/core/core.service.js +121 -0
- package/dist/modules/file/file-upload.controller.d.ts +11 -0
- package/dist/modules/file/file-upload.controller.d.ts.map +1 -0
- package/dist/modules/file/file-upload.controller.js +52 -0
- package/dist/modules/file/file-upload.module.d.ts +6 -0
- package/dist/modules/file/file-upload.module.d.ts.map +1 -0
- package/dist/modules/file/file-upload.module.js +62 -0
- package/dist/modules/file/file-upload.service.d.ts +27 -0
- package/dist/modules/file/file-upload.service.d.ts.map +1 -0
- package/dist/modules/file/file-upload.service.js +69 -0
- package/dist/modules/user/user.module.d.ts +3 -0
- package/dist/modules/user/user.module.d.ts.map +1 -0
- package/dist/modules/user/user.module.js +20 -0
- package/dist/modules/user/user.service.d.ts +10 -0
- package/dist/modules/user/user.service.d.ts.map +1 -0
- package/dist/modules/user/user.service.js +49 -0
- package/dist/prisma/prisma.service.d.ts +128 -0
- package/dist/prisma/prisma.service.d.ts.map +1 -0
- package/dist/prisma/prisma.service.js +512 -0
- package/dist/tasks/session-cleanup.service.d.ts +7 -0
- package/dist/tasks/session-cleanup.service.d.ts.map +1 -0
- package/dist/tasks/session-cleanup.service.js +38 -0
- package/package.json +66 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface EndpointConfig {
|
|
2
|
+
endpoint: string;
|
|
3
|
+
aliases: string[];
|
|
4
|
+
maxSize: number;
|
|
5
|
+
allowedTypes: string[];
|
|
6
|
+
multiple: boolean;
|
|
7
|
+
roles: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface FileUploadModuleOptions {
|
|
10
|
+
endpoints: EndpointConfig[];
|
|
11
|
+
cloudProvider: 'aws' | 'gcp' | 'local';
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=file-upload.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-upload.interface.d.ts","sourceRoot":"","sources":["../../../src/common/interfaces/file-upload.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACpC,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,aAAa,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;CAC1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-service.interface.d.ts","sourceRoot":"","sources":["../../../src/common/interfaces/storage-service.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC3B,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.interface.d.ts","sourceRoot":"","sources":["../../../src/common/interfaces/user.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,IAAI;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ConfigService } from '@nestjs/config';
|
|
2
|
+
import { StorageService } from "../interfaces/storage-service.interface";
|
|
3
|
+
export declare class AwsStorageService implements StorageService {
|
|
4
|
+
private configService;
|
|
5
|
+
private s3;
|
|
6
|
+
private readonly bucketName;
|
|
7
|
+
constructor(configService: ConfigService);
|
|
8
|
+
uploadFile(file: Express.Multer.File): Promise<any>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=aws-storage.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-storage.service.d.ts","sourceRoot":"","sources":["../../../src/common/providers/aws-storage.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAC,cAAc,EAAC,MAAM,yCAAyC,CAAC;AAEvE,qBACa,iBAAkB,YAAW,cAAc;IAKxC,OAAO,CAAC,aAAa;IAJjC,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;gBAG5B,aAAa,EAAE,aAAa;IAkB1C,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;CAuB5D"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AwsStorageService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const config_1 = require("@nestjs/config");
|
|
15
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
16
|
+
let AwsStorageService = class AwsStorageService {
|
|
17
|
+
constructor(configService) {
|
|
18
|
+
this.configService = configService;
|
|
19
|
+
const s3Config = {
|
|
20
|
+
region: this.configService.get('AWS_REGION'),
|
|
21
|
+
};
|
|
22
|
+
const accessKeyId = this.configService.get('AWS_ACCESS_KEY_ID');
|
|
23
|
+
const secretAccessKey = this.configService.get('AWS_SECRET_ACCESS_KEY');
|
|
24
|
+
if (accessKeyId && secretAccessKey) {
|
|
25
|
+
s3Config.credentials = {
|
|
26
|
+
accessKeyId,
|
|
27
|
+
secretAccessKey,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
this.s3 = new client_s3_1.S3Client(s3Config);
|
|
31
|
+
this.bucketName = this.configService.get('AWS_BUCKET_NAME');
|
|
32
|
+
}
|
|
33
|
+
async uploadFile(file) {
|
|
34
|
+
if (!this.bucketName) {
|
|
35
|
+
throw new Error('AWS_BUCKET_NAME is not defined.');
|
|
36
|
+
}
|
|
37
|
+
const command = new client_s3_1.PutObjectCommand({
|
|
38
|
+
Bucket: this.bucketName,
|
|
39
|
+
Key: file.originalname,
|
|
40
|
+
Body: file.buffer,
|
|
41
|
+
});
|
|
42
|
+
try {
|
|
43
|
+
const response = await this.s3.send(command);
|
|
44
|
+
return {
|
|
45
|
+
key: file.originalname,
|
|
46
|
+
location: `https://${this.bucketName}.s3.amazonaws.com/${file.originalname}`,
|
|
47
|
+
...response,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error('AWS S3 upload error:', error);
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
exports.AwsStorageService = AwsStorageService;
|
|
57
|
+
exports.AwsStorageService = AwsStorageService = __decorate([
|
|
58
|
+
(0, common_1.Injectable)(),
|
|
59
|
+
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
60
|
+
], AwsStorageService);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { StorageService } from '../interfaces/storage-service.interface';
|
|
2
|
+
import { ConfigService } from '@nestjs/config';
|
|
3
|
+
export declare class GcpStorageService implements StorageService {
|
|
4
|
+
private configService;
|
|
5
|
+
private storage;
|
|
6
|
+
private readonly bucketName;
|
|
7
|
+
constructor(configService: ConfigService);
|
|
8
|
+
uploadFile(file: Express.Multer.File): Promise<any>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=gcp-storage.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcp-storage.service.d.ts","sourceRoot":"","sources":["../../../src/common/providers/gcp-storage.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAC,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAG7C,qBACa,iBAAkB,YAAW,cAAc;IAIjB,OAAO,CAAC,aAAa;IAHxD,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAEO,aAAa,EAAE,aAAa;IAejE,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;CAe5D"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
45
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.GcpStorageService = void 0;
|
|
49
|
+
const common_1 = require("@nestjs/common");
|
|
50
|
+
const storage_1 = require("@google-cloud/storage");
|
|
51
|
+
const config_1 = require("@nestjs/config");
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
let GcpStorageService = class GcpStorageService {
|
|
54
|
+
constructor(configService) {
|
|
55
|
+
this.configService = configService;
|
|
56
|
+
const keyFilePath = this.configService.get('GCP_KEY_FILE_PATH');
|
|
57
|
+
const projectId = this.configService.get('GCP_PROJECT_ID');
|
|
58
|
+
this.bucketName = this.configService.get('GCP_BUCKET_NAME') || '';
|
|
59
|
+
if (!keyFilePath || !projectId || !this.bucketName) {
|
|
60
|
+
throw new Error('Missing GCP configuration values.');
|
|
61
|
+
}
|
|
62
|
+
this.storage = new storage_1.Storage({
|
|
63
|
+
projectId,
|
|
64
|
+
keyFilename: path.resolve(keyFilePath),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async uploadFile(file) {
|
|
68
|
+
const bucket = this.storage.bucket(this.bucketName);
|
|
69
|
+
const blob = bucket.file(file.originalname);
|
|
70
|
+
const blobStream = blob.createWriteStream();
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
blobStream.on('error', (error) => reject(error));
|
|
73
|
+
blobStream.on('finish', () => {
|
|
74
|
+
resolve({
|
|
75
|
+
fileUrl: `https://storage.googleapis.com/${this.bucketName}/${blob.name}`,
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
blobStream.end(file.buffer);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
exports.GcpStorageService = GcpStorageService;
|
|
83
|
+
exports.GcpStorageService = GcpStorageService = __decorate([
|
|
84
|
+
(0, common_1.Injectable)(),
|
|
85
|
+
__param(0, (0, common_1.Inject)(config_1.ConfigService)),
|
|
86
|
+
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
87
|
+
], GcpStorageService);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { StorageService } from '../interfaces/storage-service.interface';
|
|
2
|
+
export declare class LocalStorageService implements StorageService {
|
|
3
|
+
private readonly uploadDir;
|
|
4
|
+
constructor();
|
|
5
|
+
uploadFile(file: Express.Multer.File): Promise<any>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=local-storage.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-storage.service.d.ts","sourceRoot":"","sources":["../../../src/common/providers/local-storage.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,EAAC,MAAM,yCAAyC,CAAC;AAIvE,qBACa,mBAAoB,YAAW,cAAc;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;;IAQ3D,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;CAqB5D"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.LocalStorageService = void 0;
|
|
46
|
+
const common_1 = require("@nestjs/common");
|
|
47
|
+
const fs = __importStar(require("fs"));
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
let LocalStorageService = class LocalStorageService {
|
|
50
|
+
constructor() {
|
|
51
|
+
this.uploadDir = path.join(process.cwd(), 'uploads');
|
|
52
|
+
if (!fs.existsSync(this.uploadDir)) {
|
|
53
|
+
fs.mkdirSync(this.uploadDir, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async uploadFile(file) {
|
|
57
|
+
if (!file || !file.originalname || !file.buffer) {
|
|
58
|
+
console.log('Invalid file data:', {
|
|
59
|
+
hasOriginalName: !!file?.originalname,
|
|
60
|
+
hasBuffer: !!file?.buffer,
|
|
61
|
+
});
|
|
62
|
+
throw new common_1.BadRequestException('Invalid file data');
|
|
63
|
+
}
|
|
64
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
65
|
+
const uniqueName = `${timestamp}-${file.originalname}`;
|
|
66
|
+
const filePath = path.join(this.uploadDir, uniqueName);
|
|
67
|
+
await fs.promises.writeFile(filePath, file.buffer);
|
|
68
|
+
return {
|
|
69
|
+
filePath,
|
|
70
|
+
originalName: file.originalname,
|
|
71
|
+
size: file.size,
|
|
72
|
+
mimeType: file.mimetype,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
exports.LocalStorageService = LocalStorageService;
|
|
77
|
+
exports.LocalStorageService = LocalStorageService = __decorate([
|
|
78
|
+
(0, common_1.Injectable)(),
|
|
79
|
+
__metadata("design:paramtypes", [])
|
|
80
|
+
], LocalStorageService);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PrismaClient } from '@prisma/client';
|
|
2
|
+
import 'express-session';
|
|
3
|
+
export type Type<T> = new (...args: any[]) => T;
|
|
4
|
+
declare global {
|
|
5
|
+
namespace Express {
|
|
6
|
+
interface Request {
|
|
7
|
+
prisma?: PrismaClient;
|
|
8
|
+
login(user: any, done: (err: any) => void): void;
|
|
9
|
+
logout(callback: (err: any) => void): void;
|
|
10
|
+
user?: any;
|
|
11
|
+
}
|
|
12
|
+
interface User extends Record<string, any> {
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
declare module 'express-session' {
|
|
17
|
+
interface SessionData {
|
|
18
|
+
userId: number;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,iBAAiB,CAAC;AAEzB,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEhD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,OAAO,CAAC;QACd,UAAU,OAAO;YACb,MAAM,CAAC,EAAE,YAAY,CAAC;YAEtB,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;YAEjD,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;YAE3C,IAAI,CAAC,EAAE,GAAG,CAAC;SACd;QAED,UAAU,IAAK,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;SACzC;KACJ;CACJ;AAED,OAAO,QAAQ,iBAAiB,CAAC;IAC7B,UAAU,WAAW;QACjB,MAAM,EAAE,MAAM,CAAC;KAClB;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-transformer.util.d.ts","sourceRoot":"","sources":["../../../src/common/utils/context-transformer.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAGhD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG;IACzD,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,CAAC,EAAE,GAAG,CAAC;CACb,CAqBA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.transformContext = transformContext;
|
|
4
|
+
const graphql_1 = require("@nestjs/graphql");
|
|
5
|
+
function transformContext(context) {
|
|
6
|
+
const contextType = context.getType();
|
|
7
|
+
if (contextType === 'http') {
|
|
8
|
+
const request = context.switchToHttp().getRequest();
|
|
9
|
+
const response = context.switchToHttp().getResponse();
|
|
10
|
+
return { req: request, res: response };
|
|
11
|
+
}
|
|
12
|
+
else if (context.getType() === 'rpc' || context.getType() === 'ws') {
|
|
13
|
+
const client = context.switchToWs().getClient();
|
|
14
|
+
return { req: client.handshake, res: null };
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
try {
|
|
18
|
+
const gqlContext = graphql_1.GqlExecutionContext.create(context);
|
|
19
|
+
return {
|
|
20
|
+
req: gqlContext.getContext().req,
|
|
21
|
+
res: gqlContext.getContext().res,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
throw new Error(`Unsupported context type: ${contextType}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../src/common/utils/error-handler.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,CAmC7C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleError = handleError;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const multer_1 = require("multer");
|
|
6
|
+
function handleError(error) {
|
|
7
|
+
// If it's already an HttpException, just rethrow it
|
|
8
|
+
if (error instanceof common_1.HttpException)
|
|
9
|
+
throw error;
|
|
10
|
+
// Multer errors
|
|
11
|
+
if (error instanceof multer_1.MulterError) {
|
|
12
|
+
switch (error.code) {
|
|
13
|
+
case 'LIMIT_FILE_SIZE':
|
|
14
|
+
throw new common_1.BadRequestException('Uploaded file exceeds the maximum allowed size.');
|
|
15
|
+
case 'LIMIT_FILE_COUNT':
|
|
16
|
+
throw new common_1.BadRequestException('Too many files uploaded.');
|
|
17
|
+
case 'LIMIT_UNEXPECTED_FILE':
|
|
18
|
+
throw new common_1.BadRequestException('Unexpected file field name.');
|
|
19
|
+
default:
|
|
20
|
+
throw new common_1.BadRequestException(`File upload error: ${error.message}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Prisma errors
|
|
24
|
+
if (error && typeof error === 'object' && 'code' in error) {
|
|
25
|
+
switch (error.code) {
|
|
26
|
+
case 'P2002':
|
|
27
|
+
throw new common_1.ConflictException('Duplicate entry detected.');
|
|
28
|
+
case 'P2025':
|
|
29
|
+
throw new common_1.NotFoundException('The requested record was not found.');
|
|
30
|
+
case 'P2003':
|
|
31
|
+
throw new common_1.ForbiddenException('You are not authorized to perform this action.');
|
|
32
|
+
default:
|
|
33
|
+
throw new common_1.BadRequestException('A Prisma database error occurred.');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
console.error('Error:', error);
|
|
37
|
+
throw new common_1.InternalServerErrorException(error.message || 'An unknown error occurred.');
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/config/admin/create.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const child_process_1 = require("child_process");
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const currentProjectPath = process.cwd();
|
|
9
|
+
try {
|
|
10
|
+
const command = 'npm install adminjs @adminjs/express @adminjs/nestjs @adminjs/prisma @prisma/sdk react express-formidable @adminjs/passwords @adminjs/import-export';
|
|
11
|
+
(0, child_process_1.execSync)(command, {
|
|
12
|
+
stdio: 'inherit',
|
|
13
|
+
cwd: currentProjectPath
|
|
14
|
+
});
|
|
15
|
+
console.log('Dependencies installed successfully!');
|
|
16
|
+
const scriptsDir = path_1.default.join(__dirname);
|
|
17
|
+
console.log('Generating Admin...');
|
|
18
|
+
(0, child_process_1.execSync)(`node ${path_1.default.join(scriptsDir, 'generate-admin.js')}`, {
|
|
19
|
+
stdio: 'inherit',
|
|
20
|
+
});
|
|
21
|
+
console.log('Admin generated successfully!');
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.error('Error installing dependencies:', error.message);
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-admin.d.ts","sourceRoot":"","sources":["../../../src/config/admin/generate-admin.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const admin_template_1 = require("./templates/admin.template");
|
|
9
|
+
const utils_template_1 = require("./templates/utils.template");
|
|
10
|
+
const dashboard_template_1 = require("./templates/dashboard.template");
|
|
11
|
+
const component_loader_template_1 = require("./templates/component-loader.template");
|
|
12
|
+
const scriptsDir = path_1.default.join(__dirname, "/templates");
|
|
13
|
+
function ensureDirSync(dirPath) {
|
|
14
|
+
if (!fs_1.default.existsSync(dirPath)) {
|
|
15
|
+
fs_1.default.mkdirSync(dirPath, { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function getTemplateContent(templateFileName) {
|
|
19
|
+
const templatePath = path_1.default.join(scriptsDir, templateFileName);
|
|
20
|
+
return fs_1.default.readFileSync(templatePath, 'utf8');
|
|
21
|
+
}
|
|
22
|
+
function setupAdminJS() {
|
|
23
|
+
const projectPath = process.cwd();
|
|
24
|
+
const backofficePath = path_1.default.join(projectPath, 'src/backoffice');
|
|
25
|
+
ensureDirSync(backofficePath);
|
|
26
|
+
const backofficeComponentsPath = path_1.default.join(backofficePath, 'components');
|
|
27
|
+
ensureDirSync(backofficeComponentsPath);
|
|
28
|
+
fs_1.default.writeFileSync(path_1.default.join(backofficePath, 'component-loader.ts'), component_loader_template_1.componentLoaderTemplate);
|
|
29
|
+
fs_1.default.writeFileSync(path_1.default.join(backofficeComponentsPath, 'dashboard.tsx'), dashboard_template_1.dashboardTemplate);
|
|
30
|
+
fs_1.default.writeFileSync(path_1.default.join(backofficePath, 'utils.ts'), utils_template_1.permissionsUtilsContent);
|
|
31
|
+
fs_1.default.writeFileSync(path_1.default.join(backofficePath, 'admin.ts'), admin_template_1.adminJsModuleCode);
|
|
32
|
+
const tsConfigPath = path_1.default.join(projectPath, 'tsconfig.json');
|
|
33
|
+
if (fs_1.default.existsSync(tsConfigPath)) {
|
|
34
|
+
const tsConfigData = fs_1.default.readFileSync(tsConfigPath, 'utf8');
|
|
35
|
+
const tsConfig = JSON.parse(tsConfigData);
|
|
36
|
+
tsConfig.compilerOptions = tsConfig.compilerOptions || {};
|
|
37
|
+
tsConfig.compilerOptions.jsx = 'react';
|
|
38
|
+
fs_1.default.writeFileSync(tsConfigPath, JSON.stringify(tsConfig, null, 2));
|
|
39
|
+
console.log('Updated tsconfig.json with JSX support.');
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.error('tsconfig.json not found. Please ensure your project has TypeScript configured.');
|
|
43
|
+
}
|
|
44
|
+
insertInAppModuleImports();
|
|
45
|
+
console.log('Backoffice setup complete!');
|
|
46
|
+
}
|
|
47
|
+
function insertInAppModuleImports() {
|
|
48
|
+
const projectRoot = process.cwd();
|
|
49
|
+
const appModulePath = path_1.default.join(projectRoot, 'src', 'app.module.ts');
|
|
50
|
+
if (!fs_1.default.existsSync(appModulePath)) {
|
|
51
|
+
console.error(`Could not find app.module.ts at ${appModulePath}`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
let appModuleContent = fs_1.default.readFileSync(appModulePath, 'utf8');
|
|
55
|
+
const importStatement = 'import {createAdminJsModule} from "./backoffice/admin";';
|
|
56
|
+
if (!appModuleContent.includes(importStatement)) {
|
|
57
|
+
appModuleContent = `${importStatement}\n${appModuleContent}`;
|
|
58
|
+
}
|
|
59
|
+
const importsRegex = /imports\s*:\s*\[\s*([\s\S]*?)\s*\]/;
|
|
60
|
+
if (importsRegex.test(appModuleContent)) {
|
|
61
|
+
appModuleContent = appModuleContent.replace(importsRegex, (match, importsContent) => {
|
|
62
|
+
const trimmedImportsContent = importsContent.trim();
|
|
63
|
+
if (!trimmedImportsContent.includes('createAdminJsModule')) {
|
|
64
|
+
return `imports: [${trimmedImportsContent}${trimmedImportsContent.endsWith(',') ? '' : ','} \ncreateAdminJsModule().then((AdminJsModule: any) => AdminJsModule)]`;
|
|
65
|
+
}
|
|
66
|
+
return match;
|
|
67
|
+
});
|
|
68
|
+
fs_1.default.writeFileSync(appModulePath, appModuleContent, 'utf8');
|
|
69
|
+
console.log('createAdminJsModule has been added to the imports array.');
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
console.error('Could not find the imports array in app.module.ts');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
setupAdminJS();
|
|
@@ -0,0 +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 '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.findUnique({\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
|
+
//# sourceMappingURL=admin.template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.template.d.ts","sourceRoot":"","sources":["../../../../src/config/admin/templates/admin.template.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,mvJA+H7B,CAAC"}
|