@spinajs/rbac-http-user 2.0.470 → 2.0.472

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.
Files changed (67) hide show
  1. package/lib/cjs/controllers/LoginController.d.ts +35 -3
  2. package/lib/cjs/controllers/LoginController.d.ts.map +1 -1
  3. package/lib/cjs/controllers/LoginController.js +37 -10
  4. package/lib/cjs/controllers/LoginController.js.map +1 -1
  5. package/lib/cjs/controllers/TwoFactorAuthController.d.ts +39 -3
  6. package/lib/cjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
  7. package/lib/cjs/controllers/TwoFactorAuthController.js +35 -0
  8. package/lib/cjs/controllers/TwoFactorAuthController.js.map +1 -1
  9. package/lib/cjs/controllers/UserController.d.ts +37 -3
  10. package/lib/cjs/controllers/UserController.d.ts.map +1 -1
  11. package/lib/cjs/controllers/UserController.js +33 -0
  12. package/lib/cjs/controllers/UserController.js.map +1 -1
  13. package/lib/cjs/controllers/UserMetadataController.d.ts +134 -11
  14. package/lib/cjs/controllers/UserMetadataController.d.ts.map +1 -1
  15. package/lib/cjs/controllers/UserMetadataController.js +130 -8
  16. package/lib/cjs/controllers/UserMetadataController.js.map +1 -1
  17. package/lib/cjs/dto/metadata-dto.d.ts +3 -0
  18. package/lib/cjs/dto/metadata-dto.d.ts.map +1 -1
  19. package/lib/cjs/dto/metadata-dto.js +3 -3
  20. package/lib/cjs/dto/metadata-dto.js.map +1 -1
  21. package/lib/cjs/dto/password-dto.d.ts +3 -0
  22. package/lib/cjs/dto/password-dto.d.ts.map +1 -1
  23. package/lib/cjs/dto/password-dto.js +3 -3
  24. package/lib/cjs/dto/password-dto.js.map +1 -1
  25. package/lib/cjs/dto/token-dto.d.ts +2 -0
  26. package/lib/cjs/dto/token-dto.d.ts.map +1 -1
  27. package/lib/cjs/dto/token-dto.js +2 -1
  28. package/lib/cjs/dto/token-dto.js.map +1 -1
  29. package/lib/cjs/dto/userLogin-dto.d.ts +3 -1
  30. package/lib/cjs/dto/userLogin-dto.d.ts.map +1 -1
  31. package/lib/cjs/dto/userLogin-dto.js +2 -2
  32. package/lib/cjs/dto/userLogin-dto.js.map +1 -1
  33. package/lib/mjs/controllers/LoginController.d.ts +35 -3
  34. package/lib/mjs/controllers/LoginController.d.ts.map +1 -1
  35. package/lib/mjs/controllers/LoginController.js +37 -10
  36. package/lib/mjs/controllers/LoginController.js.map +1 -1
  37. package/lib/mjs/controllers/TwoFactorAuthController.d.ts +39 -3
  38. package/lib/mjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
  39. package/lib/mjs/controllers/TwoFactorAuthController.js +36 -1
  40. package/lib/mjs/controllers/TwoFactorAuthController.js.map +1 -1
  41. package/lib/mjs/controllers/UserController.d.ts +37 -3
  42. package/lib/mjs/controllers/UserController.d.ts.map +1 -1
  43. package/lib/mjs/controllers/UserController.js +33 -0
  44. package/lib/mjs/controllers/UserController.js.map +1 -1
  45. package/lib/mjs/controllers/UserMetadataController.d.ts +134 -11
  46. package/lib/mjs/controllers/UserMetadataController.d.ts.map +1 -1
  47. package/lib/mjs/controllers/UserMetadataController.js +130 -8
  48. package/lib/mjs/controllers/UserMetadataController.js.map +1 -1
  49. package/lib/mjs/dto/metadata-dto.d.ts +3 -0
  50. package/lib/mjs/dto/metadata-dto.d.ts.map +1 -1
  51. package/lib/mjs/dto/metadata-dto.js +3 -3
  52. package/lib/mjs/dto/metadata-dto.js.map +1 -1
  53. package/lib/mjs/dto/password-dto.d.ts +3 -0
  54. package/lib/mjs/dto/password-dto.d.ts.map +1 -1
  55. package/lib/mjs/dto/password-dto.js +3 -3
  56. package/lib/mjs/dto/password-dto.js.map +1 -1
  57. package/lib/mjs/dto/token-dto.d.ts +2 -0
  58. package/lib/mjs/dto/token-dto.d.ts.map +1 -1
  59. package/lib/mjs/dto/token-dto.js +2 -1
  60. package/lib/mjs/dto/token-dto.js.map +1 -1
  61. package/lib/mjs/dto/userLogin-dto.d.ts +3 -1
  62. package/lib/mjs/dto/userLogin-dto.d.ts.map +1 -1
  63. package/lib/mjs/dto/userLogin-dto.js +2 -2
  64. package/lib/mjs/dto/userLogin-dto.js.map +1 -1
  65. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  66. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  67. package/package.json +11 -11
@@ -20,29 +20,80 @@ const orm_http_1 = require("@spinajs/orm-http");
20
20
  const metadata_dto_js_1 = require("../dto/metadata-dto.js");
21
21
  const orm_1 = require("@spinajs/orm");
22
22
  const FilterableUserMetadata_js_1 = require("../models/FilterableUserMetadata.js");
23
+ /**
24
+ * User metadata management.
25
+ * Provides CRUD operations for key-value metadata entries attached to user accounts.
26
+ * Admin routes operate on any user (identified by UUID), while own routes operate on the
27
+ * currently authenticated user's metadata.
28
+ * @tags User Metadata
29
+ */
23
30
  let UserMetadataController = class UserMetadataController extends http_1.BaseController {
24
31
  /**
25
- * SPECIFIC USER FUNCTIONS ( ADMIN FUNCTIONS )
32
+ * List metadata for a specific user (admin)
33
+ * Returns a paginated, filtered, and ordered list of metadata entries for the given user.
34
+ * @security cookieAuth
35
+ * @param user User UUID path parameter
36
+ * @param pagination.page Page number (zero-based)
37
+ * @param pagination.limit Number of entries per page
38
+ * @param order.column Column to sort by (default: Id)
39
+ * @param order.order Sort direction: ASC or DESC (default: DESC)
40
+ * @returns {IUserMetadataEntry[]} Paginated list of metadata entries for the user
41
+ * @response 401 Unauthorized — valid session required
42
+ * @response 403 Forbidden — readAny permission required
43
+ * @response 404 User not found
26
44
  */
27
45
  async readUserMeta(user, pagination, order, filter) {
28
46
  return new http_1.Ok(FilterableUserMetadata_js_1.FilterableUserMetadata.select().where({
29
47
  user_id: user.Id
30
- }).filter(filter?.filters, filter?.op)
31
- .take(pagination?.limit ?? undefined)
32
- .skip(pagination?.limit * pagination?.page || 0)
48
+ }).filter(filter?.filters ?? [], filter?.op)
49
+ .take(pagination?.limit ?? 0)
50
+ .skip((pagination?.limit ?? 0) * (pagination?.page ?? 0))
33
51
  .order(order?.column ?? 'Id', order?.order ?? orm_1.SortOrder.DESC));
