axiodb 9.7.9 → 11.9.12
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/README.md +67 -2
- package/lib/Services/Auth/AuthEvents.service.d.ts +15 -0
- package/lib/Services/Auth/AuthEvents.service.js +17 -0
- package/lib/Services/Auth/AuthEvents.service.js.map +1 -0
- package/lib/Services/Auth/AuthSeeder.service.d.ts +16 -0
- package/lib/Services/Auth/AuthSeeder.service.js +99 -0
- package/lib/Services/Auth/AuthSeeder.service.js.map +1 -0
- package/lib/Services/Auth/AuthService.service.d.ts +53 -0
- package/lib/Services/Auth/AuthService.service.js +221 -0
- package/lib/Services/Auth/AuthService.service.js.map +1 -0
- package/lib/Services/Auth/ConfigDatabase.service.d.ts +22 -0
- package/lib/Services/Auth/ConfigDatabase.service.js +47 -0
- package/lib/Services/Auth/ConfigDatabase.service.js.map +1 -0
- package/lib/Services/Auth/CookieCodec.helper.d.ts +10 -0
- package/lib/Services/Auth/CookieCodec.helper.js +30 -0
- package/lib/Services/Auth/CookieCodec.helper.js.map +1 -0
- package/lib/Services/Auth/LoginRateLimiter.service.d.ts +35 -0
- package/lib/Services/Auth/LoginRateLimiter.service.js +89 -0
- package/lib/Services/Auth/LoginRateLimiter.service.js.map +1 -0
- package/lib/Services/Auth/PasswordHasher.helper.d.ts +9 -0
- package/lib/Services/Auth/PasswordHasher.helper.js +54 -0
- package/lib/Services/Auth/PasswordHasher.helper.js.map +1 -0
- package/lib/Services/Auth/PermissionChecker.helper.d.ts +21 -0
- package/lib/Services/Auth/PermissionChecker.helper.js +41 -0
- package/lib/Services/Auth/PermissionChecker.helper.js.map +1 -0
- package/lib/Services/Auth/SessionStore.service.d.ts +23 -0
- package/lib/Services/Auth/SessionStore.service.js +96 -0
- package/lib/Services/Auth/SessionStore.service.js.map +1 -0
- package/lib/Services/Collection/collection.operation.d.ts +6 -0
- package/lib/Services/Collection/collection.operation.js +10 -0
- package/lib/Services/Collection/collection.operation.js.map +1 -1
- package/lib/Services/Index/Index.service.d.ts +20 -0
- package/lib/Services/Index/Index.service.js +25 -1
- package/lib/Services/Index/Index.service.js.map +1 -1
- package/lib/Services/Indexation.operation.d.ts +4 -0
- package/lib/Services/Indexation.operation.js +20 -6
- package/lib/Services/Indexation.operation.js.map +1 -1
- package/lib/client/AxioDBCloud.client.d.ts +20 -1
- package/lib/client/AxioDBCloud.client.js +54 -3
- package/lib/client/AxioDBCloud.client.js.map +1 -1
- package/lib/client/CollectionProxy.d.ts +4 -0
- package/lib/client/CollectionProxy.js +11 -0
- package/lib/client/CollectionProxy.js.map +1 -1
- package/lib/client/types/client.types.d.ts +8 -0
- package/lib/client/types/client.types.js.map +1 -1
- package/lib/config/Interfaces/Auth/auth.interface.d.ts +70 -0
- package/lib/config/Interfaces/Auth/auth.interface.js +4 -0
- package/lib/config/Interfaces/Auth/auth.interface.js.map +1 -0
- package/lib/config/Interfaces/Operation/Indexation.operation.interface.d.ts +2 -0
- package/lib/config/Keys/Permissions.d.ts +64 -0
- package/lib/config/Keys/Permissions.js +121 -0
- package/lib/config/Keys/Permissions.js.map +1 -0
- package/lib/server/config/keys.d.ts +2 -2
- package/lib/server/config/keys.js +109 -1
- package/lib/server/config/keys.js.map +1 -1
- package/lib/server/config/server.js +6 -0
- package/lib/server/config/server.js.map +1 -1
- package/lib/server/controller/Auth/Auth.controller.d.ts +12 -0
- package/lib/server/controller/Auth/Auth.controller.js +162 -0
- package/lib/server/controller/Auth/Auth.controller.js.map +1 -0
- package/lib/server/controller/Auth/RoleManagement.controller.d.ts +9 -0
- package/lib/server/controller/Auth/RoleManagement.controller.js +89 -0
- package/lib/server/controller/Auth/RoleManagement.controller.js.map +1 -0
- package/lib/server/controller/Auth/UserManagement.controller.d.ts +11 -0
- package/lib/server/controller/Auth/UserManagement.controller.js +122 -0
- package/lib/server/controller/Auth/UserManagement.controller.js.map +1 -0
- package/lib/server/controller/Collections/Collection.controller.js +10 -0
- package/lib/server/controller/Collections/Collection.controller.js.map +1 -1
- package/lib/server/controller/Database/Databse.controller.js +17 -0
- package/lib/server/controller/Database/Databse.controller.js.map +1 -1
- package/lib/server/controller/Index/Index.controller.d.ts +35 -0
- package/lib/server/controller/Index/Index.controller.js +148 -0
- package/lib/server/controller/Index/Index.controller.js.map +1 -0
- package/lib/server/controller/Operation/CRUD.controller.js +31 -0
- package/lib/server/controller/Operation/CRUD.controller.js.map +1 -1
- package/lib/server/helper/responseBuilder.helper.d.ts +8 -0
- package/lib/server/helper/responseBuilder.helper.js +11 -1
- package/lib/server/helper/responseBuilder.helper.js.map +1 -1
- package/lib/server/middleware/auth.middleware.d.ts +14 -0
- package/lib/server/middleware/auth.middleware.js +64 -0
- package/lib/server/middleware/auth.middleware.js.map +1 -0
- package/lib/server/middleware/permission.middleware.d.ts +6 -0
- package/lib/server/middleware/permission.middleware.js +36 -0
- package/lib/server/middleware/permission.middleware.js.map +1 -0
- package/lib/server/public/AxioControl/.vite/manifest.json +2 -2
- package/lib/server/public/AxioControl/.vite/ssr-manifest.json +10 -0
- package/lib/server/public/AxioControl/assets/index-D3V1EZ2f.css +1 -0
- package/lib/server/public/AxioControl/assets/index-DyJg6FRw.js +75 -0
- package/lib/server/public/AxioControl/index.html +2 -2
- package/lib/server/public/AxioControl/sw.js +1 -1
- package/lib/server/router/Router.js +18 -1
- package/lib/server/router/Router.js.map +1 -1
- package/lib/server/router/Routers/Auth.routes.d.ts +2 -0
- package/lib/server/router/Routers/Auth.routes.js +27 -0
- package/lib/server/router/Routers/Auth.routes.js.map +1 -0
- package/lib/server/router/Routers/Collection.routes.js +20 -3
- package/lib/server/router/Routers/Collection.routes.js.map +1 -1
- package/lib/server/router/Routers/DB.routes.js +8 -5
- package/lib/server/router/Routers/DB.routes.js.map +1 -1
- package/lib/server/router/Routers/Index.routes.d.ts +7 -0
- package/lib/server/router/Routers/Index.routes.js +38 -0
- package/lib/server/router/Routers/Index.routes.js.map +1 -0
- package/lib/server/router/Routers/Operation.routes.js +31 -10
- package/lib/server/router/Routers/Operation.routes.js.map +1 -1
- package/lib/server/router/Routers/RoleManagement.routes.d.ts +2 -0
- package/lib/server/router/Routers/RoleManagement.routes.js +28 -0
- package/lib/server/router/Routers/RoleManagement.routes.js.map +1 -0
- package/lib/server/router/Routers/UserManagement.routes.d.ts +2 -0
- package/lib/server/router/Routers/UserManagement.routes.js +38 -0
- package/lib/server/router/Routers/UserManagement.routes.js.map +1 -0
- package/lib/tcp/config/keys.d.ts +8 -0
- package/lib/tcp/config/keys.js +8 -0
- package/lib/tcp/config/keys.js.map +1 -1
- package/lib/tcp/config/permissions.d.ts +16 -0
- package/lib/tcp/config/permissions.js +46 -0
- package/lib/tcp/config/permissions.js.map +1 -0
- package/lib/tcp/config/protocol.js +13 -0
- package/lib/tcp/config/protocol.js.map +1 -1
- package/lib/tcp/config/server.d.ts +1 -1
- package/lib/tcp/config/server.js +28 -6
- package/lib/tcp/config/server.js.map +1 -1
- package/lib/tcp/connection/ConnectionManager.d.ts +19 -0
- package/lib/tcp/connection/ConnectionManager.js +31 -0
- package/lib/tcp/connection/ConnectionManager.js.map +1 -1
- package/lib/tcp/connection/RequestContext.d.ts +4 -1
- package/lib/tcp/connection/RequestContext.js +4 -1
- package/lib/tcp/connection/RequestContext.js.map +1 -1
- package/lib/tcp/handler/CommandHandler.d.ts +5 -1
- package/lib/tcp/handler/CommandHandler.js +34 -4
- package/lib/tcp/handler/CommandHandler.js.map +1 -1
- package/lib/tcp/handler/handlers/Auth.handler.d.ts +16 -0
- package/lib/tcp/handler/handlers/Auth.handler.js +91 -0
- package/lib/tcp/handler/handlers/Auth.handler.js.map +1 -0
- package/lib/tcp/handler/handlers/Operation.handler.d.ts +4 -0
- package/lib/tcp/handler/handlers/Operation.handler.js +27 -0
- package/lib/tcp/handler/handlers/Operation.handler.js.map +1 -1
- package/lib/tcp/types/command.types.d.ts +2 -0
- package/lib/tcp/types/command.types.js +5 -0
- package/lib/tcp/types/command.types.js.map +1 -1
- package/lib/tcp/types/protocol.types.d.ts +2 -0
- package/lib/tcp/types/protocol.types.js.map +1 -1
- package/package.json +2 -1
- package/lib/server/public/AxioControl/assets/index-BRkVgnlw.js +0 -75
- package/lib/server/public/AxioControl/assets/index-C8TNGVxT.css +0 -1
|
@@ -9,7 +9,7 @@ export declare enum ServerKeys {
|
|
|
9
9
|
DEFAULT_KEY_ROUNDS = 1
|
|
10
10
|
}
|
|
11
11
|
export declare const CORS_CONFIG: {
|
|
12
|
-
ORIGIN: string;
|
|
12
|
+
ORIGIN: string[];
|
|
13
13
|
METHODS: string[];
|
|
14
14
|
ALLOWED_HEADERS: string[];
|
|
15
15
|
EXPOSED_HEADERS: string[];
|
|
@@ -18,7 +18,7 @@ export declare const CORS_CONFIG: {
|
|
|
18
18
|
};
|
|
19
19
|
export declare const staticPath: string;
|
|
20
20
|
interface MainRoutesInterface {
|
|
21
|
-
method: "GET" | "POST" | "PUT" | "DELETE";
|
|
21
|
+
method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
22
22
|
path: string;
|
|
23
23
|
description: string;
|
|
24
24
|
payload?: Record<string, any>;
|
|
@@ -18,8 +18,12 @@ var ServerKeys;
|
|
|
18
18
|
ServerKeys[ServerKeys["DEFAULT_KEY_ROUNDS"] = 1] = "DEFAULT_KEY_ROUNDS";
|
|
19
19
|
})(ServerKeys || (exports.ServerKeys = ServerKeys = {}));
|
|
20
20
|
// Config for CORS
|
|
21
|
+
// NOTE: ORIGIN cannot be "*" while ALLOW_CREDENTIALS is true - browsers reject
|
|
22
|
+
// wildcard origins on credentialed (cookie-bearing) requests. 5173 is the GUI's
|
|
23
|
+
// Vite dev server; 27018 is where the built GUI is served from in production
|
|
24
|
+
// (same-origin there, so CORS doesn't matter for that case).
|
|
21
25
|
exports.CORS_CONFIG = {
|
|
22
|
-
ORIGIN: "
|
|
26
|
+
ORIGIN: ["http://localhost:5173", "http://localhost:27018"],
|
|
23
27
|
METHODS: ["GET", "HEAD", "PUT", "PATCH", "POST", "DELETE"],
|
|
24
28
|
ALLOWED_HEADERS: ["Content-Type", "Authorization"],
|
|
25
29
|
EXPOSED_HEADERS: ["Content-Length", "X-Requested-With"],
|
|
@@ -117,6 +121,32 @@ exports.AvailableRoutes = [
|
|
|
117
121
|
},
|
|
118
122
|
],
|
|
119
123
|
},
|
|
124
|
+
{
|
|
125
|
+
groupName: "Index",
|
|
126
|
+
description: "Index Management Endpoints",
|
|
127
|
+
Paths: [
|
|
128
|
+
{
|
|
129
|
+
method: "GET",
|
|
130
|
+
path: "/api/index/list/?dbName&collectionName",
|
|
131
|
+
description: "List all indexes registered on a collection",
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
method: "POST",
|
|
135
|
+
path: "/api/index/create/",
|
|
136
|
+
description: "Create one or more indexes on a collection",
|
|
137
|
+
payload: {
|
|
138
|
+
dbName: "string",
|
|
139
|
+
collectionName: "string",
|
|
140
|
+
fieldNames: "array",
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
method: "DELETE",
|
|
145
|
+
path: "/api/index/delete/?dbName&collectionName&indexName",
|
|
146
|
+
description: "Delete an index from a collection",
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
},
|
|
120
150
|
{
|
|
121
151
|
groupName: "CRUD Operations",
|
|
122
152
|
description: "CRUD Operations Endpoints",
|
|
@@ -195,6 +225,84 @@ exports.AvailableRoutes = [
|
|
|
195
225
|
},
|
|
196
226
|
],
|
|
197
227
|
},
|
|
228
|
+
{
|
|
229
|
+
groupName: "Authentication",
|
|
230
|
+
description: "Login, session, and self-service password endpoints",
|
|
231
|
+
Paths: [
|
|
232
|
+
{
|
|
233
|
+
method: "POST",
|
|
234
|
+
path: "/api/auth/login",
|
|
235
|
+
description: "Authenticate with username/password and start a session",
|
|
236
|
+
payload: { username: "string", password: "string" },
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
method: "POST",
|
|
240
|
+
path: "/api/auth/logout",
|
|
241
|
+
description: "End the current session",
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
method: "GET",
|
|
245
|
+
path: "/api/auth/me",
|
|
246
|
+
description: "Get the currently authenticated user's role and permissions",
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
method: "PATCH",
|
|
250
|
+
path: "/api/auth/change-password",
|
|
251
|
+
description: "Change the current user's own password",
|
|
252
|
+
payload: { currentPassword: "string", newPassword: "string" },
|
|
253
|
+
},
|
|
254
|
+
],
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
groupName: "User & Role Management",
|
|
258
|
+
description: "Super Admin-only endpoints for managing users and roles",
|
|
259
|
+
Paths: [
|
|
260
|
+
{
|
|
261
|
+
method: "GET",
|
|
262
|
+
path: "/api/auth/users",
|
|
263
|
+
description: "List all users",
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
method: "POST",
|
|
267
|
+
path: "/api/auth/users",
|
|
268
|
+
description: "Create a new user",
|
|
269
|
+
payload: { username: "string", password: "string", role: "string" },
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
method: "PATCH",
|
|
273
|
+
path: "/api/auth/users/:username/role",
|
|
274
|
+
description: "Change a user's assigned role",
|
|
275
|
+
payload: { role: "string" },
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
method: "PATCH",
|
|
279
|
+
path: "/api/auth/users/:username/reset-password",
|
|
280
|
+
description: "Reset a user's password (forces change on next login)",
|
|
281
|
+
payload: { newPassword: "string" },
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
method: "DELETE",
|
|
285
|
+
path: "/api/auth/users/:username",
|
|
286
|
+
description: "Delete a user",
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
method: "GET",
|
|
290
|
+
path: "/api/auth/roles",
|
|
291
|
+
description: "List all roles",
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
method: "POST",
|
|
295
|
+
path: "/api/auth/roles",
|
|
296
|
+
description: "Create a new role from the predefined permission catalogue",
|
|
297
|
+
payload: { roleName: "string", permissions: "array" },
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
method: "GET",
|
|
301
|
+
path: "/api/auth/roles/permissions",
|
|
302
|
+
description: "List the full predefined permission catalogue",
|
|
303
|
+
},
|
|
304
|
+
],
|
|
305
|
+
},
|
|
198
306
|
];
|
|
199
307
|
exports.AuthorInfo = {
|
|
200
308
|
name: "Ankan Saha",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../source/server/config/keys.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAuD;AACvD,gDAAwB;AAExB,IAAY,UASX;AATD,WAAY,UAAU;IACpB,+CAAY,CAAA;IACZ,mCAAqB,CAAA;IACrB,wCAA0B,CAAA;IAC1B,kDAAoC,CAAA;IACpC,oDAAsC,CAAA;IACtC,uEAAyD,CAAA;IACzD,iDAAwB,IAAI,CAAC,GAAG,EAAE,2BAAA,CAAA;IAClC,uEAAsB,CAAA;AACxB,CAAC,EATW,UAAU,aAAV,UAAU,GAAV,UAAU,QASrB;AAED,kBAAkB;
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../source/server/config/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,11 +17,13 @@ exports.default = createAxioDBControlServer;
|
|
|
17
17
|
const fastify_1 = __importDefault(require("fastify"));
|
|
18
18
|
const cors_1 = __importDefault(require("@fastify/cors"));
|
|
19
19
|
const static_1 = __importDefault(require("@fastify/static"));
|
|
20
|
+
const cookie_1 = __importDefault(require("@fastify/cookie"));
|
|
20
21
|
const path_1 = __importDefault(require("path"));
|
|
21
22
|
const fs_1 = __importDefault(require("fs"));
|
|
22
23
|
const keys_1 = require("./keys");
|
|
23
24
|
const PortFreeChecker_1 = __importDefault(require("./PortFreeChecker"));
|
|
24
25
|
const Router_1 = __importDefault(require("../router/Router"));
|
|
26
|
+
const SessionStore_service_1 = __importDefault(require("../../Services/Auth/SessionStore.service"));
|
|
25
27
|
function createAxioDBControlServer(AxioDBInstance) {
|
|
26
28
|
return __awaiter(this, void 0, void 0, function* () {
|
|
27
29
|
yield (0, PortFreeChecker_1.default)(keys_1.ServerKeys.PORT);
|
|
@@ -39,6 +41,9 @@ function createAxioDBControlServer(AxioDBInstance) {
|
|
|
39
41
|
exposedHeaders: keys_1.CORS_CONFIG.EXPOSED_HEADERS, // Expose specific headers
|
|
40
42
|
maxAge: keys_1.CORS_CONFIG.MAX_AGE, // Cache preflight response for 24 hours
|
|
41
43
|
});
|
|
44
|
+
// Cookie support for session-based authentication (no signing secret needed -
|
|
45
|
+
// the cookie value is meaningless without a matching entry in SessionStore's map)
|
|
46
|
+
yield AxioDBControlServer.register(cookie_1.default);
|
|
42
47
|
// Configure JSON parsing
|
|
43
48
|
AxioDBControlServer.addContentTypeParser("application/json", { parseAs: "string", bodyLimit: 52428800 }, (req, body, done) => {
|
|
44
49
|
try {
|
|
@@ -71,6 +76,7 @@ function createAxioDBControlServer(AxioDBInstance) {
|
|
|
71
76
|
port: Number(keys_1.ServerKeys.PORT),
|
|
72
77
|
host: "0.0.0.0",
|
|
73
78
|
});
|
|
79
|
+
SessionStore_service_1.default.startCleanupSweep();
|
|
74
80
|
console.log(`AxioDB Control Server is running on http://localhost:${keys_1.ServerKeys.PORT}`);
|
|
75
81
|
}
|
|
76
82
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../source/server/config/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,sDAAsD;AACtD,sDAA8B;AAC9B,yDAAwC;AACxC,6DAA4C;AAC5C,gDAAwB;AACxB,4CAAoB;AACpB,iCAA6D;AAC7D,wEAAmD;AAEnD,8DAAsC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../source/server/config/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FastifyReply, FastifyRequest } from "fastify";
|
|
2
|
+
import { ResponseBuilder } from "../../helper/responseBuilder.helper";
|
|
3
|
+
export default class AuthController {
|
|
4
|
+
private readonly authService;
|
|
5
|
+
constructor();
|
|
6
|
+
login(request: FastifyRequest, reply: FastifyReply): Promise<ResponseBuilder>;
|
|
7
|
+
logout(request: FastifyRequest, reply: FastifyReply): Promise<ResponseBuilder>;
|
|
8
|
+
me(request: FastifyRequest, reply: FastifyReply): Promise<ResponseBuilder>;
|
|
9
|
+
changePassword(request: FastifyRequest, reply: FastifyReply): Promise<ResponseBuilder>;
|
|
10
|
+
private setSessionCookie;
|
|
11
|
+
private extractSid;
|
|
12
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
const StatusCode_1 = require("../../../config/Keys/StatusCode");
|
|
49
|
+
const responseBuilder_helper_1 = __importStar(require("../../helper/responseBuilder.helper"));
|
|
50
|
+
const AuthService_service_1 = __importDefault(require("../../../Services/Auth/AuthService.service"));
|
|
51
|
+
const SessionStore_service_1 = __importDefault(require("../../../Services/Auth/SessionStore.service"));
|
|
52
|
+
const CookieCodec_helper_1 = __importDefault(require("../../../Services/Auth/CookieCodec.helper"));
|
|
53
|
+
const PermissionChecker_helper_1 = __importDefault(require("../../../Services/Auth/PermissionChecker.helper"));
|
|
54
|
+
const AuthEvents_service_1 = __importDefault(require("../../../Services/Auth/AuthEvents.service"));
|
|
55
|
+
const LoginRateLimiter_service_1 = __importDefault(require("../../../Services/Auth/LoginRateLimiter.service"));
|
|
56
|
+
const Permissions_1 = require("../../../config/Keys/Permissions");
|
|
57
|
+
const MIN_PASSWORD_LENGTH = 4;
|
|
58
|
+
class AuthController {
|
|
59
|
+
constructor() {
|
|
60
|
+
this.authService = new AuthService_service_1.default();
|
|
61
|
+
}
|
|
62
|
+
login(request, reply) {
|
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
const { username, password } = request.body;
|
|
65
|
+
if (!username || typeof username !== "string") {
|
|
66
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.BAD_REQUEST, "Username is required"));
|
|
67
|
+
}
|
|
68
|
+
if (!password || typeof password !== "string") {
|
|
69
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.BAD_REQUEST, "Password is required"));
|
|
70
|
+
}
|
|
71
|
+
const cooldownRemaining = LoginRateLimiter_service_1.default.getCooldownRemaining(request.ip);
|
|
72
|
+
if (cooldownRemaining > 0) {
|
|
73
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.TOO_MANY_REQUESTS, `Too many failed login attempts. Try again in ${Math.ceil(cooldownRemaining / 1000)}s.`));
|
|
74
|
+
}
|
|
75
|
+
const result = yield this.authService.login(username, password);
|
|
76
|
+
if (!result.success || !result.user) {
|
|
77
|
+
LoginRateLimiter_service_1.default.recordFailure(request.ip);
|
|
78
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.UNAUTHORIZED, result.message));
|
|
79
|
+
}
|
|
80
|
+
LoginRateLimiter_service_1.default.recordSuccess(request.ip);
|
|
81
|
+
const session = SessionStore_service_1.default.createSession(result.user.username, result.user.role, result.user.mustChangePassword);
|
|
82
|
+
this.setSessionCookie(reply, session.sid);
|
|
83
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.OK, "Login successful", {
|
|
84
|
+
username: result.user.username,
|
|
85
|
+
role: result.user.role,
|
|
86
|
+
permissions: PermissionChecker_helper_1.default.getPermissionsForRole(result.user.role),
|
|
87
|
+
mustChangePassword: result.user.mustChangePassword,
|
|
88
|
+
}));
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
logout(request, reply) {
|
|
92
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
+
const sid = this.extractSid(request);
|
|
94
|
+
if (sid) {
|
|
95
|
+
SessionStore_service_1.default.revokeSession(sid);
|
|
96
|
+
}
|
|
97
|
+
reply.clearCookie(Permissions_1.SESSION_COOKIE_NAME, { path: "/" });
|
|
98
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.OK, "Logged out successfully"));
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
me(request, reply) {
|
|
102
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
103
|
+
const authUser = request.authUser;
|
|
104
|
+
if (!authUser) {
|
|
105
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.UNAUTHORIZED, "Not authenticated"));
|
|
106
|
+
}
|
|
107
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.OK, "OK", {
|
|
108
|
+
username: authUser.username,
|
|
109
|
+
role: authUser.role,
|
|
110
|
+
mustChangePassword: authUser.mustChangePassword,
|
|
111
|
+
permissions: PermissionChecker_helper_1.default.getPermissionsForRole(authUser.role),
|
|
112
|
+
}));
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
changePassword(request, reply) {
|
|
116
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
117
|
+
const authUser = request.authUser;
|
|
118
|
+
if (!authUser) {
|
|
119
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.UNAUTHORIZED, "Not authenticated"));
|
|
120
|
+
}
|
|
121
|
+
const { currentPassword, newPassword } = request.body;
|
|
122
|
+
if (!currentPassword || typeof currentPassword !== "string") {
|
|
123
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.BAD_REQUEST, "Current password is required"));
|
|
124
|
+
}
|
|
125
|
+
if (!newPassword || typeof newPassword !== "string" || newPassword.length < MIN_PASSWORD_LENGTH) {
|
|
126
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.BAD_REQUEST, `New password must be at least ${MIN_PASSWORD_LENGTH} characters`));
|
|
127
|
+
}
|
|
128
|
+
const result = yield this.authService.changeOwnPassword(authUser.username, currentPassword, newPassword);
|
|
129
|
+
if (!result.success) {
|
|
130
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.BAD_REQUEST, result.message));
|
|
131
|
+
}
|
|
132
|
+
// Rotate the session so a still-live cookie can't keep referencing the old password state.
|
|
133
|
+
SessionStore_service_1.default.revokeSessionsForUser(authUser.username);
|
|
134
|
+
AuthEvents_service_1.default.emit("user-revoked", authUser.username);
|
|
135
|
+
const session = SessionStore_service_1.default.createSession(authUser.username, authUser.role, false);
|
|
136
|
+
this.setSessionCookie(reply, session.sid);
|
|
137
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.OK, "Password changed successfully", {
|
|
138
|
+
username: authUser.username,
|
|
139
|
+
role: authUser.role,
|
|
140
|
+
permissions: PermissionChecker_helper_1.default.getPermissionsForRole(authUser.role),
|
|
141
|
+
mustChangePassword: false,
|
|
142
|
+
}));
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
setSessionCookie(reply, sid) {
|
|
146
|
+
const cookieValue = CookieCodec_helper_1.default.encode({ sid, iat: Date.now() });
|
|
147
|
+
reply.setCookie(Permissions_1.SESSION_COOKIE_NAME, cookieValue, {
|
|
148
|
+
httpOnly: true,
|
|
149
|
+
sameSite: "lax",
|
|
150
|
+
secure: "auto",
|
|
151
|
+
path: "/",
|
|
152
|
+
maxAge: Permissions_1.SESSION_TTL_MS / 1000,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
extractSid(request) {
|
|
156
|
+
const rawCookie = request.cookies[Permissions_1.SESSION_COOKIE_NAME];
|
|
157
|
+
const payload = rawCookie ? CookieCodec_helper_1.default.decode(rawCookie) : null;
|
|
158
|
+
return payload ? payload.sid : null;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
exports.default = AuthController;
|
|
162
|
+
//# sourceMappingURL=Auth.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Auth.controller.js","sourceRoot":"","sources":["../../../../source/server/controller/Auth/Auth.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FastifyReply, FastifyRequest } from "fastify";
|
|
2
|
+
import { ResponseBuilder } from "../../helper/responseBuilder.helper";
|
|
3
|
+
export default class RoleManagementController {
|
|
4
|
+
private readonly authService;
|
|
5
|
+
constructor();
|
|
6
|
+
listRoles(request: FastifyRequest, reply: FastifyReply): Promise<ResponseBuilder>;
|
|
7
|
+
createRole(request: FastifyRequest, reply: FastifyReply): Promise<ResponseBuilder>;
|
|
8
|
+
listPermissions(request: FastifyRequest, reply: FastifyReply): Promise<ResponseBuilder>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
const StatusCode_1 = require("../../../config/Keys/StatusCode");
|
|
49
|
+
const responseBuilder_helper_1 = __importStar(require("../../helper/responseBuilder.helper"));
|
|
50
|
+
const AuthService_service_1 = __importDefault(require("../../../Services/Auth/AuthService.service"));
|
|
51
|
+
const Permissions_1 = require("../../../config/Keys/Permissions");
|
|
52
|
+
class RoleManagementController {
|
|
53
|
+
constructor() {
|
|
54
|
+
this.authService = new AuthService_service_1.default();
|
|
55
|
+
}
|
|
56
|
+
listRoles(request, reply) {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
const roles = yield this.authService.listRoles();
|
|
59
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.OK, "List of Roles", roles));
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
createRole(request, reply) {
|
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
const { roleName, permissions } = request.body;
|
|
65
|
+
if (!roleName || typeof roleName !== "string" || roleName.trim() === "") {
|
|
66
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.BAD_REQUEST, "Role name is required"));
|
|
67
|
+
}
|
|
68
|
+
if (!Array.isArray(permissions) || permissions.length === 0) {
|
|
69
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.BAD_REQUEST, "At least one permission is required"));
|
|
70
|
+
}
|
|
71
|
+
if (!permissions.every((key) => typeof key === "string")) {
|
|
72
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.BAD_REQUEST, "Permissions must be an array of strings"));
|
|
73
|
+
}
|
|
74
|
+
const result = yield this.authService.createRole(roleName, permissions);
|
|
75
|
+
if (!result.success) {
|
|
76
|
+
const statusCode = result.conflict ? StatusCode_1.StatusCodes.CONFLICT : StatusCode_1.StatusCodes.BAD_REQUEST;
|
|
77
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(statusCode, result.message));
|
|
78
|
+
}
|
|
79
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.CREATED, result.message, { roleName, permissions }));
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
listPermissions(request, reply) {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
return (0, responseBuilder_helper_1.sendResponse)(reply, (0, responseBuilder_helper_1.default)(StatusCode_1.StatusCodes.OK, "Permission catalogue", Permissions_1.PERMISSION_CATALOGUE));
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.default = RoleManagementController;
|
|
89
|
+
//# sourceMappingURL=RoleManagement.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleManagement.controller.js","sourceRoot":"","sources":["../../../../source/server/controller/Auth/RoleManagement.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gEAA8D;AAC9D,8FAAmG;AACnG,qGAAqE;AAErE,kEAAwE;AAExE;IAGE;QACE,IAAI,CAAC,WAAW,GAAG,IAAI,6BAAW,EAAE,CAAC;IACvC,CAAC;IAEY,SAAS,CAAC,OAAuB,EAAE,KAAmB;;YACjE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YACjD,OAAO,IAAA,qCAAY,EAAC,KAAK,EAAE,IAAA,gCAAa,EAAC,wBAAW,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;QACpF,CAAC;KAAA;IAEY,UAAU,CAAC,OAAuB,EAAE,KAAmB;;YAClE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAA6B,CAAC;YAExE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACxE,OAAO,IAAA,qCAAY,EAAC,KAAK,EAAE,IAAA,gCAAa,EAAC,wBAAW,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAC;YAC9F,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5D,OAAO,IAAA,qCAAY,EACjB,KAAK,EACL,IAAA,gCAAa,EAAC,wBAAW,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAC9E,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACzD,OAAO,IAAA,qCAAY,EACjB,KAAK,EACL,IAAA,gCAAa,EAAC,wBAAW,CAAC,WAAW,EAAE,yCAAyC,CAAC,CAClF,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YACxE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,wBAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,wBAAW,CAAC,WAAW,CAAC;gBACpF,OAAO,IAAA,qCAAY,EAAC,KAAK,EAAE,IAAA,gCAAa,EAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,IAAA,qCAAY,EACjB,KAAK,EACL,IAAA,gCAAa,EAAC,wBAAW,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAC9E,CAAC;QACJ,CAAC;KAAA;IAEY,eAAe,CAC1B,OAAuB,EACvB,KAAmB;;YAEnB,OAAO,IAAA,qCAAY,EACjB,KAAK,EACL,IAAA,gCAAa,EAAC,wBAAW,CAAC,EAAE,EAAE,sBAAsB,EAAE,kCAAoB,CAAC,CAC5E,CAAC;QACJ,CAAC;KAAA;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FastifyReply, FastifyRequest } from "fastify";
|
|
2
|
+
import { ResponseBuilder } from "../../helper/responseBuilder.helper";
|
|
3
|
+
export default class UserManagementController {
|
|
4
|
+
private readonly authService;
|
|
5
|
+
constructor();
|
|
6
|
+
listUsers(request: FastifyRequest, reply: FastifyReply): Promise<ResponseBuilder>;
|
|
7
|
+
createUser(request: FastifyRequest, reply: FastifyReply): Promise<ResponseBuilder>;
|
|
8
|
+
resetUserPassword(request: FastifyRequest, reply: FastifyReply): Promise<ResponseBuilder>;
|
|
9
|
+
updateUserRole(request: FastifyRequest, reply: FastifyReply): Promise<ResponseBuilder>;
|
|
10
|
+
deleteUser(request: FastifyRequest, reply: FastifyReply): Promise<ResponseBuilder>;
|
|
11
|
+
}
|