arkos 1.4.9-beta → 1.4.10-beta
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 +14 -14
- package/dist/cjs/components/arkos-policy/index.js +38 -0
- package/dist/cjs/components/arkos-policy/index.js.map +1 -0
- package/dist/cjs/{types/arkos-prisma-input.bak.js → components/arkos-policy/types.js} +1 -1
- package/dist/cjs/components/arkos-policy/types.js.map +1 -0
- package/dist/cjs/exports/auth/index.js +1 -1
- package/dist/cjs/exports/config.js +6 -0
- package/dist/cjs/exports/config.js.map +1 -0
- package/dist/cjs/exports/controllers/index.js +2 -2
- package/dist/cjs/exports/error-handler/index.js +2 -2
- package/dist/cjs/exports/index.js +4 -4
- package/dist/cjs/exports/middlewares/index.js +1 -1
- package/dist/cjs/exports/prisma/index.js +1 -1
- package/dist/cjs/exports/services/index.js +5 -5
- package/dist/cjs/exports/utils/index.js +2 -2
- package/dist/cjs/exports/validation/index.js +2 -2
- package/dist/cjs/modules/auth/auth.controller.js +7 -7
- package/dist/cjs/modules/auth/auth.router.js +10 -10
- package/dist/cjs/modules/auth/auth.service.js +12 -12
- package/dist/cjs/modules/auth/utils/auth-error-objects.js +1 -1
- package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +2 -2
- package/dist/cjs/modules/auth/utils/services/auth-action.service.js +3 -3
- package/dist/cjs/modules/base/base.controller.js +9 -9
- package/dist/cjs/modules/base/base.middlewares.js +9 -9
- package/dist/cjs/modules/base/base.router.js +4 -4
- package/dist/cjs/modules/base/base.service.js +8 -8
- package/dist/cjs/modules/base/utils/error-prettifier.js +1 -1
- package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +1 -1
- package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +1 -1
- package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +9 -9
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +2 -2
- package/dist/cjs/modules/debugger/debugger.service.js +4 -4
- package/dist/cjs/modules/debugger/utils/loaded-components-logger.js +2 -2
- package/dist/cjs/modules/email/email.service.js +2 -2
- package/dist/cjs/modules/error-handler/error-handler.controller.js +2 -2
- package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +1 -1
- package/dist/cjs/modules/file-upload/file-upload.controller.js +9 -9
- package/dist/cjs/modules/file-upload/file-upload.controller.js.map +1 -1
- package/dist/cjs/modules/file-upload/file-upload.router.js +22 -22
- package/dist/cjs/modules/file-upload/file-upload.router.js.map +1 -1
- package/dist/cjs/modules/file-upload/file-upload.service.js +6 -6
- package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +3 -3
- package/dist/cjs/modules/swagger/swagger.router.js +8 -8
- package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js +276 -0
- package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js.map +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +3 -3
- package/dist/cjs/modules/swagger/utils/helpers/get-file-upload-json-schema-paths.js +4 -4
- package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +4 -4
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +2 -2
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +3 -3
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +5 -5
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +3 -3
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +2 -2
- package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js +3 -3
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +12 -12
- package/dist/cjs/server.js +5 -5
- package/dist/cjs/types/arkos-config/utils.js +3 -0
- package/dist/cjs/types/arkos-config/utils.js.map +1 -0
- package/dist/cjs/types/arkos.js +3 -0
- package/dist/cjs/types/arkos.js.map +1 -0
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js +1 -1
- package/dist/cjs/utils/arkos-router/index.js +9 -9
- package/dist/cjs/utils/arkos-router/index.js.map +1 -1
- package/dist/cjs/utils/arkos-router/route-config-validator.js +2 -2
- package/dist/cjs/utils/arkos-router/types/index.js.map +1 -1
- package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +152 -0
- package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +1 -0
- package/dist/cjs/utils/arkos-router/utils/helpers/index.js +6 -6
- package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js +8 -8
- package/dist/cjs/utils/bundler.js +163 -0
- package/dist/cjs/utils/bundler.js.map +1 -0
- package/dist/cjs/utils/cli/build.js +21 -33
- package/dist/cjs/utils/cli/build.js.map +1 -1
- package/dist/cjs/utils/cli/dev.js +6 -5
- package/dist/cjs/utils/cli/dev.js.map +1 -1
- package/dist/cjs/utils/cli/export-auth-action.js +4 -3
- package/dist/cjs/utils/cli/export-auth-action.js.map +1 -1
- package/dist/cjs/utils/cli/generate.js +8 -8
- package/dist/cjs/utils/cli/index.js +7 -7
- package/dist/cjs/utils/cli/prisma-generate.js +3 -3
- package/dist/cjs/utils/cli/remove-dir-cli.js +1 -1
- package/dist/cjs/utils/cli/start.js +5 -5
- package/dist/cjs/utils/cli/start.js.map +1 -1
- package/dist/cjs/utils/cli/utils/cli.helpers.js +3 -3
- package/dist/cjs/utils/cli/utils/runtime-cli-commander.js +5 -5
- package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js +2 -2
- package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator/create-dto-template.js +2 -2
- package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator/update-dto-template.js +2 -2
- package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js +2 -2
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-multiple-components.js +3 -3
- package/dist/cjs/utils/cli/utils/template-generator/templates/hooks-template.js +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js +53 -0
- package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js.map +1 -0
- package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/zod/create-schema-template.js +2 -2
- package/dist/cjs/utils/cli/utils/template-generator/templates/zod/update-schema-template.js +2 -2
- package/dist/cjs/utils/cli/utils/template-generator/templates/zod-schema-generator.js +2 -2
- package/dist/cjs/utils/cli/utils/template-generators.js +11 -11
- package/dist/cjs/utils/cli/utils/watermark-stamper.js +3 -3
- package/dist/cjs/utils/dotenv.helpers.js +2 -2
- package/dist/cjs/utils/dynamic-loader.js +8 -8
- package/dist/cjs/utils/features/api.features.js +5 -5
- package/dist/cjs/utils/features/change-case.features.js +1 -1
- package/dist/cjs/utils/features/port-and-host-allocator.js +1 -1
- package/dist/cjs/utils/helpers/api.features.helpers.js +2 -2
- package/dist/cjs/utils/helpers/arkos-config.helpers.js +3 -3
- package/dist/cjs/utils/helpers/exit-error.js +12 -0
- package/dist/cjs/utils/helpers/exit-error.js.map +1 -0
- package/dist/cjs/utils/helpers/fs.helpers.js +1 -1
- package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/prisma.helpers.js +6 -6
- package/dist/cjs/utils/helpers/query-parser.helpers.js +1 -1
- package/dist/cjs/utils/helpers/routers.helpers.js +4 -4
- package/dist/cjs/utils/helpers/routers.helpers.js.map +1 -1
- package/dist/cjs/utils/initialize-app.js +56 -0
- package/dist/cjs/utils/initialize-app.js.map +1 -0
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +4 -4
- package/dist/cjs/utils/prisma/prisma-schema-parser.js +2 -2
- package/dist/cjs/utils/setup-app.js +119 -0
- package/dist/cjs/utils/setup-app.js.map +1 -0
- package/dist/esm/components/arkos-policy/index.js +32 -0
- package/dist/esm/components/arkos-policy/index.js.map +1 -0
- package/dist/esm/components/arkos-policy/types.js +2 -0
- package/dist/esm/components/arkos-policy/types.js.map +1 -0
- package/dist/esm/exports/config.js +3 -0
- package/dist/esm/exports/config.js.map +1 -0
- package/dist/esm/modules/file-upload/file-upload.controller.js +2 -2
- package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
- package/dist/esm/modules/file-upload/file-upload.router.js +12 -12
- package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -1
- package/dist/esm/modules/swagger/utils/get-open-api-login-html.js +273 -0
- package/dist/esm/modules/swagger/utils/get-open-api-login-html.js.map +1 -0
- package/dist/esm/types/arkos-config/utils.js +2 -0
- package/dist/esm/types/arkos-config/utils.js.map +1 -0
- package/dist/esm/types/arkos.js +2 -0
- package/dist/esm/types/arkos.js.map +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/arkos-router/index.js.map +1 -1
- package/dist/esm/utils/arkos-router/types/index.js.map +1 -1
- package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +146 -0
- package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +1 -0
- package/dist/esm/utils/bundler.js +156 -0
- package/dist/esm/utils/bundler.js.map +1 -0
- package/dist/esm/utils/cli/build.js +15 -27
- package/dist/esm/utils/cli/build.js.map +1 -1
- package/dist/esm/utils/cli/dev.js +1 -0
- package/dist/esm/utils/cli/dev.js.map +1 -1
- package/dist/esm/utils/cli/export-auth-action.js +1 -0
- package/dist/esm/utils/cli/export-auth-action.js.map +1 -1
- package/dist/esm/utils/cli/start.js +1 -1
- package/dist/esm/utils/cli/start.js.map +1 -1
- package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/policy-template.js +47 -0
- package/dist/esm/utils/cli/utils/template-generator/templates/policy-template.js.map +1 -0
- package/dist/esm/utils/helpers/exit-error.js +6 -0
- package/dist/esm/utils/helpers/exit-error.js.map +1 -0
- package/dist/esm/utils/helpers/fs.helpers.js +1 -1
- package/dist/esm/utils/helpers/fs.helpers.js.map +1 -1
- package/dist/esm/utils/helpers/routers.helpers.js.map +1 -1
- package/dist/esm/utils/initialize-app.js +50 -0
- package/dist/esm/utils/initialize-app.js.map +1 -0
- package/dist/esm/utils/setup-app.js +113 -0
- package/dist/esm/utils/setup-app.js.map +1 -0
- package/dist/types/components/arkos-policy/index.d.ts +31 -0
- package/dist/types/components/arkos-policy/types.d.ts +21 -0
- package/dist/types/exports/config.d.ts +2 -0
- package/dist/types/modules/file-upload/file-upload.router.d.ts +1 -2
- package/dist/types/modules/swagger/utils/get-open-api-login-html.d.ts +1 -0
- package/dist/types/types/arkos-config/utils.d.ts +35 -0
- package/dist/types/types/arkos.d.ts +31 -0
- package/dist/types/types/index.d.ts +3 -5
- package/dist/types/utils/arkos-router/types/index.d.ts +20 -11
- package/dist/types/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.d.ts +7 -0
- package/dist/types/utils/bundler.d.ts +152 -0
- package/dist/types/utils/cli/utils/template-generator/templates/policy-template.d.ts +2 -0
- package/dist/types/utils/helpers/exit-error.d.ts +1 -0
- package/dist/types/utils/helpers/routers.helpers.d.ts +3 -3
- package/dist/types/utils/initialize-app.d.ts +2 -0
- package/dist/types/utils/setup-app.d.ts +2 -0
- package/package.json +1 -1
- package/dist/cjs/types/arkos-prisma-input.bak.js.map +0 -1
- package/dist/cjs/utils/cli/utils/static-types-generator.js +0 -558
- package/dist/cjs/utils/cli/utils/static-types-generator.js.map +0 -1
- package/dist/esm/types/arkos-prisma-input.bak.js +0 -2
- package/dist/esm/types/arkos-prisma-input.bak.js.map +0 -1
- package/dist/esm/utils/cli/utils/static-types-generator.js +0 -553
- package/dist/esm/utils/cli/utils/static-types-generator.js.map +0 -1
- package/dist/types/types/arkos-prisma-input.bak.d.ts +0 -237
- package/dist/types/utils/cli/utils/static-types-generator.d.ts +0 -36
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = getOpenApiLoginHtml;
|
|
4
|
+
const server_1 = require("../../../server.js");
|
|
5
|
+
function formatFieldLabel(field) {
|
|
6
|
+
const last = field.split(".").pop();
|
|
7
|
+
return last
|
|
8
|
+
.replace(/([A-Z])/g, " $1")
|
|
9
|
+
.replace(/^./, (c) => c.toUpperCase())
|
|
10
|
+
.trim();
|
|
11
|
+
}
|
|
12
|
+
function getOpenApiLoginHtml() {
|
|
13
|
+
const arkosConfig = (0, server_1.getArkosConfig)();
|
|
14
|
+
const theme = arkosConfig?.swagger?.scalarApiReferenceConfiguration?.theme || "default";
|
|
15
|
+
const allowedUsernames = arkosConfig?.authentication?.login?.allowedUsernames
|
|
16
|
+
?.length
|
|
17
|
+
? arkosConfig.authentication.login.allowedUsernames
|
|
18
|
+
: ["username"];
|
|
19
|
+
const themeColors = {
|
|
20
|
+
default: { bg: "#0f0f0f", surface: "#1a1a1a", border: "#2e2e2e" },
|
|
21
|
+
moon: { bg: "#0f1117", surface: "#1c1e26", border: "#2e3040" },
|
|
22
|
+
purple: { bg: "#0d0d14", surface: "#1a1a2e", border: "#2e2e4a" },
|
|
23
|
+
solarized: { bg: "#002b36", surface: "#073642", border: "#124652" },
|
|
24
|
+
bluePlanet: { bg: "#070b14", surface: "#0d1424", border: "#1a2540" },
|
|
25
|
+
saturn: { bg: "#0a0a0f", surface: "#16161f", border: "#28283a" },
|
|
26
|
+
kepler: { bg: "#0a0f0a", surface: "#141f14", border: "#253525" },
|
|
27
|
+
mars: { bg: "#0f0a08", surface: "#1f1410", border: "#352520" },
|
|
28
|
+
deepSpace: { bg: "#0a0a0a", surface: "#121212", border: "#3a3a3a" },
|
|
29
|
+
};
|
|
30
|
+
const colors = themeColors[theme] ?? themeColors["default"];
|
|
31
|
+
const firstLabel = formatFieldLabel(allowedUsernames[0]);
|
|
32
|
+
const showSelect = allowedUsernames.length > 1;
|
|
33
|
+
return `<!DOCTYPE html>
|
|
34
|
+
<html lang="en">
|
|
35
|
+
<head>
|
|
36
|
+
<meta charset="UTF-8">
|
|
37
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
38
|
+
<title>${arkosConfig?.swagger?.options?.definition?.info?.title || "Login Into OpenAPI Documentation"}</title>
|
|
39
|
+
<style>
|
|
40
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
41
|
+
|
|
42
|
+
body {
|
|
43
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
44
|
+
min-height: 100vh;
|
|
45
|
+
display: flex;
|
|
46
|
+
align-items: center;
|
|
47
|
+
justify-content: center;
|
|
48
|
+
background-color: ${colors.bg};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.login-container {
|
|
52
|
+
background-color: ${colors.surface};
|
|
53
|
+
padding: 40px;
|
|
54
|
+
border: 1px solid ${colors.border};
|
|
55
|
+
border-radius: 8px;
|
|
56
|
+
width: 100%;
|
|
57
|
+
max-width: 400px;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
h1 {
|
|
61
|
+
color: #ffffff;
|
|
62
|
+
text-align: center;
|
|
63
|
+
margin-bottom: 30px;
|
|
64
|
+
font-size: 24px;
|
|
65
|
+
font-weight: 600;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.form-group {
|
|
69
|
+
margin-bottom: 20px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
label {
|
|
73
|
+
display: block;
|
|
74
|
+
color: #ffffff;
|
|
75
|
+
margin-bottom: 8px;
|
|
76
|
+
font-size: 14px;
|
|
77
|
+
font-weight: 500;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
input[type="text"],
|
|
81
|
+
input[type="password"] {
|
|
82
|
+
width: 100%;
|
|
83
|
+
padding: 12px 16px;
|
|
84
|
+
background-color: ${colors.bg};
|
|
85
|
+
border: 1px solid ${colors.border};
|
|
86
|
+
border-radius: 4px;
|
|
87
|
+
color: #ffffff;
|
|
88
|
+
font-size: 14px;
|
|
89
|
+
transition: border-color 0.3s;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
select {
|
|
93
|
+
width: 100%;
|
|
94
|
+
padding: 12px 16px;
|
|
95
|
+
background-color: ${colors.bg};
|
|
96
|
+
border: 1px solid ${colors.border};
|
|
97
|
+
border-radius: 4px;
|
|
98
|
+
color: #ffffff;
|
|
99
|
+
font-size: 14px;
|
|
100
|
+
transition: border-color 0.3s;
|
|
101
|
+
appearance: none;
|
|
102
|
+
-webkit-appearance: none;
|
|
103
|
+
-moz-appearance: none;
|
|
104
|
+
cursor: pointer;
|
|
105
|
+
/* custom arrow */
|
|
106
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
|
|
107
|
+
background-repeat: no-repeat;
|
|
108
|
+
background-position: right 16px center;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
input[type="text"]:focus,
|
|
112
|
+
input[type="password"]:focus,
|
|
113
|
+
select:focus {
|
|
114
|
+
outline: none;
|
|
115
|
+
border-color: #ffffff;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
input[type="text"]::placeholder,
|
|
119
|
+
input[type="password"]::placeholder {
|
|
120
|
+
color: #666666;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
select option {
|
|
124
|
+
background-color: ${colors.surface};
|
|
125
|
+
color: #ffffff;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.login-button {
|
|
129
|
+
width: 100%;
|
|
130
|
+
padding: 12px;
|
|
131
|
+
background-color: #ffffff;
|
|
132
|
+
color: #1a1a1a;
|
|
133
|
+
border: none;
|
|
134
|
+
border-radius: 4px;
|
|
135
|
+
font-size: 16px;
|
|
136
|
+
font-weight: 600;
|
|
137
|
+
cursor: pointer;
|
|
138
|
+
transition: background-color 0.3s;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.login-button:hover { background-color: #e0e0e0; }
|
|
142
|
+
.login-button:active { transform: translateY(1px); }
|
|
143
|
+
.login-button:disabled { background-color: #666666; cursor: not-allowed; }
|
|
144
|
+
|
|
145
|
+
.error-message {
|
|
146
|
+
color: #ff6b6b;
|
|
147
|
+
font-size: 14px;
|
|
148
|
+
margin-top: 10px;
|
|
149
|
+
text-align: center;
|
|
150
|
+
display: none;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.error-message.show { display: block; }
|
|
154
|
+
</style>
|
|
155
|
+
</head>
|
|
156
|
+
<body>
|
|
157
|
+
<div class="login-container">
|
|
158
|
+
<h1>Login</h1>
|
|
159
|
+
<form id="loginForm">
|
|
160
|
+
|
|
161
|
+
${showSelect
|
|
162
|
+
? `
|
|
163
|
+
<div class="form-group">
|
|
164
|
+
<label for="usernameSelect">Login With</label>
|
|
165
|
+
<select id="usernameSelect">
|
|
166
|
+
${allowedUsernames
|
|
167
|
+
.map((f) => `
|
|
168
|
+
<option value="${f}">${formatFieldLabel(f)}</option>
|
|
169
|
+
`)
|
|
170
|
+
.join("")}
|
|
171
|
+
</select>
|
|
172
|
+
</div>
|
|
173
|
+
`
|
|
174
|
+
: ""}
|
|
175
|
+
|
|
176
|
+
<div class="form-group">
|
|
177
|
+
<label id="usernameLabel" for="usernameField">${firstLabel}</label>
|
|
178
|
+
<input
|
|
179
|
+
type="text"
|
|
180
|
+
id="usernameField"
|
|
181
|
+
placeholder="Enter your ${firstLabel.toLowerCase()}"
|
|
182
|
+
required
|
|
183
|
+
>
|
|
184
|
+
</div>
|
|
185
|
+
|
|
186
|
+
<div class="form-group">
|
|
187
|
+
<label for="password">Password</label>
|
|
188
|
+
<input
|
|
189
|
+
type="password"
|
|
190
|
+
id="password"
|
|
191
|
+
placeholder="Enter your password"
|
|
192
|
+
required
|
|
193
|
+
>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
<button type="submit" class="login-button" id="loginButton">Login</button>
|
|
197
|
+
<div class="error-message" id="errorMessage"></div>
|
|
198
|
+
|
|
199
|
+
</form>
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
<script>
|
|
203
|
+
const usernameLabel = document.getElementById('usernameLabel');
|
|
204
|
+
const usernameField = document.getElementById('usernameField');
|
|
205
|
+
const usernameSelect = document.getElementById('usernameSelect');
|
|
206
|
+
const loginButton = document.getElementById('loginButton');
|
|
207
|
+
const errorMessage = document.getElementById('errorMessage');
|
|
208
|
+
|
|
209
|
+
function formatFieldLabel(field) {
|
|
210
|
+
const last = field.split('.').pop();
|
|
211
|
+
return last
|
|
212
|
+
.replace(/([A-Z])/g, ' $1')
|
|
213
|
+
.replace(/^./, c => c.toUpperCase())
|
|
214
|
+
.trim();
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (usernameSelect) {
|
|
218
|
+
usernameSelect.addEventListener('change', () => {
|
|
219
|
+
const label = formatFieldLabel(usernameSelect.value);
|
|
220
|
+
usernameLabel.textContent = label;
|
|
221
|
+
usernameField.placeholder = \`Enter your \${label.toLowerCase()}\`;
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const params = new URLSearchParams(window.location.search);
|
|
226
|
+
const urlErrorMessage = params.get('error-message');
|
|
227
|
+
if (urlErrorMessage) {
|
|
228
|
+
errorMessage.textContent = decodeURIComponent(urlErrorMessage);
|
|
229
|
+
errorMessage.classList.add('show');
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
document.getElementById('loginForm').addEventListener('submit', async (e) => {
|
|
233
|
+
e.preventDefault();
|
|
234
|
+
|
|
235
|
+
const selectedField = usernameSelect ? usernameSelect.value : '${allowedUsernames[0]}';
|
|
236
|
+
const password = document.getElementById('password').value;
|
|
237
|
+
|
|
238
|
+
errorMessage.classList.remove('show');
|
|
239
|
+
errorMessage.textContent = '';
|
|
240
|
+
loginButton.disabled = true;
|
|
241
|
+
loginButton.textContent = '...';
|
|
242
|
+
|
|
243
|
+
try {
|
|
244
|
+
const selectedField = usernameSelect ? usernameSelect.value : '${allowedUsernames[0]}';
|
|
245
|
+
const fieldKey = selectedField.split('.').pop(); // last segment only as body key
|
|
246
|
+
|
|
247
|
+
const response = await fetch(\`/api/auth/login?usernameField=\${selectedField}\`, {
|
|
248
|
+
method: 'POST',
|
|
249
|
+
headers: { 'Content-Type': 'application/json' },
|
|
250
|
+
body: JSON.stringify({
|
|
251
|
+
[fieldKey]: usernameField.value,
|
|
252
|
+
password,
|
|
253
|
+
}),
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
const data = await response.json();
|
|
257
|
+
|
|
258
|
+
if (response.ok) {
|
|
259
|
+
window.location.href = '/api/docs';
|
|
260
|
+
} else {
|
|
261
|
+
errorMessage.textContent = data.message || 'Login failed';
|
|
262
|
+
errorMessage.classList.add('show');
|
|
263
|
+
}
|
|
264
|
+
} catch {
|
|
265
|
+
errorMessage.textContent = 'An error occurred. Please try again.';
|
|
266
|
+
errorMessage.classList.add('show');
|
|
267
|
+
} finally {
|
|
268
|
+
loginButton.disabled = false;
|
|
269
|
+
loginButton.textContent = 'Login';
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
</script>
|
|
273
|
+
</body>
|
|
274
|
+
</html>`;
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=get-open-api-login-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-open-api-login-html.js","sourceRoot":"","sources":["../../../../../src/modules/swagger/utils/get-open-api-login-html.ts"],"names":[],"mappings":";;AAUA,sCAqRC;AA/RD,4CAAiD;AAEjD,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC;IACrC,OAAO,IAAI;SACR,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACrC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAwB,mBAAmB;IACzC,MAAM,WAAW,GAAG,IAAA,uBAAc,GAAE,CAAC;IAErC,MAAM,KAAK,GACT,WAAW,EAAE,OAAO,EAAE,+BAA+B,EAAE,KAAK,IAAI,SAAS,CAAC;IAE5E,MAAM,gBAAgB,GAAG,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB;QAC3E,EAAE,MAAM;QACR,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,gBAAgB;QACnD,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAEjB,MAAM,WAAW,GAGb;QACF,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;QACjE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;QAC9D,MAAM,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;QAChE,SAAS,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;QACnE,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;QACpE,MAAM,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;QAChE,MAAM,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;QAChE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;QAC9D,SAAS,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;KACpE,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;IAE5D,MAAM,UAAU,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;IAE/C,OAAO;;;;;WAKE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,IAAI,kCAAkC;;;;;;;;;;0BAU7E,MAAM,CAAC,EAAE;;;;0BAIT,MAAM,CAAC,OAAO;;0BAEd,MAAM,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA8Bb,MAAM,CAAC,EAAE;0BACT,MAAM,CAAC,MAAM;;;;;;;;;;0BAUb,MAAM,CAAC,EAAE;0BACT,MAAM,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA4Bb,MAAM,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsChC,UAAU;QACR,CAAC,CAAC;;;;YAIA,gBAAgB;aACf,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CAAC;2BACM,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC;WACzC,CACE;aACA,IAAI,CAAC,EAAE,CAAC;;;OAGd;QACG,CAAC,CAAC,EACN;;;wDAGkD,UAAU;;;;oCAI9B,UAAU,CAAC,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEAsDW,gBAAgB,CAAC,CAAC,CAAC;;;;;;;;;yEASjB,gBAAgB,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8BpF,CAAC;AACT,CAAC","sourcesContent":["import { getArkosConfig } from \"../../../server\";\n\nfunction formatFieldLabel(field: string): string {\n const last = field.split(\".\").pop()!;\n return last\n .replace(/([A-Z])/g, \" $1\")\n .replace(/^./, (c) => c.toUpperCase())\n .trim();\n}\n\nexport default function getOpenApiLoginHtml() {\n const arkosConfig = getArkosConfig();\n\n const theme =\n arkosConfig?.swagger?.scalarApiReferenceConfiguration?.theme || \"default\";\n\n const allowedUsernames = arkosConfig?.authentication?.login?.allowedUsernames\n ?.length\n ? arkosConfig.authentication.login.allowedUsernames\n : [\"username\"];\n\n const themeColors: Record<\n string,\n { bg: string; surface: string; border: string }\n > = {\n default: { bg: \"#0f0f0f\", surface: \"#1a1a1a\", border: \"#2e2e2e\" },\n moon: { bg: \"#0f1117\", surface: \"#1c1e26\", border: \"#2e3040\" },\n purple: { bg: \"#0d0d14\", surface: \"#1a1a2e\", border: \"#2e2e4a\" },\n solarized: { bg: \"#002b36\", surface: \"#073642\", border: \"#124652\" },\n bluePlanet: { bg: \"#070b14\", surface: \"#0d1424\", border: \"#1a2540\" },\n saturn: { bg: \"#0a0a0f\", surface: \"#16161f\", border: \"#28283a\" },\n kepler: { bg: \"#0a0f0a\", surface: \"#141f14\", border: \"#253525\" },\n mars: { bg: \"#0f0a08\", surface: \"#1f1410\", border: \"#352520\" },\n deepSpace: { bg: \"#0a0a0a\", surface: \"#121212\", border: \"#3a3a3a\" },\n };\n\n const colors = themeColors[theme] ?? themeColors[\"default\"];\n\n const firstLabel = formatFieldLabel(allowedUsernames[0]);\n const showSelect = allowedUsernames.length > 1;\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>${arkosConfig?.swagger?.options?.definition?.info?.title || \"Login Into OpenAPI Documentation\"}</title>\n <style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n min-height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${colors.bg};\n }\n\n .login-container {\n background-color: ${colors.surface};\n padding: 40px;\n border: 1px solid ${colors.border};\n border-radius: 8px;\n width: 100%;\n max-width: 400px;\n }\n\n h1 {\n color: #ffffff;\n text-align: center;\n margin-bottom: 30px;\n font-size: 24px;\n font-weight: 600;\n }\n\n .form-group {\n margin-bottom: 20px;\n }\n\n label {\n display: block;\n color: #ffffff;\n margin-bottom: 8px;\n font-size: 14px;\n font-weight: 500;\n }\n\n input[type=\"text\"],\n input[type=\"password\"] {\n width: 100%;\n padding: 12px 16px;\n background-color: ${colors.bg};\n border: 1px solid ${colors.border};\n border-radius: 4px;\n color: #ffffff;\n font-size: 14px;\n transition: border-color 0.3s;\n }\n\n select {\n width: 100%;\n padding: 12px 16px;\n background-color: ${colors.bg};\n border: 1px solid ${colors.border};\n border-radius: 4px;\n color: #ffffff;\n font-size: 14px;\n transition: border-color 0.3s;\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n cursor: pointer;\n /* custom arrow */\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 16px center;\n }\n\n input[type=\"text\"]:focus,\n input[type=\"password\"]:focus,\n select:focus {\n outline: none;\n border-color: #ffffff;\n }\n\n input[type=\"text\"]::placeholder,\n input[type=\"password\"]::placeholder {\n color: #666666;\n }\n\n select option {\n background-color: ${colors.surface};\n color: #ffffff;\n }\n\n .login-button {\n width: 100%;\n padding: 12px;\n background-color: #ffffff;\n color: #1a1a1a;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.3s;\n }\n\n .login-button:hover { background-color: #e0e0e0; }\n .login-button:active { transform: translateY(1px); }\n .login-button:disabled { background-color: #666666; cursor: not-allowed; }\n\n .error-message {\n color: #ff6b6b;\n font-size: 14px;\n margin-top: 10px;\n text-align: center;\n display: none;\n }\n\n .error-message.show { display: block; }\n </style>\n</head>\n<body>\n <div class=\"login-container\">\n <h1>Login</h1>\n <form id=\"loginForm\">\n\n ${\n showSelect\n ? `\n <div class=\"form-group\">\n <label for=\"usernameSelect\">Login With</label>\n <select id=\"usernameSelect\">\n ${allowedUsernames\n .map(\n (f) => `\n <option value=\"${f}\">${formatFieldLabel(f)}</option>\n `\n )\n .join(\"\")}\n </select>\n </div>\n `\n : \"\"\n }\n\n <div class=\"form-group\">\n <label id=\"usernameLabel\" for=\"usernameField\">${firstLabel}</label>\n <input\n type=\"text\"\n id=\"usernameField\"\n placeholder=\"Enter your ${firstLabel.toLowerCase()}\"\n required\n >\n </div>\n\n <div class=\"form-group\">\n <label for=\"password\">Password</label>\n <input\n type=\"password\"\n id=\"password\"\n placeholder=\"Enter your password\"\n required\n >\n </div>\n\n <button type=\"submit\" class=\"login-button\" id=\"loginButton\">Login</button>\n <div class=\"error-message\" id=\"errorMessage\"></div>\n\n </form>\n </div>\n\n <script>\n const usernameLabel = document.getElementById('usernameLabel');\n const usernameField = document.getElementById('usernameField');\n const usernameSelect = document.getElementById('usernameSelect');\n const loginButton = document.getElementById('loginButton');\n const errorMessage = document.getElementById('errorMessage');\n\n function formatFieldLabel(field) {\n const last = field.split('.').pop();\n return last\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, c => c.toUpperCase())\n .trim();\n }\n\n if (usernameSelect) {\n usernameSelect.addEventListener('change', () => {\n const label = formatFieldLabel(usernameSelect.value);\n usernameLabel.textContent = label;\n usernameField.placeholder = \\`Enter your \\${label.toLowerCase()}\\`;\n });\n }\n\n const params = new URLSearchParams(window.location.search);\n const urlErrorMessage = params.get('error-message');\n if (urlErrorMessage) {\n errorMessage.textContent = decodeURIComponent(urlErrorMessage);\n errorMessage.classList.add('show');\n }\n\n document.getElementById('loginForm').addEventListener('submit', async (e) => {\n e.preventDefault();\n\n const selectedField = usernameSelect ? usernameSelect.value : '${allowedUsernames[0]}';\n const password = document.getElementById('password').value;\n\n errorMessage.classList.remove('show');\n errorMessage.textContent = '';\n loginButton.disabled = true;\n loginButton.textContent = '...';\n\n try {\n const selectedField = usernameSelect ? usernameSelect.value : '${allowedUsernames[0]}';\n const fieldKey = selectedField.split('.').pop(); // last segment only as body key\n\n const response = await fetch(\\`/api/auth/login?usernameField=\\${selectedField}\\`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n [fieldKey]: usernameField.value,\n password,\n }),\n });\n\n const data = await response.json();\n\n if (response.ok) {\n window.location.href = '/api/docs';\n } else {\n errorMessage.textContent = data.message || 'Login failed';\n errorMessage.classList.add('show');\n }\n } catch {\n errorMessage.textContent = 'An error occurred. Please try again.';\n errorMessage.classList.add('show');\n } finally {\n loginButton.disabled = false;\n loginButton.textContent = 'Login';\n }\n });\n </script>\n</body>\n</html>`;\n}\n"]}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getSchemaMode = void 0;
|
|
4
4
|
exports.default = getAuthenticationJsonSchemaPaths;
|
|
5
|
-
const swagger_router_helpers_1 = require("./swagger.router.helpers");
|
|
6
|
-
const dynamic_loader_1 = require("../../../../utils/dynamic-loader");
|
|
7
|
-
const base_router_helpers_1 = require("../../../base/utils/helpers/base.router.helpers");
|
|
5
|
+
const swagger_router_helpers_1 = require("./swagger.router.helpers.js");
|
|
6
|
+
const dynamic_loader_1 = require("../../../../utils/dynamic-loader.js");
|
|
7
|
+
const base_router_helpers_1 = require("../../../base/utils/helpers/base.router.helpers.js");
|
|
8
8
|
const getSchemaMode = (action, arkosConfig) => {
|
|
9
9
|
const swaggerMode = arkosConfig.swagger?.mode;
|
|
10
10
|
const isStrict = arkosConfig.swagger?.strict;
|
|
@@ -4,10 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.default = getFileUploadJsonSchemaPaths;
|
|
7
|
-
const dynamic_loader_1 = require("../../../../utils/dynamic-loader");
|
|
8
|
-
const base_router_helpers_1 = require("../../../base/utils/helpers/base.router.helpers");
|
|
9
|
-
const deepmerge_helper_1 = __importDefault(require("../../../../utils/helpers/deepmerge.helper"));
|
|
10
|
-
const file_upload_service_1 = require("../../../file-upload/file-upload.service");
|
|
7
|
+
const dynamic_loader_1 = require("../../../../utils/dynamic-loader.js");
|
|
8
|
+
const base_router_helpers_1 = require("../../../base/utils/helpers/base.router.helpers.js");
|
|
9
|
+
const deepmerge_helper_1 = __importDefault(require("../../../../utils/helpers/deepmerge.helper.js"));
|
|
10
|
+
const file_upload_service_1 = require("../../../file-upload/file-upload.service.js");
|
|
11
11
|
function getFileUploadJsonSchemaPaths(arkosConfig, existingPaths) {
|
|
12
12
|
const paths = { ...existingPaths };
|
|
13
13
|
if (!arkosConfig.fileUpload)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.default = getSwaggerDefaultConfig;
|
|
4
|
-
const text_helpers_1 = require("../../../../utils/helpers/text.helpers");
|
|
4
|
+
const text_helpers_1 = require("../../../../utils/helpers/text.helpers.js");
|
|
5
5
|
function getSwaggerDefaultConfig(defaultModelsPaths, defaultJsonSchemas) {
|
|
6
6
|
const portAndHost = {
|
|
7
7
|
port: process.env.__PORT || process.env.PORT || "8000",
|
|
@@ -6,10 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.generateClassValidatorJsonSchemas = generateClassValidatorJsonSchemas;
|
|
7
7
|
const class_validator_jsonschema_1 = require("class-validator-jsonschema");
|
|
8
8
|
const class_validator_1 = require("class-validator");
|
|
9
|
-
const dynamic_loader_1 = require("../../../../../utils/dynamic-loader");
|
|
10
|
-
const swagger_router_helpers_1 = require("../swagger.router.helpers");
|
|
11
|
-
const prisma_schema_parser_1 = __importDefault(require("../../../../../utils/prisma/prisma-schema-parser"));
|
|
12
|
-
const fs_helpers_1 = require("../../../../../utils/helpers/fs.helpers");
|
|
9
|
+
const dynamic_loader_1 = require("../../../../../utils/dynamic-loader.js");
|
|
10
|
+
const swagger_router_helpers_1 = require("../swagger.router.helpers.js");
|
|
11
|
+
const prisma_schema_parser_1 = __importDefault(require("../../../../../utils/prisma/prisma-schema-parser.js"));
|
|
12
|
+
const fs_helpers_1 = require("../../../../../utils/helpers/fs.helpers.js");
|
|
13
13
|
const storage_js_1 = require("class-transformer/cjs/storage.js");
|
|
14
14
|
function generateClassValidatorJsonSchemas() {
|
|
15
15
|
const requiredAppModules = [
|
|
@@ -4,8 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.generatePrismaJsonSchemas = generatePrismaJsonSchemas;
|
|
7
|
-
const prisma_json_schema_generator_1 = __importDefault(require("../../../../../utils/prisma/prisma-json-schema-generator"));
|
|
8
|
-
const prisma_schema_parser_1 = __importDefault(require("../../../../../utils/prisma/prisma-schema-parser"));
|
|
7
|
+
const prisma_json_schema_generator_1 = __importDefault(require("../../../../../utils/prisma/prisma-json-schema-generator.js"));
|
|
8
|
+
const prisma_schema_parser_1 = __importDefault(require("../../../../../utils/prisma/prisma-schema-parser.js"));
|
|
9
9
|
function generatePrismaJsonSchemas(arkosConfig) {
|
|
10
10
|
const requiredAppModules = [
|
|
11
11
|
...prisma_schema_parser_1.default.getModelsAsArrayOfStrings(),
|
package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js
CHANGED
|
@@ -4,10 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.default = generateZodJsonSchemas;
|
|
7
|
-
const dynamic_loader_1 = require("../../../../../utils/dynamic-loader");
|
|
7
|
+
const dynamic_loader_1 = require("../../../../../utils/dynamic-loader.js");
|
|
8
8
|
const zod_to_json_schema_1 = __importDefault(require("zod-to-json-schema"));
|
|
9
|
-
const swagger_router_helpers_1 = require("../swagger.router.helpers");
|
|
10
|
-
const prisma_schema_parser_1 = __importDefault(require("../../../../../utils/prisma/prisma-schema-parser"));
|
|
9
|
+
const swagger_router_helpers_1 = require("../swagger.router.helpers.js");
|
|
10
|
+
const prisma_schema_parser_1 = __importDefault(require("../../../../../utils/prisma/prisma-schema-parser.js"));
|
|
11
11
|
function generateZodJsonSchemas() {
|
|
12
12
|
const requiredAppModules = [
|
|
13
13
|
...prisma_schema_parser_1.default.getModelsAsArrayOfStrings(),
|
|
@@ -4,12 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.generatePrismaModelMainRoutesPaths = generatePrismaModelMainRoutesPaths;
|
|
7
|
-
const swagger_router_helpers_1 = require("../../swagger.router.helpers");
|
|
7
|
+
const swagger_router_helpers_1 = require("../../swagger.router.helpers.js");
|
|
8
8
|
const pluralize_1 = __importDefault(require("pluralize"));
|
|
9
|
-
const base_router_helpers_1 = require("../../../../../base/utils/helpers/base.router.helpers");
|
|
10
|
-
const utils_1 = require("../../../../../../exports/utils");
|
|
11
|
-
const dynamic_loader_1 = require("../../../../../../utils/dynamic-loader");
|
|
12
|
-
const arkos_config_helpers_1 = require("../../../../../../utils/helpers/arkos-config.helpers");
|
|
9
|
+
const base_router_helpers_1 = require("../../../../../base/utils/helpers/base.router.helpers.js");
|
|
10
|
+
const utils_1 = require("../../../../../../exports/utils/index.js");
|
|
11
|
+
const dynamic_loader_1 = require("../../../../../../utils/dynamic-loader.js");
|
|
12
|
+
const arkos_config_helpers_1 = require("../../../../../../utils/helpers/arkos-config.helpers.js");
|
|
13
13
|
function getAuthErrorResponses() {
|
|
14
14
|
if (!(0, arkos_config_helpers_1.isAuthenticationEnabled)())
|
|
15
15
|
return {};
|
|
@@ -5,9 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.default = generatePrismaModelParentRoutesPaths;
|
|
7
7
|
const pluralize_1 = __importDefault(require("pluralize"));
|
|
8
|
-
const utils_1 = require("../../../../../../exports/utils");
|
|
9
|
-
const swagger_router_helpers_1 = require("../../swagger.router.helpers");
|
|
10
|
-
const dynamic_loader_1 = require("../../../../../../utils/dynamic-loader");
|
|
8
|
+
const utils_1 = require("../../../../../../exports/utils/index.js");
|
|
9
|
+
const swagger_router_helpers_1 = require("../../swagger.router.helpers.js");
|
|
10
|
+
const dynamic_loader_1 = require("../../../../../../utils/dynamic-loader.js");
|
|
11
11
|
function generatePrismaModelParentRoutesPaths(model, paths, arkosConfig) {
|
|
12
12
|
const modelName = (0, utils_1.kebabCase)(model);
|
|
13
13
|
const routeName = pluralize_1.default.plural(modelName);
|
|
@@ -3,9 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const prisma_json_schema_generator_1 = __importDefault(require("../../../../utils/prisma/prisma-json-schema-generator"));
|
|
6
|
+
const prisma_json_schema_generator_1 = __importDefault(require("../../../../utils/prisma/prisma-json-schema-generator.js"));
|
|
7
7
|
const pluralize_1 = __importDefault(require("pluralize"));
|
|
8
|
-
const sheu_1 = __importDefault(require("../../../../utils/sheu"));
|
|
8
|
+
const sheu_1 = __importDefault(require("../../../../utils/sheu.js"));
|
|
9
9
|
class MissingJsonSchemasGenerator {
|
|
10
10
|
extractModelNameFromSchemaRef(schemaRef) {
|
|
11
11
|
const match = schemaRef.match(/#\/components\/schemas\/(?:Create|Update|UpdateMany|FindOne|FindMany|CreateMany)?(.+?)(?:ModelSchema|Schema)$/);
|
|
@@ -3,10 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const dynamic_loader_1 = require("../../../../utils/dynamic-loader");
|
|
6
|
+
const dynamic_loader_1 = require("../../../../utils/dynamic-loader.js");
|
|
7
7
|
const zod_to_json_schema_1 = __importDefault(require("zod-to-json-schema"));
|
|
8
|
-
const class_validator_to_json_schema_1 = __importDefault(require("./class-validator-to-json-schema"));
|
|
9
|
-
const server_1 = require("../../../../server");
|
|
8
|
+
const class_validator_to_json_schema_1 = __importDefault(require("./class-validator-to-json-schema.js"));
|
|
9
|
+
const server_1 = require("../../../../server.js");
|
|
10
10
|
class OpenAPIchemaConverter {
|
|
11
11
|
constructor() {
|
|
12
12
|
this.validatorToJsonSchema = (schema) => {
|
|
@@ -9,18 +9,18 @@ exports.kebabToHuman = kebabToHuman;
|
|
|
9
9
|
exports.getSchemaRef = getSchemaRef;
|
|
10
10
|
exports.generatePathsForModels = generatePathsForModels;
|
|
11
11
|
exports.localValidatorFileExists = localValidatorFileExists;
|
|
12
|
-
const utils_1 = require("../../../../exports/utils");
|
|
13
|
-
const get_system_json_schema_paths_1 = require("./get-system-json-schema-paths");
|
|
14
|
-
const get_authentication_json_schema_paths_1 = __importDefault(require("./get-authentication-json-schema-paths"));
|
|
15
|
-
const generate_zod_json_schemas_1 = __importDefault(require("./json-schema-generators/generate-zod-json-schemas"));
|
|
16
|
-
const generate_class_validator_json_schemas_1 = require("./json-schema-generators/generate-class-validator-json-schemas");
|
|
17
|
-
const generate_prisma_json_schemas_1 = require("./json-schema-generators/generate-prisma-json-schemas");
|
|
18
|
-
const generate_prisma_model_main_routes_paths_1 = require("./json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths");
|
|
19
|
-
const generate_prisma_model_parent_routes_paths_1 = __importDefault(require("./json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths"));
|
|
20
|
-
const sheu_1 = __importDefault(require("../../../../utils/sheu"));
|
|
21
|
-
const prisma_schema_parser_1 = __importDefault(require("../../../../utils/prisma/prisma-schema-parser"));
|
|
22
|
-
const dynamic_loader_1 = require("../../../../utils/dynamic-loader");
|
|
23
|
-
const arkos_config_helpers_1 = require("../../../../utils/helpers/arkos-config.helpers");
|
|
12
|
+
const utils_1 = require("../../../../exports/utils/index.js");
|
|
13
|
+
const get_system_json_schema_paths_1 = require("./get-system-json-schema-paths.js");
|
|
14
|
+
const get_authentication_json_schema_paths_1 = __importDefault(require("./get-authentication-json-schema-paths.js"));
|
|
15
|
+
const generate_zod_json_schemas_1 = __importDefault(require("./json-schema-generators/generate-zod-json-schemas.js"));
|
|
16
|
+
const generate_class_validator_json_schemas_1 = require("./json-schema-generators/generate-class-validator-json-schemas.js");
|
|
17
|
+
const generate_prisma_json_schemas_1 = require("./json-schema-generators/generate-prisma-json-schemas.js");
|
|
18
|
+
const generate_prisma_model_main_routes_paths_1 = require("./json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js");
|
|
19
|
+
const generate_prisma_model_parent_routes_paths_1 = __importDefault(require("./json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js"));
|
|
20
|
+
const sheu_1 = __importDefault(require("../../../../utils/sheu.js"));
|
|
21
|
+
const prisma_schema_parser_1 = __importDefault(require("../../../../utils/prisma/prisma-schema-parser.js"));
|
|
22
|
+
const dynamic_loader_1 = require("../../../../utils/dynamic-loader.js");
|
|
23
|
+
const arkos_config_helpers_1 = require("../../../../utils/helpers/arkos-config.helpers.js");
|
|
24
24
|
function getOpenAPIJsonSchemasByConfigMode(arkosConfig) {
|
|
25
25
|
switch (arkosConfig?.swagger.mode) {
|
|
26
26
|
case "prisma":
|
package/dist/cjs/server.js
CHANGED
|
@@ -8,12 +8,12 @@ exports.getArkosConfig = getArkosConfig;
|
|
|
8
8
|
exports.terminateApplicationRunningProcessAndServer = terminateApplicationRunningProcessAndServer;
|
|
9
9
|
exports.getExpressApp = getExpressApp;
|
|
10
10
|
exports.initApp = initApp;
|
|
11
|
-
const app_1 = require("./app");
|
|
11
|
+
const app_1 = require("./app.js");
|
|
12
12
|
const http_1 = __importDefault(require("http"));
|
|
13
|
-
const sheu_1 = __importDefault(require("./utils/sheu"));
|
|
14
|
-
const port_and_host_allocator_1 = __importDefault(require("./utils/features/port-and-host-allocator"));
|
|
15
|
-
const arkos_config_helpers_1 = require("./utils/helpers/arkos-config.helpers");
|
|
16
|
-
const runtime_cli_commander_1 = __importDefault(require("./utils/cli/utils/runtime-cli-commander"));
|
|
13
|
+
const sheu_1 = __importDefault(require("./utils/sheu.js"));
|
|
14
|
+
const port_and_host_allocator_1 = __importDefault(require("./utils/features/port-and-host-allocator.js"));
|
|
15
|
+
const arkos_config_helpers_1 = require("./utils/helpers/arkos-config.helpers.js");
|
|
16
|
+
const runtime_cli_commander_1 = __importDefault(require("./utils/cli/utils/runtime-cli-commander.js"));
|
|
17
17
|
function getArkosConfig() {
|
|
18
18
|
return (0, arkos_config_helpers_1.getArkosConfig)();
|
|
19
19
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/types/arkos-config/utils.ts"],"names":[],"mappings":"","sourcesContent":["import { ArkosRequest } from \"..\";\n\n/**\n * Context object passed to `before` and `after` auth hooks.\n */\nexport interface AuthHookContext {\n req: ArkosRequest;\n /**\n * Continue to the next hook or core logic.\n * Call with an error to abort and forward to the global error handler.\n */\n next: (err?: unknown) => void;\n /**\n * Only available in `before` hooks.\n * Bypasses core logic and jumps directly to `after` hooks.\n */\n skip: () => void;\n}\n\n/**\n * Context object passed to `onError` auth hooks.\n */\nexport interface AuthErrorHookContext {\n req: ArkosRequest;\n error: unknown;\n /**\n * Forward the original or a new error to the global error handler.\n */\n next: (err?: unknown) => void;\n /**\n * Suppress the error and jump to `after` hooks.\n */\n skip: () => void;\n}\n\nexport type AuthHookHandler = (ctx: AuthHookContext) => void | Promise<void>;\nexport type AuthAfterHookHandler = (\n ctx: Omit<AuthHookContext, \"skip\">\n) => void | Promise<void>;\nexport type AuthErrorHookHandler = (\n ctx: AuthErrorHookContext\n) => void | Promise<void>;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arkos.js","sourceRoot":"","sources":["../../../src/types/arkos.ts"],"names":[],"mappings":"","sourcesContent":["import { Express } from \"express\";\nimport { IncomingMessage, Server, ServerResponse } from \"http\";\nimport { IArkosRouter } from \"../exports\";\n\ntype ArkosRouterMethods =\n | \"get\"\n | \"post\"\n | \"put\"\n | \"patch\"\n | \"delete\"\n | \"options\"\n | \"head\"\n | \"all\"\n | \"use\"\n | \"trace\"\n | \"route\";\n\nexport interface Arkos\n extends Omit<Express, \"listen\" | ArkosRouterMethods>,\n Pick<IArkosRouter, ArkosRouterMethods> {\n (req: IncomingMessage, res: ServerResponse): void;\n /**\n * Applies all loaded items to the app by adding them as middleware,\n * routers, or handlers at the end of the stack.\n *\n * This ensures that Arkos internals always run after user middleware/routes.\n * Automatically called before listen() if not called manually.\n */\n build(): Promise<this>;\n /**\n * Starts the server using Arkos-managed port and host configuration.\n * Automatically calls build() if not called manually.\n *\n * @param callback Optional callback invoked once server starts\n */\n listen(callback?: (error?: Error) => void): Promise<Server>;\n /**\n * Starts the server using Arkos-managed port and host configuration.\n * app.build() must be called before this.\n *\n * @param server {Server} - Optional callback invoked once server starts\n * @param callback Optional callback invoked once server starts\n */\n listen(server: Server, callback?: (error?: Error) => void): Promise<Server>;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;AA6LA,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,qCAAa,CAAA;IACb,yCAAiB,CAAA;IACjB,yCAAiB,CAAA;AACnB,CAAC,EALW,oBAAoB,oCAApB,oBAAoB,QAK/B","sourcesContent":["import {\n ErrorRequestHandler,\n NextFunction,\n Request,\n RequestHandler,\n Response,\n} from \"express\";\n\nexport type PrismaOperations = \"findMany\";\n\n/**\n * Type definition for authentication-related Prisma query operations\n * @template T - The Prisma model delegate type\n */\nexport type AuthPrismaQueryOptions<T extends Record<string, any>> = {\n // User profile endpoints\n /**\n * Options for retrieving the current authenticated user's profile\n */\n getMe?: Partial<Parameters<T[\"findUnique\"]>[0]>;\n /**\n * Options for updating the current authenticated user's profile\n */\n updateMe?: Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Options for soft deleting or deactivating the current authenticated user's account\n */\n deleteMe?: Partial<Parameters<T[\"update\"]>[0]>;\n // Authentication endpoints\n /**\n * Options for user login authentication queries\n */\n login?: Partial<Parameters<T[\"findFirst\"]>[0]>;\n /**\n * Options for user registration and account creation\n */\n signup?: Partial<Parameters<T[\"create\"]>[0]>;\n /**\n * Options for updating the current authenticated user's password\n */\n updatePassword?: Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Options for finding multiple auth actions\n */\n findManyAuthAction?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * Options for finding a single auth action\n */\n findOneAuthAction?: Partial<Parameters<T[\"findFirst\"]>[0]>;\n};\n\n/**\n * Base Prisma query options for standard CRUD operations\n * @template T - The Prisma model delegate type\n */\ntype BasePrismaQueryOptions<T extends Record<string, any>> = {\n /**\n * @deprecated Use `global` instead for general query options\n */\n queryOptions?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * Global query options that can be used for all operations\n * Replaces the deprecated queryOptions\n */\n global?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * General find options for findMany and findOne operations\n */\n find?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * General create options for createOne and createMany operations\n */\n create?: Partial<Parameters<T[\"create\"]>[0]>;\n /**\n * General update options for updateOne and updateMany operations\n */\n update?: Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * General delete options for deleteOne and deleteMany operations\n */\n delete?: Partial<Parameters<T[\"delete\"]>[0]>;\n /**\n * General save options for createOne, createMany, updateOne, updateMany operations\n */\n save?:\n | Partial<Parameters<T[\"create\"]>[0]>\n | Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Save options for single record operations (createOne, updateOne)\n */\n saveOne?:\n | Partial<Parameters<T[\"create\"]>[0]>\n | Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Save options for multiple record operations (createMany, updateMany)\n */\n saveMany?:\n | Partial<Parameters<T[\"createMany\"]>[0]>\n | Partial<Parameters<T[\"updateMany\"]>[0]>;\n /**\n * Options for finding a single record (first match)\n */\n findOne?: Partial<Parameters<T[\"findFirst\"]>[0]>;\n /**\n * Options for finding multiple records\n */\n findMany?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * Options for creating a single record\n */\n createOne?: Partial<Parameters<T[\"create\"]>[0]>;\n /**\n * Options for creating multiple records\n */\n createMany?: Partial<Parameters<T[\"createMany\"]>[0]>;\n /**\n * Options for updating a single record\n */\n updateOne?: Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Options for updating multiple records\n */\n updateMany?: Partial<Parameters<T[\"updateMany\"]>[0]>;\n /**\n * Options for deleting a single record\n */\n deleteOne?: Partial<Parameters<T[\"delete\"]>[0]>;\n /**\n * Options for deleting multiple records\n */\n deleteMany?: Partial<Parameters<T[\"deleteMany\"]>[0]>;\n};\n\n/**\n * Type definition for Prisma query operations with flexible options\n * Conditionally provides auth-specific options when ModelName is \"auth\"\n * @template T - The Prisma model delegate type\n * @template ModelName - The model name (defaults to string for standard models)\n */\nexport type PrismaQueryOptions<\n T extends Record<string, any>,\n ModelName extends string = string,\n> = ModelName extends \"auth\"\n ? AuthPrismaQueryOptions<T>\n : BasePrismaQueryOptions<T>;\n/**\n * Interface defining the minimum structure required for Prisma model delegates\n * This allows us to constraint TModel without requiring Prisma imports\n */\nexport type PrismaModelDelegate = {\n create: (args: { data: never; [key: string]: never }) => Promise<any>;\n createMany: (args: { data: never; [key: string]: never }) => Promise<any>;\n findMany: (args: { [key: string]: never }) => Promise<any[]>;\n findFirst: (args: { where: never; [key: string]: never }) => Promise<any>;\n findUnique: (args: { where: never; [key: string]: never }) => Promise<any>;\n update: (args: {\n where: never;\n data: never;\n [key: string]: never;\n }) => Promise<any>;\n updateMany: (args: {\n where: never;\n data: never;\n [key: string]: never;\n }) => Promise<any>;\n delete: (args: { where: never; [key: string]: never }) => Promise<any>;\n deleteMany: (args: { where: never; [key: string]: never }) => Promise<any>;\n count: (args: { where: never; [key: string]: never }) => Promise<number>;\n};\n\nexport interface UserRole {\n id: string;\n createdAt: Date;\n deletedAt?: Date;\n roleId: string;\n role: AuthRole;\n user: User;\n userId: string;\n}\n\nexport interface AuthRole {\n id: string;\n createdAt: Date;\n deletedAt?: Date;\n name: string;\n permissions: AuthPermission[];\n userRoles: UserRole[];\n}\n\nexport enum AuthPermissionAction {\n Create = \"Create\",\n View = \"View\",\n Update = \"Update\",\n Delete = \"Delete\",\n}\n\nexport interface AuthPermission {\n id: string;\n createdAt: Date;\n deletedAt?: Date;\n resource: string;\n action: AuthPermissionAction;\n roleId: string;\n role: AuthRole;\n}\n\nexport interface User extends Record<string, any> {\n id: string;\n isSuperUser: boolean;\n password: string;\n passwordChangedAt?: Date;\n deletedSelfAccountAt: Date;\n isActive: boolean;\n}\n\nexport interface ArkosRequest<\n P extends Record<string, any> = any,\n ResBody = any,\n ReqBody = any,\n Query extends Record<string, any> = any,\n> extends Request<P, ResBody, ReqBody, Query> {\n /**\n * Authenticated user with additional fields\n */\n user?: User & Record<string, any>;\n /**\n * Single uploaded file, populated when using `multer.single()`\n */\n file?: Express.Multer.File;\n /**\n * Uploaded files, populated when using `multer.array()` or `multer.fields()`.\n */\n files?: Express.Multer.File[] | Record<string, Express.Multer.File[]>;\n\n /**\n * Fields to include in relational queries\n */\n relationFields?: Record<string, boolean>;\n\n /**\n * Prisma include options for related data\n */\n include?: Record<string, any>;\n\n /**\n * Data to be sent in the response\n */\n responseData?: Record<string, any> | null;\n\n /**\n * Additional context data\n */\n additionalData?: Record<string, any> | null;\n\n /**\n * HTTP status code for the response\n */\n responseStatus?: number;\n\n /**\n * Typed request body\n */\n body: ReqBody;\n\n /**\n * Prisma query options (where, orderBy, select, etc.)\n */\n prismaQueryOptions?: Record<string, any>;\n\n /**\n * Typed query parameters\n */\n query: Query;\n\n /**\n * JWT token used in authentication process\n */\n accessToken?: string;\n\n /**\n * Query parameters after being handled and transformed by middleware\n */\n transformedQuery?: Record<string, any>;\n\n /**\n * Processed filters from APIFeatures.filters\n */\n filters?: Record<string, any>;\n\n /**\n * Name of the Prisma model being queried\n */\n modelName?: string;\n}\n\nexport interface ArkosResponse<\n ResBody = any,\n Locals extends Record<string, any> = Record<string, any>,\n> extends Response<ResBody, Locals> {}\n\nexport interface ArkosNextFunction extends NextFunction {}\n\nexport
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;AA6LA,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,qCAAa,CAAA;IACb,yCAAiB,CAAA;IACjB,yCAAiB,CAAA;AACnB,CAAC,EALW,oBAAoB,oCAApB,oBAAoB,QAK/B","sourcesContent":["import {\n ErrorRequestHandler,\n NextFunction,\n Request,\n RequestHandler,\n Response,\n} from \"express\";\n\nexport type PrismaOperations = \"findMany\";\n\n/**\n * Type definition for authentication-related Prisma query operations\n * @template T - The Prisma model delegate type\n */\nexport type AuthPrismaQueryOptions<T extends Record<string, any>> = {\n // User profile endpoints\n /**\n * Options for retrieving the current authenticated user's profile\n */\n getMe?: Partial<Parameters<T[\"findUnique\"]>[0]>;\n /**\n * Options for updating the current authenticated user's profile\n */\n updateMe?: Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Options for soft deleting or deactivating the current authenticated user's account\n */\n deleteMe?: Partial<Parameters<T[\"update\"]>[0]>;\n // Authentication endpoints\n /**\n * Options for user login authentication queries\n */\n login?: Partial<Parameters<T[\"findFirst\"]>[0]>;\n /**\n * Options for user registration and account creation\n */\n signup?: Partial<Parameters<T[\"create\"]>[0]>;\n /**\n * Options for updating the current authenticated user's password\n */\n updatePassword?: Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Options for finding multiple auth actions\n */\n findManyAuthAction?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * Options for finding a single auth action\n */\n findOneAuthAction?: Partial<Parameters<T[\"findFirst\"]>[0]>;\n};\n\n/**\n * Base Prisma query options for standard CRUD operations\n * @template T - The Prisma model delegate type\n */\ntype BasePrismaQueryOptions<T extends Record<string, any>> = {\n /**\n * @deprecated Use `global` instead for general query options\n */\n queryOptions?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * Global query options that can be used for all operations\n * Replaces the deprecated queryOptions\n */\n global?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * General find options for findMany and findOne operations\n */\n find?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * General create options for createOne and createMany operations\n */\n create?: Partial<Parameters<T[\"create\"]>[0]>;\n /**\n * General update options for updateOne and updateMany operations\n */\n update?: Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * General delete options for deleteOne and deleteMany operations\n */\n delete?: Partial<Parameters<T[\"delete\"]>[0]>;\n /**\n * General save options for createOne, createMany, updateOne, updateMany operations\n */\n save?:\n | Partial<Parameters<T[\"create\"]>[0]>\n | Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Save options for single record operations (createOne, updateOne)\n */\n saveOne?:\n | Partial<Parameters<T[\"create\"]>[0]>\n | Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Save options for multiple record operations (createMany, updateMany)\n */\n saveMany?:\n | Partial<Parameters<T[\"createMany\"]>[0]>\n | Partial<Parameters<T[\"updateMany\"]>[0]>;\n /**\n * Options for finding a single record (first match)\n */\n findOne?: Partial<Parameters<T[\"findFirst\"]>[0]>;\n /**\n * Options for finding multiple records\n */\n findMany?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * Options for creating a single record\n */\n createOne?: Partial<Parameters<T[\"create\"]>[0]>;\n /**\n * Options for creating multiple records\n */\n createMany?: Partial<Parameters<T[\"createMany\"]>[0]>;\n /**\n * Options for updating a single record\n */\n updateOne?: Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Options for updating multiple records\n */\n updateMany?: Partial<Parameters<T[\"updateMany\"]>[0]>;\n /**\n * Options for deleting a single record\n */\n deleteOne?: Partial<Parameters<T[\"delete\"]>[0]>;\n /**\n * Options for deleting multiple records\n */\n deleteMany?: Partial<Parameters<T[\"deleteMany\"]>[0]>;\n};\n\n/**\n * Type definition for Prisma query operations with flexible options\n * Conditionally provides auth-specific options when ModelName is \"auth\"\n * @template T - The Prisma model delegate type\n * @template ModelName - The model name (defaults to string for standard models)\n */\nexport type PrismaQueryOptions<\n T extends Record<string, any>,\n ModelName extends string = string,\n> = ModelName extends \"auth\"\n ? AuthPrismaQueryOptions<T>\n : BasePrismaQueryOptions<T>;\n/**\n * Interface defining the minimum structure required for Prisma model delegates\n * This allows us to constraint TModel without requiring Prisma imports\n */\nexport type PrismaModelDelegate = {\n create: (args: { data: never; [key: string]: never }) => Promise<any>;\n createMany: (args: { data: never; [key: string]: never }) => Promise<any>;\n findMany: (args: { [key: string]: never }) => Promise<any[]>;\n findFirst: (args: { where: never; [key: string]: never }) => Promise<any>;\n findUnique: (args: { where: never; [key: string]: never }) => Promise<any>;\n update: (args: {\n where: never;\n data: never;\n [key: string]: never;\n }) => Promise<any>;\n updateMany: (args: {\n where: never;\n data: never;\n [key: string]: never;\n }) => Promise<any>;\n delete: (args: { where: never; [key: string]: never }) => Promise<any>;\n deleteMany: (args: { where: never; [key: string]: never }) => Promise<any>;\n count: (args: { where: never; [key: string]: never }) => Promise<number>;\n};\n\nexport interface UserRole {\n id: string;\n createdAt: Date;\n deletedAt?: Date;\n roleId: string;\n role: AuthRole;\n user: User;\n userId: string;\n}\n\nexport interface AuthRole {\n id: string;\n createdAt: Date;\n deletedAt?: Date;\n name: string;\n permissions: AuthPermission[];\n userRoles: UserRole[];\n}\n\nexport enum AuthPermissionAction {\n Create = \"Create\",\n View = \"View\",\n Update = \"Update\",\n Delete = \"Delete\",\n}\n\nexport interface AuthPermission {\n id: string;\n createdAt: Date;\n deletedAt?: Date;\n resource: string;\n action: AuthPermissionAction;\n roleId: string;\n role: AuthRole;\n}\n\nexport interface User extends Record<string, any> {\n id: string;\n isSuperUser: boolean;\n password: string;\n passwordChangedAt?: Date;\n deletedSelfAccountAt: Date;\n isActive: boolean;\n}\n\nexport interface ArkosRequest<\n P extends Record<string, any> = any,\n ResBody = any,\n ReqBody = any,\n Query extends Record<string, any> = any,\n> extends Request<P, ResBody, ReqBody, Query> {\n /**\n * Authenticated user with additional fields\n */\n user?: User & Record<string, any>;\n /**\n * Single uploaded file, populated when using `multer.single()`\n */\n file?: Express.Multer.File;\n /**\n * Uploaded files, populated when using `multer.array()` or `multer.fields()`.\n */\n files?: Express.Multer.File[] | Record<string, Express.Multer.File[]>;\n\n /**\n * Fields to include in relational queries\n */\n relationFields?: Record<string, boolean>;\n\n /**\n * Prisma include options for related data\n */\n include?: Record<string, any>;\n\n /**\n * Data to be sent in the response\n */\n responseData?: Record<string, any> | null;\n\n /**\n * Additional context data\n */\n additionalData?: Record<string, any> | null;\n\n /**\n * HTTP status code for the response\n */\n responseStatus?: number;\n\n /**\n * Typed request body\n */\n body: ReqBody;\n\n /**\n * Prisma query options (where, orderBy, select, etc.)\n */\n prismaQueryOptions?: Record<string, any>;\n\n /**\n * Typed query parameters\n */\n query: Query;\n\n /**\n * JWT token used in authentication process\n */\n accessToken?: string;\n\n /**\n * Query parameters after being handled and transformed by middleware\n */\n transformedQuery?: Record<string, any>;\n\n /**\n * Processed filters from APIFeatures.filters\n */\n filters?: Record<string, any>;\n\n /**\n * Name of the Prisma model being queried\n */\n modelName?: string;\n}\n\nexport interface ArkosResponse<\n ResBody = any,\n Locals extends Record<string, any> = Record<string, any>,\n> extends Response<ResBody, Locals> {}\n\nexport interface ArkosNextFunction extends NextFunction {}\n\nexport type ArkosRequestHandler<\n P extends Record<string, any> = any,\n ResBody = any,\n ReqBody = any,\n ReqQuery extends Record<string, any> = any,\n Locals extends Record<string, any> = Record<string, any>,\n> = (\n req: ArkosRequest<P, ResBody, ReqBody, ReqQuery>,\n res: ArkosResponse<ResBody, Locals>,\n next: ArkosNextFunction\n) => void | Promise<void>;\n\nexport type ArkosErrorRequestHandler<\n P extends Record<string, any> = any,\n ResBody = any,\n ReqBody = any,\n ReqQuery extends Record<string, any> = any,\n Locals extends Record<string, any> = Record<string, any>,\n> = (\n err: any,\n req: ArkosRequest<P, ResBody, ReqBody, ReqQuery>,\n res: ArkosResponse<ResBody, Locals>,\n next: ArkosNextFunction\n) => void | Promise<void>;\n"]}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const deepmerge_helper_1 = __importDefault(require("../helpers/deepmerge.helper"));
|
|
6
|
+
const deepmerge_helper_1 = __importDefault(require("../helpers/deepmerge.helper.js"));
|
|
7
7
|
class ArkosRouterOpenAPIManager {
|
|
8
8
|
addUploadFields(uploadConfig, existingSchema = {}) {
|
|
9
9
|
const uploadSchema = {
|
|
@@ -6,16 +6,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.default = ArkosRouter;
|
|
7
7
|
exports.generateOpenAPIFromApp = generateOpenAPIFromApp;
|
|
8
8
|
const express_1 = require("express");
|
|
9
|
-
const route_config_validator_1 = __importDefault(require("./route-config-validator"));
|
|
10
|
-
const route_config_registry_1 = __importDefault(require("./route-config-registry"));
|
|
11
|
-
const helpers_1 = require("./utils/helpers");
|
|
12
|
-
const exports_1 = require("../../exports");
|
|
13
|
-
const error_handler_1 = require("../../exports/error-handler");
|
|
9
|
+
const route_config_validator_1 = __importDefault(require("./route-config-validator.js"));
|
|
10
|
+
const route_config_registry_1 = __importDefault(require("./route-config-registry.js"));
|
|
11
|
+
const helpers_1 = require("./utils/helpers/index.js");
|
|
12
|
+
const exports_1 = require("../../exports/index.js");
|
|
13
|
+
const error_handler_1 = require("../../exports/error-handler/index.js");
|
|
14
14
|
const zod_to_json_schema_1 = __importDefault(require("zod-to-json-schema"));
|
|
15
|
-
const class_validator_to_json_schema_1 = __importDefault(require("../../modules/swagger/utils/helpers/class-validator-to-json-schema"));
|
|
16
|
-
const openapi_schema_converter_1 = __importDefault(require("../../modules/swagger/utils/helpers/openapi-schema-converter"));
|
|
17
|
-
const upload_manager_1 = __importDefault(require("./utils/helpers/upload-manager"));
|
|
18
|
-
const fs_helpers_1 = require("../helpers/fs.helpers");
|
|
15
|
+
const class_validator_to_json_schema_1 = __importDefault(require("../../modules/swagger/utils/helpers/class-validator-to-json-schema.js"));
|
|
16
|
+
const openapi_schema_converter_1 = __importDefault(require("../../modules/swagger/utils/helpers/openapi-schema-converter.js"));
|
|
17
|
+
const upload_manager_1 = __importDefault(require("./utils/helpers/upload-manager.js"));
|
|
18
|
+
const fs_helpers_1 = require("../helpers/fs.helpers.js");
|
|
19
19
|
function ArkosRouter(options) {
|
|
20
20
|
const router = (0, express_1.Router)(options);
|
|
21
21
|
return new Proxy(router, {
|