34
52
  }
53
+ /**
54
+ * Get a single metadata entry for a specific user (admin)
55
+ * Retrieves one metadata entry by key for the given user.
56
+ * @security cookieAuth
57
+ * @param user User UUID path parameter
58
+ * @param key Metadata key to retrieve
59
+ * @returns {IUserMetadataEntry} Single metadata entry for the user
60
+ * @response 401 Unauthorized — valid session required
61
+ * @response 403 Forbidden — readAny permission required
62
+ * @response 404 User or metadata key not found
63
+ */
35
64
  async getUserMeta(user, key) {
36
65
  return new http_1.Ok(rbac_1.UserMetadata.where({
37
66
  Key: key,
38
67
  user_id: user.Id
39
68
  }).firstOrFail());
40
69
  }
70
+ /**
71
+ * Add or update metadata for a specific user (admin)
72
+ * Inserts a new metadata entry for the given user, or updates it if the key already exists.
73
+ * @security cookieAuth
74
+ * @param user User UUID path parameter
75
+ * @response 200 Metadata created or updated successfully
76
+ * @response 401 Unauthorized — valid session required
77
+ * @response 403 Forbidden — updateAny permission required
78
+ * @response 404 User not found
79
+ */
41
80
  async addUserMetadata(user, metadata) {
42
81
  metadata.User.attach(user);
43
82
  await metadata.insert(orm_1.InsertBehaviour.InsertOrUpdate);
44
83
  return new http_1.Ok();
45
84
  }
85
+ /**
86
+ * Update a metadata entry for a specific user (admin)
87
+ * Updates Key, Value, and Type of an existing metadata entry identified by Id or Key.
88
+ * @security cookieAuth
89
+ * @param _user User UUID path parameter (used for authorization scope)
90
+ * @param meta Metadata Id or Key to update
91
+
92
+ * @response 200 Metadata updated successfully
93
+ * @response 401 Unauthorized — valid session required
94
+ * @response 403 Forbidden — updateAny permission required
95
+ * @response 404 User or metadata entry not found
96
+ */
46
97
  async updateUserMetadata(meta, _user, data) {
47
98
  await meta.update({
48
99
  Key: data.Key,
@@ -51,6 +102,17 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
51
102
  });
52
103
  return new http_1.Ok();
53
104
  }
