arkos 1.2.13-test.1 → 1.2.13-test.2
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/cjs/app.js +1 -138
- package/dist/cjs/exports/auth/index.js +1 -6
- package/dist/cjs/exports/controllers/index.js +1 -11
- package/dist/cjs/exports/error-handler/index.js +1 -11
- package/dist/cjs/exports/index.js +1 -12
- package/dist/cjs/exports/middlewares/index.js +1 -7
- package/dist/cjs/exports/prisma/index.js +1 -6
- package/dist/cjs/exports/services/index.js +1 -49
- package/dist/cjs/exports/utils/index.js +1 -44
- package/dist/cjs/exports/validation/index.js +1 -11
- package/dist/cjs/modules/auth/auth.controller.js +1 -194
- package/dist/cjs/modules/auth/auth.router.js +1 -50
- package/dist/cjs/modules/auth/auth.service.js +1 -185
- package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +1 -83
- package/dist/cjs/modules/base/base.controller.js +1 -158
- package/dist/cjs/modules/base/base.middlewares.js +1 -92
- package/dist/cjs/modules/base/base.router.js +1 -24
- package/dist/cjs/modules/base/base.service.js +1 -128
- package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +1 -82
- package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +1 -50
- package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +1 -97
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +1 -171
- package/dist/cjs/modules/email/email.service.js +1 -104
- package/dist/cjs/modules/error-handler/error-handler.controller.js +4 -146
- package/dist/cjs/modules/error-handler/utils/app-error.js +1 -17
- package/dist/cjs/modules/error-handler/utils/catch-async.js +1 -12
- package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +3 -201
- package/dist/cjs/modules/file-upload/file-upload.controller.js +1 -271
- package/dist/cjs/modules/file-upload/file-upload.router.js +1 -44
- package/dist/cjs/modules/file-upload/file-upload.service.js +1 -322
- package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -97
- package/dist/cjs/modules/swagger/swagger.router.js +1 -119
- package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -270
- package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -66
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -41
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -29
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -30
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +1 -471
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +1 -575
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -253
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -105
- package/dist/cjs/paths.js +1 -9
- package/dist/cjs/server.js +5 -85
- package/dist/cjs/types/arkos-config.js +1 -3
- package/dist/cjs/types/auth.js +1 -3
- package/dist/cjs/types/index.js +1 -11
- package/dist/cjs/types/router-config.js +1 -3
- package/dist/cjs/utils/arkos-env.js +1 -9
- package/dist/cjs/utils/cli/build.js +6 -212
- package/dist/cjs/utils/cli/dev.js +5 -256
- package/dist/cjs/utils/cli/generate.js +12 -189
- package/dist/cjs/utils/cli/index.js +1 -81
- package/dist/cjs/utils/cli/start.js +5 -94
- package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -24
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -20
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +6 -15
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +38 -67
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +8 -36
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +11 -36
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +7 -27
- package/dist/cjs/utils/cli/utils/template-generators.js +2 -28
- package/dist/cjs/utils/dotenv.helpers.js +1 -43
- package/dist/cjs/utils/features/api.features.js +1 -167
- package/dist/cjs/utils/features/change-case.features.js +1 -67
- package/dist/cjs/utils/helpers/api.features.helpers.js +1 -106
- package/dist/cjs/utils/helpers/change-case.helpers.js +1 -177
- package/dist/cjs/utils/helpers/deepmerge.helper.js +1 -115
- package/dist/cjs/utils/helpers/fs.helpers.js +1 -61
- package/dist/cjs/utils/helpers/global.helpers.js +1 -89
- package/dist/cjs/utils/helpers/models.helpers.js +11 -339
- package/dist/cjs/utils/helpers/prisma.helpers.js +1 -52
- package/dist/cjs/utils/helpers/query-parser.helpers.js +1 -45
- package/dist/cjs/utils/helpers/routers.helpers.js +1 -21
- package/dist/cjs/utils/helpers/text.helpers.js +1 -28
- package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -451
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +1 -88
- package/dist/cjs/utils/prisma/prisma-schema-parser.js +3 -158
- package/dist/cjs/utils/prisma/types.js +1 -3
- package/dist/cjs/utils/sheu.js +1 -119
- package/dist/cjs/utils/validate-dto.js +1 -17
- package/dist/cjs/utils/validate-schema.js +1 -15
- package/dist/esm/app.js +1 -0
- package/dist/esm/app.js.map +1 -0
- package/dist/esm/exports/auth/index.js +1 -0
- package/dist/esm/exports/auth/index.js.map +1 -0
- package/dist/esm/exports/controllers/index.js +1 -0
- package/dist/esm/exports/controllers/index.js.map +1 -0
- package/dist/esm/exports/error-handler/index.js +1 -0
- package/dist/esm/exports/error-handler/index.js.map +1 -0
- package/dist/esm/exports/index.js +1 -0
- package/dist/esm/exports/index.js.map +1 -0
- package/dist/esm/exports/middlewares/index.js +1 -0
- package/dist/esm/exports/middlewares/index.js.map +1 -0
- package/dist/esm/exports/prisma/index.js +1 -0
- package/dist/esm/exports/prisma/index.js.map +1 -0
- package/dist/esm/exports/services/index.js +1 -0
- package/dist/esm/exports/services/index.js.map +1 -0
- package/dist/esm/exports/utils/index.js +1 -0
- package/dist/esm/exports/utils/index.js.map +1 -0
- package/dist/esm/exports/validation/index.js +1 -0
- package/dist/esm/exports/validation/index.js.map +1 -0
- package/dist/esm/modules/auth/auth.controller.js +1 -0
- package/dist/esm/modules/auth/auth.controller.js.map +1 -0
- package/dist/esm/modules/auth/auth.router.js +1 -0
- package/dist/esm/modules/auth/auth.router.js.map +1 -0
- package/dist/esm/modules/auth/auth.service.js +1 -0
- package/dist/esm/modules/auth/auth.service.js.map +1 -0
- package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +1 -0
- package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -0
- package/dist/esm/modules/base/base.controller.js +1 -0
- package/dist/esm/modules/base/base.controller.js.map +1 -0
- package/dist/esm/modules/base/base.middlewares.js +1 -0
- package/dist/esm/modules/base/base.middlewares.js.map +1 -0
- package/dist/esm/modules/base/base.router.js +1 -0
- package/dist/esm/modules/base/base.router.js.map +1 -0
- package/dist/esm/modules/base/base.service.js +1 -0
- package/dist/esm/modules/base/base.service.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +1 -0
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +1 -0
- package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +1 -0
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -0
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +1 -0
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -0
- package/dist/esm/modules/email/email.service.js +1 -0
- package/dist/esm/modules/email/email.service.js.map +1 -0
- package/dist/esm/modules/error-handler/error-handler.controller.js +4 -0
- package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -0
- package/dist/esm/modules/error-handler/utils/app-error.js +1 -0
- package/dist/esm/modules/error-handler/utils/app-error.js.map +1 -0
- package/dist/esm/modules/error-handler/utils/catch-async.js +1 -0
- package/dist/esm/modules/error-handler/utils/catch-async.js.map +1 -0
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +3 -0
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -0
- package/dist/esm/modules/file-upload/file-upload.controller.js +1 -0
- package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -0
- package/dist/esm/modules/file-upload/file-upload.router.js +1 -0
- package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -0
- package/dist/esm/modules/file-upload/file-upload.service.js +1 -0
- package/dist/esm/modules/file-upload/file-upload.service.js.map +1 -0
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -0
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -0
- package/dist/esm/modules/swagger/swagger.router.js +1 -0
- package/dist/esm/modules/swagger/swagger.router.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -0
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
- package/dist/esm/paths.js +1 -0
- package/dist/esm/paths.js.map +1 -0
- package/dist/esm/server.js +5 -0
- package/dist/esm/server.js.map +1 -0
- package/dist/esm/types/arkos-config.js +1 -0
- package/dist/esm/types/arkos-config.js.map +1 -0
- package/dist/esm/types/auth.js +1 -0
- package/dist/esm/types/auth.js.map +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/router-config.js +1 -0
- package/dist/esm/types/router-config.js.map +1 -0
- package/dist/esm/utils/arkos-env.js +1 -0
- package/dist/esm/utils/arkos-env.js.map +1 -0
- package/dist/esm/utils/cli/build.js +6 -0
- package/dist/esm/utils/cli/build.js.map +1 -0
- package/dist/esm/utils/cli/dev.js +5 -0
- package/dist/esm/utils/cli/dev.js.map +1 -0
- package/dist/esm/utils/cli/generate.js +12 -0
- package/dist/esm/utils/cli/generate.js.map +1 -0
- package/dist/esm/utils/cli/index.js +1 -0
- package/dist/esm/utils/cli/index.js.map +1 -0
- package/dist/esm/utils/cli/start.js +5 -0
- package/dist/esm/utils/cli/start.js.map +1 -0
- package/dist/esm/utils/cli/utils/cli.helpers.js +1 -0
- package/dist/esm/utils/cli/utils/cli.helpers.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +21 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +12 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +206 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +36 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +18 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +15 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -0
- package/dist/esm/utils/cli/utils/template-generators.js +2 -0
- package/dist/esm/utils/cli/utils/template-generators.js.map +1 -0
- package/dist/esm/utils/dotenv.helpers.js +1 -0
- package/dist/esm/utils/dotenv.helpers.js.map +1 -0
- package/dist/esm/utils/features/api.features.js +1 -0
- package/dist/esm/utils/features/api.features.js.map +1 -0
- package/dist/esm/utils/features/change-case.features.js +1 -0
- package/dist/esm/utils/features/change-case.features.js.map +1 -0
- package/dist/esm/utils/helpers/api.features.helpers.js +1 -0
- package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/change-case.helpers.js +1 -0
- package/dist/esm/utils/helpers/change-case.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/deepmerge.helper.js +1 -0
- package/dist/esm/utils/helpers/deepmerge.helper.js.map +1 -0
- package/dist/esm/utils/helpers/fs.helpers.js +1 -0
- package/dist/esm/utils/helpers/fs.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/global.helpers.js +1 -0
- package/dist/esm/utils/helpers/global.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/models.helpers.js +11 -0
- package/dist/esm/utils/helpers/models.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/prisma.helpers.js +1 -0
- package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/query-parser.helpers.js +1 -0
- package/dist/esm/utils/helpers/query-parser.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/routers.helpers.js +1 -0
- package/dist/esm/utils/helpers/routers.helpers.js.map +1 -0
- package/dist/esm/utils/helpers/text.helpers.js +1 -0
- package/dist/esm/utils/helpers/text.helpers.js.map +1 -0
- package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -0
- package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
- package/dist/esm/utils/prisma/prisma-json-schema-generator.js +1 -0
- package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -0
- package/dist/esm/utils/prisma/prisma-schema-parser.js +3 -0
- package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -0
- package/dist/esm/utils/prisma/types.js +1 -0
- package/dist/esm/utils/prisma/types.js.map +1 -0
- package/dist/esm/utils/sheu.js +1 -0
- package/dist/esm/utils/sheu.js.map +1 -0
- package/dist/esm/utils/validate-dto.js +1 -0
- package/dist/esm/utils/validate-dto.js.map +1 -0
- package/dist/esm/utils/validate-schema.js +1 -0
- package/dist/esm/utils/validate-schema.js.map +1 -0
- package/package.json +6 -4
- package/dist/cjs/index.js +0 -22
- package/dist/esm/index.d.mts +0 -280
- package/dist/esm/index.mjs +0 -22
- package/dist/exports/index.js +0 -1
- package/dist/types/arkos-config.js +0 -1
- package/dist/types/auth.js +0 -1
- package/dist/types/index.js +0 -1
- package/dist/types/router-config.js +0 -1
- package/dist/utils/arkos-env.js +0 -1
- package/dist/utils/dotenv.helpers.js +0 -1
- package/dist/utils/sheu.js +0 -1
- package/dist/utils/validate-dto.js +0 -1
- package/dist/utils/validate-schema.js +0 -1
package/dist/esm/index.d.mts
DELETED
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
import express, { Request, Response, NextFunction, RequestHandler, Express } from 'express';
|
|
2
|
-
import http from 'http';
|
|
3
|
-
import cors from 'cors';
|
|
4
|
-
import { Options as Options$1 } from 'express-rate-limit';
|
|
5
|
-
import cookieParser from 'cookie-parser';
|
|
6
|
-
import compression from 'compression';
|
|
7
|
-
import { ValidatorOptions } from 'class-validator';
|
|
8
|
-
import { OpenAPIV3 } from 'openapi-types';
|
|
9
|
-
import { ApiReferenceConfiguration } from '@scalar/express-api-reference';
|
|
10
|
-
|
|
11
|
-
type RouterEndpoint = "createOne" | "findOne" | "updateOne" | "deleteOne" | "findMany" | "createMany" | "updateMany" | "deleteMany";
|
|
12
|
-
type RouterConfig = {
|
|
13
|
-
parent?: {
|
|
14
|
-
model?: string;
|
|
15
|
-
foreignKeyField?: string;
|
|
16
|
-
endpoints?: "*" | RouterEndpoint[];
|
|
17
|
-
};
|
|
18
|
-
disable?: boolean | {
|
|
19
|
-
createOne?: boolean;
|
|
20
|
-
findOne?: boolean;
|
|
21
|
-
updateOne?: boolean;
|
|
22
|
-
deleteOne?: boolean;
|
|
23
|
-
createMany?: boolean;
|
|
24
|
-
findMany?: boolean;
|
|
25
|
-
updateMany?: boolean;
|
|
26
|
-
deleteMany?: boolean;
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
interface UserRole {
|
|
31
|
-
id: string;
|
|
32
|
-
createdAt: Date;
|
|
33
|
-
deletedAt?: Date;
|
|
34
|
-
roleId: string;
|
|
35
|
-
role: AuthRole;
|
|
36
|
-
user: User;
|
|
37
|
-
userId: string;
|
|
38
|
-
}
|
|
39
|
-
interface AuthRole {
|
|
40
|
-
id: string;
|
|
41
|
-
createdAt: Date;
|
|
42
|
-
deletedAt?: Date;
|
|
43
|
-
name: string;
|
|
44
|
-
permissions: AuthPermission[];
|
|
45
|
-
userRoles: UserRole[];
|
|
46
|
-
}
|
|
47
|
-
declare enum AuthPermissionAction {
|
|
48
|
-
Create = "Create",
|
|
49
|
-
View = "View",
|
|
50
|
-
Update = "Update",
|
|
51
|
-
Delete = "Delete"
|
|
52
|
-
}
|
|
53
|
-
interface AuthPermission {
|
|
54
|
-
id: string;
|
|
55
|
-
createdAt: Date;
|
|
56
|
-
deletedAt?: Date;
|
|
57
|
-
resource: string;
|
|
58
|
-
action: AuthPermissionAction;
|
|
59
|
-
roleId: string;
|
|
60
|
-
role: AuthRole;
|
|
61
|
-
}
|
|
62
|
-
interface User {
|
|
63
|
-
id: string;
|
|
64
|
-
isStaff: boolean;
|
|
65
|
-
isSuperUser: boolean;
|
|
66
|
-
password: string;
|
|
67
|
-
passwordChangedAt?: Date;
|
|
68
|
-
deletedSelfAccountAt: Date;
|
|
69
|
-
isActive: boolean;
|
|
70
|
-
roles?: UserRole[] | any[];
|
|
71
|
-
role?: UserRole | any;
|
|
72
|
-
}
|
|
73
|
-
interface ArkosRequest<Body = any, Query = any> extends Request {
|
|
74
|
-
user?: User & Record<string, any>;
|
|
75
|
-
relationFields?: Record<string, boolean>;
|
|
76
|
-
include?: Record<string, any>;
|
|
77
|
-
responseData?: Record<string, any> | null | undefined;
|
|
78
|
-
additionalData?: Record<string, any> | null | undefined;
|
|
79
|
-
responseStatus?: number | string | null | undefined;
|
|
80
|
-
body: Body;
|
|
81
|
-
prismaQueryOptions?: Record<string, any>;
|
|
82
|
-
}
|
|
83
|
-
interface ArkosResponse extends Response {
|
|
84
|
-
}
|
|
85
|
-
interface ArkosNextFunction extends NextFunction {
|
|
86
|
-
}
|
|
87
|
-
interface ArkosRequestHandler extends RequestHandler {
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
declare class BaseController {
|
|
91
|
-
private service;
|
|
92
|
-
private modelName;
|
|
93
|
-
private middlewares;
|
|
94
|
-
constructor(modelName: string);
|
|
95
|
-
createOne: (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => Promise<void>;
|
|
96
|
-
createMany: (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => Promise<void>;
|
|
97
|
-
findMany: (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => Promise<void>;
|
|
98
|
-
findOne: (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => Promise<void>;
|
|
99
|
-
updateOne: (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => Promise<void>;
|
|
100
|
-
updateMany: (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => Promise<void>;
|
|
101
|
-
deleteOne: (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => Promise<void>;
|
|
102
|
-
deleteMany: (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => Promise<void>;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
interface Options {
|
|
106
|
-
parseNull?: boolean;
|
|
107
|
-
parseUndefined?: boolean;
|
|
108
|
-
parseBoolean?: boolean;
|
|
109
|
-
parseNumber?: boolean;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
type MsDuration = number | `${number}` | `${number}${"ms" | "s" | "m" | "h" | "d" | "w" | "y"}`;
|
|
113
|
-
|
|
114
|
-
type ArkosConfig = {
|
|
115
|
-
request?: {
|
|
116
|
-
parameters?: {
|
|
117
|
-
allowDangerousPrismaQueryOptions?: boolean;
|
|
118
|
-
};
|
|
119
|
-
};
|
|
120
|
-
welcomeMessage?: string;
|
|
121
|
-
port?: number | undefined;
|
|
122
|
-
host?: string;
|
|
123
|
-
authentication?: {
|
|
124
|
-
mode: "static" | "dynamic";
|
|
125
|
-
login?: {
|
|
126
|
-
allowedUsernames?: string[];
|
|
127
|
-
sendAccessTokenThrough?: "cookie-only" | "response-only" | "both";
|
|
128
|
-
};
|
|
129
|
-
passwordValidation?: {
|
|
130
|
-
regex: RegExp;
|
|
131
|
-
message?: string;
|
|
132
|
-
};
|
|
133
|
-
requestRateLimitOptions?: Partial<Options$1>;
|
|
134
|
-
jwt?: {
|
|
135
|
-
secret?: string;
|
|
136
|
-
expiresIn?: MsDuration | number;
|
|
137
|
-
cookie?: {
|
|
138
|
-
secure?: boolean;
|
|
139
|
-
httpOnly?: boolean;
|
|
140
|
-
sameSite?: "lax" | "strict" | "none";
|
|
141
|
-
};
|
|
142
|
-
};
|
|
143
|
-
};
|
|
144
|
-
validation?: {
|
|
145
|
-
resolver?: "class-validator";
|
|
146
|
-
validationOptions?: ValidatorOptions;
|
|
147
|
-
} | {
|
|
148
|
-
resolver?: "zod";
|
|
149
|
-
validationOptions?: Record<string, any>;
|
|
150
|
-
};
|
|
151
|
-
fileUpload?: {
|
|
152
|
-
baseUploadDir?: string;
|
|
153
|
-
baseRoute?: string;
|
|
154
|
-
expressStaticOptions?: Parameters<typeof express.static>[1];
|
|
155
|
-
restrictions?: {
|
|
156
|
-
images?: {
|
|
157
|
-
maxCount?: number;
|
|
158
|
-
maxSize?: number;
|
|
159
|
-
supportedFilesRegex?: RegExp;
|
|
160
|
-
};
|
|
161
|
-
videos?: {
|
|
162
|
-
maxCount?: number;
|
|
163
|
-
maxSize?: number;
|
|
164
|
-
supportedFilesRegex?: RegExp;
|
|
165
|
-
};
|
|
166
|
-
documents?: {
|
|
167
|
-
maxCount?: number;
|
|
168
|
-
maxSize?: number;
|
|
169
|
-
supportedFilesRegex?: RegExp;
|
|
170
|
-
};
|
|
171
|
-
files?: {
|
|
172
|
-
maxCount?: number;
|
|
173
|
-
maxSize?: number;
|
|
174
|
-
supportedFilesRegex?: RegExp;
|
|
175
|
-
};
|
|
176
|
-
};
|
|
177
|
-
};
|
|
178
|
-
globalRequestRateLimitOptions?: Partial<Options$1>;
|
|
179
|
-
jsonBodyParserOptions?: Parameters<typeof express.json>[0];
|
|
180
|
-
cookieParserParameters?: Parameters<typeof cookieParser>;
|
|
181
|
-
compressionOptions?: compression.CompressionOptions;
|
|
182
|
-
queryParserOptions?: Options;
|
|
183
|
-
cors?: {
|
|
184
|
-
allowedOrigins?: string | string[] | "*";
|
|
185
|
-
options?: cors.CorsOptions;
|
|
186
|
-
customHandler?: cors.CorsOptionsDelegate;
|
|
187
|
-
};
|
|
188
|
-
middlewares?: {
|
|
189
|
-
additional?: express.RequestHandler[];
|
|
190
|
-
disable?: ("compression" | "global-rate-limit" | "auth-rate-limit" | "cors" | "express-json" | "cookie-parser" | "query-parser" | "database-connection" | "request-logger" | "global-error-handler")[];
|
|
191
|
-
replace?: {
|
|
192
|
-
compression?: express.RequestHandler;
|
|
193
|
-
globalRateLimit?: express.RequestHandler;
|
|
194
|
-
authRateLimit?: express.RequestHandler;
|
|
195
|
-
cors?: express.RequestHandler;
|
|
196
|
-
expressJson?: express.RequestHandler;
|
|
197
|
-
cookieParser?: express.RequestHandler;
|
|
198
|
-
queryParser?: express.RequestHandler;
|
|
199
|
-
databaseConnection?: express.RequestHandler;
|
|
200
|
-
requestLogger?: express.RequestHandler;
|
|
201
|
-
globalErrorHandler?: express.ErrorRequestHandler;
|
|
202
|
-
};
|
|
203
|
-
};
|
|
204
|
-
routers?: {
|
|
205
|
-
additional?: express.Router[];
|
|
206
|
-
disable?: ("auth-router" | "prisma-models-router" | "file-upload" | "welcome-endpoint")[];
|
|
207
|
-
replace?: {
|
|
208
|
-
authRouter?: (config: ArkosConfig) => express.Router | Promise<express.Router>;
|
|
209
|
-
prismaModelsRouter?: (config: ArkosConfig) => express.Router | Promise<express.Router>;
|
|
210
|
-
fileUpload?: (config: ArkosConfig) => express.Router | Promise<express.Router>;
|
|
211
|
-
welcomeEndpoint?: express.RequestHandler;
|
|
212
|
-
};
|
|
213
|
-
};
|
|
214
|
-
configureApp?: (app: express.Express) => Promise<any> | any;
|
|
215
|
-
configureServer?: (server: http.Server) => Promise<any> | any;
|
|
216
|
-
email?: {
|
|
217
|
-
host: string;
|
|
218
|
-
port?: number;
|
|
219
|
-
secure?: boolean;
|
|
220
|
-
auth: {
|
|
221
|
-
user: string;
|
|
222
|
-
pass: string;
|
|
223
|
-
};
|
|
224
|
-
name?: string;
|
|
225
|
-
};
|
|
226
|
-
swagger?: {
|
|
227
|
-
enableAfterBuild?: boolean;
|
|
228
|
-
endpoint?: string;
|
|
229
|
-
mode: "prisma" | "class-validator" | "zod";
|
|
230
|
-
strict: boolean;
|
|
231
|
-
options?: {
|
|
232
|
-
definition?: {
|
|
233
|
-
openapi?: string;
|
|
234
|
-
info?: {
|
|
235
|
-
title?: string;
|
|
236
|
-
version?: string;
|
|
237
|
-
description?: string;
|
|
238
|
-
};
|
|
239
|
-
servers?: {
|
|
240
|
-
url: string;
|
|
241
|
-
description?: string;
|
|
242
|
-
}[];
|
|
243
|
-
paths?: OpenAPIV3.PathsObject;
|
|
244
|
-
termsOfService?: string;
|
|
245
|
-
contact?: {
|
|
246
|
-
name?: string;
|
|
247
|
-
url?: string;
|
|
248
|
-
email?: string;
|
|
249
|
-
};
|
|
250
|
-
license?: {
|
|
251
|
-
name: string;
|
|
252
|
-
url?: string;
|
|
253
|
-
};
|
|
254
|
-
tags?: {
|
|
255
|
-
name: string;
|
|
256
|
-
description?: string;
|
|
257
|
-
}[];
|
|
258
|
-
components?: {
|
|
259
|
-
securitySchemes?: Record<string, any>;
|
|
260
|
-
schemas?: Record<string, any>;
|
|
261
|
-
};
|
|
262
|
-
security?: Array<Record<string, string[]>>;
|
|
263
|
-
};
|
|
264
|
-
apis?: string[];
|
|
265
|
-
deepLinking?: boolean;
|
|
266
|
-
tryItOutEnabled?: boolean;
|
|
267
|
-
persistAuthorization?: boolean;
|
|
268
|
-
};
|
|
269
|
-
scalarApiReferenceConfiguration?: Partial<ApiReferenceConfiguration>;
|
|
270
|
-
};
|
|
271
|
-
};
|
|
272
|
-
|
|
273
|
-
declare function initApp(arkosConfig?: ArkosConfig): Promise<Express>;
|
|
274
|
-
declare function getArkosConfig(): ArkosConfig;
|
|
275
|
-
|
|
276
|
-
declare const arkos: {
|
|
277
|
-
init: typeof initApp;
|
|
278
|
-
};
|
|
279
|
-
|
|
280
|
-
export { type ArkosConfig, type ArkosNextFunction, type ArkosRequest, type ArkosRequestHandler, type ArkosResponse, BaseController, type RouterConfig, arkos as default, getArkosConfig };
|
package/dist/esm/index.mjs
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
var jr=r=>async(e,t,s)=>{try{return await r(e,t,s)}catch(n){s(n)}},x=jr;function qr(r){return Lr(r)&&!_r(r)}function Lr(r){return!!r&&typeof r=="object"}function _r(r){let e=Object.prototype.toString.call(r);return e==="[object RegExp]"||e==="[object Date]"}function Wr(r){return Array.isArray(r)?[]:{}}function at(r){let e=Object.keys(r),t=Vr(r);return[...e,...t]}function Vr(r){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(r).filter(function(e){return Object.propertyIsEnumerable.call(r,e)}):[]}function Br(r,e){return e.clone!==!1&&e.isMergeableObject?.(r)?ne(Wr(r),r,e):r}function Jr(r,e,t){return r.concat(e).map(function(s){return t.cloneUnlessOtherwiseSpecified(s,t)})}function Qr(r,e){if(!e.customMerge)return ne;let t=e.customMerge(r);return typeof t=="function"?t:ne}function ct(r,e){try{return e in r}catch{return!1}}function Hr(r,e){return ct(r,e)&&!(Object.hasOwnProperty.call(r,e)&&Object.propertyIsEnumerable.call(r,e))}function zr(r,e,t){let s={};return t.isMergeableObject?.(r)&&at(r).forEach(function(n){s[n]=t.cloneUnlessOtherwiseSpecified?t.cloneUnlessOtherwiseSpecified(r[n],t):r[n]}),at(e).forEach(function(n){Hr(r,n)||(ct(r,n)&&t.isMergeableObject?.(e[n])?s[n]=Qr(n,t)(r[n],e[n],t):s[n]=t.cloneUnlessOtherwiseSpecified?t.cloneUnlessOtherwiseSpecified(e[n],t):e[n])}),s}function ne(r,e,t){t=t||{};let s={arrayMerge:t.arrayMerge||Jr,isMergeableObject:t.isMergeableObject||qr,cloneUnlessOtherwiseSpecified:t.cloneUnlessOtherwiseSpecified||Br,clone:t.clone,customMerge:t.customMerge},n=Array.isArray(e),i=Array.isArray(r);return n===i?n?s.arrayMerge?.(r,e,s):zr(r,e,s):s.cloneUnlessOtherwiseSpecified(e,s)}function Gr(r,e){if(!Array.isArray(r))throw new Error("first argument should be an array");return r.reduce((t,s)=>ne(t,s,e),{})}ne.all=Gr;var w=ne;var Kr={dateFields:["createdAt","updatedAt","deletedAt","date"],booleanFields:["isActive","isDeleted","isPublished","isArchived"],numericFields:["age","price","quantity","amount","rating"]};function Te(r,e=Kr){return Object.entries(JSON.parse(JSON.stringify(r))).reduce((t,[s,n])=>{let i=s.split("__");if(!n&&n!==!1&&n!=="false"&&i.length<2)return t;let o=Array.isArray(n)?n[0]?.toString():n;if(i.length<2)return t[s]=typeof n=="string"&&!Number.isNaN(n)?fe(o,i[0],e):n,t;let a=i[0];if(a==="orderBy"&&i.length===2)return t.orderBy||(t.orderBy={}),t.orderBy[i[1]]=o,t;if(i.length===1)return t[a]={equals:fe(o,a,e)},t;let c=t,l=a;for(let p=1;p<i.length-1;p++)c[l]||(c[l]={}),c=c[l],l=i[p];let d=i[i.length-1];switch(d){case"icontains":c[l]={contains:o,mode:"insensitive"};break;case"contains":c[l]={contains:o,mode:"sensitive"};break;case"in":case"notIn":c[l]={[d]:o.split(",").map(u=>fe(u.trim(),a,e))};break;case"or":let p=o.split(",");t.OR||(t.OR=[]),t.OR.push(...p.map(u=>({[a]:{equals:fe(u.trim(),a,e)}})));break;case"isNull":c[l]={equals:o.toLowerCase()==="true"?null:void 0};break;case"isEmpty":c[l]={equals:o.toLowerCase()==="true"?"":void 0};break;default:c[l]={[d]:fe(o,a,e)}}return t},{})}function fe(r,e,t){return t.dateFields?.includes?.(e)&&r?new Date(r):t.booleanFields?.includes?.(e)&&r?r.toLowerCase()==="true":t.numericFields?.includes?.(e)&&r?Number(r):r}var Ue=class extends Error{constructor(e,t,s,n){super(e),this.message=e,this.statusCode=t,this.status=`${t}`.startsWith("4")?"fail":"error",this.isOperational=!0,this.code=n,this.meta=s,this.missing=!1,Error.captureStackTrace(this,this.constructor)}},m=Ue;import ut from"fs";import{promisify as De}from"util";import ie from"fs";import Ne from"path";var lt=De(ie.stat),xe=De(ie.access),Ie=De(ie.mkdir),oe=()=>process.env.ARKOS_BUILD==="true"?process.cwd()+"/.build/":process.cwd();function Me(r){if(typeof r!="string")throw new Error("Path must be a string");let t=process.cwd().replace(/\/+$/,"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return r.replace(new RegExp(`${t}/?`,"g"),"")}var W,K=()=>{if(W)return W;try{let r=process.cwd(),e=ie.existsSync(Ne.join(r,"tsconfig.json")),t=ie.existsSync(Ne.join(r,"src","app.ts")),s=ie.existsSync(Ne.join(r,"src","app.js"));return process.env.ARKOS_BUILD==="true"?W="js":e||t&&!s?W="ts":W="js",W}catch{return W="js",W}};import dt from"fs";import Xr from"path";import{createRequire as Yr}from"module";import{pathToFileURL as pt}from"url";function Zr(){try{let r=Xr.join(process.cwd(),"package.json");if(dt.existsSync(r))return JSON.parse(dt.readFileSync(r,"utf8"))}catch(r){console.error("Error checking package.json:",r)}}function es(){return Zr()?.type==="module"}async function Q(r,e={fixExtension:!0}){if(!e.fixExtension||r.endsWith(".ts")||!es())return await import(r);let s=Yr(pt(process.cwd()+"/package.json")).resolve(r);return await import(pt(s))}var he=null;async function je(){if(!he)try{let r=`${oe()}/src/utils/prisma.${K()}`;if(ut.existsSync(r)||(r=`${oe()}/src/utils/prisma/index.${K()}`),!ut.existsSync(r))throw new Error("Could not found exported prisma insteance");let e=await Q(r,{fixExtension:!1});if(he=e.default||e.prisma,!he)throw new Error("Prisma not found")}catch(r){throw r.message==="Prisma not found"?new m(`Could not initialize Prisma module. Make sure your prisma instance is exported under src/utils/prisma.${K()} or src/utils/prisma/index.${K()}, read more about Arkos' Project Structure under https://www.arkosjs.com/docs/project-structure#root-structure`,500,{},"PrismaInstanceNotFound"):r}return he}function U(){return he}var mt=x(async(r,e,t)=>{let s=await je();try{await s.$connect(),t()}catch(n){console.error("Database connection error",n.message),t(new m(n.message,503))}});var H=class{constructor(e,t){this.filters={};this.reqFiltersSearchParam={};this.excludedFields=["page","filters","sort","limit","fields","addFields","removeFields","search","include","filterMode","where","prismaQueryOptions","ignoredFields"];if(e){let{filters:s="{}",...n}=e.query;this.req=e,this.searchParams=w(Te(n),JSON.parse(s))}t&&(this.modelName=t),this.filters={...this.filters}}setup(e,t){if(e){let{filters:s="{}",...n}=e.query;this.req=e,this.searchParams=w(Te(n),JSON.parse(s))}return t&&(this.modelName=t),this.filters={...this.filters},this}filter(){if(!this.req)throw new Error("Trying to use APIFeatures.filter() without passing request on class constructor or APIFeatures.setup() method. read more about at www.arkosjs.com/docs/advanced-guide/api-features-class");let e=[],t={...this.searchParams};this.excludedFields.forEach(a=>delete t[a]);let s={...this.req.params,...t},n=Object.keys(s).map(a=>({[a]:s[a]})),i=n.length>0?{[this.req.query?.filterMode??"OR"]:n}:{};if(this.searchParams.search){let a=U();this.modelName&&Object.keys(a[this.modelName].fields).forEach(c=>{let l=a[this.modelName].fields[c];l?.typeName==="String"&&c!=="id"&&c!=="password"&&!l.isList&&!c?.includes?.("Id")&&!c?.includes?.("ID")&&e.push({[`${c}`]:{contains:this.searchParams.search,mode:"insensitive"}})}),i=w({OR:e},i)}let o=w({where:i},this.req.prismaQueryOptions||{});return this.filters=w(o,this.filters),this}search(){this.searchParams?.search&&(this.filters=w(this.filters,{where:{OR:[]}}))}sort(){if(this.searchParams.sort){let e=this.searchParams?.sort?.split(",")?.map(t=>({[t.startsWith("-")?t.substring(1):t]:t.startsWith("-")?"desc":"asc"}));this.filters=w(this.filters,{orderBy:e})}return this}limitFields(){if(this.searchParams?.fields){let e=this.searchParams.fields.split(","),t=e.filter(o=>!o.startsWith("+")&&!o.startsWith("-")),s=e.filter(o=>o.startsWith("+")).map(o=>o.substring(1)),n=e.filter(o=>o.startsWith("-")).map(o=>o.substring(1)),i={};t.length>0?i=t.reduce((o,a)=>(o[a]=!0,o),{}):(i=this.filters.include||{},s.forEach(o=>{i[o]=!0}),n.forEach(o=>{i[o]=!1})),this.filters={...this.filters,select:i},this.filters.include&&delete this.filters.include}if(this.searchParams?.addFields||this.searchParams?.removeFields)throw new m("The addFields and removeFields parameters are deprecated. Please use fields with + and - prefixes instead.",400);return this}paginate(){let e=parseInt(this.searchParams.page,10)||1,t=parseInt(this.searchParams.limit,10)||30,s=(e-1)*t;return this.filters={...this.filters,skip:s,take:t},this}},ts=new H;var rs=/([\p{Ll}\d])(\p{Lu})/gu,ss=/(\p{Lu})([\p{Lu}][\p{Ll}])/gu,ns=/(\d)\p{Ll}|(\p{L})\d/u,is=/[^\p{L}\d]+/giu,ft="$1\0$2";function ht(r){let e=r.trim();e=e.replace(rs,ft).replace(ss,ft),e=e.replace(is,"\0");let t=0,s=e.length;for(;e.charAt(t)==="\0";)t++;if(t===s)return[];for(;e.charAt(s-1)==="\0";)s--;return e.slice(t,s).split(/\0/g)}function os(r){let e=ht(r);for(let t=0;t<e.length;t++){let s=e[t],n=ns.exec(s);if(n){let i=n.index+(n[1]??n[2]).length;e.splice(t,1,s.slice(0,i),s.slice(i))}}return e}function as(r,e){let[t,s,n]=Le(r,e);return t+s.map(qe(e?.locale)).join(e?.delimiter??" ")+n}function re(r,e){let[t,s,n]=Le(r,e),i=qe(e?.locale),o=gt(e?.locale),a=e?.mergeAmbiguousCharacters?yt(i,o):wt(i,o);return t+s.map((c,l)=>l===0?i(c):a(c,l)).join(e?.delimiter??"")+n}function P(r,e){let[t,s,n]=Le(r,e),i=qe(e?.locale),o=gt(e?.locale),a=e?.mergeAmbiguousCharacters?yt(i,o):wt(i,o);return t+s.map(a).join(e?.delimiter??"")+n}function $(r,e){return as(r,{delimiter:"-",...e})}function qe(r){return r===!1?e=>e.toLowerCase():e=>e.toLocaleLowerCase(r)}function gt(r){return r===!1?e=>e.toUpperCase():e=>e.toLocaleUpperCase(r)}function yt(r,e){return t=>`${e(t[0])}${r(t.slice(1))}`}function wt(r,e){return(t,s)=>{let n=t[0];return(s>0&&n>="0"&&n<="9"?"_"+n:e(n))+r(t.slice(1))}}function Le(r,e={}){let t=e.split??(e.separateNumbers?os:ht),s=e.prefixCharacters??"",n=e.suffixCharacters??"",i=0,o=r.length;for(;i<r.length;){let a=r.charAt(i);if(!s?.includes?.(a))break;i++}for(;o>i;){let a=o-1,c=r.charAt(a);if(!n?.includes?.(c))break;o=a}return[r.slice(0,i),t(r.slice(i,o)),r.slice(o)]}import ae from"path";import Pe from"fs";import{watch as Sn}from"chokidar";import Rn from"dotenv";var _e=class{getTimestamp(){return new Date().toTimeString().split(" ")[0]}formatText(e="",t={}){let s=t?.label?e?t?.label+" ":t?.label:"",n=`${s}${e}`;if(t.timestamp){let i=this.getTimestamp();if(t.timestamp===!0)n=`${s}\x1B[90m${i}\x1B[0m ${e}`;else if(typeof t.timestamp=="string"){let o=this.getColorCode(t.timestamp);n=`${s}${o}${i}\x1B[0m ${e}`}}return t.bold&&(n=`\x1B[1m${n}\x1B[0m`),n}getColorCode(e){return{red:"\x1B[31m",blue:"\x1B[34m",green:"\x1B[32m",yellow:"\x1B[33m",cyan:"\x1B[36m",magenta:"\x1B[35m",white:"\x1B[37m",black:"\x1B[30m",gray:"\x1B[90m",orange:"\x1B[91m"}[e]||"\x1B[90m"}red(e,t){let s=`\x1B[31m${e}\x1B[0m`;return this.formatText(s,t||{})}blue(e,t){let s=`\x1B[34m${e}\x1B[0m`;return this.formatText(s,t||{})}green(e,t){let s=`\x1B[32m${e}\x1B[0m`;return this.formatText(s,t||{})}yellow(e,t){let s=`\x1B[33m${e}\x1B[0m`;return this.formatText(s,t||{})}cyan(e,t){let s=`\x1B[36m${e}\x1B[0m`;return this.formatText(s,t||{})}magenta(e,t){let s=`\x1B[35m${e}\x1B[0m`;return this.formatText(s,t||{})}white(e,t){let s=`\x1B[37m${e}\x1B[0m`;return this.formatText(s,t||{})}black(e,t){let s=`\x1B[30m${e}\x1B[0m`;return this.formatText(s,t||{})}gray(e,t){let s=`\x1B[90m${e}\x1B[0m`;return this.formatText(s,t||{})}orange(e,t){let s=`\x1B[91m${e}\x1B[0m`;return this.formatText(s,t||{})}bold(e,t){let s=`\x1B[1m${e}\x1B[0m`;return this.formatText(s,{...t,bold:!1})}info(e,t){let n=this.formatText(e,{...t,label:"[\x1B[36mINFO\x1B[0m]"});return console.info(n),n}error(e,t){let n=this.formatText(e,{...t,label:"[\x1B[31mERROR\x1B[0m]"});return console.error(n),n}ready(e,t){let n=this.formatText(e,{...t,label:"[\x1B[32mREADY\x1B[0m]"});return console.info(n),n}done(e,t){let n=this.formatText(e,{...t,label:"[\x1B[32mDONE\x1B[0m]"});return console.info(n),n}warn(e,t){let n=this.formatText(e,{...t,label:"[\x1B[33mWARN\x1B[0m]"});return console.warn(n),n}},cs=new _e,I=cs;var bt=null;function At(){bt?.kill?.(),bt=null}var xt=null;function Mt(){xt?.kill?.(),xt=null}function X(){At(),Mt()}var Rt={};function L(r){return Rt[$(r)]}function $t(r){let e=$(r).toLowerCase(),t=r.toLowerCase()==="auth",s=K();return{core:{service:`${e}.service.${s}`,controller:`${e}.controller.${s}`,middlewares:`${e}.middlewares.${s}`,authConfigs:`${e}.auth-configs.${s}`,authConfigsNew:`${e}.auth.${s}`,prismaQueryOptions:`${e}.prisma-query-options.${s}`,prismaQueryOptionsNew:`${e}.query.${s}`,router:`${e}.router.${s}`},dtos:t?{login:`login.dto.${s}`,signup:`signup.dto.${s}`,getMe:`get-me.dto.${s}`,updateMe:`update-me.dto.${s}`,updatePassword:`update-password.dto.${s}`}:{model:`${e}.dto.${s}`,create:`create-${e}.dto.${s}`,createOne:`create-${e}.dto.${s}`,createMany:`create-many-${e}.dto.${s}`,update:`update-${e}.dto.${s}`,updateOne:`update-${e}.dto.${s}`,updateMany:`update-many-${e}.dto.${s}`,query:`query-${e}.dto.${s}`,findOne:`find-one-${e}.dto.${s}`,findMany:`find-many-${e}.dto.${s}`},schemas:t?{login:`login.schema.${s}`,signup:`signup.schema.${s}`,getMe:`get-me.schema.${s}`,updateMe:`update-me.schema.${s}`,updatePassword:`update-password.schema.${s}`}:{model:`${e}.schema.${s}`,create:`create-${e}.schema.${s}`,createOne:`create-${e}.schema.${s}`,createMany:`create-many-${e}.schema.${s}`,update:`update-${e}.schema.${s}`,updateOne:`update-${e}.schema.${s}`,updateMany:`update-many-${e}.schema.${s}`,query:`query-${e}.schema.${s}`,findOne:`find-one-${e}.schema.${s}`,findMany:`find-many-${e}.schema.${s}`}}}async function ps(r,e){let t=ae.resolve(oe(),"src","modules",$(r)),s=ae.join(t,e),n=$t(r),i={};try{await Pe.promises.access(s).catch(()=>{}),await Promise.all(Object.entries(n[e]).map(async([o,a])=>{let c=ae.join(s,a);try{let l=await Q(c).catch(d=>{d.message.includes("Cannot find module")||(I.error(`Failed to import ${a}:`),console.error(d),X(),process.exit(1))});l&&(i[o]=l.default)}catch(l){console.error(l)}}))}catch(o){console.error(o)}return i}function us(r,e,t){if(r==="prismaQueryOptions"){if(t.prismaQueryOptions)throw X(),new Error(`
|
|
2
|
-
Cannot use both ${e} and ${e.replace("prisma-query-options","query")} at once, please choose only one name convention.
|
|
3
|
-
`)}else if(r==="prismaQueryOptionsNew"){if(t.prismaQueryOptions)throw X(),new Error(`
|
|
4
|
-
Cannot use both ${e} and ${e.replace("query","prisma-query-options")} at once, please choose only one name convention.
|
|
5
|
-
`)}else if(r==="authConfigs"){if(t.authConfigs)throw X(),new Error(`
|
|
6
|
-
Cannot use both ${e} and ${e.replace("auth-configs","auth")} at once, please choose only one name convention.
|
|
7
|
-
`)}else if(r==="authConfigsNew"&&t.authConfigs)throw X(),new Error(`
|
|
8
|
-
Cannot use both ${e} and ${e.replace("auth","auth-configs")} at once, please choose only one name convention.
|
|
9
|
-
`)}function ms(r,e,t){r==="prismaQueryOptions"||r==="prismaQueryOptionsNew"?t.prismaQueryOptions=e.default||e:r==="authConfigs"||r==="authConfigsNew"?t.authConfigs=e.default||e:r==="middlewares"||r==="router"?t[r]=e:t[r]=e.default||e}async function j(r,e){let t=ae.resolve(oe(),"src","modules",$(r)),s={dtos:{},schemas:{}};if(L(r))return L(r);let n=$t(r);await Promise.all(Object.entries(n.core).map(async([a,c])=>{let l=ae.join(t,c);try{let d=await Q(l).catch(p=>{p.message.includes("Cannot find module")||(I.error(`Failed to import ${c}:`),console.error(p),X(),process.exit(1))});d&&(us(a,c,s),ms(a,d,s))}catch(d){if(d.message.includes("Cannot use both"))throw d;console.error(d),X()}}));let i=e.validation?.resolver?e.validation.resolver==="zod"?"schemas":"dtos":null,o={};return i&&(o=await ps(r,i)),Rt[r]={...s,...i&&{[i]:o}},{...s,...i&&{[i]:o}}}var We={};function vt(r,e=[]){return Pe.readdirSync(r)?.forEach(s=>{let n=ae.join(r,s),i=Pe.statSync(n);i.isDirectory()&&s!=="migrations"?e=vt(n,e):i.isFile()&&s.endsWith(".prisma")&&e.push(n)}),e}var fs=/model\s+(\w+)\s*{/g,ge=[],Pt,Ve=[];function Ot(){let r=Re();for(let e of ge){let t=P(e),s=r.indexOf(`model ${t} {`),n=r.indexOf("}",s),i=r.slice(s,n),o={singular:[],list:[]},a=i.split(`
|
|
10
|
-
`);for(let c of a){let l=c.trim();if(!l||l.startsWith("model")||l.startsWith("//")||l.startsWith("/*"))continue;let[d,p]=l.split(/\s+/),u=l?.includes?.("@unique");if(u){let y=Ve[e]||[];y.some(b=>b.name===d&&b.type===p&&b.isUnique===u)||(Ve[e]=[...y,{name:d,type:p,isUnique:u}])}let f=p?.replace("[]","").replace("?","");if(l?.includes?.("@relation")||l.match(/\s+\w+(\[\])?(\s+@|$)/)||ge?.includes?.(re(f||""))){let y=r.indexOf(`enum ${f} {`),h=r.indexOf(`type ${f} {`);if(!f||y>=0||h>=0||f==="String"||f==="Int"||f==="Float"||f==="Boolean"||f==="DateTime"||f==="Bytes"||f==="Decimal"||f==="BigInt"||f==="Json")continue;p?.includes?.("[]")?o.list.push({name:d,type:f}):o.singular.push({name:d,type:f})}We[t]=o}}}function ce(r){if(r=P(r),r in We)return We[r]}function D(){return ge}function Re(){if(Pt)return Pt;let r=[],e=vt("./prisma");for(let s of e){let n=Pe.readFileSync(s,"utf-8");r?.includes?.(n)||r.push(n)}return r.join(`
|
|
11
|
-
`).replace(fs,(s,n)=>(ge?.includes?.(n)||ge.push(re(n.trim())),`model ${n} {`))}function St(r){return Ve[r]}async function k(r,e,t){return t?.swagger?.mode==="prisma"?!1:!!(await j(e,t))?.[t.validation?.resolver==="zod"?"schemas":"dtos"]?.[re(r)]}function Be(r){if(!r||typeof r!="object")return r;let e={};for(let[t,s]of Object.entries(r))t!=="apiAction"&&(Array.isArray(s)?e[t]=s.map(n=>typeof n=="object"&&n!==null?Be(n):n):typeof s=="object"&&s!==null?e[t]=Be(s):e[t]=s);return e}function Ct(r){return!r||typeof r!="object"?!1:["create","connect","update","delete","disconnect","deleteMany","connectOrCreate","upsert","set"].some(t=>t in r)}function Y(r,e,t=[]){let s={...r};if(e?.list?.forEach(n=>{if(!r[n.name]||Ct(r[n.name])||!Array.isArray(r[n.name]))return;let i=[],o=[],a=[],c=[],l=[];r[n.name]?.forEach(d=>{if(t?.includes?.(d?.apiAction))return;let p=d?.apiAction;if(p==="delete")l.push(d.id);else if(p==="disconnect")c.push({id:d.id});else if(Et(n.type,d)){let{apiAction:u,...f}=d;o.push(f)}else if(d?.id){let{id:u,apiAction:f,...y}=d,h=ce(n.type),b=y;h&&(b=Y(y,h,t)),a.push({where:{id:u},data:b})}else{let u=ce(n.type),f={...d};if(u&&(f=Y(f,u,t)),"apiAction"in f){let{apiAction:y,...h}=f;f=h}i.push(f)}}),s[n.name]={...i.length?{create:i}:{},...o.length?{connect:o}:{},...a.length?{update:a}:{},...c.length?{disconnect:c}:{},...l.length?{deleteMany:{id:{in:l}}}:{}}}),e?.singular?.forEach(n=>{if(!r[n.name]||t?.includes?.(r[n.name]?.apiAction)||Ct(r[n.name]))return;let i=r[n.name],o=ce(n.type);if(Et(n.type,i)){let{apiAction:a,...c}=i;s[n.name]={connect:c}}else if(i?.id){let{id:a,apiAction:c,...l}=i,d=l;o&&(d=Y(l,o,t)),s[n.name]={update:{data:d}}}else{let a={...i};if("apiAction"in a){let{apiAction:c,...l}=a;a=l}o&&(a=Y(a,o,t)),s[n.name]={create:a}}}),"apiAction"in s){let{apiAction:n,...i}=s;s=i}return Be(s)}function Et(r,e){if(!e||e.apiAction&&!["connect"].includes?.(e.apiAction))return!1;if(e.apiAction==="connect"||Object.keys(e)?.length===1&&e?.id)return!0;let t=St(r);if(Object.keys(e).length===1){let s=Object.keys(e)[0];return t?.some(n=>n.name===s)}return!1}import Nr from"jsonwebtoken";import it from"bcryptjs";import Sr from"express";import js from"cors";import qs from"cookie-parser";import{Router as ys}from"express";var hs={JWT_SECRET:"13a9279eedb286f756212511267152e9585055809ec0606ea9f7eb98a87660c1616fbd39c44d4238a82f29df90b529e24bfdf72a480d1149d79c991c863a22b5ae0fb3ae6f5323bfd6664faef99792637477c38da488e7aa0d39b83ba99aba8e8a20efde7fd5c7ba21a6c938e17a9f99f73226dc61e89cd63f159257841194323f100d1a49b88ce4fdcdf2b066a5f32f88ee12f6487b55b4b5687d7c0caffdd8524e2adc4b941cf52e948f5b330f527eb1354341c876eed12dfa92cef3c341d030d05e6beb1e0a7f6d3e08e7b1aac045130457fd3a53ee469fecdd20fdd2c7a6a72b07cbcb1157c5b1cc581e6767bea32be8e125016a48951e85c7bdb961d9c9fab28444499ce063664fe0bd1a05d60294323bdd69af6d6ff1a2533dac8d4a869f76dbc746ee12f144e0af41029f620471817843140c23d036e731f3ebee21a70ff1549e97486fdf9cbef132ff2ced59fde9be35dd04b358c9a25ec4fd9cc0e36dae651e626d8c13b0c6d2a21f237517a05059680173e71817597062c792ea9c66030ca0d8ed82987e29189947692a0be5fffac4c988ca33f14ce96349661ef850dbff6909c7797676c90a5e47655346f59759482ef8a3a948e97e30f889bd4571610fd19e8ea4818651d37f6529cf32f0fc805bc053e911f0fe96f52b4420d54bd1f40739a95f5853b036c86ab9a51bed57fa9bd48607b5302e88db00900adf",JWT_EXPIRES_IN:"30d",PRISMA_SCHEMA_PATH:"./prisma/schema"},le=hs;var Ft=r=>{let e=M()?.authentication;if(r.query?.usernameField&&typeof r.query?.usernameField=="string"&&e?.login?.allowedUsernames?.includes?.(r.query.usernameField))return r.query.usernameField;if(r.query?.usernameField)throw new m("Invalid usernameField parameter, it is not allowed!",400);return e?.login?.allowedUsernames?.[0]||"username"},kt=(r,e)=>{if(!r)return{};let t=r.split("."),s={};if(t.length===1)return s[t[0]]=e,s;let n=s;for(let i=0;i<t.length-1;i++){let o=t[i];n[o]={},n=n[o]}return n[t[t.length-1]]=e,s},Tt=(r,e)=>{if(!r||!e)return;let t=e.split("."),s=t[t.length-1];if(s in r)return r[s]};function gs(r){return r.toLowerCase().replace(/years?|yr|year/g,"y").replace(/minutes?|min/g,"m").replace(/seconds?|sec|secs/g,"s").replace(/hours?|hr/g,"h").replace(/days?/g,"d").replace(/weeks?/g,"w").replace(/milliseconds?/g,"ms")}function Ut(r){if(typeof r=="number")return r*1e3;let e=gs(r.trim()),t=/^(\d+(?:\.\d+)?)(ms|s|m|h|d|w|y)$/i,s=e.match(t);if(!s)throw new Error(`Invalid time format: ${r}`);let n=parseFloat(s[1]),i=s[2].toLowerCase();return n*{ms:1,s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5,y:315576e5}[i]}var $e={password:!1},Nt=async(r={})=>{let e=Dt().user;return{getMe:x(async(t,s,n)=>{let i=await e.findOne({id:t.user.id},t.prismaQueryOptions||{});if(Object.keys($e).forEach(o=>{i&&delete i[o]}),r?.afterGetMe)return t.responseData={data:i},t.responseStatus=200,n();s.status(200).json({data:i})}),updateMe:x(async(t,s,n)=>{if("password"in t.body)throw new m("In order to update password use the update-password endpoint.",400,{},"InvalidFieldPassword");let i=await e.updateOne({id:t.user.id},t.body,t.prismaQueryOptions||{});if(Object.keys($e).forEach(o=>{i&&delete i[o]}),r?.afterUpdateMe)return t.responseData={data:i},t.responseStatus=200,n();s.status(200).json({data:i})}),logout:x(async(t,s,n)=>{if(s.cookie("arkos_access_token","no-token",{expires:new Date(Date.now()+10*1e3),httpOnly:!0}),r?.afterLogout)return t.responseData=null,t.responseStatus=204,n();s.status(204).json()}),login:x(async(t,s,n)=>{let i=M()?.authentication,o=Ft(t),a=o.split(".")[o.split(".").length-1],c=t.body[a],{password:l}=t.body;if(!c||!l)return n(new m(`Please provide both ${a} and password`,400));let d;if(o?.includes?.(".")){let y=Tt(t.body,o);if(y===void 0)return n(new m(`Invalid ${o} provided`,400));d=kt(o,y)}else d={[o]:c};let p=await e.findOne(d,t.prismaQueryOptions||{});if(!p||!await g.isCorrectPassword(l,p.password))return n(new m(`Incorrect ${a} or password`,401));let u=g.signJwtToken(p.id),f={expires:new Date(Date.now()+Number(Ut(i?.jwt?.expiresIn||process.env.JWT_EXPIRES_IN||le.JWT_EXPIRES_IN))),httpOnly:i?.jwt?.cookie?.httpOnly||process.env.JWT_COOKIE_HTTP_ONLY==="true"||!0,secure:i?.jwt?.cookie?.secure||process.env.JWT_COOKIE_SECURE==="true"||t.secure||t.headers["x-forwarded-proto"]==="https",sameSite:i?.jwt?.cookie?.sameSite||process.env.JWT_COOKIE_SAME_SITE||(process.env.NODE_ENV==="production"?"none":"lax")};if((i?.login?.sendAccessTokenThrough==="response-only"||i?.login?.sendAccessTokenThrough==="both"||!i?.login?.sendAccessTokenThrough)&&(t.responseData={accessToken:u}),(i?.login?.sendAccessTokenThrough==="cookie-only"||i?.login?.sendAccessTokenThrough==="both"||!i?.login?.sendAccessTokenThrough)&&s.cookie("arkos_access_token",u,f),r?.afterLogin)return t.additionalData={user:p},t.responseStatus=200,n();i?.login?.sendAccessTokenThrough==="response-only"||i?.login?.sendAccessTokenThrough==="both"||!i?.login?.sendAccessTokenThrough?s.status(200).json(t.responseData):(i?.login?.sendAccessTokenThrough==="cookie-only"||i?.login?.sendAccessTokenThrough==="both"||!i?.login?.sendAccessTokenThrough)&&s.status(200).send()}),signup:x(async(t,s,n)=>{let i=await e.createOne(t.body,t.prismaQueryOptions||{});if(r?.afterSignup)return t.responseData={data:i},t.responseStatus=201,n();Object.keys($e).forEach(o=>{delete i[o]}),s.status(201).json({data:i})}),deleteMe:x(async(t,s,n)=>{let i=t.user.id,o=await e.updateOne({id:i},{deletedSelfAccountAt:new Date().toISOString()},t.prismaQueryOptions||{});if(r?.afterDeleteMe)return t.responseData={data:o},t.responseStatus=200,n();Object.keys($e).forEach(a=>{delete o[a]}),s.status(200).json({message:"Account deleted successfully"})}),updatePassword:x(async(t,s,n)=>{let{currentPassword:i,newPassword:o}=t.body;if(!i||!o)return n(new m("currentPassword and newPassword are required",400));let a=t.user;if(!a||a?.isActive===!1||a?.deletedSelfAccountAt)return n(new m("User not found!",404));let c=await g.isCorrectPassword(String(i),String(a.password)),l=M(),d=l?.authentication;if(!c)return n(new m("Current password is incorrect.",400));if(!g.isPasswordStrong(String(o))&&!l?.validation)return n(new m(d?.passwordValidation?.message||"The new password must contain at least one uppercase letter, one lowercase letter, and one number",400));if(await e.updateOne({id:a.id},{password:await g.hashPassword(o),passwordChangedAt:new Date(Date.now())}),r?.afterUpdatePassword)return t.additionalData={user:a},t.responseData={status:"success",message:"Password updated successfully!"},t.responseStatus=200,n();s.status(200).json({status:"success",message:"Password updated successfully!"})})}};import ws from"express-rate-limit";var It=r=>r?x(r):void 0,A=r=>r?Array.isArray(r)?r.filter(e=>!!e).map(e=>It(e)):[It(r)]:[];var se=ys();async function jt(r){let{middlewares:e,dtos:t,schemas:s,prismaQueryOptions:n}=await j("auth",r),i=await Nt(e),o=a=>{let c=r?.validation;if(c?.resolver==="class-validator")return t?.[a];if(c?.resolver==="zod")return s?.[a]};return se.get("/users/me",g.authenticate,N(n,"getMe"),...A(e?.beforeGetMe),i.getMe,...A(e?.afterGetMe),O).patch("/users/me",g.authenticate,q(o("updateMe")),N(n,"updateMe"),...A(e?.beforeUpdateMe),i.updateMe,...A(e?.afterUpdateMe),O).delete("/users/me",g.authenticate,N(n,"deleteMe"),...A(e?.beforeDeleteMe),i.deleteMe,...A(e?.afterDeleteMe),O),se.use("/auth",ws(w({windowMs:5e3,limit:10,standardHeaders:"draft-7",legacyHeaders:!1,handler:(a,c)=>{c.status(429).json({message:"Too many requests, please try again later"})}},r?.authentication?.requestRateLimitOptions||{}))),se.post("/auth/login",q(o("login")),N(n,"login"),...A(e?.beforeLogin),i.login,...A(e?.afterLogin),O),se.delete("/auth/logout",g.authenticate,...A(e?.beforeLogout),i.logout,...A(e?.afterLogout),O),se.post("/auth/signup",q(o("signup")),N(n,"signup"),...A(e?.beforeSignup),i.signup,...A(e?.afterSignup),O),se.post("/auth/update-password",g.authenticate,q(o("updatePassword")),N(n,"updatePassword"),...A(e?.beforeUpdatePassword),i.updatePassword,...A(e?.afterUpdatePassword),O),se}import{Router as Lt}from"express";import z from"pluralize";function qt(r,e,t){return r.map(async s=>{let n=$(s),i=await j(n,t),{middlewares:o,authConfigs:a,prismaQueryOptions:c,router:l,dtos:d,schemas:p}=i,u=z.plural(n),f=new ye(s),y=l?.config||{},h=l||{},b=(S,E)=>h.stack?.some(F=>(F.path===`/api/${S}`||F.path===`api/${S}`||F.path===`api/${S}/`||F.path===`/api/${S}/`)&&F.method.toLowerCase()===E.toLowerCase()),R=S=>{let E=t?.validation;if(E?.resolver==="class-validator")return d?.[S];if(E?.resolver==="zod")return p?.[S]};l?.default&&!y?.disable&&e.use(`/${u}`,l.default),!T(y,"createOne")&&!b(`/${u}`,"post")&&e.post(`/${u}`,g.handleAuthenticationControl("Create",a?.authenticationControl),g.handleAccessControl("Create",$(z.singular(n)),a?.accessControl||{}),q(R("create")),N(c,"createOne"),...A(o?.beforeCreateOne),f.createOne,...A(o?.afterCreateOne),O),!T(y,"findMany")&&!b(`/${u}`,"get")&&e.get(`/${u}`,g.handleAuthenticationControl("View",a?.authenticationControl),g.handleAccessControl("View",$(z.singular(n)),a?.accessControl||{}),N(c,"findMany"),...A(o?.beforeFindMany),f.findMany,...A(o?.afterFindMany),O),!T(y,"createMany")&&!b(`/${u}/many`,"post")&&e.post(`/${u}/many`,g.handleAuthenticationControl("Create",a?.authenticationControl),g.handleAccessControl("Create",$(z.singular(n)),a?.accessControl||{}),q(R("createMany")),N(c,"createMany"),...A(o?.beforeCreateMany),f.createMany,...A(o?.afterCreateMany),O),!T(y,"updateMany")&&!b(`/${u}/many`,"patch")&&e.patch(`/${u}/many`,g.handleAuthenticationControl("Update",a?.authenticationControl),g.handleAccessControl("Update",$(z.singular(n)),a?.accessControl||{}),q(R("updateMany")),N(c,"updateMany"),...A(o?.beforeUpdateMany),f.updateMany,...A(o?.afterUpdateMany),O),!T(y,"deleteMany")&&!b(`/${u}/many`,"delete")&&e.delete(`/${u}/many`,g.handleAuthenticationControl("Delete",a?.authenticationControl),g.handleAccessControl("Delete",$(z.singular(n)),a?.accessControl||{}),q(R("deleteMany")),N(c,"deleteMany"),...A(o?.beforeDeleteMany),f.deleteMany,...A(o?.afterDeleteMany),O),!T(y,"findOne")&&!b(`/${u}/:id`,"get")&&e.get(`/${u}/:id`,g.handleAuthenticationControl("View",a?.authenticationControl),g.handleAccessControl("View",$(z.singular(n)),a?.accessControl||{}),q(R("findOne")),N(c,"findOne"),...A(o?.beforeFindOne),f.findOne,...A(o?.afterFindOne),O),!T(y,"updateOne")&&!b(`/${u}/:id`,"patch")&&e.patch(`/${u}/:id`,g.handleAuthenticationControl("Update",a?.authenticationControl),g.handleAccessControl("Update",$(z.singular(n)),a?.accessControl||{}),q(R("update")),N(c,"updateOne"),...A(o?.beforeUpdateOne),f.updateOne,...A(o?.afterUpdateOne),O),!T(y,"deleteOne")&&!b(`/${u}/:id`,"delete")&&e.delete(`/${u}/:id`,g.handleAuthenticationControl("Delete",a?.authenticationControl),g.handleAccessControl("Delete",$(z.singular(n)),a?.accessControl||{}),q(R("delete")),N(c,"deleteOne"),...A(o?.beforeDeleteOne),f.deleteOne,...A(o?.afterDeleteOne),O)})}function T(r,e){return r?.disable?r.disable===!0?!0:typeof r.disable=="object"?r.disable[e]===!0:!1:!1}async function _t(r){let e=Lt();return await Promise.all(qt(D(),e,r)),e}function Wt(){let r=Lt();return r.get("/available-routes",g?.authenticate,Vt),r.get("/available-resources",g?.authenticate,Bt),r}function Jt(){return new m("Invalid token. Please log in again!",401)}function Qt(){return new m("Your token has expired, Please log again!",401)}function Ht(r){let e=r?.message.split(`
|
|
12
|
-
`)[r?.message.split(`
|
|
13
|
-
`).length-1];return new m(e,400)}function zt(r){let e="Authentication failed against the database server. Please check your credentials.";return new m(e,401)}function Gt(r){let e="The database server is not reachable. Verify your connection string or ensure the server is online.";return new m(e,503)}function Kt(r){let e="Connection to the database timed out. Please check server performance or network connectivity.";return new m(e,504)}function Xt(r){let e="The specified database does not exist on the server.";return new m(e,404)}function Yt(r){let e=`The value for the field "${r?.meta?.field_name}" is too large. Please provide a smaller value.`;return new m(e,400)}function Zt(r){let e="No record found for the given query. Ensure the query parameters are correct.";return new m(e,404)}function er(r){let t=`Duplicate value detected for the unique field(s): ${r?.meta?.target||"unknown field"}. Please use a different value.`;return new m(t,409)}function tr(r){let e="Foreign key constraint violation. Ensure that the referenced record exists.";return new m(e,400)}function rr(r){let t=`A database constraint "${r?.meta?.constraint||"unknown constraint"}" failed. Please review your input data.`;return new m(t,400)}function sr(r){let e="Failed to create the database schema. Verify the schema definition and try again.";return new m(e,500)}function nr(r){let t=`The migration "${r?.meta?.migration||"unknown migration"}" has already been applied to the database.`;return new m(t,409)}function ir(r){let t=`The migration script "${r?.meta?.migration||"unknown migration"}" failed. Review the script and resolve any issues.`;return new m(t,500)}function or(r){let e="Version mismatch: The database schema and migration versions are inconsistent. Please check and resolve this issue.";return new m(e,400)}function ar(r){let e="Network error: Unable to connect to the database or internet. Please check your network connection.";return new m(e,500)}function cr(r){let e=r?.meta?.cause||"Operation could not be completed as the required record was not found";return new m(e,404,r.meta||{},"PrismaRecordNotFound")}function Je(r,e,t,s){if(console.error("[\x1B[31mERROR\x1B[0m]:",r),r.statusCode=r.statusCode||500,r.status=r.status||"error",process.env.NODE_ENV!=="production"){As(r,e,t);return}let n={...r,message:r.message};r.name==="JsonWebTokenError"&&(n=Jt()),r.name==="TokenExpiredError"&&(n=Qt()),r.name==="PrismaClientValidationError"&&(n=Ht(r)),r.code==="P1000"&&(n=zt(r)),r.code==="P1001"&&(n=Gt(r)),r.code==="P1002"&&(n=Kt(r)),r.code==="P1003"&&(n=Xt(r)),r.code==="P2000"&&(n=Yt(r)),r.code==="P2001"&&(n=Zt(r)),r.code==="P2002"&&(n=er(r)),r.code==="P2003"&&(n=tr(r)),r.code==="P2004"&&(n=rr(r)),r.code==="P2025"&&(n=cr(r)),r.code==="P3000"&&(n=sr(r)),r.code==="P3001"&&(n=nr(r)),r.code==="P3002"&&(n=ir(r)),r.code==="P3003"&&(n=or(r)),r.name==="NetworkError"&&(n=ar(r)),n.isOperational||(n=new m("Something went wrong!",500)),xs(n,e,t)}function As(r,e,t){e.originalUrl.startsWith("/api")?t.status(r.statusCode).json({...r,message:r.message.split(`
|
|
14
|
-
`)[r.message.split(`
|
|
15
|
-
`).length-1],stack:r.stack?.split(`
|
|
16
|
-
`)}):t.status(r.statusCode).json({title:"Something went wrong!",message:r.message})}function xs(r,e,t){if(e.originalUrl.startsWith("/api")){r.isOperational?t.status(r.statusCode).json({status:r.status,message:r.message,meta:r.meta||{},code:r.code||"unknown"}):t.status(500).json({status:"error",message:"Something went wrong!"});return}if(r.isOperational){t.status(r.statusCode).json({title:"Something went wrong!",message:r.message});return}t.status(r.statusCode).json({title:"Something went wrong!",message:"Please try again later."})}process.on("SIGTERM",()=>{process.env.NODE_ENV!=="production"&&process.env.NODE_ENV!=="staging"?process.exit():(console.error("SIGTERM RECEIVED in Production. Shutting down gracefully!"),de.close(()=>{console.error("Process terminated!!!"),process.exit()}))});import{rateLimit as Ls}from"express-rate-limit";import _s from"compression";import{Router as Os}from"express";import Oe from"multer";import V from"path";import B from"fs";import{promisify as te}from"util";import Qe from"fs";import pe from"path";import Ms from"sharp";import{promisify as He}from"util";import Ps from"mimetype";function lr(r,e,t){let{fileUpload:s}=M();r.url=r.url.replace(s?.baseRoute+"/"||"/api/uploads/","/"),r.url=r.url.replace(s?.baseRoute||"/api/uploads/","/"),t()}function dr(r){let{fileUpload:e}=M(),s=`${r.headers["x-forwarded-proto"]==="https"?"https":"http"}://${r.get?.("host")}`,n=e?.baseRoute||"/api/uploads";return{baseURL:s,baseRoute:n}}var ze=(r,e)=>{let{fileUpload:t}=M(),s=t?.baseUploadDir||"/uploads";return s.startsWith("..")?pe.join(e,pe.basename(r)):Me(r.replace(`${s}/`,"").replace(`/${s}/`,"").replace(`/${s}`,"").replace(`${s}`,""))},Z=async(r,e)=>{let{baseURL:t,baseRoute:s}=dr(r),n=ze(e,r.params.fileType);return`${t}${s==="/"?"":s}/${n}`},ee=async(r,e,t)=>{let{baseURL:s,baseRoute:n}=dr(r),i=pe.extname(e).toLowerCase(),o=i.replace(".",""),a=t.format||o;if(!Ps.lookup(i)?.includes?.("image")){let d=ze(e,r.params.fileType);return`${s}${n}/${d}`}let c=`${pe.basename(e,i)}_${Date.now()}${i}`,l=pe.join(pe.dirname(e),c);try{let d=Ms(e),p=await d.metadata();if(t.resizeTo&&p.width&&p.height){let y=t.resizeTo/Math.min(p.width,p.height),h=Math.round(p.width*y),b=Math.round(p.height*y);d=d.resize(h,b)}else(t.width||t.height)&&(d=d.resize(t.width||null,t.height||null,{fit:"inside"}));a==="webp"?d=d.toFormat("webp"):(a==="jpeg"||a==="jpg")&&(d=d.toFormat("jpeg")),await d.toFile(l),await He(Qe.rename)(l,e);let u=ze(e,r?.params.fileType);return`${s}${n}/${u}`}catch(d){try{await He(Qe.stat)(l),await He(Qe.unlink)(l)}catch{}throw d}};function ve(r){return r?r.split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" "):""}function Rs(r){return r.startsWith("/")?r.substring(1):r}function $s(r){return r.endsWith("/")?r.substring(0,r.length-1):r}function Ge(r){return $s(Rs(r))}var ue=class{constructor(e,t=1024*1024*5,s=/.*/,n=30){this.fileFilter=(e,t,s)=>{let n=this.allowedFileTypes.test(V.extname(t.originalname).toLowerCase());this.allowedFileTypes.test(t.mimetype)&&n?s(null,!0):s(new m("Invalid file type",400))};e=e.startsWith("/")?e.substring(1):e,e=e.endsWith("/")?e.slice(0,-1):e,this.uploadDir=V.resolve(process.cwd(),`${e}/`),this.fileSizeLimit=t,this.allowedFileTypes=s,this.maxCount=n,B.existsSync(this.uploadDir)||B.mkdirSync(this.uploadDir,{recursive:!0}),this.storage=Oe.diskStorage({destination:(i,o,a)=>{a(null,this.uploadDir)},filename:(i,o,a)=>{let c=Date.now()+"-"+Math.round(Math.random()*1e9);a(null,`${c}${V.extname(o.originalname)}`)}})}getUpload(){return Oe({storage:this.storage,fileFilter:this.fileFilter,limits:{fileSize:this.fileSizeLimit}})}handleSingleUpload(e){return(t,s,n)=>{this.getUpload().single(this.getFieldName())(t,s,async o=>{if(o instanceof Oe.MulterError)return n(o);if(o)return n(o);if(e){let{fileUpload:a}=M(),c=V.resolve(process.cwd(),Ge(a?.baseUploadDir),Ge(e));try{await te(B.stat)(c)&&await te(B.unlink)(c)}catch(l){console.error(l)}}n()})}}handleMultipleUpload(){return(e,t,s)=>{this.getUpload().array(this.getFieldName(),this.maxCount)(e,t,i=>{if(i instanceof Oe.MulterError)return s(i);if(i)return s(i);s()})}}handleDeleteSingleFile(e){return async(t,s,n)=>{let i=V.join(e);try{await te(B.stat)(i)&&await te(B.unlink)(i)}catch(o){console.error(o)}n()}}async deleteFileByUrl(e){try{let{fileUpload:t}=M(),s=t?.baseRoute||"/api/uploads",n;e.startsWith("http")?n=new URL(e).pathname:n=e;let i=n.indexOf(s);if(i===-1)throw new m("Invalid file URL: base route not found",400);let o=n.substring(i+s.length),a=o.startsWith("/")?o.substring(1):o,c=["images","videos","documents","files"],l=null,d=null;for(let b of c){let R=a.indexOf(b+"/");if(R!==-1){l=b,d=a.substring(R+b.length+1);break}}if(!l||!d)throw new m("Unable to determine file type or file name from URL",400);let{documentUploadService:p,fileUploadService:u,imageUploadService:f,videoUploadService:y}=me(),h;switch(l){case"images":h=V.join(f.uploadDir,d);break;case"videos":h=V.join(y.uploadDir,d);break;case"documents":h=V.join(p.uploadDir,d);break;case"files":h=V.join(u.uploadDir,d);break;default:throw new m(`Unsupported file type: ${l}`,400)}return await te(B.stat)(h),await te(B.unlink)(h),!0}catch(t){throw t instanceof m?t:t.code==="ENOENT"?new m("File not found",404):new m(`Failed to delete file: ${t.message}`,500)}}getFieldName(){let e="files";return(this.uploadDir.endsWith("images")||this.uploadDir.endsWith("images/"))&&(e="images"),(this.uploadDir.endsWith("videos")||this.uploadDir.endsWith("videos/"))&&(e="videos"),(this.uploadDir.endsWith("documents")||this.uploadDir.endsWith("documents/"))&&(e="documents"),(this.uploadDir.endsWith("files")||this.uploadDir.endsWith("files/"))&&(e="files"),e}async upload(e,t,s={}){let{fileUpload:n}=M(),i=n?.baseRoute||"/api/uploads";return new Promise((o,a)=>{((Array.isArray(e.query.multiple)?e.query.multiple[0]=="true":e.query.multiple=="true")?this.getUpload().array(this.getFieldName(),this.maxCount):this.getUpload().single(this.getFieldName()))(e,t,async d=>{if(d)return a(d);try{let u=`${e.get("host")?.includes?.("localhost")?"http":"https"}://${e.get("host")}`,f=this.uploadDir.split("/"),y=(this.uploadDir.endsWith("/")?f[f.length-2]:f[f.length-1])||"files",h;if(e.files&&Array.isArray(e.files)&&e.files.length>0)this.uploadDir?.includes?.("/images")?h=await Promise.all(e.files.map(R=>ee(e,R.path,s))):h=await Promise.all(e.files.map(R=>Z(e,R.path))),h=h.filter(R=>R!==null);else if(e.file)this.uploadDir?.includes?.("/images")?h=await ee(e,e.file.path,s):h=await Z(e,e.file.path);else return a(new m("No file uploaded",400));o(h)}catch(p){a(p)}})})}async deleteFileByName(e,t){try{if(!t)throw new m("File type parameter is required",400);let s=["images","videos","documents","files"];if(!s.includes(t))throw new m(`Invalid file type: ${t}. Must be one of: ${s.join(", ")}`,400);let{documentUploadService:n,fileUploadService:i,imageUploadService:o,videoUploadService:a}=me(),c;switch(t){case"images":c=o;break;case"videos":c=a;break;case"documents":c=n;break;case"files":c=i;break;default:throw new m(`Unsupported file type: ${t}`,400)}let l=V.join(c.uploadDir,e);return await te(B.stat)(l),await te(B.unlink)(l),!0}catch(s){throw s instanceof m?s:s.code==="ENOENT"?new m("File not found",404):new m(`Failed to delete file: ${s.message}`,500)}}},me=()=>{let{fileUpload:r}=M(),e=r?.baseUploadDir||"/uploads",t={images:{maxCount:30,maxSize:1024*1024*15,supportedFilesRegex:/jpeg|jpg|png|gif|webp|svg|bmp|tiff|heif|heic|ico|jfif|raw|cr2|nef|orf|sr2|arw|dng|pef|raf|rw2|psd|ai|eps|xcf|jxr|wdp|hdp|jp2|j2k|jpf|jpx|jpm|mj2|avif/},videos:{maxCount:10,maxSize:1024*1024*5096,supportedFilesRegex:/mp4|avi|mov|mkv|flv|wmv|webm|mpg|mpeg|3gp|m4v|ts|rm|rmvb|vob|ogv|dv|qt|asf|m2ts|mts|divx|f4v|swf|mxf|roq|nsv|mvb|svi|mpe|m2v|mp2|mpv|h264|h265|hevc/},documents:{maxCount:30,maxSize:1024*1024*50,supportedFilesRegex:/pdf|doc|docx|xls|xlsx|ppt|pptx|odt|ods|odg|odp|txt|rtf|csv|epub|md|tex|pages|numbers|key|xml|json|yaml|yml|ini|cfg|conf|log|html|htm|xhtml|djvu|mobi|azw|azw3|fb2|lit|ps|wpd|wps|dot|dotx|xlt|xltx|pot|potx|oft|one|onetoc2|opf|oxps|hwp/},files:{maxCount:10,maxSize:1024*1024*5096,supportedFilesRegex:/.*/}},s=r?.restrictions?w(t,r.restrictions):t,n=new ue(`${e}/images`,s.images.maxSize,s.images.supportedFilesRegex,s.images.maxCount),i=new ue(`${e}/videos`,s.videos.maxSize,s.videos.supportedFilesRegex,s.videos.maxCount),o=new ue(`${e}/documents`,s.documents.maxSize,s.documents.supportedFilesRegex,s.documents.maxCount),a=new ue(`${e}/files`,s.files.maxSize,s.files.supportedFilesRegex,s.files.maxCount);return{imageUploadService:n,videoUploadService:i,documentUploadService:o,fileUploadService:a}};import Ke from"path";import pr from"fs";var Xe=class{constructor(){this.uploadFile=x(async(e,t,s)=>{this.middlewares=L("file-upload")?.middlewares||{};let{fileType:n}=e.params,{format:i,width:o,height:a,resizeTo:c}=e.query,l={format:i,width:o,height:a,resizeTo:c},{documentUploadService:d,fileUploadService:p,imageUploadService:u,videoUploadService:f}=me(),{fileUpload:y}=M(),h=y?.baseUploadDir||"/uploads",b=Ke.resolve(process.cwd(),h,n);try{await xe(b)}catch{await Ie(b,{recursive:!0})}let R;switch(n){case"images":R=u;break;case"videos":R=f;break;case"documents":R=d;break;case"files":R=p;break;default:return s(new m("Invalid file type",400))}R.handleMultipleUpload()(e,t,async S=>{if(S)return s(S);let E;if(e.files&&Array.isArray(e.files)&&e.files.length>0)n==="images"?E=await Promise.all(e.files.map(G=>ee(e,G.path,l))):E=await Promise.all(e.files.map(G=>Z(e,G.path))),E=E.filter(G=>G!==null);else if(e.file)n==="images"?E=await ee(e,e.file.path,l):E=await Z(e,e.file.path);else return s(new m("No file uploaded",400));let F={success:!0,data:E,message:Array.isArray(E)?`${E.length} files uploaded successfully`:"File uploaded successfully"};if(this.middlewares?.afterUploadFile)return e.responseData=F,e.responseStatus=200,s();t.status(200).json(F)})});this.deleteFile=x(async(e,t,s)=>{this.middlewares=L("file-upload")?.middlewares||{};let{fileType:n,fileName:i}=e.params,{documentUploadService:o,fileUploadService:a,imageUploadService:c,videoUploadService:l}=me(),d;switch(n){case"images":d=c;break;case"videos":d=l;break;case"documents":d=o;break;case"files":d=a;break;default:return s(new m("Invalid file type",400))}try{let{fileUpload:p}=M(),u=p?.baseRoute||"/api/uploads";if(new RegExp(`${u}/${n}/${i}`).test(e.originalUrl)){let h=`${e.protocol}://${e.get("host")}${e.originalUrl}`;await d.deleteFileByUrl(h)}else await d.deleteFileByName(i,n);if(this.middlewares.afterDeleteFile)return e.responseStatus=204,s();t.status(204).json()}catch(p){return p instanceof m?s(p):s(new m("File not found",404))}});this.updateFile=x(async(e,t,s)=>{this.middlewares=L("file-upload")?.middlewares||{};let{fileType:n,fileName:i}=e.params,{format:o,width:a,height:c,resizeTo:l}=e.query,d={format:o,width:a,height:c,resizeTo:l},{documentUploadService:p,fileUploadService:u,imageUploadService:f,videoUploadService:y}=me(),{fileUpload:h}=M(),b=h?.baseUploadDir||"/uploads",R=Ke.resolve(process.cwd(),b,n);try{await xe(R)}catch{await Ie(R,{recursive:!0})}let S;switch(n){case"images":S=f;break;case"videos":S=y;break;case"documents":S=p;break;case"files":S=u;break;default:return s(new m("Invalid file type",400))}S.handleMultipleUpload()(e,t,async E=>{if(E)return s(E);if(!e.file&&(!e.files||!Array.isArray(e.files)||e.files.length===0))return s(new m("No new file uploaded",400));if(i&&i.trim()!=="")try{let J=h?.baseRoute||"/api/uploads";if(new RegExp(`${J}/${n}/${i}`).test(e.originalUrl)){let Ir=`${e.protocol}://${e.get("host")}${e.originalUrl}`;await S.deleteFileByUrl(Ir)}else await S.deleteFileByName(i,n)}catch(J){console.warn(`Could not delete old file: ${i}`,J)}let F;e.files&&Array.isArray(e.files)&&e.files.length>0?(n==="images"?F=await Promise.all(e.files.map(J=>ee(e,J.path,d))):F=await Promise.all(e.files.map(J=>Z(e,J.path))),F=F.filter(J=>J!==null)):e.file&&(n==="images"?F=await ee(e,e.file.path,d):F=await Z(e,e.file.path));let G={success:!0,data:F,message:Array.isArray(F)?i&&i.trim()!==""?`File updated successfully. ${F.length} new files uploaded`:`${F.length} files uploaded successfully`:i&&i.trim()!==""?"File updated successfully":"File uploaded successfully"};if(this.middlewares.afterUpdateFile)return e.responseData=G,e.responseStatus=200,s();t.status(200).json(G)})});this.streamFile=x(async(e,t,s)=>{let{fileName:n,fileType:i}=e.params,o=Ke.join(".","uploads",i,n);try{await xe(o)}catch{throw new m("File not found",404)}let c=(await lt(o)).size,l=e.headers.range;if(l){let[d,p]=l.replace(/bytes=/,"").split("-"),u=parseInt(d,10)||0,f=p?parseInt(p,10):c-1;if(u>=c||f>=c){t.status(416).json({error:"Range Not Satisfiable"});return}t.writeHead(206,{"Content-Range":`bytes ${u}-${f}/${c}`,"Accept-Ranges":"bytes","Content-Length":f-u+1,"Content-Type":"application/octet-stream","Content-Disposition":`inline; filename="${n}"`}),pr.createReadStream(o,{start:u,end:f}).pipe(t)}else t.writeHead(200,{"Content-Length":c,"Content-Type":"application/octet-stream","Content-Disposition":`inline; filename="${n}"`}),pr.createReadStream(o).pipe(t)})}},vs=new Xe,Se=vs;import Ss from"path";import Cs from"express";var we=Os();async function ur(r){let{fileUpload:e}=r,t=await j("file-upload",r),{middlewares:s={},authConfigs:n={}}={};t&&({middlewares:s={},authConfigs:n={}}=t);let i=e?.baseRoute||"/api/uploads/";return i.startsWith("/")||(i="/"+i),i.endsWith("/")||(i=i+"/"),we.get(`${i}*`,g.handleAuthenticationControl("View",n.authenticationControl),g.handleAccessControl("View","file-upload",n.accessControl),...A(s?.beforeFindFile),lr,Cs.static(Ss.resolve(process.cwd(),e?.baseUploadDir||"uploads"),w({maxAge:"1y",etag:!0,lastModified:!0,dotfiles:"ignore",fallthrough:!0,index:!1,cacheControl:!0},e?.expressStaticOptions||{}))),we.post(`${i}:fileType`,g.handleAuthenticationControl("Create",n.authenticationControl),g.handleAccessControl("Create","file-upload",n.accessControl),...A(s?.beforeUploadFile),Se.uploadFile,...A(s?.afterUploadFile),O),we.patch(`${i}:fileType/:fileName`,g.handleAuthenticationControl("Update",n.authenticationControl),g.handleAccessControl("Update","file-upload",n.accessControl),...A(s?.beforeUpdateFile),Se.updateFile,...A(s?.afterUpdateFile),O),we.delete(`${i}:fileType/:fileName`,g.handleAuthenticationControl("Delete",n.authenticationControl),g.handleAccessControl("Delete","file-upload",n.accessControl),...A(s?.beforeDeleteFile),Se.deleteFile,...A(s?.afterDeleteFile),O),we}var Ye=(r,e)=>{switch(typeof r){case"string":return r===""?"":e.parseNull&&r==="null"?null:e.parseUndefined&&r==="undefined"?void 0:e.parseBoolean&&(r==="true"||r==="false")?r==="true":e.parseNumber&&!isNaN(Number(r))?Number(r):r;case"object":if(Array.isArray(r))return r.map(t=>Ye(t,e));{let t=r;return Object.keys(t).map(s=>t[s]=Ye(r[s],e)),t}default:return r}},mr=r=>(e,t,s)=>{e.query=Ye(e.query,r),s()};import{Router as Ds}from"express";import*as vr from"@scalar/express-api-reference";import Is from"swagger-jsdoc";function fr(){let r={};return r["/api/available-resources"]={get:{tags:["System"],summary:"Get available resources",description:"Returns a comprehensive list of all available API resource endpoints",operationId:"getAvailableResources",responses:{200:{description:"List of available resources retrieved successfully",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{type:"string"},description:"Array of available resource endpoints"}}}}}}}}},r["/api/available-routes"]={get:{tags:["System"],summary:"Get available routes",description:"Returns a comprehensive list of all registered API routes and their methods",operationId:"getAvailableRoutes",responses:{200:{description:"List of available routes retrieved successfully",content:{"application/json":{schema:{type:"object",properties:{routes:{type:"array",items:{type:"string"},description:"Array of available API routes"}}}}}}}}},r}async function hr(r){let e={},t=async l=>{let d=r.swagger?.mode,p=r.swagger?.strict;return d&&(p||await k(l,"user",r))?d:"prisma"};if(!r.swagger?.mode)return e;let s=await t("login");e["/api/auth/login"]={post:{tags:["Authentication"],summary:"Login to the system",description:"Authenticates a user and returns an access token",operationId:"login",requestBody:{description:"User credentials",required:!0,content:{"application/json":{schema:{$ref:v("Login",s)}}}},responses:{200:{description:"Login successful",content:{"application/json":{schema:{type:"object",properties:{accessToken:{type:"string",description:"JWT access token"}}}}}},400:{description:"Invalid input data"},401:{description:"Invalid credentials"}}}},e["/api/auth/logout"]={delete:{tags:["Authentication"],summary:"Logout from the system",description:"Invalidates the current user's JWT token",operationId:"logout",security:[{BearerAuth:[]}],responses:{204:{description:"Logout successful"},401:{description:"Authentication required"}}}};let n=await t("signup"),i=await t("user");e["/api/auth/signup"]={post:{tags:["Authentication"],summary:"Register a new user",description:"Creates a new user account",operationId:"signup",requestBody:{description:"User registration data",required:!0,content:{"application/json":{schema:{$ref:v("Signup",n)}}}},responses:{201:{description:"User created successfully",content:{"application/json":{schema:{$ref:v("User",i)}}}},400:{description:"Invalid input data"},409:{description:"User already exists"}}}};let o=await t("updatePassword");e["/api/auth/update-password"]={post:{tags:["Authentication"],summary:"Update user password",description:"Changes the password for the authenticated user",operationId:"updatePassword",security:[{BearerAuth:[]}],requestBody:{description:"Current and new password",required:!0,content:{"application/json":{schema:{$ref:v("UpdatePassword",o)}}}},responses:{200:{description:"Password updated successfully",content:{"application/json":{schema:{type:"object",properties:{status:{type:"string",example:"success"},message:{type:"string",example:"Password updated successfully!"}}}}}},400:{description:"Invalid input data or current password incorrect"},401:{description:"Authentication required"}}}};let a=await t("getMe");e["/api/users/me"]={get:{tags:["Authentication"],summary:"Get current user information",description:"Retrieves information about the currently authenticated user",operationId:"getMe",security:[{BearerAuth:[]}],responses:{200:{description:"User information retrieved successfully",content:{"application/json":{schema:{$ref:v("GetMe",a)}}}},401:{description:"Authentication required"}}}};let c=await t("updateMe");return e["/api/users/me"]||(e["/api/users/me"]={}),e["/api/users/me"].patch={tags:["Authentication"],summary:"Update current user information",description:"Updates information for the currently authenticated user",operationId:"updateMe",security:[{BearerAuth:[]}],requestBody:{description:"User data to update",required:!0,content:{"application/json":{schema:{$ref:v("UpdateMe",c)}}}},responses:{200:{description:"User updated successfully",content:{"application/json":{schema:{$ref:v("User",i)}}}},400:{description:"Invalid input data"},401:{description:"Authentication required"}}},e["/api/users/me"]||(e["/api/users/me"]={}),e["/api/users/me"].delete={tags:["Authentication"],summary:"Delete current user account",description:"Marks the current user's account as deleted",operationId:"deleteMe",security:[{BearerAuth:[]}],responses:{200:{description:"Account deleted successfully",content:{"application/json":{schema:{type:"object",properties:{message:{type:"string",example:"Account deleted successfully"}}}}}},401:{description:"Authentication required"}}},e}import Es from"zod-to-json-schema";async function gr(){let r=[...D(),"auth"],e={};return r.forEach(t=>{let s=L(t);s?.schemas&&Object.entries(s.schemas).forEach(([n,i])=>{if(i)try{let o=Es(i),a=Ce(n,t,"Schema");e[a]=o}catch(o){console.warn(`Failed to generate schema for ${n} ${t}:`,o)}})}),e}import{validationMetadatasToSchemas as Fs}from"class-validator-jsonschema";import{getMetadataStorage as ks}from"class-validator";async function yr(){let r=D(),e={},{defaultMetadataStorage:t}=await Q("class-transformer/cjs/storage.js"),s=Fs({classValidatorMetadataStorage:ks(),classTransformerMetadataStorage:t,refPointerPrefix:"#/components/schemas/"});return Object.entries(s).forEach(([n,i])=>{e[n]=i}),r.forEach(n=>{let i=L(n);i?.dtos&&Object.entries(i.dtos).forEach(([o,a])=>{if(a)try{let c=Ce(o,n,"Dto");e[c]=s[a.name]||{},e[a.name]&&delete e[a.name]}catch(c){console.warn(`Failed to generate schema for ${o} ${n}:`,c)}})}),e}var Ze=class{constructor(){this.enums=[];this.models=[]}parse(){return this.enums=this.extractEnums(),this.models=this.extractModels(),{models:this.models,enums:this.enums}}extractEnums(){let e=[],s=Re().match(/enum\s+\w+\s*\{[^}]*\}/g)||[];for(let n of s){let i=this.parseEnumBlock(n);i&&e.push(i)}return e}parseEnumBlock(e){let t=e.match(/enum\s+(\w+)/);if(!t)return null;let s=t[1],n=e.split(`
|
|
17
|
-
`).map(i=>i.trim()).filter(i=>i&&!i.startsWith("enum")&&!i.startsWith("{")&&!i.startsWith("}")).map(i=>i.replace(/,$/,""));return{name:s,values:n}}extractModels(){let e=[],t=this.extractModelBlocks();for(let s of t){let n=this.parseModelBlock(s);n&&e.push(n)}return e}extractModelBlocks(){let e=/model\s+\w+\s*\{[^}]*\}/g;return Re().match(e)||[]}parseModelBlock(e){let t=e.match(/model\s+(\w+)/);if(!t)return null;let s=t[1],n=this.parseFields(e),i=e.match(/@@map\s*\(\s*"([^"]+)"\s*\)/),o=i?i[1]:void 0;return{name:s,fields:n,mapName:o}}parseFields(e){let t=[],s=e.split(`
|
|
18
|
-
`).map(n=>n.trim()).filter(n=>n&&!n.startsWith("model")&&!n.startsWith("{")&&!n.startsWith("}"));for(let n of s){if(n.startsWith("//")||n.startsWith("@@"))continue;let i=this.parseFieldLine(n);i&&t.push(i)}return t}parseFieldLine(e){let t=e.match(/^(\w+)\s+(\w+(?:\[\])?)\??\s*(.*)/);if(!t)return null;let[,s,n,i]=t,o=n.endsWith("[]"),a=o?n.slice(0,-2):n,c=e.includes("?"),l=i.split(/\s+/).filter(b=>b.startsWith("@")),d,p=i.match(/@default\(([^)]+)\)/);p&&(d=this.parseDefaultValue(p[1]));let u="",f=i.match(/@relation\([^)]*fields:\s*\[([^\]]+)\]/);f&&(u=f[1].trim().replace(/['"]/g,""));let y=l.some(b=>b.startsWith("@id")),h=l.some(b=>b.startsWith("@unique"));return{name:s,type:a,isOptional:c,isArray:o,connectionField:u,defaultValue:d,isId:y,isUnique:h,attributes:l}}parseDefaultValue(e){if(e=e.trim(),e.startsWith('"')&&e.endsWith('"'))return e.slice(1,-1);if(e==="true")return!0;if(e==="false")return!1;if(/^\d+$/.test(e))return parseInt(e,10);if(/^\d+\.\d+$/.test(e))return parseFloat(e);if(!e.includes("("))return e;if(!e.includes("("))return e}isEnum(e){return this.enums.some(t=>t.name===e)}isModel(e){return this.models.some(t=>t.name===e)}},Ts=new Ze,wr=Ts;var et=class{constructor(){this.schema=wr.parse()}async generateModelSchemas(e){let{modelName:t,arkosConfig:s,schemasToGenerate:n=["model","login","signup","getMe","updateMe","updatePassword","create","createOne","createMany","update","updateOne","updateMany","query","findOne","findMany"]}=e,i=await j(t,s),o=i?.router?.config||{},a=i?.prismaQueryOptions||{},l=["auth","me","password","signup","login"].includes(t.toLowerCase());if(s?.swagger?.strict&&s.swagger.mode!=="prisma")return{};if(o?.disable===!0)return{};let d=this.schema.models.find(u=>u.name.toLowerCase()===t.toLowerCase());if(!d&&!l)throw new Error(`Model ${t} not found in schema`);let p={};return l?await this.generateAuthSchemas(this.schema.models.find(u=>u.name.toLowerCase()==="user"),p,s,n,a):d&&await this.generateCrudSchemas(d,p,s,n,a,o),{...p}}async generateAuthSchemas(e,t,s,n,i,o){let a="Auth";if(!s?.authentication)return t;n.includes("login")&&!this.isEndpointDisabled("login",o)&&!await k("login",a,s)&&(t.LoginSchema=this.generateLoginSchema(s)),n.includes("signup")&&!this.isEndpointDisabled("signup",o)&&!await k("signup",a,s)&&(t.SignupSchema=this.generateSignupSchema(e,i?.signup)),n.includes("updateMe")&&!this.isEndpointDisabled("updateMe",o)&&!await k("updateMe",a,s)&&(t.UpdateMeSchema=this.generateUpdateMeSchema(e,i?.updateMe)),n.includes("updatePassword")&&!this.isEndpointDisabled("updatePassword",o)&&!await k("updatePassword",a,s)&&(t.UpdatePasswordSchema=this.generateUpdatePasswordSchema(e,i?.updatePassword)),n.includes("getMe")&&!this.isEndpointDisabled("getMe",o)&&!await k("getMe",a,s)&&(t.GetMeSchema=this.generateResponseSchema(e,i?.getMe||{},"findOne"))}async generateCrudSchemas(e,t,s,n,i,o){let a=e.name,c=async(l,d)=>{let p=s.validation?.resolver==="zod"?"Schema":"Dto";if(await k(l==="Create"?"createOne":"updateOne",d,s))return`${l}${d}${p}`;{let y=`${l}${d}ModelSchema`;return t[y]||(l==="Create"?t[y]=this.generateCreateSchema(e,this.resolvePrismaQueryOptions(i,"createOne")):l==="Update"&&(t[y]=this.generateUpdateSchema(e,this.resolvePrismaQueryOptions(i,"updateOne")))),y}};if(n.includes("createOne")&&!this.isEndpointDisabled("createOne",o)&&!await k("createOne",a,s)&&(t[`Create${a}ModelSchema`]=this.generateCreateSchema(e,this.resolvePrismaQueryOptions(i,"createOne"))),n.includes("createMany")&&!this.isEndpointDisabled("createMany",o)&&!await k("createMany",a,s)){let l=await c("Create",a);t[`CreateMany${a}ModelSchema`]={type:"array",items:{$ref:`#/components/schemas/${l}`}}}if(n.includes("updateOne")&&!this.isEndpointDisabled("updateOne",o)&&!await k("updateOne",a,s)&&(t[`Update${a}ModelSchema`]=this.generateUpdateSchema(e,this.resolvePrismaQueryOptions(i,"updateOne"))),n.includes("updateMany")&&!this.isEndpointDisabled("updateMany",o)&&!await k("updateMany",a,s)){let l=await c("Update",a);t[`UpdateMany${a}ModelSchema`]={type:"object",properties:{data:{type:"object",$ref:`#/components/schemas/${l}`},where:{type:"object"}},required:["data"]}}n.includes("findOne")&&!this.isEndpointDisabled("findOne",o)&&!await k("findOne",a,s)&&(t[`FindOne${a}ModelSchema`]=this.generateResponseSchema(e,this.resolvePrismaQueryOptions(i,"findOne"),"findOne")),n.includes("findMany")&&!this.isEndpointDisabled("findMany",o)&&!await k("findMany",a,s)&&(t[`FindMany${a}ModelSchema`]={type:"array",items:this.generateResponseSchema(e,this.resolvePrismaQueryOptions(i,"findMany"),"findMany")})}generateCreateSchema(e,t){let s={},n=[],i=["createdAt","updatedAt","deletedAt","id"];e.name.toLowerCase()==="auth"&&i.push("roles","role","isActive","isStaff","isSuperUser","passwordChangedAt","deletedSelfAccountAt","lastLoginAt");for(let o of e.fields){if(o.isId||i.includes(o.name))continue;if(this.isModelRelation(o.type)){o.isArray||(s[o.connectionField]={type:this.mapPrismaTypeToJsonSchema(e.fields.find(c=>c.name===o.connectionField)?.type||"String")},!o.isOptional&&o.defaultValue===void 0&&n.push(o.name));continue}let a=this.convertFieldToJsonSchema(o);s[o.name]=a,!o.isOptional&&o.defaultValue===void 0&&!o.isArray&&n.push(o.name)}return{type:"object",properties:s,required:n}}generateUpdateSchema(e,t){let s={},n=["createdAt","updatedAt","deletedAt","id"];for(let i of e.fields){if(i.isId||n.includes(i.name))continue;if(this.isModelRelation(i.type)){i.isArray||(s[i.connectionField]={type:this.mapPrismaTypeToJsonSchema(e.fields.find(a=>a.name===i.connectionField)?.type||"String")});continue}let o=this.convertFieldToJsonSchema(i);s[i.name]=o}return{type:"object",properties:s,required:[]}}generateResponseSchema(e,t,s){let n={},i=[],o=t?.select,a=t?.include;for(let c of e.fields){if(c.name.toLowerCase().includes("password")||o&&!o[c.name])continue;if(this.isModelRelation(c.type)){if(a?.[c.name]){let d=this.schema.models.find(p=>p.name===c.type);if(d){let p=this.generateNestedRelationSchema(d,a[c.name]);n[c.name]=c.isArray?{type:"array",items:p}:p}}continue}let l=this.convertFieldToJsonSchema(c);n[c.name]=l,c.isOptional||i.push(c.name)}return{type:"object",properties:n,required:i}}generateNestedRelationSchema(e,t){let s={},n=[],i=t?.select,o=t?.include;for(let a of e.fields){if(a.name.toLowerCase().includes("password")||i&&!i[a.name])continue;if(this.isModelRelation(a.type)){if(o?.[a.name]){let l=this.schema.models.find(d=>d.name===a.type);if(l){let d=this.generateNestedRelationSchema(l,o[a.name]);s[a.name]=a.isArray?{type:"array",items:d}:d}}continue}let c=this.convertFieldToJsonSchema(a);s[a.name]=c,a.isOptional||n.push(a.name)}return{type:"object",properties:s,required:n}}generateLoginSchema(e){let t=e?.authentication?.login?.allowedUsernames||[],s=i=>i.includes(".")&&i.split(".").pop()||i,n={type:"object",properties:{password:{type:"string",minLength:8}},required:["password"]};if(t.forEach(i=>{let o=s(i);n.properties[o]={type:"string",format:"string",description:`Username field: ${i}`}}),t.length>0){let i=t.map(s);return{...n,anyOf:i.map(()=>({required:[...n.required]}))}}return n}generateSignupSchema(e,t){let s=this.generateCreateSchema(e,t||{});return["roles","role","isActive","isStaff","isSuperUser","passwordChangedAt","deletedSelfAccountAt","lastLoginAt"].forEach(i=>{delete s?.properties?.[i]}),s}generateUpdateMeSchema(e,t){let s=this.generateUpdateSchema(e,t||{});return["roles","role","isActive","isStaff","isSuperUser","passwordChangedAt","deletedSelfAccountAt","password","lastLoginAt"].forEach(i=>{delete s?.properties?.[i]}),s}generateUpdatePasswordSchema(e,t){return{type:"object",properties:{currentPassword:{type:"string"},newPassword:{type:"string",minLength:8}},required:["currentPassword","newPassword"]}}resolvePrismaQueryOptions(e,t){if(!e||!t)return{};let s=e,n=s[t]||{},i=s.queryOptions||{};s.global&&(i=w(i,s.global));let o=this.getGeneralOptionsForAction(s,t);return o&&(i=w(i,o)),n&&(i=w(i,n)),i}getGeneralOptionsForAction(e,t){let s={find:["findOne","findMany"],create:["createOne","createMany"],update:["updateOne","updateMany"],delete:["deleteOne","deleteMany"],save:["createOne","createMany","updateOne","updateMany"],saveOne:["createOne","updateOne"],saveMany:["createMany","updateMany"]};for(let[n,i]of Object.entries(s))if(i.includes(t)&&e[n])return e[n];return null}isEndpointDisabled(e,t){return t?.disable?typeof t.disable=="boolean"?t.disable:t.disable[e]||!1:!1}isModelRelation(e){return this.schema.models.some(t=>t.name===e)}convertFieldToJsonSchema(e){let s={type:this.mapPrismaTypeToJsonSchema(e.type)};if(e.isArray&&(s.type="array",s.items={type:this.mapPrismaTypeToJsonSchema(e.type)}),e.defaultValue!==void 0&&(s.default=e.defaultValue),e.type==="DateTime"&&(s.format="date-time"),this.isEnum(e.type)){let n=this.schema.enums.find(i=>i.name===e.type);n&&(s.enum=n.values)}return s}mapPrismaTypeToJsonSchema(e){let t={String:"string",Int:"number",Float:"number",Boolean:"boolean",DateTime:"string",Json:"object",Bytes:"string"};return t[e]?t[e]:this.isEnum(e)?"string":this.isModelRelation(e)?"object":"string"}isEnum(e){return this.schema.enums.some(t=>t.name===e)}},Us=new et,Ee=Us;async function br(r){let e=[...D(),"auth"];try{return(await Promise.all(e.map(async n=>await Ee.generateModelSchemas({modelName:n,arkosConfig:r})))).reduce((n,i)=>({...n,...i}),{})}catch(t){throw console.error(t),t}}import tt from"pluralize";async function Ar(r,e,t){let s=$(r),n=tt.plural(s),i=P(r),o=be(s),a=tt.plural(o),l=(await j(r,t))?.router?.config;if(l?.disable===!0)return;let d=async p=>{let u=t.swagger?.mode;return t.swagger?.strict?u||"prisma":await k(p,r,t)&&u||"prisma"};if(!T(l,"createOne")){e[`/api/${n}`]||(e[`/api/${n}`]={});let p=await d("create");e[`/api/${n}`].post={tags:[a],summary:`Create a new ${o}`,description:`Creates a new ${o} record in the system`,operationId:`create${i}`,requestBody:{description:`${o} data to create`,required:!0,content:{"application/json":{schema:{$ref:v(`Create${i}`,p)}}}},responses:{201:{description:`${o} created successfully`,content:{"application/json":{schema:{$ref:v(`${i}`,p)}}}},400:{description:"Invalid input data provided"},401:{description:"Authentication required"},403:{description:"Insufficient permissions"}},security:[{BearerAuth:[]}]}}if(!T(l,"findMany")){e[`/api/${n}`]||(e[`/api/${n}`]={});let p=await d("findMany");e[`/api/${n}`].get={tags:[a],summary:`Get ${a}`,description:`Retrieves a paginated list of ${a} with optional filtering and sorting`,operationId:`find${tt.plural(i)}`,parameters:[{name:"filter",in:"query",description:"Filter criteria in JSON format",schema:{type:"string"}},{name:"sort",in:"query",description:"Sort field (prefix with '-' for descending order)",schema:{type:"string"}},{name:"page",in:"query",description:"Page number (starts from 1)",schema:{type:"integer",minimum:1}},{name:"limit",in:"query",description:"Number of items per page",schema:{type:"integer",minimum:1,maximum:100}},{name:"fields",in:"query",description:"Comma-separated list of fields to include in response",schema:{type:"string"}}],responses:{200:{description:`List of ${a} retrieved successfully`,content:{"application/json":{schema:{type:"object",properties:{total:{type:"integer",description:"Total number of records matching the criteria"},results:{type:"integer",description:"Number of records returned in current page"},data:{type:"array",items:{$ref:v(`FindMany${i}`,p)}}}}}}},401:{description:"Authentication required"},403:{description:"Insufficient permissions"}},security:[{BearerAuth:[]}]}}if(!T(l,"createMany")){let p=await d("createMany");e[`/api/${n}/many`]={post:{tags:[a],summary:`Create multiple ${a}`,description:`Creates multiple ${a} records in a single batch operation`,operationId:`createMany${i}`,requestBody:{description:`Array of ${o} data to create`,required:!0,content:{"application/json":{schema:{type:"array",items:{$ref:v(`CreateMany${i}`,p)}}}}},responses:{201:{description:`${a} created successfully`,content:{"application/json":{schema:{type:"object",properties:{count:{type:"integer",description:"Number of records created"}}}}}},400:{description:"Invalid input data provided"},401:{description:"Authentication required"},403:{description:"Insufficient permissions"}},security:[{BearerAuth:[]}]}}}if(!T(l,"updateMany")){e[`/api/${n}/many`]||(e[`/api/${n}/many`]={});let p=await d("updateMany");e[`/api/${n}/many`].patch={tags:[a],summary:`Update multiple ${a}`,description:`Updates multiple ${a} records that match the specified filter criteria`,operationId:`updateMany${i}`,parameters:[{name:"filter",in:"query",description:"Filter criteria in JSON format (required)",required:!0,schema:{type:"string"}}],requestBody:{description:`Partial ${o} data to update`,required:!0,content:{"application/json":{schema:{$ref:v(`UpdateMany${i}`,p)}}}},responses:{200:{description:`${a} updated successfully`,content:{"application/json":{schema:{type:"object",properties:{count:{type:"integer",description:"Number of records updated"}}}}}},400:{description:"Invalid input data or missing filter criteria"},401:{description:"Authentication required"},403:{description:"Insufficient permissions"}},security:[{BearerAuth:[]}]}}if(T(l,"deleteMany")||(e[`/api/${n}/many`]||(e[`/api/${n}/many`]={}),e[`/api/${n}/many`].delete={tags:[a],summary:`Delete multiple ${a}`,description:`Deletes multiple ${a} records that match the specified filter criteria`,operationId:`deleteMany${i}`,parameters:[{name:"filter",in:"query",description:"Filter criteria in JSON format (required)",required:!0,schema:{type:"string"}}],responses:{200:{description:`${a} deleted successfully`,content:{"application/json":{schema:{type:"object",properties:{count:{type:"integer",description:"Number of records deleted"}}}}}},400:{description:"Missing filter criteria"},401:{description:"Authentication required"},403:{description:"Insufficient permissions"}},security:[{BearerAuth:[]}]}),!T(l,"findOne")){let p=await d("findOne");e[`/api/${n}/{id}`]={get:{tags:[a],summary:`Get ${o} by ID`,description:`Retrieves a single ${o} record by its unique identifier`,operationId:`find${i}ById`,parameters:[{name:"id",in:"path",description:`Unique identifier of the ${o}`,required:!0,schema:{type:"string"}}],responses:{200:{description:`${o} retrieved successfully`,content:{"application/json":{schema:{$ref:v(`FindOne${i}`,p)}}}},401:{description:"Authentication required"},403:{description:"Insufficient permissions"},404:{description:`${o} not found`}},security:[{BearerAuth:[]}]}}}if(!T(l,"updateOne")){e[`/api/${n}/{id}`]||(e[`/api/${n}/{id}`]={});let p=await d("update");e[`/api/${n}/{id}`].patch={tags:[a],summary:`Update ${o} by ID`,description:`Updates a single ${o} record by its unique identifier`,operationId:`update${i}`,parameters:[{name:"id",in:"path",description:`Unique identifier of the ${o}`,required:!0,schema:{type:"string"}}],requestBody:{description:`Partial ${o} data to update`,required:!0,content:{"application/json":{schema:{$ref:v(`Update${i}`,p)}}}},responses:{200:{description:`${o} updated successfully`,content:{"application/json":{schema:{$ref:v(`${i}`,p)}}}},400:{description:"Invalid input data provided"},401:{description:"Authentication required"},403:{description:"Insufficient permissions"},404:{description:`${o} not found`}},security:[{BearerAuth:[]}]}}T(l,"deleteOne")||(e[`/api/${n}/{id}`]||(e[`/api/${n}/{id}`]={}),e[`/api/${n}/{id}`].delete={tags:[a],summary:`Delete ${o} by ID`,description:`Permanently deletes a single ${o} record by its unique identifier`,operationId:`delete${i}`,parameters:[{name:"id",in:"path",description:`Unique identifier of the ${o}`,required:!0,schema:{type:"string"}}],responses:{204:{description:`${o} deleted successfully`},401:{description:"Authentication required"},403:{description:"Insufficient permissions"},404:{description:`${o} not found`}},security:[{BearerAuth:[]}]})}import Fe from"pluralize";async function xr(r,e,t){let s=$(r),n=Fe.plural(s),i=P(r),o=be(s),a=Fe.plural(o),l=(await j(r,t))?.router?.config;if(l?.disable===!0||!l?.parent)return;let d=l.parent.model,p=Fe.plural($(d)),u=be($(d)),f=h=>{let b=l?.parent?.endpoints;return!b||b==="*"?!0:Array.isArray(b)?b.includes(h):!1},y=async h=>{let b=t.swagger?.mode;return t.swagger?.strict?b||"prisma":await k(h,r,t)&&b||"prisma"};if(f("createOne")){let h=await y("create");e[`/api/${p}/{id}/${n}`]={post:{tags:[a],summary:`Create ${o} for ${u}`,description:`Creates a new ${o} record associated with the specified ${u}`,operationId:`create${i}For${P(d)}`,parameters:[{name:"id",in:"path",description:`Unique identifier of the ${u}`,required:!0,schema:{type:"string"}}],requestBody:{description:`${o} data to create`,required:!0,content:{"application/json":{schema:{$ref:v(`Create${i}`,h)}}}},responses:{201:{description:`${o} created successfully`,content:{"application/json":{schema:{$ref:v(`${i}`,h)}}}},400:{description:"Invalid input data provided"},401:{description:"Authentication required"},403:{description:"Insufficient permissions"},404:{description:`${u} not found`}},security:[{BearerAuth:[]}]}}}if(f("findMany")){e[`/api/${p}/{id}/${n}`]||(e[`/api/${p}/{id}/${n}`]={});let h=await y("findMany");e[`/api/${p}/{id}/${n}`].get={tags:[a],summary:`Get ${a} for ${u}`,description:`Retrieves all ${a} associated with the specified ${u}`,operationId:`get${Fe.plural(i)}For${P(d)}`,parameters:[{name:"id",in:"path",description:`Unique identifier of the ${u}`,required:!0,schema:{type:"string"}},{name:"filter",in:"query",description:"Additional filter criteria in JSON format",schema:{type:"string"}},{name:"sort",in:"query",description:"Sort field (prefix with '-' for descending order)",schema:{type:"string"}},{name:"page",in:"query",description:"Page number (starts from 1)",schema:{type:"integer",minimum:1}},{name:"limit",in:"query",description:"Number of items per page",schema:{type:"integer",minimum:1,maximum:100}},{name:"fields",in:"query",description:"Comma-separated list of fields to include in response",schema:{type:"string"}}],responses:{200:{description:`List of ${a} retrieved successfully`,content:{"application/json":{schema:{type:"object",properties:{total:{type:"integer",description:"Total number of records matching the criteria"},results:{type:"integer",description:"Number of records returned in current page"},data:{type:"array",items:{$ref:v(`FindMany${i}`,h)}}}}}}},401:{description:"Authentication required"},403:{description:"Insufficient permissions"},404:{description:`${u} not found`}},security:[{BearerAuth:[]}]}}if(f("createMany")){let h=await y("createMany");e[`/api/${p}/{id}/${n}/many`]={post:{tags:[a],summary:`Create multiple ${a} for ${u}`,description:`Creates multiple ${a} records associated with the specified ${u}`,operationId:`createMany${i}For${P(d)}`,parameters:[{name:"id",in:"path",description:`Unique identifier of the ${u}`,required:!0,schema:{type:"string"}}],requestBody:{description:`Array of ${o} data to create`,required:!0,content:{"application/json":{schema:{type:"array",items:{$ref:v(`CreateMany${i}`,h)}}}}},responses:{201:{description:`${a} created successfully`,content:{"application/json":{schema:{type:"object",properties:{count:{type:"integer",description:"Number of records created"}}}}}},400:{description:"Invalid input data provided"},401:{description:"Authentication required"},403:{description:"Insufficient permissions"},404:{description:`${u} not found`}},security:[{BearerAuth:[]}]}}}if(f("updateMany")){e[`/api/${p}/{id}/${n}/many`]||(e[`/api/${p}/{id}/${n}/many`]={});let h=await y("updateMany");e[`/api/${p}/{id}/${n}/many`].patch={tags:[a],summary:`Update multiple ${a} for ${u}`,description:`Updates multiple ${a} records associated with the specified ${u}`,operationId:`updateMany${i}For${P(d)}`,parameters:[{name:"id",in:"path",description:`Unique identifier of the ${u}`,required:!0,schema:{type:"string"}},{name:"filter",in:"query",description:"Additional filter criteria in JSON format",schema:{type:"string"}}],requestBody:{description:`Partial ${o} data to update`,required:!0,content:{"application/json":{schema:{$ref:v(`UpdateMany${i}`,h)}}}},responses:{200:{description:`${a} updated successfully`,content:{"application/json":{schema:{type:"object",properties:{count:{type:"integer",description:"Number of records updated"}}}}}},400:{description:"Invalid input data provided"},401:{description:"Authentication required"},403:{description:"Insufficient permissions"},404:{description:`${u} not found`}},security:[{BearerAuth:[]}]}}if(f("deleteMany")&&(e[`/api/${p}/{id}/${n}/many`]||(e[`/api/${p}/{id}/${n}/many`]={}),e[`/api/${p}/{id}/${n}/many`].delete={tags:[a],summary:`Delete multiple ${a} for ${u}`,description:`Deletes multiple ${a} records associated with the specified ${u}`,operationId:`deleteMany${i}For${P(d)}`,parameters:[{name:"id",in:"path",description:`Unique identifier of the ${u}`,required:!0,schema:{type:"string"}},{name:"filter",in:"query",description:"Additional filter criteria in JSON format",schema:{type:"string"}}],responses:{200:{description:`${a} deleted successfully`,content:{"application/json":{schema:{type:"object",properties:{count:{type:"integer",description:"Number of records deleted"}}}}}},400:{description:"Missing filter criteria"},401:{description:"Authentication required"},403:{description:"Insufficient permissions"},404:{description:`${u} not found`}},security:[{BearerAuth:[]}]}),f("findOne")){let h=await y("findOne");e[`/api/${p}/{id}/${n}/{childId}`]={get:{tags:[a],summary:`Get ${o} by ID for ${u}`,description:`Retrieves a single ${o} record by its unique identifier associated with the specified ${u}`,operationId:`get${i}ByIdFor${P(d)}`,parameters:[{name:"id",in:"path",description:`Unique identifier of the ${u}`,required:!0,schema:{type:"string"}},{name:"childId",in:"path",description:`Unique identifier of the ${o}`,required:!0,schema:{type:"string"}}],responses:{200:{description:`${o} retrieved successfully`,content:{"application/json":{schema:{$ref:v(`FindOne${i}`,h)}}}},401:{description:"Authentication required"},403:{description:"Insufficient permissions"},404:{description:`${o} or ${u} not found`}},security:[{BearerAuth:[]}]}}}if(f("updateOne")){e[`/api/${p}/{id}/${n}/{childId}`]||(e[`/api/${p}/{id}/${n}/{childId}`]={});let h=await y("update");e[`/api/${p}/{id}/${n}/{childId}`].patch={tags:[a],summary:`Update ${o} by ID for ${u}`,description:`Updates a single ${o} record by its unique identifier associated with the specified ${u}`,operationId:`update${i}ByIdFor${P(d)}`,parameters:[{name:"id",in:"path",description:`Unique identifier of the ${u}`,required:!0,schema:{type:"string"}},{name:"childId",in:"path",description:`Unique identifier of the ${o}`,required:!0,schema:{type:"string"}}],requestBody:{description:`Partial ${o} data to update`,required:!0,content:{"application/json":{schema:{$ref:v(`Update${i}`,h)}}}},responses:{200:{description:`${o} updated successfully`,content:{"application/json":{schema:{$ref:v(`${i}`,h)}}}},400:{description:"Invalid input data provided"},401:{description:"Authentication required"},403:{description:"Insufficient permissions"},404:{description:`${o} or ${u} not found`}},security:[{BearerAuth:[]}]}}f("deleteOne")&&(e[`/api/${p}/{id}/${n}/{childId}`]||(e[`/api/${p}/{id}/${n}/{childId}`]={}),e[`/api/${p}/{id}/${n}/{childId}`].delete={tags:[a],summary:`Delete ${o} by ID for ${u}`,description:`Permanently deletes a single ${o} record by its unique identifier associated with the specified ${u}`,operationId:`delete${i}ByIdFor${P(d)}`,parameters:[{name:"id",in:"path",description:`Unique identifier of the ${u}`,required:!0,schema:{type:"string"}},{name:"childId",in:"path",description:`Unique identifier of the ${o}`,required:!0,schema:{type:"string"}}],responses:{204:{description:`${o} deleted successfully`},401:{description:"Authentication required"},403:{description:"Insufficient permissions"},404:{description:`${o} or ${u} not found`}},security:[{BearerAuth:[]}]})}async function Mr(r){switch(r?.swagger.mode){case"prisma":return await br(r);case"class-validator":return await yr();case"zod":return await gr();default:throw Error("Unknown mode for auto documentation, supported values are prisma, class-validator, zod or json-schemas")}}function Ce(r,e,t){let s=P(e);return`${{model:s,create:`Create${s}`,createMany:`CreateMany${s}`,findOne:`FindOne${s}`,findMany:`FindMany${s}`,update:`Update${s}`,updateMany:`UpdateMany${s}`,query:`Query${s}`,login:"Login",signup:"Signup",updateMe:"UpdateMe",updatePassword:"UpdatePassword"}[r]??P(r)}${t}`}function be(r){return r.split("-").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function v(r,e){let t=r.toLowerCase();if(["getme","updateme","login","signup","updatepassword","password","me"].some(i=>i===t)&&e==="prisma")return`#/components/schemas/${r}Schema`;switch(e){case"prisma":return`#/components/schemas/${r}ModelSchema`;case"zod":return`#/components/schemas/${r}Schema`;case"class-validator":return`#/components/schemas/${r}Dto`;default:return I.error(`Unknown Arkos.js swagger documentation provided, available options are prisma, zod or class-validator but received ${e}`),""}}async function Pr(r){if(!r?.swagger)return{};let t={},s=D();for(let n of s)await Ar(n,t,r),await xr(n,t,r);return t={...t,...fr()},t={...t,...await hr(r)||{}},t}var rt=class{extractModelNameFromSchemaRef(e){let t=e.match(/#\/components\/schemas\/(?:Create|Update|UpdateMany|FindOne|FindMany|CreateMany)?(.+?)(?:ModelSchema|Schema)$/);if(t){let s=t[1];return s==="Auth"||s==="Login"||s==="Signup"||s==="GetMe"||s==="UpdateMe"||s==="UpdatePassword"?"Auth":s}return null}extractActionFromOperationId(e){return e.includes("createMany")?"createMany":e.includes("updateMany")?"updateMany":e.includes("deleteMany")?"deleteMany":e.startsWith("create")?"createOne":e.startsWith("update")?"updateOne":e.startsWith("delete")?"deleteOne":e.startsWith("find")&&(e.includes("ById")||e.includes("One"))?"findOne":e.startsWith("find")?"findMany":e.includes("login")||e==="login"?"login":e.includes("signup")||e==="signup"?"signup":e.includes("getMe")||e==="getMe"?"getMe":e.includes("updateMe")||e==="updateMe"?"updateMe":e.includes("updatePassword")||e==="updatePassword"?"updatePassword":null}extractModelNameFromOperationId(e){let t=e.replace(/^(create|update|delete|find)Many/i,"").replace(/^(create|update|delete|find)/i,"").replace(/ById$/i,"").replace(/s$/,"");return e.includes("login")||e.includes("signup")||e.includes("getMe")||e.includes("updateMe")||e.includes("updatePassword")?"Auth":t||null}extractSchemaRefsWithContext(e,t=new Map,s={}){return typeof e!="object"||e===null?t:Array.isArray(e)?(e.forEach(n=>this.extractSchemaRefsWithContext(n,t,s)),t):(e.operationId&&typeof e.operationId=="string"&&(s={...s,operationId:e.operationId}),e.$ref&&typeof e.$ref=="string"&&t.set(e.$ref,{...s}),Object.values(e).forEach(n=>{this.extractSchemaRefsWithContext(n,t,s)}),t)}extractPathSchemaRefs(e){let t=new Map;return Object.entries(e).forEach(([s,n])=>{n&&Object.entries(n).forEach(([i,o])=>{if(!o||typeof o!="object")return;let a={method:i,path:s,operationId:o.operationId};this.extractSchemaRefsWithContext(o,t,a)})}),t}getSchemaNameFromRef(e){let t=e.match(/#\/components\/schemas\/(.+)$/);return t?t[1]:null}async generateMissingJsonSchemas(e,t,s){let n={},i=this.extractPathSchemaRefs(e),o=new Map;for(let[a,c]of i){let l=this.getSchemaNameFromRef(a);if(!l||t[l]||!l.includes("ModelSchema")&&!l.includes("Schema"))continue;let d=null,p=null;c.operationId&&(d=this.extractModelNameFromOperationId(c.operationId),p=this.extractActionFromOperationId(c.operationId)),(!d||!p)&&(d=d||this.extractModelNameFromSchemaRef(a),p=p||this.extractActionFromSchemaRef(a)),d&&p&&(o.has(d)||o.set(d,new Set),o.get(d).add(p))}for(let[a,c]of o)try{let l=Array.from(c),d=await Ee.generateModelSchemas({modelName:a,arkosConfig:s,schemasToGenerate:l});Object.entries(d).forEach(([p,u])=>{let f=p;["auth","login","me","password","me"].includes(a.toLowerCase())?p==="LoginSchema"?f="LoginSchema":p==="SignupSchema"?f="SignupSchema":p==="GetMeSchema"?f="GetMeSchema":p==="UpdateMeSchema"?f="UpdateMeSchema":p==="UpdatePasswordSchema"&&(f="UpdatePasswordSchema"):p.includes("ModelSchema")?f=p:f=`${p}ModelSchema`,n[f]=u})}catch(l){console.warn(`Failed to generate schemas for model ${a}:`,l)}return n}extractActionFromSchemaRef(e){return e.includes("CreateMany")?"createMany":e.includes("Create")?"createOne":e.includes("UpdateMany")?"updateMany":e.includes("Update")&&!e.includes("UpdateMe")&&!e.includes("UpdatePassword")?"updateOne":e.includes("FindMany")?"findMany":e.includes("FindOne")?"findOne":e.includes("Login")?"login":e.includes("Signup")?"signup":e.includes("GetMe")?"getMe":e.includes("UpdateMe")?"updateMe":e.includes("UpdatePassword")?"updatePassword":null}analyzeMissingSchemas(e,t){let s=this.extractPathSchemaRefs(e),n=[],i=[],o=[],a=[];for(let[c,l]of s){let d={ref:c,context:l};n.push(d);let p=this.getSchemaNameFromRef(c);if(p)if(t[p])o.push(d);else{i.push(d);let u=null,f=null;l.operationId&&(u=this.extractModelNameFromOperationId(l.operationId),f=this.extractActionFromOperationId(l.operationId)),(!u||!f)&&(u=u||this.extractModelNameFromSchemaRef(c),f=f||this.extractActionFromSchemaRef(c)),u&&f&&a.push({model:u,action:f,ref:c,operationId:l.operationId})}}return{allRefs:n,missingRefs:i,existingRefs:o,modelActions:a}}},Ns=new rt,Rr=Ns;var $r=Ds();async function Or(r){let e=await Mr(r),t=await Pr(r);e={...e,...await Rr.generateMissingJsonSchemas(t,e,r)};let s={endpoint:"/docs",mode:"prisma",strict:!1,options:{definition:{openapi:"3.0.0",info:{title:"Powered By Arkos.js",version:"1.0.0",description:"This API was automatically generated by Arkos.js, read more about at www.arkosjs.com"},servers:[{url:`http://${r.host}:${r.port}`,description:`Local ${ve(process.env.NODE_ENV||"development")} Server`}],paths:t,components:{schemas:e||{},securitySchemes:{BearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}},security:[]},apis:["./src/routers/*.router.{ts,js}","./src/modules/**/*.router.{ts,js}"],deepLinking:!0,tryItOutEnabled:!0,persistAuthorization:!1},scalarApiReferenceConfiguration:{theme:"deepSpace",darkMode:!0,layout:"modern",showSidebar:!0,hideDownloadButton:!1,metaData:{title:"Arkos.js API Documentation",description:"API documentation generated by Arkos.js"},pageTitle:"Arkos.js API Documentation"}},n=w(s||{},r.swagger||{}),{definition:i,...o}=n?.options,a=Is({definition:i,...o});return $r.use(n.endpoint,vr.apiReference({content:a,...n?.scalarApiReferenceConfiguration})),$r}var C=Sr();async function Cr(r){await je(),r?.configureApp&&await r.configureApp(C);let e=r?.middlewares,t=e?.disable||[],s=e?.replace||{};t?.includes?.("compression")||C.use(s.compression||_s(r?.compressionOptions)),t?.includes?.("global-rate-limit")||C.use(s.globalRateLimit||Ls(w({windowMs:60*1e3,limit:500,standardHeaders:"draft-7",legacyHeaders:!1,handler:(a,c)=>{c.status(429).json({message:"Too many requests, please try again later"})}},r?.globalRequestRateLimitOptions||{}))),t?.includes?.("cors")||C.use(s.cors||js(r?.cors?.customHandler?r.cors.customHandler:w({origin:(a,c)=>{let l=r?.cors?.allowedOrigins;l==="*"?c(null,!0):Array.isArray(l)?c(null,!a||l?.includes?.(a)):typeof l=="string"?c(null,!a||l===a):c(null,!1)},methods:["GET","POST","PUT","DELETE","PATCH","OPTIONS"],allowedHeaders:["Content-Type","Authorization","Connection"],credentials:!0},r?.cors?.options||{}))),t?.includes?.("express-json")||C.use(s.expressJson||Sr.json(r?.jsonBodyParserOptions)),t?.includes?.("cookie-parser")||C.use(s.cookieParser||qs(...r?.cookieParserParameters||[])),t?.includes?.("query-parser")||C.use(s.queryParser||mr(w({parseNull:!0,parseUndefined:!0,parseBoolean:!0},r?.queryParserOptions||{}))),t?.includes?.("database-connection")||C.use(s.databaseConnection||mt),t?.includes?.("request-logger")||C.use(s.requestLogger||Er),r?.middlewares?.additional&&r.middlewares.additional.forEach(a=>{C.use(a)});let n=r?.routers,i=n?.disable||[],o=n?.replace||{};if(i?.includes?.("welcome-endpoint")||C.get("/api",o.welcomeEndpoint||((a,c)=>{c.status(200).json({message:r.welcomeMessage})})),!i?.includes?.("file-upload")){let a=o.fileUpload?await o.fileUpload(r):await ur(r);C.use(a)}if(!i?.includes?.("auth-router")&&r.authentication){let a=o.authRouter?await o.authRouter(r):await jt(r);C.use("/api",a)}if(!i?.includes?.("prisma-models-router")){let a=o.prismaModelsRouter?await o.prismaModelsRouter(r):await _t(r);C.use("/api",a)}return C.use("/api",Wt()),r.swagger&&(process.env.ARKOS_BUILD!=="true"||r.swagger.enableAfterBuild===!0)&&C.use("/api",await Or(r)),n?.additional&&n.additional.forEach(a=>{C.use(a)}),t?.includes?.("global-error-handler")||C.use(s.globalErrorHandler||Je),C.use("*",(a,c)=>{c.status(404).json({message:"Route not found!"})}),C}import Ws from"http";process.on("uncaughtException",r=>{I.error(`
|
|
19
|
-
UNCAUGHT EXCEPTION! SHUTTING DOWN...
|
|
20
|
-
`,{timestamp:!0,bold:!0}),console.error(r.name,r.message),console.error(r),process.exit(1)});var de,ke,_={welcomeMessage:"Welcome to our RESTful API generated by Arkos, find out more about Arkos at www.arkosjs.com",port:Number(process.env.CLI_PORT)||Number(process.env.PORT)||8e3,host:process.env.CLI_HOST||process.env.HOST||"localhost",fileUpload:{baseUploadDir:"uploads",baseRoute:"/api/uploads"},available:!1};async function Fr(r={}){Ot(),_.available=!0,_=w(_,r);let e=process.env.CLI_PORT||_.port||process.env.PORT||"port"in _?_.port:8e3;ke=await Cr(_);let t=new Date().toTimeString().split(" ")[0];return e?(de=Ws.createServer(ke),_?.configureServer&&await _.configureServer(de),de.listen(Number(e),_.host,()=>{I.ready(`${I.gray(t)} ${ve(process.env.NODE_ENV||"development")} server waiting on http://${_.host||"localhost"}:${e}`)})):I.warn(`${I.gray(t)} port set to undefined, hence no internal http server was setup.`),ke}process.on("unhandledRejection",r=>{I.error(`
|
|
21
|
-
UNHANDLED REJECTION! SHUTTING DOWN...
|
|
22
|
-
`,{timestamp:!0,bold:!0}),console.error(r.name,r.message),console.error(r),de?.close(()=>{process.exit(1)})});function M(){return _}function kr(){return ke}import{plainToInstance as Vs}from"class-transformer";import{validate as Bs}from"class-validator";async function st(r,e,t){let s=Vs(r,e),n=await Bs(s,t);if(n.length>0)throw new m("Invalid request body",400,n,"invalid_request_body");return s}async function nt(r,e){let t=r.safeParse(e);if(!t.success)throw new m("Invalid request body",400,t.error.format(),"invalid_request_body");return t.data}function Tr(r,e){if(!r)return{};let t=r,s=t[e]||{},n=t.queryOptions||{};t.global&&(n=w(n,t.global));let i=Js(t,e);return i&&(n=w(n,i)),s&&(n=w(n,s)),n}function Js(r,e){let s={findMany:["find"],findOne:["find"],create:["create","save"],createOne:["create","save","saveOne"],createMany:["create","save","saveMany"],update:["update","save"],updateOne:["update","save","saveOne"],updateMany:["update","save","saveMany"],delete:["delete"],deleteOne:["delete"],deleteMany:["delete"]}[e]||[],n={};for(let i of s)r[i]&&(n=w(n,r[i]));return Object.keys(n).length>0?n:null}function Ur(r,e,t){t()}function O(r,e){Number(r?.responseStatus)===204?e.status(Number(r?.responseStatus)).send():r.responseData&&r?.responseStatus?e.status(Number(r?.responseStatus)).json(r.responseData):Number(r?.responseStatus)&&!r.responseData?e.status(Number(r?.responseStatus)).send():e.status(500).json({message:"No status or data attached to the response"})}function N(r,e){return(t,s,n)=>{let i=M(),o=Tr(r,e),a=i?.request?.parameters?.allowDangerousPrismaQueryOptions?JSON.parse(t.query?.prismaQueryOptions||"{}"):{};t.prismaQueryOptions=w(o,a),n()}}function Er(r,e,t){let s=Date.now(),n={GET:"\x1B[36m",POST:"\x1B[32m",PUT:"\x1B[33m",PATCH:"\x1B[33m",DELETE:"\x1B[31m",HEAD:"\x1B[34m",OPTIONS:"\x1B[34m"},i=o=>o>=200&&o<300?"\x1B[32m":o>=300&&o<400||o>=400&&o<500?"\x1B[33m":o>=500?"\x1B[31m":"\x1B[0m";e.on("finish",()=>{let o=Date.now()-s,c=new Date().toTimeString().split(" ")[0],l=n[r.method]||"\x1B[0m",d=i(e.statusCode);console.info(`[\x1B[36mINFO\x1B[0m] \x1B[90m${c}\x1B[0m ${l}${r.method}\x1B[0m ${decodeURIComponent(r.originalUrl)} ${d}${e.statusCode}\x1B[0m \x1B[35m${o}ms\x1B[0m`)}),t()}function q(r,e){return x(async(t,s,n)=>{let i=M()?.validation,o=t.body;i?.resolver==="class-validator"&&r?t.body=await st(r,o,w({whitelist:!0,...e},i?.validationOptions||{})):i?.resolver==="zod"&&r&&(t.body=await nt(r,o)),n()})}var ot=class{constructor(){this.authenticate=x(async(e,t,s)=>{if(!M()?.authentication){s();return}e.user=await this.getAuthenticatedUser(e),s()})}signJwtToken(e,t,s){let{authentication:n}=M();if(process.env.NODE_ENV==="production"&&!process.env.JWT_SECRET&&!n?.jwt?.secret)throw new m("Missing JWT secret on production!",500,{},"MissingJWTOnProduction");return s=s||n?.jwt?.secret||process.env.JWT_SECRET||le.JWT_SECRET,t=t||n?.jwt?.expiresIn||process.env.JWT_EXPIRES_IN||le.JWT_EXPIRES_IN,Nr.sign({id:e},s,{expiresIn:t})}isPasswordHashed(e){return!Number.isNaN(it.getRounds(e)*1)}async isCorrectPassword(e,t){return await it.compare(e,t)}async hashPassword(e){return await it.hash(e,12)}isPasswordStrong(e){return(M()?.authentication?.passwordValidation?.regex||/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).+$/).test(e)}userChangedPasswordAfter(e,t){if(e.passwordChangedAt){let s=parseInt(String(e.passwordChangedAt.getTime()/1e3),10);return t<s}return!1}async verifyJwtToken(e,t){let{authentication:s}=M();if(process.env.NODE_ENV==="production"&&!process.env.JWT_SECRET&&!s?.jwt?.secret)throw new m("Missing JWT secret!",500);return t=t||s?.jwt?.secret||process.env.JWT_SECRET||le.JWT_SECRET,new Promise((n,i)=>{Nr.verify(e,t,(o,a)=>{o?i(o):n(a)})})}handleAccessControl(e,t,s){return x(async(n,i,o)=>{if(n.user){let a=n.user,c=U(),l=M();if(a.isSuperUser){o();return}if(l?.authentication?.mode==="dynamic"){if(!await c.userRole.findFirst({where:{userId:n.user.id,role:{permissions:{some:{resource:t,action:e}}}},select:{id:!0}}))return o(new m("You do not have permission to perfom this action",403))}else if(l?.authentication?.mode==="static"){let d=[];if(!s)return o(new m("You do not have permission to perform this action",403));if(Array.isArray(s)?d=s:s[e]&&(d=s[e]||[]),!(Array.isArray(a?.roles)?a.roles:[a.role]).some(f=>d.includes(f)))return o(new m("You do not have permission to perform this action",403))}}o()})}async getAuthenticatedUser(e){if(!M()?.authentication)return null;let s=U(),n;if(e?.headers?.authorization&&e?.headers?.authorization.startsWith("Bearer")?n=e?.headers?.authorization.split(" ")[1]:e?.cookies?.arkos_access_token!=="no-token"&&e.cookies&&(n=e?.cookies?.arkos_access_token),!n)throw new m("You are not logged in! please log in to get access",401,{},"LoginRequired");let i;try{i=await this.verifyJwtToken(n)}catch{throw new m("Your auth token is invalid, please login again.",401,{},"InvalidAuthToken")}if(!i?.id)throw new m("Your auth token is invalid, please login again.",401,{},"InvalidAuthToken");let o=await s.user.findUnique({where:{id:String(i.id)}});if(!o)throw new m("The user belonging to this token does no longer exists",401);if(this.userChangedPasswordAfter(o,i.iat)&&!e.path?.includes?.("logout"))throw new m("User recently changed password! Please log in again.",401,{},"PasswordChanged");return o}handleAuthenticationControl(e,t){if(t&&typeof t=="object"){if(t[e]===!1)return Ur;if(t[e]===!0)return this.authenticate}else return this.authenticate;return this.authenticate}},Qs=new ot,g=Qs;var Ae=class{constructor(e){this.modelName=re(e),this.relationFields=ce(P(e))}async createOne(e,t){$(this.modelName)==="user"&&e.password&&(g.isPasswordHashed(e.password)||(e.password=await g.hashPassword(e.password)));let s=U(),n=Y(e,{...this.relationFields},["delete","disconnect","update"]);return await s[this.modelName].create(w({data:n},t||{}))}async createMany(e,t){let s=U(),n=[];return Array.isArray(e)&&await new Promise(i=>{e.forEach(async(o,a)=>{"password"in o&&this.modelName==="user"&&(g.isPasswordHashed(o.password)||(e[a].password=await g.hashPassword(o?.password))),n[a]=Y(e[a],{...this.relationFields},["delete","disconnect","update"]),a===e.length-1&&i(null)})}),await s[this.modelName].createMany(w({data:n},t||{}))}async count(e){return await U()[this.modelName].count({where:e})}async findMany(e,t){return await U()[this.modelName].findMany(w({where:e},t||{}))}async findById(e,t){return await U()[this.modelName].findUnique(w({where:{id:e}},t||{}))}async findOne(e,t){let s=U();return Object.keys(e).length===1&&"id"in e&&e.id!=="me"?s[this.modelName].findUnique(w({where:e},t||{})):await s[this.modelName].findFirst(w({where:e},t||{}))}async updateOne(e,t,s){let n=U();$(this.modelName)==="user"&&t?.password&&(g.isPasswordHashed(t.password)||(t.password=await g.hashPassword(t?.password)));let i=Y(t,{...this.relationFields});return await n[this.modelName].update(w({where:e,data:i},s||{}))}async updateMany(e,t,s){let n=U();Array.isArray(t)&&this.modelName==="user"&&await new Promise(o=>{t.forEach(async(a,c)=>{"password"in t[c]&&(g.isPasswordHashed(a.password)||(t[c].password=await g.hashPassword(a.password))),c===t.length-1&&o(void 0)})});let i=w({data:t},s||{});return await n[this.modelName].updateMany(w({where:e},i))}async deleteOne(e){return await U()[this.modelName].delete({where:e})}async deleteMany(e){return await U()[this.modelName].deleteMany({where:e})}};function Dt(){let r=D(),e={};return r.forEach(t=>{e[`${re(t)}`]=new Ae(t)}),e}var Dr=()=>{let r=kr(),e=[];return r._router.stack.forEach(t=>{if(t.route)Object.keys(t.route.methods).forEach(s=>{e.push({method:s.toUpperCase(),path:t.route.path})});else if(t.handle&&t.handle.stack){let s="";if(t.regexp){let n=t.regexp.toString();if(n.includes?.("/?(?=")){let i=n.match(/\/\^(\\\/[^?]+)/);i&&(s=i[1].replace(/\\\//g,"/"))}else{let i=n.match(/\/\^(\\\/[^\\]+)/);i&&(s=i[1].replace(/\\\//g,"/"))}}t.handle.stack.forEach(n=>{n.route&&Object.keys(n.route.methods).forEach(i=>{let o=n.route.path,a;if(o.includes?.("/?(?=")){let c=o.match(/\/\^?(\\\/[^?]+|\/[^?]+)/);if(c){let l=c[1].replace(/\\\//g,"/");a=s?s+l:l}else{let l=o.match(/\?\(\?=([^)]+)/);l?a=l[1]:a=o}}else a=s?s.replace(/\/$/,"")+(o.startsWith("/")?o:"/"+o):o;a=a.replace(/\\\//g,"/").replace(/\^/g,"").replace(/\$/g,""),a.includes?.("/?(?=")&&(a=a.replace(/\/\?\(\?=[^)]*\)/g,"")),e.push({method:i.toUpperCase(),path:a})})})}}),e};import Hs from"pluralize";var ye=class{constructor(e){this.createOne=x(async(e,t,s)=>{let n=await this.service.createOne(e.body,e.prismaQueryOptions);if(this.middlewares.afterCreateOne)return e.responseData={data:n},e.responseStatus=201,s();t.status(201).json({data:n})});this.createMany=x(async(e,t,s)=>{let n=await this.service.createMany(e.body,e.prismaQueryOptions);if(!n)return s(new m("Failed to create the resources. Please check your input.",400,{},"MissingRequestBody"));if(this.middlewares.afterCreateMany)return e.responseData={data:n},e.responseStatus=201,s();t.status(201).json({data:n})});this.findMany=x(async(e,t,s)=>{let{filters:{where:n,...i}}=new H(e,this.modelName).filter().sort().limitFields().paginate(),[o,a]=await Promise.all([this.service.findMany(n,i),this.service.count(n)]);if(this.middlewares.afterFindMany)return e.responseData={total:a,results:o.length,data:o},e.responseStatus=200,s();t.status(200).json({total:a,results:o.length,data:o})});this.findOne=x(async(e,t,s)=>{let n=await this.service.findOne(e.params,e.prismaQueryOptions);if(!n)return Object.keys(e.params).length===1&&"id"in e.params&&e.params.id!=="me"?s(new m(`${P(String(this.modelName))} with ID ${e.params?.id} not found`,404,{},"NotFound")):s(new m(`${P(String(this.modelName))} not found`,404,{},"NotFound"));if(this.middlewares.afterFindOne)return e.responseData={data:n},e.responseStatus=200,s();t.status(200).json({data:n})});this.updateOne=x(async(e,t,s)=>{let n=await this.service.updateOne(e.params,e.body,e.prismaQueryOptions);if(!n)return Object.keys(e.params).length===1&&"id"in e.params?s(new m(`${P(String(this.modelName))} with ID ${e.params?.id} not found`,404,{},"NotFound")):s(new m(`${P(String(this.modelName))} not found`,404,{},"NotFound"));if(this.middlewares.afterUpdateOne)return e.responseData={data:n},e.responseStatus=200,s();t.status(200).json({data:n})});this.updateMany=x(async(e,t,s)=>{if(!Object.keys(e.query).some(a=>a!=="prismaQueryOptions"))return s(new m("Filter criteria not provided for bulk update.",400,{},"MissingRequestQueryParameters"));e.query.filterMode=e.query?.filterMode||"AND";let{filters:{where:n,...i}}=new H(e,this.modelName).filter().sort();delete i.include;let o=await this.service.updateMany(n,e.body,i);if(!o||o.count===0)return s(new m(`${Hs(P(String(this.modelName)))} not found`,404));if(this.middlewares.afterUpdateMany)return e.responseData={results:o.count,data:o},e.responseStatus=200,s();t.status(200).json({results:o.count,data:o})});this.deleteOne=x(async(e,t,s)=>{let n=await this.service.deleteOne(e.params);if(!n)return Object.keys(e.params).length===1&&"id"in e.params?s(new m(`${P(String(this.modelName))} with ID ${e.params?.id} not found`,404,{},"NotFound")):s(new m(`${P(String(this.modelName))} not found`,404,{},"NotFound"));if(this.middlewares.afterDeleteOne)return e.additionalData={data:n},e.responseStatus=204,s();t.status(204).send()});this.deleteMany=x(async(e,t,s)=>{if(!Object.keys(e.query).some(o=>o!=="prismaQueryOptions"))return s(new m("Filter criteria not provided for bulk deletion.",400,{},"MissingRequestQueryParameters"));e.query.filterMode=e.query?.filterMode||"AND";let{filters:{where:n}}=new H(e,this.modelName).filter().sort(),i=await this.service.deleteMany(n);if(!i||i.count===0)return s(new m("No records found to delete",404,{},"NotFound"));if(this.middlewares.afterDeleteMany)return e.responseData={results:i.count,data:i},e.responseStatus=200,s();t.status(200).json({results:i.count,data:i})});this.modelName=e,this.service=new Ae(e),this.middlewares=L(e)?.middlewares||{}}};function Vt(r,e,t){let s=Dr();e.json(s)}var Bt=x(async(r,e,t)=>{let s=D();e.status(200).json({data:[...s.map(n=>$(n)),"file-upload"]})});var zs={init:Fr};var dl=zs;export{ye as BaseController,dl as default,M as getArkosConfig};
|
package/dist/exports/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getArkosConfig=exports.BaseController=void 0;const base_controller_1=require("./../modules/base/base.controller");Object.defineProperty(exports,"BaseController",{enumerable:!0,get:function(){return base_controller_1.BaseController}});const server_1=require("../server");Object.defineProperty(exports,"getArkosConfig",{enumerable:!0,get:function(){return server_1.getArkosConfig}});const arkos={init:server_1.initApp};exports.default=arkos;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
package/dist/types/auth.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
package/dist/types/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.AuthPermissionAction=void 0;var AuthPermissionAction;(function(e){e.Create="Create",e.View="View",e.Update="Update",e.Delete="Delete"})(AuthPermissionAction||(exports.AuthPermissionAction=AuthPermissionAction={}));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
package/dist/utils/arkos-env.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const arkosEnv={JWT_SECRET:"13a9279eedb286f756212511267152e9585055809ec0606ea9f7eb98a87660c1616fbd39c44d4238a82f29df90b529e24bfdf72a480d1149d79c991c863a22b5ae0fb3ae6f5323bfd6664faef99792637477c38da488e7aa0d39b83ba99aba8e8a20efde7fd5c7ba21a6c938e17a9f99f73226dc61e89cd63f159257841194323f100d1a49b88ce4fdcdf2b066a5f32f88ee12f6487b55b4b5687d7c0caffdd8524e2adc4b941cf52e948f5b330f527eb1354341c876eed12dfa92cef3c341d030d05e6beb1e0a7f6d3e08e7b1aac045130457fd3a53ee469fecdd20fdd2c7a6a72b07cbcb1157c5b1cc581e6767bea32be8e125016a48951e85c7bdb961d9c9fab28444499ce063664fe0bd1a05d60294323bdd69af6d6ff1a2533dac8d4a869f76dbc746ee12f144e0af41029f620471817843140c23d036e731f3ebee21a70ff1549e97486fdf9cbef132ff2ced59fde9be35dd04b358c9a25ec4fd9cc0e36dae651e626d8c13b0c6d2a21f237517a05059680173e71817597062c792ea9c66030ca0d8ed82987e29189947692a0be5fffac4c988ca33f14ce96349661ef850dbff6909c7797676c90a5e47655346f59759482ef8a3a948e97e30f889bd4571610fd19e8ea4818651d37f6529cf32f0fc805bc053e911f0fe96f52b4420d54bd1f40739a95f5853b036c86ab9a51bed57fa9bd48607b5302e88db00900adf",JWT_EXPIRES_IN:"30d",PRISMA_SCHEMA_PATH:"./prisma/schema"};exports.default=arkosEnv;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.loadEnvironmentVariables=loadEnvironmentVariables;const path_1=__importDefault(require("path")),fs_1=__importDefault(require("fs")),dotenv_1=__importDefault(require("dotenv"));function loadEnvironmentVariables(){const e=process.env.NODE_ENV,n=process.cwd();let o=[];[path_1.default.resolve(n,".env.defaults"),path_1.default.resolve(n,`.env.${e}`),path_1.default.resolve(n,`.env.${e}.local`),path_1.default.resolve(n,".env.local"),path_1.default.resolve(n,".env")].forEach(r=>{if(fs_1.default.existsSync(r))if(e==="production"&&r.endsWith(".local"))console.info(`Skipping the local ${r.replace(n,"")} files in production`);else{const t=dotenv_1.default.config({path:r,override:!0});t.error?console.warn(`Warning: Error loading ${r}`,t.error):o.push(r)}});const s=["DATABASE_URL"].filter(r=>!process.env[r]);if(s.length>0&&console.error("Missing required environment variables:",s.join(", ")),o)return o}
|
package/dist/utils/sheu.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});class Sheu{getTimestamp(){return new Date().toTimeString().split(" ")[0]}formatText(t="",e={}){const r=e?.label?t?e?.label+" ":e?.label:"";let o=`${r}${t}`;if(e.timestamp){const m=this.getTimestamp();if(e.timestamp===!0)o=`${r}\x1B[90m${m}\x1B[0m ${t}`;else if(typeof e.timestamp=="string"){const x=this.getColorCode(e.timestamp);o=`${r}${x}${m}\x1B[0m ${t}`}}return e.bold&&(o=`\x1B[1m${o}\x1B[0m`),o}getColorCode(t){return{red:"\x1B[31m",blue:"\x1B[34m",green:"\x1B[32m",yellow:"\x1B[33m",cyan:"\x1B[36m",magenta:"\x1B[35m",white:"\x1B[37m",black:"\x1B[30m",gray:"\x1B[90m",orange:"\x1B[91m"}[t]||"\x1B[90m"}red(t,e){const r=`\x1B[31m${t}\x1B[0m`;return this.formatText(r,e||{})}blue(t,e){const r=`\x1B[34m${t}\x1B[0m`;return this.formatText(r,e||{})}green(t,e){const r=`\x1B[32m${t}\x1B[0m`;return this.formatText(r,e||{})}yellow(t,e){const r=`\x1B[33m${t}\x1B[0m`;return this.formatText(r,e||{})}cyan(t,e){const r=`\x1B[36m${t}\x1B[0m`;return this.formatText(r,e||{})}magenta(t,e){const r=`\x1B[35m${t}\x1B[0m`;return this.formatText(r,e||{})}white(t,e){const r=`\x1B[37m${t}\x1B[0m`;return this.formatText(r,e||{})}black(t,e){const r=`\x1B[30m${t}\x1B[0m`;return this.formatText(r,e||{})}gray(t,e){const r=`\x1B[90m${t}\x1B[0m`;return this.formatText(r,e||{})}orange(t,e){const r=`\x1B[91m${t}\x1B[0m`;return this.formatText(r,e||{})}bold(t,e){const r=`\x1B[1m${t}\x1B[0m`;return this.formatText(r,{...e,bold:!1})}info(t,e){const o=this.formatText(t,{...e,label:"[\x1B[36mINFO\x1B[0m]"});return console.info(o),o}error(t,e){const o=this.formatText(t,{...e,label:"[\x1B[31mERROR\x1B[0m]"});return console.error(o),o}ready(t,e){const o=this.formatText(t,{...e,label:"[\x1B[32mREADY\x1B[0m]"});return console.info(o),o}done(t,e){const o=this.formatText(t,{...e,label:"[\x1B[32mDONE\x1B[0m]"});return console.info(o),o}warn(t,e){const o=this.formatText(t,{...e,label:"[\x1B[33mWARN\x1B[0m]"});return console.warn(o),o}}const sheu=new Sheu;exports.default=sheu;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=validateDto;const class_transformer_1=require("class-transformer"),class_validator_1=require("class-validator"),app_error_1=__importDefault(require("../modules/error-handler/utils/app-error"));async function validateDto(e,a,s){const r=(0,class_transformer_1.plainToInstance)(e,a),t=await(0,class_validator_1.validate)(r,s);if(t.length>0)throw new app_error_1.default("Invalid request body",400,t,"invalid_request_body");return r}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=validateSchema;const app_error_1=__importDefault(require("../modules/error-handler/utils/app-error"));async function validateSchema(e,t){const r=e.safeParse(t);if(!r.success)throw new app_error_1.default("Invalid request body",400,r.error.format(),"invalid_request_body");return r.data}
|