@spinajs/rbac-http-admin 2.0.485 → 2.0.487
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 +104 -5
- package/lib/cjs/config/rbac-http-admin.d.ts +25 -0
- package/lib/cjs/config/rbac-http-admin.d.ts.map +1 -1
- package/lib/cjs/config/rbac-http-admin.js +25 -0
- package/lib/cjs/config/rbac-http-admin.js.map +1 -1
- package/lib/cjs/controllers/Users/Profile.d.ts.map +1 -1
- package/lib/cjs/controllers/Users/Profile.js +3 -1
- package/lib/cjs/controllers/Users/Profile.js.map +1 -1
- package/lib/cjs/controllers/Users/Roles.d.ts +15 -8
- package/lib/cjs/controllers/Users/Roles.d.ts.map +1 -1
- package/lib/cjs/controllers/Users/Roles.js +34 -16
- package/lib/cjs/controllers/Users/Roles.js.map +1 -1
- package/lib/cjs/controllers/Users/Security.d.ts +151 -11
- package/lib/cjs/controllers/Users/Security.d.ts.map +1 -1
- package/lib/cjs/controllers/Users/Security.js +303 -30
- package/lib/cjs/controllers/Users/Security.js.map +1 -1
- package/lib/cjs/controllers/Users/Users.d.ts +97 -14
- package/lib/cjs/controllers/Users/Users.d.ts.map +1 -1
- package/lib/cjs/controllers/Users/Users.js +278 -73
- package/lib/cjs/controllers/Users/Users.js.map +1 -1
- package/lib/cjs/index.d.ts +6 -1
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +5 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interfaces.d.ts +81 -0
- package/lib/cjs/interfaces.d.ts.map +1 -0
- package/lib/cjs/interfaces.js +20 -0
- package/lib/cjs/interfaces.js.map +1 -0
- package/lib/cjs/services/RoleGuard.d.ts +96 -0
- package/lib/cjs/services/RoleGuard.d.ts.map +1 -0
- package/lib/cjs/services/RoleGuard.js +258 -0
- package/lib/cjs/services/RoleGuard.js.map +1 -0
- package/lib/mjs/config/rbac-http-admin.d.ts +25 -0
- package/lib/mjs/config/rbac-http-admin.d.ts.map +1 -1
- package/lib/mjs/config/rbac-http-admin.js +25 -0
- package/lib/mjs/config/rbac-http-admin.js.map +1 -1
- package/lib/mjs/controllers/Users/Profile.d.ts.map +1 -1
- package/lib/mjs/controllers/Users/Profile.js +4 -2
- package/lib/mjs/controllers/Users/Profile.js.map +1 -1
- package/lib/mjs/controllers/Users/Roles.d.ts +15 -8
- package/lib/mjs/controllers/Users/Roles.d.ts.map +1 -1
- package/lib/mjs/controllers/Users/Roles.js +35 -17
- package/lib/mjs/controllers/Users/Roles.js.map +1 -1
- package/lib/mjs/controllers/Users/Security.d.ts +151 -11
- package/lib/mjs/controllers/Users/Security.d.ts.map +1 -1
- package/lib/mjs/controllers/Users/Security.js +304 -31
- package/lib/mjs/controllers/Users/Security.js.map +1 -1
- package/lib/mjs/controllers/Users/Users.d.ts +97 -14
- package/lib/mjs/controllers/Users/Users.d.ts.map +1 -1
- package/lib/mjs/controllers/Users/Users.js +279 -74
- package/lib/mjs/controllers/Users/Users.js.map +1 -1
- package/lib/mjs/index.d.ts +6 -1
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +6 -1
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/interfaces.d.ts +81 -0
- package/lib/mjs/interfaces.d.ts.map +1 -0
- package/lib/mjs/interfaces.js +16 -0
- package/lib/mjs/interfaces.js.map +1 -0
- package/lib/mjs/services/RoleGuard.d.ts +96 -0
- package/lib/mjs/services/RoleGuard.d.ts.map +1 -0
- package/lib/mjs/services/RoleGuard.js +252 -0
- package/lib/mjs/services/RoleGuard.js.map +1 -0
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +14 -12
|
@@ -10,10 +10,15 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
13
|
+
import { AutoinjectService } from '@spinajs/configuration';
|
|
14
|
+
import { BaseController, BasePath, Body, Ok, Patch, Policy } from '@spinajs/http';
|
|
15
|
+
import { FromModel } from '@spinajs/orm-http';
|
|
16
|
+
import { grant, revoke, User } from '@spinajs/rbac';
|
|
17
|
+
import { AuthorizedPolicy, Permission, Resource, User as CurrentUser } from '@spinajs/rbac-http';
|
|
16
18
|
import { Schema } from '@spinajs/validation';
|
|
19
|
+
import { RoleGuard } from '../../interfaces.js';
|
|
20
|
+
// Side effect only — see the note in Users.ts.
|
|
21
|
+
import '../../services/RoleGuard.js';
|
|
17
22
|
let RoleDto = class RoleDto {
|
|
18
23
|
constructor(data) {
|
|
19
24
|
Object.assign(this, data);
|
|
@@ -30,9 +35,14 @@ RoleDto = __decorate([
|
|
|
30
35
|
}),
|
|
31
36
|
__metadata("design:paramtypes", [Object])
|
|
32
37
|
], RoleDto);
|
|
38
|
+
export { RoleDto };
|
|
33
39
|
/**
|
|
34
40
|
* User role management (admin).
|
|
35
41
|
* Grants and revokes RBAC roles for user accounts.
|
|
42
|
+
*
|
|
43
|
+
* Both routes run the configured {@link RoleGuard} before touching anything: a
|
|
44
|
+
* role is the one thing in this API that can grant MORE than the caller has, so
|
|
45
|
+
* "may update users" is not by itself an answer to "may hand out this role".
|
|
36
46
|
* @tags Admin Users
|
|
37
47
|
*/
|
|
38
48
|
let Roles = class Roles extends BaseController {
|
|
@@ -42,13 +52,14 @@ let Roles = class Roles extends BaseController {
|
|
|
42
52
|
* @security cookieAuth
|
|
43
53
|
* @param login User login name
|
|
44
54
|
* @response 200 Role granted successfully
|
|
45
|
-
* @response 400
|
|
55
|
+
* @response 400 Unknown role name
|
|
46
56
|
* @response 401 Unauthorized — valid session required
|
|
47
|
-
* @response 403 Forbidden — updateAny permission required
|
|
57
|
+
* @response 403 Forbidden — updateAny permission required, or the role grants more than the caller holds
|
|
48
58
|
* @response 404 User not found
|
|
49
59
|
*/
|
|
50
|
-
async addRole(
|
|
51
|
-
await
|
|
60
|
+
async addRole(actor, user, roleDto) {
|
|
61
|
+
await this.RoleGuard.assertCanAssignRoles(actor, user, [roleDto.role]);
|
|
62
|
+
await grant(user, roleDto.role);
|
|
52
63
|
return new Ok();
|
|
53
64
|
}
|
|
54
65
|
/**
|
|
@@ -57,32 +68,39 @@ let Roles = class Roles extends BaseController {
|
|
|
57
68
|
* @security cookieAuth
|
|
58
69
|
* @param login User login name
|
|
59
70
|
* @response 200 Role revoked successfully
|
|
60
|
-
* @response 400
|
|
71
|
+
* @response 400 Unknown role name
|
|
61
72
|
* @response 401 Unauthorized — valid session required
|
|
62
|
-
* @response 403 Forbidden — updateAny permission required
|
|
73
|
+
* @response 403 Forbidden — updateAny permission required, or the revocation would lock the caller or the installation out
|
|
63
74
|
* @response 404 User not found
|
|
64
75
|
*/
|
|
65
|
-
async revokeRole(
|
|
66
|
-
await
|
|
76
|
+
async revokeRole(actor, user, roleDto) {
|
|
77
|
+
await this.RoleGuard.assertCanRevokeRole(actor, user, roleDto.role);
|
|
78
|
+
await revoke(user, roleDto.role);
|
|
67
79
|
return new Ok();
|
|
68
80
|
}
|
|
69
81
|
};
|
|
82
|
+
__decorate([
|
|
83
|
+
AutoinjectService('rbac.admin.roleGuard'),
|
|
84
|
+
__metadata("design:type", RoleGuard)
|
|
85
|
+
], Roles.prototype, "RoleGuard", void 0);
|
|
70
86
|
__decorate([
|
|
71
87
|
Patch('add/:login'),
|
|
72
88
|
Permission(['updateAny']),
|
|
73
|
-
__param(0,
|
|
74
|
-
__param(1,
|
|
89
|
+
__param(0, CurrentUser()),
|
|
90
|
+
__param(1, FromModel({ queryField: 'Login', paramField: 'login', include: ['Metadata'] })),
|
|
91
|
+
__param(2, Body()),
|
|
75
92
|
__metadata("design:type", Function),
|
|
76
|
-
__metadata("design:paramtypes", [
|
|
93
|
+
__metadata("design:paramtypes", [User, User, RoleDto]),
|
|
77
94
|
__metadata("design:returntype", Promise)
|
|
78
95
|
], Roles.prototype, "addRole", null);
|
|
79
96
|
__decorate([
|
|
80
97
|
Patch('revoke/:login'),
|
|
81
98
|
Permission(['updateAny']),
|
|
82
|
-
__param(0,
|
|
83
|
-
__param(1,
|
|
99
|
+
__param(0, CurrentUser()),
|
|
100
|
+
__param(1, FromModel({ queryField: 'Login', paramField: 'login', include: ['Metadata'] })),
|
|
101
|
+
__param(2, Body()),
|
|
84
102
|
__metadata("design:type", Function),
|
|
85
|
-
__metadata("design:paramtypes", [
|
|
103
|
+
__metadata("design:paramtypes", [User, User, RoleDto]),
|
|
86
104
|
__metadata("design:returntype", Promise)
|
|
87
105
|
], Roles.prototype, "revokeRole", null);
|
|
88
106
|
Roles = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Roles.js","sourceRoot":"","sources":["../../../../src/controllers/Users/Roles.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"Roles.js","sourceRoot":"","sources":["../../../../src/controllers/Users/Roles.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,51 @@
|
|
|
1
|
-
import { BaseController, Ok } from '@spinajs/http';
|
|
1
|
+
import { BaseController, NotFound, Ok } from '@spinajs/http';
|
|
2
2
|
import { SessionProvider, User } from '@spinajs/rbac';
|
|
3
|
-
|
|
3
|
+
import type { ISession } from '@spinajs/rbac';
|
|
4
|
+
import { Log } from '@spinajs/log';
|
|
5
|
+
import { RoleGuard } from '../../interfaces.js';
|
|
6
|
+
import '../../services/RoleGuard.js';
|
|
7
|
+
export declare class ChangePasswordDto {
|
|
4
8
|
password: string;
|
|
5
9
|
confirmPassword: string;
|
|
6
10
|
constructor(data: any);
|
|
7
11
|
}
|
|
12
|
+
export declare class BanUserDto {
|
|
13
|
+
reason?: string;
|
|
14
|
+
duration?: number;
|
|
15
|
+
constructor(data: Partial<BanUserDto>);
|
|
16
|
+
}
|
|
17
|
+
/** One live session of a user, as reported to an administrator. */
|
|
18
|
+
export interface IAdminSessionEntry {
|
|
19
|
+
/**
|
|
20
|
+
* Opaque handle for the session, NOT the session id — the id is a working
|
|
21
|
+
* credential and an admin listing must not hand out the means to
|
|
22
|
+
* impersonate the accounts it lists.
|
|
23
|
+
*/
|
|
24
|
+
Handle: string;
|
|
25
|
+
/** ISO instant the session was opened */
|
|
26
|
+
Created: string;
|
|
27
|
+
/** ISO instant the session expires, or null when it never does */
|
|
28
|
+
Expires: string | null;
|
|
29
|
+
}
|
|
8
30
|
/**
|
|
9
31
|
* User account security management (admin).
|
|
10
|
-
* Administrative controls for user account security:
|
|
11
|
-
*
|
|
32
|
+
* Administrative controls for user account security: passwords, 2FA, account
|
|
33
|
+
* activation, bans, login lockouts and live sessions.
|
|
34
|
+
*
|
|
35
|
+
* Every route that takes an account out of service goes through the configured
|
|
36
|
+
* {@link RoleGuard} first — an administrator must not be able to lock themselves,
|
|
37
|
+
* or the installation, out through this API.
|
|
12
38
|
* @tags Admin Users
|
|
13
39
|
*/
|
|
14
40
|
export declare class Security extends BaseController {
|
|
41
|
+
protected Log: Log;
|
|
15
42
|
protected SessionProvider: SessionProvider;
|
|
43
|
+
protected RoleGuard: RoleGuard;
|
|
16
44
|
/**
|
|
17
45
|
* Change user password (admin)
|
|
18
46
|
* Sets a new password for the specified user. Both password and confirmPassword must match.
|
|
19
|
-
* Minimum length is 8 characters.
|
|
47
|
+
* Minimum length is 8 characters. Every session of that user is destroyed — the credential
|
|
48
|
+
* they were opened with no longer exists.
|
|
20
49
|
* @security cookieAuth
|
|
21
50
|
* @param user User UUID path parameter
|
|
22
51
|
* @response 200 Password changed successfully
|
|
@@ -26,6 +55,31 @@ export declare class Security extends BaseController {
|
|
|
26
55
|
* @response 404 User not found
|
|
27
56
|
*/
|
|
28
57
|
changeUserPassword(user: User, dto: ChangePasswordDto): Promise<Ok<any>>;
|
|
58
|
+
/**
|
|
59
|
+
* Send a password reset link (admin)
|
|
60
|
+
* Issues a single-use reset token into the user's metadata and emits
|
|
61
|
+
* `UserPasswordChangeRequest` so the application can deliver it. The token itself is never
|
|
62
|
+
* returned. This is how a freshly created account is handed over to its owner — the
|
|
63
|
+
* temporary password generated at creation is deliberately discarded.
|
|
64
|
+
* @security cookieAuth
|
|
65
|
+
* @param user User UUID path parameter
|
|
66
|
+
* @response 200 Reset token issued
|
|
67
|
+
* @response 401 Unauthorized — valid session required
|
|
68
|
+
* @response 403 Forbidden — updateAny permission required on users resource
|
|
69
|
+
* @response 404 User not found
|
|
70
|
+
*/
|
|
71
|
+
requestPasswordReset(user: User): Promise<Ok<any>>;
|
|
72
|
+
/**
|
|
73
|
+
* Expire a user password (admin)
|
|
74
|
+
* Marks the password as expired, which deactivates the account until a new one is set.
|
|
75
|
+
* @security cookieAuth
|
|
76
|
+
* @param user User UUID path parameter
|
|
77
|
+
* @response 200 Password expired
|
|
78
|
+
* @response 401 Unauthorized — valid session required
|
|
79
|
+
* @response 403 Forbidden — deleteAny permission required, or refused by the role guard
|
|
80
|
+
* @response 404 User not found
|
|
81
|
+
*/
|
|
82
|
+
expireUserPassword(actor: User, user: User): Promise<Ok<any>>;
|
|
29
83
|
/**
|
|
30
84
|
* Reset user two-factor authentication (admin)
|
|
31
85
|
* Clears the TOTP secret and disables 2FA for the specified user.
|
|
@@ -38,17 +92,42 @@ export declare class Security extends BaseController {
|
|
|
38
92
|
* @response 404 User not found
|
|
39
93
|
*/
|
|
40
94
|
reset2faToken(user: User): Promise<Ok<any>>;
|
|
95
|
+
/**
|
|
96
|
+
* Enable two-factor authentication for a user (admin)
|
|
97
|
+
* Initializes a TOTP secret for the account. Returns whatever the configured
|
|
98
|
+
* two-factor provider produces for enrolment (an otpauth url for the default provider) —
|
|
99
|
+
* deliver it to the user over a channel you trust.
|
|
100
|
+
* @security cookieAuth
|
|
101
|
+
* @param user User UUID path parameter
|
|
102
|
+
* @response 200 2FA enabled
|
|
103
|
+
* @response 401 Unauthorized — valid session required
|
|
104
|
+
* @response 403 Forbidden — updateAny permission required on users resource
|
|
105
|
+
* @response 404 User not found
|
|
106
|
+
*/
|
|
107
|
+
enable2Fa(user: User): Promise<Ok<unknown>>;
|
|
108
|
+
/**
|
|
109
|
+
* Disable two-factor authentication for a user (admin)
|
|
110
|
+
* Removes the TOTP secret and turns the second factor off for the account.
|
|
111
|
+
* @security cookieAuth
|
|
112
|
+
* @param user User UUID path parameter
|
|
113
|
+
* @response 200 2FA disabled
|
|
114
|
+
* @response 401 Unauthorized — valid session required
|
|
115
|
+
* @response 403 Forbidden — updateAny permission required on users resource
|
|
116
|
+
* @response 404 User not found
|
|
117
|
+
*/
|
|
118
|
+
disable2Fa(user: User): Promise<Ok<any>>;
|
|
41
119
|
/**
|
|
42
120
|
* Deactivate user account (admin)
|
|
43
|
-
* Marks the user account as inactive, preventing login without
|
|
121
|
+
* Marks the user account as inactive and destroys its sessions, preventing login without
|
|
122
|
+
* deleting the record.
|
|
44
123
|
* @security cookieAuth
|
|
45
124
|
* @param user User UUID path parameter
|
|
46
125
|
* @response 200 Account deactivated successfully
|
|
47
126
|
* @response 401 Unauthorized — valid session required
|
|
48
|
-
* @response 403 Forbidden — deleteAny permission required
|
|
127
|
+
* @response 403 Forbidden — deleteAny permission required, or refused by the role guard
|
|
49
128
|
* @response 404 User not found
|
|
50
129
|
*/
|
|
51
|
-
deactivateUser(user: User): Promise<Ok<any>>;
|
|
130
|
+
deactivateUser(actor: User, user: User): Promise<Ok<any>>;
|
|
52
131
|
/**
|
|
53
132
|
* Activate user account (admin)
|
|
54
133
|
* Marks a previously deactivated user account as active, restoring login access.
|
|
@@ -56,10 +135,71 @@ export declare class Security extends BaseController {
|
|
|
56
135
|
* @param user User UUID path parameter
|
|
57
136
|
* @response 200 Account activated successfully
|
|
58
137
|
* @response 401 Unauthorized — valid session required
|
|
59
|
-
* @response 403 Forbidden —
|
|
138
|
+
* @response 403 Forbidden — updateAny permission required on users resource
|
|
60
139
|
* @response 404 User not found
|
|
61
140
|
*/
|
|
62
141
|
activateUser(user: User): Promise<Ok<any>>;
|
|
142
|
+
/**
|
|
143
|
+
* Ban a user (admin)
|
|
144
|
+
* Bans the account for `duration` seconds (24h when omitted), records the reason, and
|
|
145
|
+
* destroys every session it holds.
|
|
146
|
+
* @security cookieAuth
|
|
147
|
+
* @param user User UUID path parameter
|
|
148
|
+
* @response 200 Account banned
|
|
149
|
+
* @response 400 Account is already banned
|
|
150
|
+
* @response 401 Unauthorized — valid session required
|
|
151
|
+
* @response 403 Forbidden — deleteAny permission required, or refused by the role guard
|
|
152
|
+
* @response 404 User not found
|
|
153
|
+
*/
|
|
154
|
+
banUser(actor: User, user: User, dto: BanUserDto): Promise<Ok<any>>;
|
|
155
|
+
/**
|
|
156
|
+
* Unban a user (admin)
|
|
157
|
+
* Clears the ban metadata from the account.
|
|
158
|
+
* @security cookieAuth
|
|
159
|
+
* @param user User UUID path parameter
|
|
160
|
+
* @response 200 Account unbanned
|
|
161
|
+
* @response 400 Account is not banned
|
|
162
|
+
* @response 401 Unauthorized — valid session required
|
|
163
|
+
* @response 403 Forbidden — updateAny permission required on users resource
|
|
164
|
+
* @response 404 User not found
|
|
165
|
+
*/
|
|
166
|
+
unbanUser(user: User): Promise<Ok<any>>;
|
|
167
|
+
/**
|
|
168
|
+
* Clear a login lockout (admin)
|
|
169
|
+
* Removes the failed-attempt counter and the lockout window opened by the login throttle,
|
|
170
|
+
* letting the user try again immediately. Without this the only remedy is waiting out
|
|
171
|
+
* `rbac.password.lockoutTime`.
|
|
172
|
+
* @security cookieAuth
|
|
173
|
+
* @param user User UUID path parameter
|
|
174
|
+
* @response 200 Lockout cleared
|
|
175
|
+
* @response 401 Unauthorized — valid session required
|
|
176
|
+
* @response 403 Forbidden — updateAny permission required on users resource
|
|
177
|
+
* @response 404 User not found
|
|
178
|
+
*/
|
|
179
|
+
unlockUser(user: User): Promise<Ok<any>>;
|
|
180
|
+
/**
|
|
181
|
+
* List sessions of a user (admin)
|
|
182
|
+
* Returns every live session of the account, newest first, identified by an opaque handle.
|
|
183
|
+
* @security cookieAuth
|
|
184
|
+
* @param user User UUID path parameter
|
|
185
|
+
* @returns {IAdminSessionEntry[]} Live sessions of the user
|
|
186
|
+
* @response 401 Unauthorized — valid session required
|
|
187
|
+
* @response 403 Forbidden — readAny permission required on users resource
|
|
188
|
+
* @response 404 User not found
|
|
189
|
+
*/
|
|
190
|
+
listSessions(user: User): Promise<Ok<IAdminSessionEntry[]>>;
|
|
191
|
+
/**
|
|
192
|
+
* Revoke one session of a user (admin)
|
|
193
|
+
* Ends a single session, addressed by the handle returned from the listing.
|
|
194
|
+
* @security cookieAuth
|
|
195
|
+
* @param user User UUID path parameter
|
|
196
|
+
* @param handle Session handle as returned by `GET /users/security/sessions/:user`
|
|
197
|
+
* @response 200 Session revoked
|
|
198
|
+
* @response 401 Unauthorized — valid session required
|
|
199
|
+
* @response 403 Forbidden — updateAny permission required on users resource
|
|
200
|
+
* @response 404 No such session for this user
|
|
201
|
+
*/
|
|
202
|
+
revokeSession(user: User, handle: string): Promise<Ok | NotFound>;
|
|
63
203
|
/**
|
|
64
204
|
* Force logout user (admin)
|
|
65
205
|
* Invalidates all active sessions for the specified user, immediately ending any current logins.
|
|
@@ -70,7 +210,7 @@ export declare class Security extends BaseController {
|
|
|
70
210
|
* @response 403 Forbidden — updateAny permission required on users resource
|
|
71
211
|
* @response 404 User not found
|
|
72
212
|
*/
|
|
73
|
-
logoutUser(user: User): Promise<Ok<
|
|
213
|
+
logoutUser(user: User): Promise<Ok<null>>;
|
|
214
|
+
protected toEntry(session: ISession): IAdminSessionEntry;
|
|
74
215
|
}
|
|
75
|
-
export {};
|
|
76
216
|
//# sourceMappingURL=Security.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Security.d.ts","sourceRoot":"","sources":["../../../../src/controllers/Users/Security.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Security.d.ts","sourceRoot":"","sources":["../../../../src/controllers/Users/Security.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAA4B,QAAQ,EAAE,EAAE,EAA8B,MAAM,eAAe,CAAC;AACnH,OAAO,EAAmG,eAAe,EAAS,IAAI,EAAwB,MAAM,eAAe,CAAC;AACpL,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,OAAO,6BAA6B,CAAC;AAErC,qBAwBa,iBAAiB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;gBAEnB,IAAI,EAAE,GAAG;CAGtB;AAED,qBAQa,UAAU;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAEb,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;CAGtC;AAED,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAEhB,kEAAkE;IAClE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,qBAGa,QAAS,SAAQ,cAAc;IAE1C,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAGnB,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAG3C,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IAE/B;;;;;;;;;;;;OAYG;IAGU,kBAAkB,CAA2D,IAAI,EAAE,IAAI,EAAU,GAAG,EAAE,iBAAiB;IAKpI;;;;;;;;;;;;OAYG;IAGU,oBAAoB,CAA2D,IAAI,EAAE,IAAI;IAKtG;;;;;;;;;OASG;IAGU,kBAAkB,CAAgB,KAAK,EAAE,IAAI,EAA4D,IAAI,EAAE,IAAI;IAShI;;;;;;;;;;OAUG;IAGU,aAAa,CAA2D,IAAI,EAAE,IAAI;IAK/F;;;;;;;;;;;OAWG;IAGU,SAAS,CAA2D,IAAI,EAAE,IAAI;IAI3F;;;;;;;;;OASG;IAGU,UAAU,CAA2D,IAAI,EAAE,IAAI;IAK5F;;;;;;;;;;OAUG;IAGU,cAAc,CAAgB,KAAK,EAAE,IAAI,EAA4D,IAAI,EAAE,IAAI;IAO5H;;;;;;;;;OASG;IAGU,YAAY,CAA2D,IAAI,EAAE,IAAI;IAK9F;;;;;;;;;;;OAWG;IAGU,OAAO,CAAgB,KAAK,EAAE,IAAI,EAA4D,IAAI,EAAE,IAAI,EAAU,GAAG,EAAE,UAAU;IAO9I;;;;;;;;;;OAUG;IAGU,SAAS,CAA2D,IAAI,EAAE,IAAI;IAK3F;;;;;;;;;;;OAWG;IAGU,UAAU,CAA2D,IAAI,EAAE,IAAI;IAS5F;;;;;;;;;OASG;IAGU,YAAY,CAAoC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAQ3G;;;;;;;;;;OAUG;IAGU,aAAa,CAAoC,IAAI,EAAE,IAAI,EAAW,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC;IAiB1H;;;;;;;;;OASG;IAGU,UAAU,CAAoC,IAAI,EAAE,IAAI;IAQrE,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,kBAAkB;CAOzD"}
|