105
+ /**
106
+ * Delete a metadata entry for a specific user (admin)
107
+ * Permanently removes a metadata entry by Id from the given user's metadata.
108
+ * @security cookieAuth
109
+ * @param user User UUID path parameter
110
+ * @param meta Metadata Id to delete
111
+ * @response 200 Metadata deleted successfully
112
+ * @response 401 Unauthorized — valid session required
113
+ * @response 403 Forbidden — deleteAny permission required
114
+ * @response 404 User or metadata entry not found
115
+ */
54
116
  async deleteUserMetadata(user, meta) {
55
117
  await rbac_1.UserMetadata.destroy().where({
56
118
  Id: meta,
@@ -59,22 +121,72 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
59
121
  return new http_1.Ok();
60
122
  }
61
123
  /**
62
- * --------------------------------------------------------------------------
124
+ * List own metadata
125
+ * Returns a paginated, filtered, and ordered list of metadata entries for the authenticated user.
126
+ * @security cookieAuth
127
+ * @param pagination.page Page number (zero-based)
128
+ * @param pagination.limit Number of entries per page
129
+ * @param order.column Column to sort by (default: Id)
130
+ * @param order.order Sort direction: ASC or DESC (default: DESC)
131
+ * @returns {IUserMetadataEntry[]} Paginated list of own metadata entries
132
+ * @response 401 Unauthorized — valid session required
133
+ * @response 403 Forbidden — readOwn permission required
134
+ */
135
+ /**
136
+ * List own metadata
137
+ * Returns a paginated, filtered, and ordered list of metadata entries for the authenticated user.
138
+ * @security cookieAuth
139
+ * @param pagination.page Page number (zero-based)
140
+ * @param pagination.limit Number of entries per page
141
+ * @param order.column Column to sort by (default: Id)
142
+ * @param order.order Sort direction: ASC or DESC (default: DESC)
143
+ * @returns {IUserMetadataEntry[]} Paginated list of own metadata entries
144
+ * @response 401 Unauthorized — valid session required
145
+ * @response 403 Forbidden — readOwn permission required
63
146
  */
64
147
  async readMeta(pagination, order, filter) {
65
- return new http_1.Ok(FilterableUserMetadata_js_1.FilterableUserMetadata.select().filter(filter?.filters, filter?.op)
66
- .take(pagination?.limit ?? undefined)
67
- .skip(pagination?.limit * pagination?.page || 0)
148
+ return new http_1.Ok(FilterableUserMetadata_js_1.FilterableUserMetadata.select().filter(filter?.filters ?? [], filter?.op)
149
+ .take(pagination?.limit ?? 0)
150
+ .skip((pagination?.limit ?? 0) * (pagination?.page ?? 0))
68
151
  .order(order?.column ?? 'Id', order?.order ?? orm_1.SortOrder.DESC));
69
152
  }
153
+ /**
154
+ * Get own metadata entry by key
155
+ * Retrieves a single metadata entry by key for the authenticated user.
156
+ * @security cookieAuth
157
+ * @param key Metadata key to retrieve
158
+ * @returns {IUserMetadataEntry} Single own metadata entry by key
159
+ * @response 401 Unauthorized — valid session required
160
+ * @response 403 Forbidden — readOwn permission required
161
+ * @response 404 Metadata key not found
162
+ */
70
163
  async getMeta(key) {
71
164
  return new http_1.Ok(rbac_1.UserMetadata.where({
72
165
  Key: key,
73
166
  }).firstOrFail());
74
167
  }
168
+ /**
169
+ * Add or update own metadata
170
+ * Inserts a new metadata entry for the authenticated user, or updates it if the key already exists.
171
+ * @security cookieAuth
172
+ * @response 200 Metadata created or updated successfully
173
+ * @response 401 Unauthorized — valid session required
174
+ * @response 403 Forbidden — updateOwn permission required
175
+ */
75
176
  async addMetadata(metadata) {
76
177
  await metadata.insert(orm_1.InsertBehaviour.InsertOrUpdate);
77
178
  }
179
+ /**
180
+ * Update own metadata entry
181
+ * Updates Key, Value, and Type of an existing metadata entry identified by Id or Key.
182
+ * @security cookieAuth
183
+ * @param meta Metadata Id or Key to update
184
+
185
+ * @response 200 Metadata updated successfully
186
+ * @response 401 Unauthorized — valid session required
187
+ * @response 403 Forbidden — updateOwn permission required
188
+ * @response 404 Metadata entry not found
189
+ */
78
190
  async updateMetadata(meta, data) {
79
191
  await rbac_1.UserMetadata.update({
80
192
  Key: data.Key,
@@ -83,6 +195,16 @@ let UserMetadataController = class UserMetadataController extends http_1.BaseCon
83
195
  }).where("Key", meta).orWhere("Id", meta);
84
196
  return new http_1.Ok();
85
197
  }
198
+ /**
199
+ * Delete own metadata entry
200
+ * Permanently removes a metadata entry by Id from the authenticated user's metadata.
201
+ * @security cookieAuth
202
+ * @param meta Metadata Id to delete
203
+ * @response 200 Metadata deleted successfully
204
+ * @response 401 Unauthorized — valid session required
205
+ * @response 403 Forbidden — deleteOwn permission required
206
+ * @response 404 Metadata entry not found
207
+ */
86
208
  async deleteMetadata(meta) {
87
209
  await rbac_1.UserMetadata.destroy().where({
88
210
  Id: meta
@@ -1 +1 @@
1
- {"version":3,"file":"UserMetadataController.js","sourceRoot":"","sources":["../../../src/controllers/UserMetadataController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UserMetadataController.js","sourceRoot":"","sources":["../../../src/controllers/UserMetadataController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wCAAgH;AAChH,wCAAgE;AAChE,kDAA4E;AAC5E,gDAAwG;AACxG,4DAAyD;AACzD,sCAA0D;AAC1D,mFAA6E;AAE7E;;;;;;GAMG;AAII,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,qBAAc;IAEtD;;;;;;;;;;;;;OAaG;IAGU,AAAN,KAAK,CAAC,YAAY,CACc,IAAe,EACzC,UAA0B,EAC1B,KAAgB,EAEzB,MAAuB;QAEvB,OAAO,IAAI,SAAE,CAAC,kDAAsB,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC;YAChD,OAAO,EAAE,IAAI,CAAC,EAAE;SACnB,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;aACvC,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;aAC5B,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;aACxD,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,eAAS,CAAC,IAAI,CAAC,CAChE,CAAC;IACN,CAAC;IAGD;;;;;;;;;;OAUG;IAGU,AAAN,KAAK,CAAC,WAAW,CACe,IAAe,EACzC,GAAW;QACpB,OAAO,IAAI,SAAE,CAAC,mBAAY,CAAC,KAAK,CAAC;YAC7B,GAAG,EAAE,GAAG;YACR,OAAO,EAAE,IAAI,CAAC,EAAE;SACnB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACtB,CAAC;IAED;;;;;;;;;OASG;IAGU,AAAN,KAAK,CAAC,eAAe,CACW,IAAe,EACvC,QAAsB;QAEjC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,QAAQ,CAAC,MAAM,CAAC,qBAAe,CAAC,cAAc,CAAC,CAAC;QACtD,OAAO,IAAI,SAAE,EAAE,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;OAWG;IAGU,AAAN,KAAK,CAAC,kBAAkB,CAOxB,IAAkB,EACc,KAAgB,EAC3C,IAAqB;QAC7B,MAAM,IAAI,CAAC,MAAM,CAAC;YACd,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB,CAAC,CAAA;QAEF,OAAO,IAAI,SAAE,EAAE,CAAC;IACpB,CAAC;IAED;;;;;;;;;;OAUG;IAGU,AAAN,KAAK,CAAC,kBAAkB,CACQ,IAAe,EACzC,IAAY;QACrB,MAAM,mBAAY,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;YAC/B,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,IAAI,CAAC,EAAE;SACnB,CAAC,CAAC;QAEH,OAAO,IAAI,SAAE,EAAE,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;OAWG;IAIH;;;;;;;;;;;OAWG;IAGU,AAAN,KAAK,CAAC,QAAQ,CACR,UAA0B,EAC1B,KAAgB,EAEzB,MAAuB;QAEvB,OAAO,IAAI,SAAE,CAAC,kDAAsB,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;aAClF,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;aAC5B,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;aACxD,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,eAAS,CAAC,IAAI,CAAC,CAChE,CAAC;IACN,CAAC;IAED;;;;;;;;;OASG;IAGU,AAAN,KAAK,CAAC,OAAO,CAAU,GAAW;QACrC,OAAO,IAAI,SAAE,CAAC,mBAAY,CAAC,KAAK,CAAC;YAC7B,GAAG,EAAE,GAAG;SACX,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACtB,CAAC;IAED;;;;;;;OAOG;IAGU,AAAN,KAAK,CAAC,WAAW,CAAY,QAAsB;QACtD,MAAM,QAAQ,CAAC,MAAM,CAAC,qBAAe,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;OAUG;IAGU,AAAN,KAAK,CAAC,cAAc,CAAU,IAAY,EAAU,IAAqB;QAC5E,MAAM,mBAAY,CAAC,MAAM,CAAC;YACtB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE1C,OAAO,IAAI,SAAE,EAAE,CAAC;IACpB,CAAC;IAED;;;;;;;;;OASG;IAGU,AAAN,KAAK,CAAC,cAAc,CAAU,IAAY;QAC7C,MAAM,mBAAY,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;YAC/B,EAAE,EAAE,IAAI;SACX,CAAC,CAAC;QAEH,OAAO,IAAI,SAAE,EAAE,CAAC;IACpB,CAAC;CACJ,CAAA;AA3PY,wDAAsB;AAkBlB;IAFZ,IAAA,UAAG,EAAC,gBAAgB,CAAC;IACrB,IAAA,sBAAU,EAAC,CAAC,SAAS,CAAC,CAAC;IAEnB,WAAA,IAAA,oBAAS,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IACjC,WAAA,IAAA,YAAK,GAAE,CAAA;IACP,WAAA,IAAA,YAAK,GAAE,CAAA;IACP,WAAA,IAAA,iBAAM,EAAC,kDAAsB,CAAC,CAAA;;qCAHU,WAAS;QAC5B,wBAAa;QAClB,mBAAQ;;0DAW5B;AAgBY;IAFZ,IAAA,UAAG,EAAC,qBAAqB,CAAC;IAC1B,IAAA,sBAAU,EAAC,CAAC,SAAS,CAAC,CAAC;IAEnB,WAAA,IAAA,oBAAS,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IACjC,WAAA,IAAA,YAAK,GAAE,CAAA;;qCADiC,WAAS;;yDAMrD;AAcY;IAFZ,IAAA,WAAI,EAAC,gBAAgB,CAAC;IACtB,IAAA,sBAAU,EAAC,CAAC,WAAW,CAAC,CAAC;IAErB,WAAA,IAAA,oBAAS,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IACjC,WAAA,IAAA,kBAAO,GAAE,CAAA;;qCAD+B,WAAS;QAC7B,mBAAY;;6DAKpC;AAgBY;IAFZ,IAAA,YAAK,EAAC,uBAAuB,CAAC;IAC9B,IAAA,sBAAU,EAAC,CAAC,WAAW,CAAC,CAAC;IAErB,WAAA,IAAA,oBAAS,EAAC;QACP,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI;YAC7B,OAAO,IAAI,CAAC,KAAK,CAAC;gBACd,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC/C,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QACnC,CAAC,CAAC;KACL,CAAC,CAAA;IACD,WAAA,IAAA,oBAAS,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IACjC,WAAA,IAAA,WAAI,GAAE,CAAA;;qCAFE,mBAAY;QACqB,WAAS;QACrC,iCAAe;;gEAQhC;AAeY;IAFZ,IAAA,UAAG,EAAC,sBAAsB,CAAC;IAC3B,IAAA,sBAAU,EAAC,CAAC,WAAW,CAAC,CAAC;IAErB,WAAA,IAAA,oBAAS,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IACjC,WAAA,IAAA,YAAK,GAAE,CAAA;;qCADiC,WAAS;;gEAQrD;AA+BY;IAFZ,IAAA,UAAG,EAAC,UAAU,CAAC;IACf,IAAA,sBAAU,EAAC,CAAC,SAAS,CAAC,CAAC;IAEnB,WAAA,IAAA,YAAK,GAAE,CAAA;IACP,WAAA,IAAA,YAAK,GAAE,CAAA;IACP,WAAA,IAAA,iBAAM,EAAC,kDAAsB,CAAC,CAAA;;qCAFT,wBAAa;QAClB,mBAAQ;;sDAS5B;AAcY;IAFZ,IAAA,UAAG,EAAC,eAAe,CAAC;IACpB,IAAA,sBAAU,EAAC,CAAC,SAAS,CAAC,CAAC;IACF,WAAA,IAAA,YAAK,GAAE,CAAA;;;;qDAI5B;AAYY;IAFZ,IAAA,WAAI,EAAC,UAAU,CAAC;IAChB,IAAA,sBAAU,EAAC,CAAC,WAAW,CAAC,CAAC;IACA,WAAA,IAAA,kBAAO,GAAE,CAAA;;qCAAW,mBAAY;;yDAEzD;AAeY;IAFZ,IAAA,YAAK,EAAC,gBAAgB,CAAC;IACvB,IAAA,sBAAU,EAAC,CAAC,WAAW,CAAC,CAAC;IACG,WAAA,IAAA,YAAK,GAAE,CAAA;IAAgB,WAAA,IAAA,WAAI,GAAE,CAAA;;6CAAO,iCAAe;;4DAQ/E;AAcY;IAFZ,IAAA,UAAG,EAAC,gBAAgB,CAAC;IACrB,IAAA,sBAAU,EAAC,CAAC,WAAW,CAAC,CAAC;IACG,WAAA,IAAA,YAAK,GAAE,CAAA;;;;4DAMnC;iCA1PQ,sBAAsB;IAHlC,IAAA,eAAQ,EAAC,MAAM,CAAC;IAChB,IAAA,oBAAQ,EAAC,eAAe,CAAC;IACzB,IAAA,aAAM,EAAC,4BAAgB,CAAC;GACZ,sBAAsB,CA2PlC"}
@@ -7,13 +7,16 @@ export declare const MetadataDtoSchema: {
7
7
  type: string;
8
8
  maxLength: number;
9
9
  minLength: number;
10
+ description: string;
10
11
  };
11
12
  Value: {
12
13
  type: string;
14
+ description: string;
13
15
  };
14
16
  Type: {
15
17
  type: string;
16
18
  enum: string[];
19
+ description: string;
17
20
  };
18
21
  };
19
22
  required: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-dto.d.ts","sourceRoot":"","sources":["../../../src/dto/metadata-dto.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;CAU7B,CAAC;AAEF,qBACa,eAAe;IACjB,GAAG,EAAG,MAAM,CAAC;IACb,KAAK,EAAG,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;gBACjE,IAAI,EAAE,GAAG;CAGxB"}
1
+ {"version":3,"file":"metadata-dto.d.ts","sourceRoot":"","sources":["../../../src/dto/metadata-dto.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;CAU7B,CAAC;AAEF,qBACa,eAAe;IACjB,GAAG,EAAG,MAAM,CAAC;IACb,KAAK,EAAG,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;gBACjE,IAAI,EAAE,GAAG;CAGxB"}
@@ -16,9 +16,9 @@ exports.MetadataDtoSchema = {
16
16
  title: 'User metadata DTO',
17
17
  type: 'object',
18
18
  properties: {
19
- Key: { type: 'string', maxLength: 255, minLength: 6 },
20
- Value: { type: 'string' },
21
- Type: { type: "string", enum: ['number', 'float', 'string', 'json', 'boolean', 'datetime'] }
19
+ Key: { type: 'string', maxLength: 255, minLength: 6, description: 'Metadata key (dot-notation supported, e.g. user:niceName)' },
20
+ Value: { type: 'string', description: 'Metadata value stored as a string regardless of Type' },
21
+ Type: { type: 'string', enum: ['number', 'float', 'string', 'json', 'boolean', 'datetime'], description: 'Declared value type used for serialization/deserialization' },
22
22
  },
23
23
  required: ['Key', 'Type'],
24
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-dto.js","sourceRoot":"","sources":["../../../src/dto/metadata-dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA6C;AAEhC,QAAA,iBAAiB,GAAG;IAC7B,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,mBAAmB;IAC1B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE;QACrD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE;KAC/F;IACD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;CAC5B,CAAC;AAGK,IAAM,eAAe,GAArB,MAAM,eAAe;IAIxB,YAAY,IAAS;QACjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;CACJ,CAAA;AAPY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAM,EAAC,yBAAiB,CAAC;;GACb,eAAe,CAO3B"}
1
+ {"version":3,"file":"metadata-dto.js","sourceRoot":"","sources":["../../../src/dto/metadata-dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA6C;AAEhC,QAAA,iBAAiB,GAAG;IAC7B,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,mBAAmB;IAC1B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,2DAA2D,EAAE;QAC/H,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sDAAsD,EAAE;QAC9F,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,4DAA4D,EAAE;KAC1K;IACD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;CAC5B,CAAC;AAGK,IAAM,eAAe,GAArB,MAAM,eAAe;IAIxB,YAAY,IAAS;QACjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;CACJ,CAAA;AAPY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAM,EAAC,yBAAiB,CAAC;;GACb,eAAe,CAO3B"}
@@ -7,16 +7,19 @@ export declare const PasswordDtoSchema: {
7
7
  type: string;
8
8
  maxLength: number;
9
9
  minLength: number;
10
+ description: string;
10
11
  };
11
12
  Password: {
12
13
  type: string;
13
14
  maxLength: number;
14
15
  minLength: number;
16
+ description: string;
15
17
  };
16
18
  ConfirmPassword: {
17
19
  type: string;
18
20
  maxLength: number;
19
21
  minLength: number;
22
+ description: string;
20
23
  };
21
24
  };
22
25
  required: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"password-dto.d.ts","sourceRoot":"","sources":["../../../src/dto/password-dto.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;CAU7B,CAAC;AAEF,qBACa,WAAW;IACf,WAAW,EAAE,MAAM,CAAC;IAEpB,QAAQ,EAAE,MAAM,CAAC;IAEjB,eAAe,EAAE,MAAM,CAAC;gBAEnB,IAAI,EAAE,GAAG;CAGtB"}
1
+ {"version":3,"file":"password-dto.d.ts","sourceRoot":"","sources":["../../../src/dto/password-dto.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;CAU7B,CAAC;AAEF,qBACa,WAAW;IACf,WAAW,EAAE,MAAM,CAAC;IAEpB,QAAQ,EAAE,MAAM,CAAC;IAEjB,eAAe,EAAE,MAAM,CAAC;gBAEnB,IAAI,EAAE,GAAG;CAGtB"}
@@ -16,9 +16,9 @@ exports.PasswordDtoSchema = {
16
16
  title: 'User password DTO',
17
17
  type: 'object',
18
18
  properties: {
19
- OldPassword: { type: 'string', maxLength: 32, minLength: 6 },
20
- Password: { type: 'string', maxLength: 32, minLength: 6 },
21
- ConfirmPassword: { type: 'string', maxLength: 32, minLength: 6 },
19
+ OldPassword: { type: 'string', maxLength: 32, minLength: 6, description: 'Current password for verification' },
20
+ Password: { type: 'string', maxLength: 32, minLength: 6, description: 'New password (6–32 characters)' },
21
+ ConfirmPassword: { type: 'string', maxLength: 32, minLength: 6, description: 'Must match Password' },
22
22
  },
23
23
  required: ['OldPassword', 'Password', 'ConfirmPassword'],
24
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"password-dto.js","sourceRoot":"","sources":["../../../src/dto/password-dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA6C;AAEhC,QAAA,iBAAiB,GAAG;IAC/B,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,mBAAmB;IAC1B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;QAC5D,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;QACzD,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;KACjE;IACD,QAAQ,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,iBAAiB,CAAC;CACzD,CAAC;AAGK,IAAM,WAAW,GAAjB,MAAM,WAAW;IAOtB,YAAY,IAAS;QACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AAVY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAM,EAAC,yBAAiB,CAAC;;GACb,WAAW,CAUvB"}
1
+ {"version":3,"file":"password-dto.js","sourceRoot":"","sources":["../../../src/dto/password-dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA6C;AAEhC,QAAA,iBAAiB,GAAG;IAC/B,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,mBAAmB;IAC1B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE;QAC9G,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE;QACxG,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE;KACrG;IACD,QAAQ,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,iBAAiB,CAAC;CACzD,CAAC;AAGK,IAAM,WAAW,GAAjB,MAAM,WAAW;IAOtB,YAAY,IAAS;QACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AAVY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAM,EAAC,yBAAiB,CAAC;;GACb,WAAW,CAUvB"}
@@ -6,8 +6,10 @@ export declare const TokenDtoSchema: {
6
6
  Token: {
7
7
  type: string;
8
8
  maxLength: number;
9
+ description: string;
9
10
  };
10
11
  };
12
+ required: string[];
11
13
  };
12
14
  export declare class TokenDto {
13
15
  Token: string;
@@ -1 +1 @@
1
- {"version":3,"file":"token-dto.d.ts","sourceRoot":"","sources":["../../../src/dto/token-dto.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc;;;;;;;;;;CAO1B,CAAC;AAEF,qBACa,QAAQ;IACZ,KAAK,EAAE,MAAM,CAAC;gBAET,IAAI,EAAE,GAAG;CAGtB"}
1
+ {"version":3,"file":"token-dto.d.ts","sourceRoot":"","sources":["../../../src/dto/token-dto.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc;;;;;;;;;;;;CAQ1B,CAAC;AAEF,qBACa,QAAQ;IACZ,KAAK,EAAE,MAAM,CAAC;gBAET,IAAI,EAAE,GAAG;CAGtB"}
@@ -16,8 +16,9 @@ exports.TokenDtoSchema = {
16
16
  title: 'Token DTO',
17
17
  type: 'object',
18
18
  properties: {
19
- Token: { type: 'string', maxLength: 64 },
19
+ Token: { type: 'string', maxLength: 64, description: 'Six-digit TOTP code from the authenticator app' },
20
20
  },
21
+ required: ['Token'],
21
22
  };
22
23
  let TokenDto = class TokenDto {
23
24
  constructor(data) {
@@ -1 +1 @@
1
- {"version":3,"file":"token-dto.js","sourceRoot":"","sources":["../../../src/dto/token-dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA6C;AAChC,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;KACzC;CACF,CAAC;AAGK,IAAM,QAAQ,GAAd,MAAM,QAAQ;IAGnB,YAAY,IAAS;QACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AANY,4BAAQ;mBAAR,QAAQ;IADpB,IAAA,mBAAM,EAAC,sBAAc,CAAC;;GACV,QAAQ,CAMpB"}
1
+ {"version":3,"file":"token-dto.js","sourceRoot":"","sources":["../../../src/dto/token-dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA6C;AAChC,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,gDAAgD,EAAE;KACxG;IACD,QAAQ,EAAE,CAAC,OAAO,CAAC;CACpB,CAAC;AAGK,IAAM,QAAQ,GAAd,MAAM,QAAQ;IAGnB,YAAY,IAAS;QACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AANY,4BAAQ;mBAAR,QAAQ;IADpB,IAAA,mBAAM,EAAC,sBAAc,CAAC;;GACV,QAAQ,CAMpB"}
@@ -3,13 +3,15 @@ export declare const UserLoginDtoSchema: {
3
3
  title: string;
4
4
  type: string;
5
5
  properties: {
6
- Login: {
6
+ Email: {
7
7
  type: string;
8
8
  format: string;
9
+ description: string;
9
10
  };
10
11
  Password: {
11
12
  type: string;
12
13
  maxLength: number;
14
+ description: string;
13
15
  };
14
16
  };
15
17
  required: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"userLogin-dto.d.ts","sourceRoot":"","sources":["../../../src/dto/userLogin-dto.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;CAS9B,CAAC;AAEF,qBACa,YAAY;IAChB,KAAK,EAAE,MAAM,CAAC;IAEd,QAAQ,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,GAAG;CAGtB"}
1
+ {"version":3,"file":"userLogin-dto.d.ts","sourceRoot":"","sources":["../../../src/dto/userLogin-dto.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;CAS9B,CAAC;AAEF,qBACa,YAAY;IAChB,KAAK,EAAE,MAAM,CAAC;IAEd,QAAQ,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,GAAG;CAGtB"}
@@ -16,8 +16,8 @@ exports.UserLoginDtoSchema = {
16
16
  title: 'User login DTO',
17
17
  type: 'object',
18
18
  properties: {
19
- Login: { type: 'string', format: 'email' },
20
- Password: { type: 'string', maxLength: 32 },
19
+ Email: { type: 'string', format: 'email', description: 'User email address' },
20
+ Password: { type: 'string', maxLength: 32, description: 'User password' },
21
21
  },
22
22
  required: ['Email', 'Password'],
23
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"userLogin-dto.js","sourceRoot":"","sources":["../../../src/dto/userLogin-dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA6C;AAEhC,QAAA,kBAAkB,GAAG;IAChC,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,gBAAgB;IACvB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;QAC1C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;KAC5C;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;CAChC,CAAC;AAGK,IAAM,YAAY,GAAlB,MAAM,YAAY;IAKvB,YAAY,IAAS;QACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AARY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAM,EAAC,0BAAkB,CAAC;;GACd,YAAY,CAQxB"}
1
+ {"version":3,"file":"userLogin-dto.js","sourceRoot":"","sources":["../../../src/dto/userLogin-dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA6C;AAEhC,QAAA,kBAAkB,GAAG;IAChC,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,gBAAgB;IACvB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE;QAC7E,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE;KAC1E;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;CAChC,CAAC;AAGK,IAAM,YAAY,GAAlB,MAAM,YAAY;IAKvB,YAAY,IAAS;QACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AARY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAM,EAAC,0BAAkB,CAAC;;GACd,YAAY,CAQxB"}
@@ -2,7 +2,14 @@ import { UserLoginDto } from '../dto/userLogin-dto.js';
2
2
  import { BaseController, Ok, Unauthorized } from '@spinajs/http';
3
3
  import { AuthProvider, SessionProvider, AccessControl } from '@spinajs/rbac';
4
4
  import { Configuration } from '@spinajs/configuration';
5
+ import { ILoginResponse } from '@spinajs/rbac-http';
5
6
  import { User } from '@spinajs/rbac';
7
+ /**
8
+ * Authentication endpoints.
9
+ * Handles user login, logout, and current-session inspection.
10
+ * All session state is maintained via the signed `ssid` cookie.
11
+ * @tags Authentication
12
+ */
6
13
  export declare class LoginController extends BaseController {
7
14
  protected Configuration: Configuration;
8
15
  protected AuthProvider: AuthProvider;
@@ -12,8 +19,33 @@ export declare class LoginController extends BaseController {
12
19
  protected TwoFactorAuthForceUser: boolean;
13
20
  protected SessionCookieConfig: any;
14
21
  protected AC: AccessControl;
15
- login(logged: User, ssid: string, credentials: UserLoginDto): Promise<Ok | Unauthorized>;
16
- logout(ssid: string): Promise<Ok>;
17
- whoami(User: User): Promise<Ok>;
22
+ /**
23
+ * Login
24
+ * Authenticates the user with email and password. On success, sets the signed `ssid` session cookie
25
+ * and returns user data with their RBAC grants. When two-factor authentication is enabled and
26
+ * configured for the user, the response instead signals that 2FA verification is required.
27
+ * If the caller already has an active session it is invalidated before creating a new one.
28
+ * @security []
29
+ * @returns {ILoginResponse} On full login: IUserWithGrants. On 2FA required: ITwoFactorAuthRequired. On 2FA setup required: ITwoFactorInitRequired
30
+ * @response 401 Invalid email or password
31
+ */
32
+ login(logged: User, ssid: string, credentials: UserLoginDto): Promise<Ok<ILoginResponse> | Unauthorized>;
33
+ /**
34
+ * Logout
35
+ * Destroys the current session identified by the `ssid` cookie and clears the cookie on the client.
36
+ * Requires the user to be logged in (session exists), but full authorization (2FA) is not required.
37
+ * @security cookieAuth
38
+ * @response 401 No active session
39
+ */
40
+ logout(ssid: string): Promise<Ok<any>>;
41
+ /**
42
+ * Get current user
43
+ * Returns the user object associated with the current session.
44
+ * Requires the user to be logged in (session exists), but full authorization (2FA) is not required.
45
+ * @security cookieAuth
46
+ * @returns {IUserProfile} User data from the current session
47
+ * @response 401 No active session
48
+ */
49
+ whoami(User: User): Promise<Ok<User>>;
18
50
  }
19
51
  //# sourceMappingURL=LoginController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoginController.d.ts","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAwB,EAAE,EAAe,YAAY,EAAU,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,eAAe,EAAsB,aAAa,EAAiB,MAAM,eAAe,CAAC;AAEhH,OAAO,EAA6B,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGlF,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,qBACa,eAAgB,SAAQ,cAAc;IAEjD,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IAGvC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAGrC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAK3C,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAKxC,SAAS,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAMxC,SAAS,CAAC,sBAAsB,EAAE,OAAO,CAAC;IAG1C,SAAS,CAAC,mBAAmB,EAAE,GAAG,CAAC;IAGnC,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAGf,KAAK,CAAiB,MAAM,EAAE,IAAI,EAAgB,IAAI,EAAE,MAAM,EAAU,WAAW,EAAE,YAAY;IA8GjG,MAAM,CAAe,IAAI,EAAE,MAAM;IA4BjC,MAAM,CAAiB,IAAI,EAAE,IAAI;CAK/C"}
1
+ {"version":3,"file":"LoginController.d.ts","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAwB,EAAE,EAAe,YAAY,EAAU,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,eAAe,EAAsB,aAAa,EAAiB,MAAM,eAAe,CAAC;AAEhH,OAAO,EAA6B,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,EAAsC,cAAc,EAAmB,MAAM,oBAAoB,CAAC;AACzG,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC;;;;;GAKG;AACH,qBACa,eAAgB,SAAQ,cAAc;IAEjD,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IAGvC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAGrC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAK3C,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAKxC,SAAS,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAMxC,SAAS,CAAC,sBAAsB,EAAE,OAAO,CAAC;IAG1C,SAAS,CAAC,mBAAmB,EAAE,GAAG,CAAC;IAGnC,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAE5B;;;;;;;;;OASG;IAEU,KAAK,CAAiB,MAAM,EAAE,IAAI,EAAgB,IAAI,EAAE,MAAM,EAAU,WAAW,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;IAwG3J;;;;;;OAMG;IAGU,MAAM,CAAe,IAAI,EAAE,MAAM;IA0B9C;;;;;;;OAOG;IAGU,MAAM,CAAiB,IAAI,EAAE,IAAI;CAK/C"}
@@ -17,7 +17,23 @@ import { Autoinject } from '@spinajs/di';
17
17
  import { AutoinjectService, Config, Configuration } from '@spinajs/configuration';
18
18
  import { LoggedPolicy, User as UserRouteArg } from '@spinajs/rbac-http';
19
19
  import { User } from '@spinajs/rbac';
20
+ /**
21
+ * Authentication endpoints.
22
+ * Handles user login, logout, and current-session inspection.
23
+ * All session state is maintained via the signed `ssid` cookie.
24
+ * @tags Authentication
25
+ */
20
26
  let LoginController = class LoginController extends BaseController {
27
+ /**
28
+ * Login
29
+ * Authenticates the user with email and password. On success, sets the signed `ssid` session cookie
30
+ * and returns user data with their RBAC grants. When two-factor authentication is enabled and
31
+ * configured for the user, the response instead signals that 2FA verification is required.
32
+ * If the caller already has an active session it is invalidated before creating a new one.
33
+ * @security []
34
+ * @returns {ILoginResponse} On full login: IUserWithGrants. On 2FA required: ITwoFactorAuthRequired. On 2FA setup required: ITwoFactorInitRequired
35
+ * @response 401 Invalid email or password
36
+ */
21
37
  async login(logged, ssid, credentials) {
22
38
  try {
23
39
  // if logged user is already logged in, delete his session
@@ -42,7 +58,7 @@ let LoginController = class LoginController extends BaseController {
42
58
  },
43
59
  },
44
60
  ];
45
- let result = {};
61
+ let result;
46
62
  session.Data.set('User', user.Uuid);
47
63
  // we have two states for user
48
64
  // LOGGED - when user use proper login/password and session is created
@@ -58,9 +74,7 @@ let LoginController = class LoginController extends BaseController {
58
74
  });
59
75
  session.Data.set('Authorized', false);
60
76
  session.Data.set('TwoFactorAuth', true);
61
- result = {
62
- TwoFactorInitRequired: true,
63
- };
77
+ result = { TwoFactorInitRequired: true };
64
78
  }
65
79
  else if (this.TwoFactorAuthEnabled && user.Metadata['2fa:enabled']) {
66
80
  this._log.trace('User logged in, 2fa required', {
@@ -68,19 +82,17 @@ let LoginController = class LoginController extends BaseController {
68
82
  });
69
83
  session.Data.set('Authorized', false);
70
84
  session.Data.set('TwoFactorAuth', true);
71
- result = {
72
- TwoFactorAuthRequired: true,
73
- };
85
+ result = { TwoFactorAuthRequired: true };
74
86
  }
75
87
  else {
76
88
  session.Data.set('Authorized', true);
77
89
  const grants = this.AC.getGrants();
78
90
  const userGrants = user.Role.map(r => _unwindGrants(r, grants));
79
91
  const combinedGrants = Object.assign({}, ...userGrants);
92
+ // dehydrateWithRelations({ dateTimeFormat: 'iso' }) converts DateTime to ISO strings
93
+ // at runtime — the ORM types don't reflect the dateTimeFormat option in generics
80
94
  result = {
81
- ...user.dehydrateWithRelations({
82
- dateTimeFormat: "iso"
83
- }),
95
+ ...user.dehydrateWithRelations({ dateTimeFormat: "iso" }),
84
96
  Grants: combinedGrants,
85
97
  };
86
98
  }
@@ -102,6 +114,13 @@ let LoginController = class LoginController extends BaseController {
102
114
  });
103
115
  }
104
116
  }
117
+ /**
118
+ * Logout
119
+ * Destroys the current session identified by the `ssid` cookie and clears the cookie on the client.
120
+ * Requires the user to be logged in (session exists), but full authorization (2FA) is not required.
121
+ * @security cookieAuth
122
+ * @response 401 No active session
123
+ */
105
124
  async logout(ssid) {
106
125
  if (!ssid) {
107
126
  return new Ok();
@@ -124,6 +143,14 @@ let LoginController = class LoginController extends BaseController {
124
143
  ],
125
144
  });
126
145
  }
146
+ /**
147
+ * Get current user
148
+ * Returns the user object associated with the current session.
149
+ * Requires the user to be logged in (session exists), but full authorization (2FA) is not required.
150
+ * @security cookieAuth
151
+ * @returns {IUserProfile} User data from the current session
152
+ * @response 401 No active session
153
+ */
127
154
  async whoami(User) {
128
155
  // user is taken from session data
129
156
  return new Ok(User);
@@ -1 +1 @@
1
- {"version":3,"file":"LoginController.js","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LoginController.js","sourceRoot":"","sources":["../../../src/controllers/LoginController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,EAAE,YAAY,EAAE,IAAI,IAAI,YAAY,EAAmC,MAAM,oBAAoB,CAAC;AACzG,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC;;;;;GAKG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,cAAc;IAgCjD;;;;;;;;;OASG;IAEU,AAAN,KAAK,CAAC,KAAK,CAAiB,MAAY,EAAgB,IAAY,EAAU,WAAyB;QAC5G,IAAI,CAAC;YAEH,0DAA0D;YAC1D,2BAA2B;YAC3B,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAElC,MAAM,QAAQ,GAAG;gBACf;oBACE,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,OAAO,CAAC,SAAS;oBACxB,OAAO,EAAE;wBACP,MAAM,EAAE,IAAI;wBACZ,QAAQ,EAAE,IAAI;wBAEd,4BAA4B;wBAC5B,MAAM,EAAE,IAAI,CAAC,qBAAqB,GAAG,IAAI;wBAEzC,8BAA8B;wBAC9B,2BAA2B;wBAC3B,GAAG,IAAI,CAAC,mBAAmB;qBAC5B;iBACF;aACF,CAAC;YACF,IAAI,MAAsB,CAAC;YAE3B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEpC,8BAA8B;YAC9B,sEAAsE;YACtE,+EAA+E;YAC/E,yDAAyD;YACzD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;YAEzB,gDAAgD;YAChD,OAAO,CAAC,MAAM,EAAE,CAAC;YAIjB,IAAI,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAmC,EAAE;oBACnD,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB,CAAC,CAAC;gBAEH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;gBAExC,MAAM,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;YAC3C,CAAC;iBACI,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBAEnE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,8BAA8B,EAAE;oBAC9C,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB,CAAC,CAAC;gBAEH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;gBAExC,MAAM,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBAEN,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAErC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC;gBAExD,qFAAqF;gBACrF,iFAAiF;gBACjF,MAAM,GAAG;oBACP,GAAG,IAAI,CAAC,sBAAsB,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;oBACzD,MAAM,EAAE,cAAc;iBACO,CAAC;YAClC,CAAC;YAGD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iCAAiC,EAAE;gBACjD,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEzC,OAAO,IAAI,EAAE,CAAC,MAAM,EAAE;gBACpB,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;QAEL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAErB,OAAO,IAAI,YAAY,CAAC;gBACtB,KAAK,EAAE;oBACL,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,6BAA6B;iBACvC;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IAGU,AAAN,KAAK,CAAC,MAAM,CAAe,IAAY;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,EAAE,EAAE,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAExC,gDAAgD;QAChD,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE;YAClB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,EAAE;oBACT,OAAO,EAAE;wBACP,QAAQ,EAAE,IAAI;wBACd,MAAM,EAAE,CAAC;wBAET,8BAA8B;wBAC9B,2BAA2B;wBAC3B,GAAG,IAAI,CAAC,mBAAmB;qBAC5B;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IAGU,AAAN,KAAK,CAAC,MAAM,CAAiB,IAAU;QAE5C,kCAAkC;QAClC,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;CACF,CAAA;AAnMW;IADT,UAAU,EAAE;8BACY,aAAa;sDAAC;AAG7B;IADT,iBAAiB,CAAC,WAAW,CAAC;8BACP,YAAY;qDAAC;AAG3B;IADT,iBAAiB,CAAC,cAAc,CAAC;8BACP,eAAe;wDAAC;AAKjC;IAHT,MAAM,CAAC,yBAAyB,EAAE;QACjC,YAAY,EAAE,GAAG;KAClB,CAAC;;8DACsC;AAK9B;IAHT,MAAM,CAAC,4BAA4B,EAAE;QACpC,YAAY,EAAE,KAAK;KACpB,CAAC;;6DACsC;AAM9B;IAHT,MAAM,CAAC,8BAA8B,EAAE;QACtC,YAAY,EAAE,KAAK;KACpB,CAAC;;+DACwC;AAGhC;IADT,MAAM,CAAC,qBAAqB,EAAE,EAAE,CAAC;;4DACC;AAGzB;IADT,UAAU,CAAC,aAAa,CAAC;8BACZ,aAAa;2CAAC;AAaf;IADZ,IAAI,EAAE;IACa,WAAA,YAAY,EAAE,CAAA;IAAgB,WAAA,MAAM,CAAC,IAAI,CAAC,CAAA;IAAgB,WAAA,IAAI,EAAE,CAAA;;qCAAzC,IAAI,UAAmD,YAAY;;4CAsG7G;AAWY;IAFZ,GAAG,EAAE;IACL,MAAM,CAAC,YAAY,CAAC;IACA,WAAA,MAAM,CAAC,IAAI,CAAC,CAAA;;;;6CAwBhC;AAYY;IAFZ,GAAG,EAAE;IACL,MAAM,CAAC,YAAY,CAAC;IACA,WAAA,YAAY,EAAE,CAAA;;qCAAO,IAAI;;6CAI7C;AApMU,eAAe;IAD3B,QAAQ,CAAC,MAAM,CAAC;GACJ,eAAe,CAqM3B"}
@@ -2,12 +2,48 @@ import { TokenDto } from './../dto/token-dto.js';
2
2
  import { BaseController, Ok, ForbiddenResponse } from '@spinajs/http';
3
3
  import { ISession, SessionProvider, User as UserModel, AccessControl } from '@spinajs/rbac';
4
4
  import { QueueService } from '@spinajs/queue';
5
+ import { IEnable2faResponse, IUserWithGrants } from "@spinajs/rbac-http";
6
+ /**
7
+ * Two-factor authentication (TOTP) management.
8
+ * Enables, disables, and verifies TOTP-based two-factor authentication for users.
9
+ * All routes are only available when 2FA is enabled in the system configuration.
10
+ * The caller must be logged in but does NOT need to be fully authorized (2FA verified),
11
+ * allowing these routes to be used during the 2FA verification step itself.
12
+ * @tags Two-Factor Authentication
13
+ */
5
14
  export declare class TwoFactorAuthController extends BaseController {
6
15
  protected Queue: QueueService;
7
16
  protected SessionProvider: SessionProvider;
8
17
  protected AC: AccessControl;
9
- enable2fa(user: UserModel): Promise<Ok>;
10
- disable2Fa(user: UserModel): Promise<Ok>;
11
- verifyToken(logged: UserModel, token: TokenDto, session: ISession): Promise<Ok | ForbiddenResponse>;
18
+ /**
19
+ * Enable two-factor authentication
20
+ * Generates a TOTP secret for the authenticated user and returns the OTP provisioning URI
21
+ * to be scanned by an authenticator app. Throws if 2FA is already enabled for the user.
22
+ * @security cookieAuth
23
+ * @returns {IEnable2faResponse} OTP provisioning URI to scan with an authenticator app
24
+ * @response 400 Two-factor authentication is already enabled for this user
25
+ * @response 401 Unauthorized — valid session required
26
+ */
27
+ enable2fa(user: UserModel): Promise<Ok<IEnable2faResponse>>;
28
+ /**
29
+ * Disable two-factor authentication
30
+ * Removes the TOTP secret and disables 2FA for the authenticated user.
31
+ * Throws if 2FA is not currently enabled for the user.
32
+ * @security cookieAuth
33
+ * @response 200 Two-factor authentication disabled successfully
34
+ * @response 400 Two-factor authentication is not enabled for this user
35
+ * @response 401 Unauthorized — valid session required
36
+ */
37
+ disable2Fa(user: UserModel): Promise<Ok<any>>;
38
+ /**
39
+ * Verify TOTP token
40
+ * Validates the provided TOTP token against the user's 2FA secret. On success, marks the session
41
+ * as fully authorized and returns the user profile with RBAC grants — identical to a full login response.
42
+ * @security cookieAuth
43
+ * @returns {IUserWithGrants} User profile merged with RBAC grants on successful 2FA verification
44
+ * @response 403 Invalid or expired TOTP token
45
+ * @response 401 Unauthorized — valid session required
46
+ */
47
+ verifyToken(logged: UserModel, token: TokenDto, session: ISession): Promise<Ok<IUserWithGrants> | ForbiddenResponse>;
12
48
  }
13
49
  //# sourceMappingURL=TwoFactorAuthController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TwoFactorAuthController.d.ts","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAY,EAAE,EAAa,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAyC,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnI,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAO9C,qBAGa,uBAAwB,SAAQ,cAAc;IAEvD,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC;IAG9B,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAG3C,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAGf,SAAS,CAAS,IAAI,EAAE,SAAS;IAajC,UAAU,CAAS,IAAI,EAAE,SAAS;IAUlC,WAAW,CAAS,MAAM,EAAE,SAAS,EAAU,KAAK,EAAE,QAAQ,EAAa,OAAO,EAAE,QAAQ;CA4C5G"}
1
+ {"version":3,"file":"TwoFactorAuthController.d.ts","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAY,EAAE,EAAa,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAyC,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnI,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAA6B,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAKpG;;;;;;;GAOG;AACH,qBAGa,uBAAwB,SAAQ,cAAc;IAEvD,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC;IAG9B,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAG3C,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;IAE5B;;;;;;;;OAQG;IAEU,SAAS,CAAS,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC;IAYhF;;;;;;;;OAQG;IAEU,UAAU,CAAS,IAAI,EAAE,SAAS;IAS/C;;;;;;;;OAQG;IAEU,WAAW,CAAS,MAAM,EAAE,SAAS,EAAU,KAAK,EAAE,QAAQ,EAAa,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,iBAAiB,CAAC;CA4C/J"}