jcc-express-mvc 1.8.7 → 1.8.21

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 (296) hide show
  1. package/Core/index.d.ts +4 -0
  2. package/Core/index.d.ts.map +1 -1
  3. package/Core/index.js +5 -0
  4. package/__tests__/Job.test.d.ts +2 -0
  5. package/__tests__/Job.test.d.ts.map +1 -0
  6. package/__tests__/Job.test.js +205 -0
  7. package/__tests__/MySqlSchemaBlueprint.test.d.ts +2 -0
  8. package/__tests__/MySqlSchemaBlueprint.test.d.ts.map +1 -0
  9. package/__tests__/MySqlSchemaBlueprint.test.js +55 -0
  10. package/__tests__/PostgresTranslator.test.d.ts +2 -0
  11. package/__tests__/PostgresTranslator.test.d.ts.map +1 -0
  12. package/__tests__/PostgresTranslator.test.js +82 -0
  13. package/__tests__/SQLiteTranslator.test.d.ts +2 -0
  14. package/__tests__/SQLiteTranslator.test.d.ts.map +1 -0
  15. package/__tests__/SQLiteTranslator.test.js +125 -0
  16. package/__tests__/SchemaAlterBlueprint.test.d.ts +2 -0
  17. package/__tests__/SchemaAlterBlueprint.test.d.ts.map +1 -0
  18. package/__tests__/SchemaAlterBlueprint.test.js +35 -0
  19. package/global.d.ts +3 -1
  20. package/index.d.ts +28 -3
  21. package/index.d.ts.map +1 -1
  22. package/index.js +33 -75
  23. package/lib/Application/Application.d.ts.map +1 -1
  24. package/lib/Application/Application.js +2 -2
  25. package/lib/Application/ApplicationBuilder.d.ts.map +1 -1
  26. package/lib/Application/ApplicationBuilder.js +22 -11
  27. package/lib/Auth/AuthMiddleware.d.ts.map +1 -1
  28. package/lib/Auth/AuthMiddleware.js +29 -12
  29. package/lib/Auth/index.d.ts +17 -3
  30. package/lib/Auth/index.d.ts.map +1 -1
  31. package/lib/Auth/index.js +128 -26
  32. package/lib/Auth/loginRateLimit.d.ts +6 -0
  33. package/lib/Auth/loginRateLimit.d.ts.map +1 -0
  34. package/lib/Auth/loginRateLimit.js +25 -0
  35. package/lib/Auth/refreshTokenStore.d.ts +24 -0
  36. package/lib/Auth/refreshTokenStore.d.ts.map +1 -0
  37. package/lib/Auth/refreshTokenStore.js +46 -0
  38. package/lib/Command-Line/DBCommand.d.ts.map +1 -1
  39. package/lib/Command-Line/DBCommand.js +9 -3
  40. package/lib/Command-Line/KeyGenerateCommand.d.ts +6 -0
  41. package/lib/Command-Line/KeyGenerateCommand.d.ts.map +1 -0
  42. package/lib/Command-Line/KeyGenerateCommand.js +47 -0
  43. package/lib/Command-Line/MakeCommand.d.ts +1 -0
  44. package/lib/Command-Line/MakeCommand.d.ts.map +1 -1
  45. package/lib/Command-Line/MakeCommand.js +36 -32
  46. package/lib/Command-Line/NodeArtisanCommand.d.ts +2 -0
  47. package/lib/Command-Line/NodeArtisanCommand.d.ts.map +1 -1
  48. package/lib/Command-Line/NodeArtisanCommand.js +24 -6
  49. package/lib/Command-Line/NodeTinker/Tinker.d.ts +5 -2
  50. package/lib/Command-Line/NodeTinker/Tinker.d.ts.map +1 -1
  51. package/lib/Command-Line/NodeTinker/Tinker.js +13 -3
  52. package/lib/Command-Line/WatchCommand.d.ts +29 -0
  53. package/lib/Command-Line/WatchCommand.d.ts.map +1 -0
  54. package/lib/Command-Line/WatchCommand.js +234 -0
  55. package/lib/Command-Line/files/Models.d.ts.map +1 -1
  56. package/lib/Command-Line/files/Models.js +67 -0
  57. package/lib/Console/Command.d.ts +18 -0
  58. package/lib/Console/Command.d.ts.map +1 -1
  59. package/lib/Console/Command.js +29 -0
  60. package/lib/Container/index.d.ts.map +1 -1
  61. package/lib/Container/index.js +22 -8
  62. package/lib/Database/Database.d.ts +21 -0
  63. package/lib/Database/Database.d.ts.map +1 -0
  64. package/lib/Database/Database.js +55 -0
  65. package/lib/Database/DatabaseServiceProvider.d.ts +22 -0
  66. package/lib/Database/DatabaseServiceProvider.d.ts.map +1 -0
  67. package/lib/Database/DatabaseServiceProvider.js +50 -0
  68. package/lib/Database/Drivers/KnexDriver.d.ts +13 -0
  69. package/lib/Database/Drivers/KnexDriver.d.ts.map +1 -0
  70. package/lib/Database/Drivers/KnexDriver.js +29 -0
  71. package/lib/Database/Drivers/MongooseDriver.d.ts +20 -0
  72. package/lib/Database/Drivers/MongooseDriver.d.ts.map +1 -0
  73. package/lib/Database/Drivers/MongooseDriver.js +57 -0
  74. package/lib/Database/Drivers/SequelizeDriver.d.ts +24 -0
  75. package/lib/Database/Drivers/SequelizeDriver.d.ts.map +1 -0
  76. package/lib/Database/Drivers/SequelizeDriver.js +82 -0
  77. package/lib/Database/index.d.ts +7 -0
  78. package/lib/Database/index.d.ts.map +1 -0
  79. package/lib/Database/index.js +11 -0
  80. package/lib/Database/interface.d.ts +14 -0
  81. package/lib/Database/interface.d.ts.map +1 -0
  82. package/lib/Database/interface.js +2 -0
  83. package/lib/Database/type.d.ts +18 -0
  84. package/lib/Database/type.d.ts.map +1 -0
  85. package/lib/Database/type.js +2 -0
  86. package/lib/Error/DisplayErrorCode.d.ts.map +1 -1
  87. package/lib/Error/DisplayErrorCode.js +27 -17
  88. package/lib/Error/MissMatchTokenException/index.d.ts +4 -0
  89. package/lib/Error/MissMatchTokenException/index.d.ts.map +1 -0
  90. package/lib/Error/MissMatchTokenException/index.js +9 -0
  91. package/lib/Error/SocialiteAuthError/SocialiteAuthError.d.ts +9 -0
  92. package/lib/Error/SocialiteAuthError/SocialiteAuthError.d.ts.map +1 -0
  93. package/lib/Error/SocialiteAuthError/SocialiteAuthError.js +17 -0
  94. package/lib/Global/helpers.d.ts.map +1 -1
  95. package/lib/Global/helpers.js +7 -6
  96. package/lib/Http/index.d.ts +3 -1
  97. package/lib/Http/index.d.ts.map +1 -1
  98. package/lib/Http/index.js +26 -5
  99. package/lib/Interface/index.d.ts +17 -3
  100. package/lib/Interface/index.d.ts.map +1 -1
  101. package/lib/Jcc-eloquent/lib/Builder.d.ts +12 -1
  102. package/lib/Jcc-eloquent/lib/Builder.d.ts.map +1 -1
  103. package/lib/Jcc-eloquent/lib/Builder.js +119 -5
  104. package/lib/Jcc-eloquent/lib/Database/index.d.ts.map +1 -1
  105. package/lib/Jcc-eloquent/lib/Database/index.js +2 -1
  106. package/lib/Jcc-eloquent/lib/Interfaces/index.d.ts +37 -2
  107. package/lib/Jcc-eloquent/lib/Interfaces/index.d.ts.map +1 -1
  108. package/lib/Jcc-eloquent/lib/Migration.d.ts +6 -0
  109. package/lib/Jcc-eloquent/lib/Migration.d.ts.map +1 -1
  110. package/lib/Jcc-eloquent/lib/Migration.js +24 -2
  111. package/lib/Jcc-eloquent/lib/Model.d.ts +24 -7
  112. package/lib/Jcc-eloquent/lib/Model.d.ts.map +1 -1
  113. package/lib/Jcc-eloquent/lib/Model.js +35 -2
  114. package/lib/Jcc-eloquent/lib/QueryBuilder.d.ts +2 -1
  115. package/lib/Jcc-eloquent/lib/QueryBuilder.d.ts.map +1 -1
  116. package/lib/Jcc-eloquent/lib/QueryBuilder.js +10 -1
  117. package/lib/Jcc-eloquent/lib/Rollback.d.ts.map +1 -1
  118. package/lib/Jcc-eloquent/lib/Rollback.js +9 -2
  119. package/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.d.ts.map +1 -1
  120. package/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.js +3 -3
  121. package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.d.ts +6 -2
  122. package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.d.ts.map +1 -1
  123. package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.js +41 -12
  124. package/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.d.ts.map +1 -1
  125. package/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.js +21 -3
  126. package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.d.ts +1 -0
  127. package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.d.ts.map +1 -1
  128. package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.js +70 -14
  129. package/lib/Jcc-eloquent/lib/Schema/index.d.ts +12 -0
  130. package/lib/Jcc-eloquent/lib/Schema/index.d.ts.map +1 -1
  131. package/lib/Jcc-eloquent/lib/Schema/index.js +27 -6
  132. package/lib/Jcc-eloquent/lib/utils/index.d.ts +13 -0
  133. package/lib/Jcc-eloquent/lib/utils/index.d.ts.map +1 -1
  134. package/lib/Jcc-eloquent/lib/utils/index.js +62 -0
  135. package/lib/Middleware/index.d.ts +1 -0
  136. package/lib/Middleware/index.d.ts.map +1 -1
  137. package/lib/Middleware/index.js +20 -8
  138. package/lib/Model/Sequelize.d.ts +3 -0
  139. package/lib/Model/Sequelize.d.ts.map +1 -0
  140. package/lib/Model/Sequelize.js +6 -0
  141. package/lib/Providers/RouteServiceProvider.d.ts.map +1 -1
  142. package/lib/Providers/RouteServiceProvider.js +3 -0
  143. package/lib/Providers/SessionServiceProvider.d.ts +12 -0
  144. package/lib/Providers/SessionServiceProvider.d.ts.map +1 -0
  145. package/lib/Providers/SessionServiceProvider.js +47 -0
  146. package/lib/Queue/Controllers/QueueControllers.d.ts +31 -0
  147. package/lib/Queue/Controllers/QueueControllers.d.ts.map +1 -0
  148. package/lib/Queue/Controllers/QueueControllers.js +126 -0
  149. package/lib/Queue/Drivers/DatabaseDriver.d.ts +6 -1
  150. package/lib/Queue/Drivers/DatabaseDriver.d.ts.map +1 -1
  151. package/lib/Queue/Drivers/DatabaseDriver.js +76 -21
  152. package/lib/Queue/Drivers/MemoryDriver.d.ts +17 -6
  153. package/lib/Queue/Drivers/MemoryDriver.d.ts.map +1 -1
  154. package/lib/Queue/Drivers/MemoryDriver.js +323 -14
  155. package/lib/Queue/Drivers/RedisDriver.d.ts +48 -0
  156. package/lib/Queue/Drivers/RedisDriver.d.ts.map +1 -0
  157. package/lib/Queue/Drivers/RedisDriver.js +533 -0
  158. package/lib/Queue/Job.d.ts +8 -0
  159. package/lib/Queue/Job.d.ts.map +1 -1
  160. package/lib/Queue/Job.js +25 -1
  161. package/lib/Queue/JobsLogger.d.ts.map +1 -1
  162. package/lib/Queue/JobsLogger.js +6 -3
  163. package/lib/Queue/Queue.d.ts +17 -0
  164. package/lib/Queue/Queue.d.ts.map +1 -1
  165. package/lib/Queue/Queue.js +146 -11
  166. package/lib/Queue/QueueServiceProvider.d.ts +6 -0
  167. package/lib/Queue/QueueServiceProvider.d.ts.map +1 -0
  168. package/lib/Queue/QueueServiceProvider.js +18 -0
  169. package/lib/Queue/Route/web.d.ts +2 -0
  170. package/lib/Queue/Route/web.d.ts.map +1 -0
  171. package/lib/Queue/Route/web.js +16 -0
  172. package/lib/Queue/index.d.ts +1 -0
  173. package/lib/Queue/index.d.ts.map +1 -1
  174. package/lib/Queue/index.js +3 -0
  175. package/lib/Queue/interface.d.ts +25 -0
  176. package/lib/Queue/interface.d.ts.map +1 -1
  177. package/lib/Queue/middleware/queueDashboardGuard.d.ts +7 -0
  178. package/lib/Queue/middleware/queueDashboardGuard.d.ts.map +1 -0
  179. package/lib/Queue/middleware/queueDashboardGuard.js +43 -0
  180. package/lib/Queue/type.d.ts +12 -1
  181. package/lib/Queue/type.d.ts.map +1 -1
  182. package/lib/Response/index.d.ts.map +1 -1
  183. package/lib/Response/index.js +6 -1
  184. package/lib/Routes/Route.d.ts +2 -2
  185. package/lib/Routes/Route.d.ts.map +1 -1
  186. package/lib/Routes/RouteBuilder.d.ts +2 -2
  187. package/lib/Routes/RouteBuilder.d.ts.map +1 -1
  188. package/lib/Security/CsrfMiddleware.d.ts +37 -0
  189. package/lib/Security/CsrfMiddleware.d.ts.map +1 -0
  190. package/lib/Security/CsrfMiddleware.js +85 -0
  191. package/lib/Security/MethodSpoofingMiddleware.d.ts +36 -0
  192. package/lib/Security/MethodSpoofingMiddleware.d.ts.map +1 -0
  193. package/lib/Security/MethodSpoofingMiddleware.js +51 -0
  194. package/lib/Security/index.d.ts +5 -0
  195. package/lib/Security/index.d.ts.map +1 -0
  196. package/lib/Security/index.js +7 -0
  197. package/lib/Session/DatabaseSession.d.ts +9 -3
  198. package/lib/Session/DatabaseSession.d.ts.map +1 -1
  199. package/lib/Session/DatabaseSession.js +38 -36
  200. package/lib/Session/ExpressJccSession.d.ts +23 -0
  201. package/lib/Session/ExpressJccSession.d.ts.map +1 -0
  202. package/lib/Session/ExpressJccSession.js +110 -0
  203. package/lib/Session/RedisSession.d.ts +2 -2
  204. package/lib/Session/RedisSession.d.ts.map +1 -1
  205. package/lib/Session/RedisSession.js +19 -5
  206. package/lib/Session/SessionManager.d.ts +18 -4
  207. package/lib/Session/SessionManager.d.ts.map +1 -1
  208. package/lib/Session/SessionManager.js +53 -17
  209. package/lib/Socialite/AbstractProvider.d.ts +60 -0
  210. package/lib/Socialite/AbstractProvider.d.ts.map +1 -0
  211. package/lib/Socialite/AbstractProvider.js +136 -0
  212. package/lib/Socialite/Drivers/facebook/FacebookDriver.d.ts +9 -0
  213. package/lib/Socialite/Drivers/facebook/FacebookDriver.d.ts.map +1 -0
  214. package/lib/Socialite/Drivers/facebook/FacebookDriver.js +40 -0
  215. package/lib/Socialite/Drivers/facebook/FacebookProvider.d.ts +15 -0
  216. package/lib/Socialite/Drivers/facebook/FacebookProvider.d.ts.map +1 -0
  217. package/lib/Socialite/Drivers/facebook/FacebookProvider.js +28 -0
  218. package/lib/Socialite/Drivers/github/GitHubDriver.d.ts +9 -0
  219. package/lib/Socialite/Drivers/github/GitHubDriver.d.ts.map +1 -0
  220. package/lib/Socialite/Drivers/github/GitHubDriver.js +54 -0
  221. package/lib/Socialite/Drivers/github/GitHubProvider.d.ts +15 -0
  222. package/lib/Socialite/Drivers/github/GitHubProvider.d.ts.map +1 -0
  223. package/lib/Socialite/Drivers/github/GitHubProvider.js +28 -0
  224. package/lib/Socialite/Drivers/gitlab/GitLabDriver.d.ts +10 -0
  225. package/lib/Socialite/Drivers/gitlab/GitLabDriver.d.ts.map +1 -0
  226. package/lib/Socialite/Drivers/gitlab/GitLabDriver.js +37 -0
  227. package/lib/Socialite/Drivers/gitlab/GitLabProvider.d.ts +15 -0
  228. package/lib/Socialite/Drivers/gitlab/GitLabProvider.d.ts.map +1 -0
  229. package/lib/Socialite/Drivers/gitlab/GitLabProvider.js +28 -0
  230. package/lib/Socialite/Drivers/google/GoogleDriver.d.ts +9 -0
  231. package/lib/Socialite/Drivers/google/GoogleDriver.d.ts.map +1 -0
  232. package/lib/Socialite/Drivers/google/GoogleDriver.js +39 -0
  233. package/lib/Socialite/Drivers/google/GoogleProvider.d.ts +15 -0
  234. package/lib/Socialite/Drivers/google/GoogleProvider.d.ts.map +1 -0
  235. package/lib/Socialite/Drivers/google/GoogleProvider.js +28 -0
  236. package/lib/Socialite/Drivers/slack/SlackDriver.d.ts +9 -0
  237. package/lib/Socialite/Drivers/slack/SlackDriver.d.ts.map +1 -0
  238. package/lib/Socialite/Drivers/slack/SlackDriver.js +41 -0
  239. package/lib/Socialite/Drivers/slack/SlackProvider.d.ts +16 -0
  240. package/lib/Socialite/Drivers/slack/SlackProvider.d.ts.map +1 -0
  241. package/lib/Socialite/Drivers/slack/SlackProvider.js +37 -0
  242. package/lib/Socialite/Drivers/twitter/TwitterDriver.d.ts +9 -0
  243. package/lib/Socialite/Drivers/twitter/TwitterDriver.d.ts.map +1 -0
  244. package/lib/Socialite/Drivers/twitter/TwitterDriver.js +57 -0
  245. package/lib/Socialite/Drivers/twitter/TwitterProvider.d.ts +16 -0
  246. package/lib/Socialite/Drivers/twitter/TwitterProvider.d.ts.map +1 -0
  247. package/lib/Socialite/Drivers/twitter/TwitterProvider.js +38 -0
  248. package/lib/Socialite/SocialUser.d.ts +42 -0
  249. package/lib/Socialite/SocialUser.d.ts.map +1 -0
  250. package/lib/Socialite/SocialUser.js +116 -0
  251. package/lib/Socialite/Socialite.d.ts +13 -0
  252. package/lib/Socialite/Socialite.d.ts.map +1 -0
  253. package/lib/Socialite/Socialite.js +41 -0
  254. package/lib/Socialite/SocialiteProvider.d.ts +9 -0
  255. package/lib/Socialite/SocialiteProvider.d.ts.map +1 -0
  256. package/lib/Socialite/SocialiteProvider.js +15 -0
  257. package/lib/Socialite/config.d.ts +7 -0
  258. package/lib/Socialite/config.d.ts.map +1 -0
  259. package/lib/Socialite/config.js +44 -0
  260. package/lib/Socialite/constant.d.ts +18 -0
  261. package/lib/Socialite/constant.d.ts.map +1 -0
  262. package/lib/Socialite/constant.js +20 -0
  263. package/lib/Socialite/index.d.ts +13 -0
  264. package/lib/Socialite/index.d.ts.map +1 -0
  265. package/lib/Socialite/index.js +25 -0
  266. package/lib/Socialite/types.d.ts +13 -0
  267. package/lib/Socialite/types.d.ts.map +1 -0
  268. package/lib/Socialite/types.js +2 -0
  269. package/lib/Templating-engine/benchmark.d.ts +7 -0
  270. package/lib/Templating-engine/benchmark.d.ts.map +1 -0
  271. package/lib/Templating-engine/benchmark.js +44 -0
  272. package/lib/Templating-engine/engineHelper.d.ts +37 -8
  273. package/lib/Templating-engine/engineHelper.d.ts.map +1 -1
  274. package/lib/Templating-engine/engineHelper.js +203 -26
  275. package/lib/Templating-engine/errors.d.ts +15 -0
  276. package/lib/Templating-engine/errors.d.ts.map +1 -0
  277. package/lib/Templating-engine/errors.js +35 -0
  278. package/lib/Templating-engine/expressions.d.ts +24 -0
  279. package/lib/Templating-engine/expressions.d.ts.map +1 -1
  280. package/lib/Templating-engine/expressions.js +27 -5
  281. package/lib/Templating-engine/index.d.ts +87 -17
  282. package/lib/Templating-engine/index.d.ts.map +1 -1
  283. package/lib/Templating-engine/index.js +701 -96
  284. package/lib/Templating-engine/plugins.d.ts +30 -0
  285. package/lib/Templating-engine/plugins.d.ts.map +1 -0
  286. package/lib/Templating-engine/plugins.js +47 -0
  287. package/lib/Type/index.d.ts +1 -0
  288. package/lib/Type/index.d.ts.map +1 -1
  289. package/lib/Validation/Validator/CustomValidation.d.ts.map +1 -1
  290. package/lib/Validation/Validator/CustomValidation.js +2 -2
  291. package/lib/Validation/Validator/helper.d.ts.map +1 -1
  292. package/lib/Validation/Validator/helper.js +8 -1
  293. package/lib/util/index.d.ts +42 -1
  294. package/lib/util/index.d.ts.map +1 -1
  295. package/lib/util/index.js +154 -17
  296. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  /// <reference path="./global.d.ts" />
2
+
2
3
  export { Authentication as Auth } from "./lib/Auth";
3
4
  export { config } from "./lib/Config/Config";
4
5
  export type {
@@ -12,25 +13,49 @@ export {
12
13
  verifyHash,
13
14
  jwtSign,
14
15
  jwtVerify,
16
+ jwtTokenType,
17
+ assertProductionJwtSecret,
18
+ authSessionCookieOptions,
19
+ checkJwtAccessTokenPayload,
15
20
  saveImage,
16
21
  asyncHandler,
17
22
  cloudinaryUpload,
18
23
  rootPath,
19
24
  } from "./lib/util";
25
+ export type { JwtAccessTokenPayloadResult } from "./lib/util";
26
+ export { loginRateLimit, registerRateLimit } from "./lib/Auth/loginRateLimit";
27
+ export {
28
+ Socialite,
29
+ AbstractProvider,
30
+ SocialiteProvider,
31
+ resolveSocialiteConfig,
32
+ GoogleProvider,
33
+ GitHubProvider,
34
+ FacebookProvider,
35
+ GitLabProvider,
36
+ TwitterProvider,
37
+ SlackProvider,
38
+ } from "./lib/Socialite";
39
+ export type {
40
+ OAuthAuthorizeContext,
41
+ OAuthProviderConfig,
42
+ } from "./lib/Socialite/types";
43
+ /** Laravel Socialite-style OAuth user profile (class with getters + `toPlainObject()`). */
44
+ export { SocialUser as SocialiteOAuthUser } from "./lib/Socialite/SocialUser";
20
45
  export declare const guest: (
21
46
  req: import("./lib/Interface").AppRequest,
22
47
  res: import("./lib/Interface").AppResponse,
23
- next: import("./lib/Interface").AppNext
48
+ next: import("./lib/Interface").AppNext,
24
49
  ) => any;
25
50
  export declare const apiAuth: (
26
51
  req: import("./lib/Interface").AppRequest,
27
52
  res: import("./lib/Interface").AppResponse,
28
- next: import("./lib/Interface").AppNext
53
+ next: import("./lib/Interface").AppNext,
29
54
  ) => Promise<import("./lib/Interface").AppResponse | undefined>;
30
55
  export declare const auth: (
31
56
  req: import("./lib/Interface").AppRequest,
32
57
  res: import("./lib/Interface").AppResponse,
33
- next: import("./lib/Interface").AppNext
58
+ next: import("./lib/Interface").AppNext,
34
59
  ) => Promise<void>;
35
60
  export declare const httpContext: AppHttpContext;
36
61
  //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../jcc-express-mvc/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,IAAI,IAAI,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EACV,UAAU,IAAI,OAAO,EACrB,WAAW,IAAI,QAAQ,EACvB,OAAO,IAAI,IAAI,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EACL,MAAM,EACN,UAAU,EACV,OAAO,EACP,SAAS,EACT,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,KAAK,yIAAuB,CAAC;AAC1C,eAAO,MAAM,OAAO,gMAAyB,CAAC;AAC9C,eAAO,MAAM,IAAI,mJAAsB,CAAC;AACxC,eAAO,MAAM,WAAW,EAAS,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../jcc-express-mvc/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,IAAI,IAAI,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EACV,UAAU,IAAI,OAAO,EACrB,WAAW,IAAI,QAAQ,EACvB,OAAO,IAAI,IAAI,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EACL,MAAM,EACN,UAAU,EACV,OAAO,EACP,SAAS,EACT,YAAY,EACZ,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9E,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,2FAA2F;AAC3F,OAAO,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE9E,eAAO,MAAM,KAAK,yIAAuB,CAAC;AAC1C,eAAO,MAAM,OAAO,gMAAyB,CAAC;AAC9C,eAAO,MAAM,IAAI,mJAAsB,CAAC;AACxC,eAAO,MAAM,WAAW,EAAS,cAAc,CAAC"}
package/index.js CHANGED
@@ -1,84 +1,42 @@
1
1
  "use strict";
2
+ /// <reference path="./global.d.ts" />
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.httpContext =
4
- exports.auth =
5
- exports.apiAuth =
6
- exports.guest =
7
- exports.rootPath =
8
- exports.cloudinaryUpload =
9
- exports.asyncHandler =
10
- exports.saveImage =
11
- exports.jwtVerify =
12
- exports.jwtSign =
13
- exports.verifyHash =
14
- exports.bcrypt =
15
- exports.config =
16
- exports.Auth =
17
- void 0;
4
+ exports.httpContext = exports.auth = exports.apiAuth = exports.guest = exports.SocialiteOAuthUser = exports.SlackProvider = exports.TwitterProvider = exports.GitLabProvider = exports.FacebookProvider = exports.GitHubProvider = exports.GoogleProvider = exports.resolveSocialiteConfig = exports.SocialiteProvider = exports.AbstractProvider = exports.Socialite = exports.registerRateLimit = exports.loginRateLimit = exports.rootPath = exports.cloudinaryUpload = exports.asyncHandler = exports.saveImage = exports.checkJwtAccessTokenPayload = exports.authSessionCookieOptions = exports.assertProductionJwtSecret = exports.jwtTokenType = exports.jwtVerify = exports.jwtSign = exports.verifyHash = exports.bcrypt = exports.config = exports.Auth = void 0;
18
5
  const AuthMiddleware_1 = require("./lib/Auth/AuthMiddleware");
19
6
  var Auth_1 = require("./lib/Auth");
20
- Object.defineProperty(exports, "Auth", {
21
- enumerable: true,
22
- get: function () {
23
- return Auth_1.Authentication;
24
- },
25
- });
7
+ Object.defineProperty(exports, "Auth", { enumerable: true, get: function () { return Auth_1.Authentication; } });
26
8
  var Config_1 = require("./lib/Config/Config");
27
- Object.defineProperty(exports, "config", {
28
- enumerable: true,
29
- get: function () {
30
- return Config_1.config;
31
- },
32
- });
9
+ Object.defineProperty(exports, "config", { enumerable: true, get: function () { return Config_1.config; } });
33
10
  var util_1 = require("./lib/util");
34
- Object.defineProperty(exports, "bcrypt", {
35
- enumerable: true,
36
- get: function () {
37
- return util_1.bcrypt;
38
- },
39
- });
40
- Object.defineProperty(exports, "verifyHash", {
41
- enumerable: true,
42
- get: function () {
43
- return util_1.verifyHash;
44
- },
45
- });
46
- Object.defineProperty(exports, "jwtSign", {
47
- enumerable: true,
48
- get: function () {
49
- return util_1.jwtSign;
50
- },
51
- });
52
- Object.defineProperty(exports, "jwtVerify", {
53
- enumerable: true,
54
- get: function () {
55
- return util_1.jwtVerify;
56
- },
57
- });
58
- Object.defineProperty(exports, "saveImage", {
59
- enumerable: true,
60
- get: function () {
61
- return util_1.saveImage;
62
- },
63
- });
64
- Object.defineProperty(exports, "asyncHandler", {
65
- enumerable: true,
66
- get: function () {
67
- return util_1.asyncHandler;
68
- },
69
- });
70
- Object.defineProperty(exports, "cloudinaryUpload", {
71
- enumerable: true,
72
- get: function () {
73
- return util_1.cloudinaryUpload;
74
- },
75
- });
76
- Object.defineProperty(exports, "rootPath", {
77
- enumerable: true,
78
- get: function () {
79
- return util_1.rootPath;
80
- },
81
- });
11
+ Object.defineProperty(exports, "bcrypt", { enumerable: true, get: function () { return util_1.bcrypt; } });
12
+ Object.defineProperty(exports, "verifyHash", { enumerable: true, get: function () { return util_1.verifyHash; } });
13
+ Object.defineProperty(exports, "jwtSign", { enumerable: true, get: function () { return util_1.jwtSign; } });
14
+ Object.defineProperty(exports, "jwtVerify", { enumerable: true, get: function () { return util_1.jwtVerify; } });
15
+ Object.defineProperty(exports, "jwtTokenType", { enumerable: true, get: function () { return util_1.jwtTokenType; } });
16
+ Object.defineProperty(exports, "assertProductionJwtSecret", { enumerable: true, get: function () { return util_1.assertProductionJwtSecret; } });
17
+ Object.defineProperty(exports, "authSessionCookieOptions", { enumerable: true, get: function () { return util_1.authSessionCookieOptions; } });
18
+ Object.defineProperty(exports, "checkJwtAccessTokenPayload", { enumerable: true, get: function () { return util_1.checkJwtAccessTokenPayload; } });
19
+ Object.defineProperty(exports, "saveImage", { enumerable: true, get: function () { return util_1.saveImage; } });
20
+ Object.defineProperty(exports, "asyncHandler", { enumerable: true, get: function () { return util_1.asyncHandler; } });
21
+ Object.defineProperty(exports, "cloudinaryUpload", { enumerable: true, get: function () { return util_1.cloudinaryUpload; } });
22
+ Object.defineProperty(exports, "rootPath", { enumerable: true, get: function () { return util_1.rootPath; } });
23
+ var loginRateLimit_1 = require("./lib/Auth/loginRateLimit");
24
+ Object.defineProperty(exports, "loginRateLimit", { enumerable: true, get: function () { return loginRateLimit_1.loginRateLimit; } });
25
+ Object.defineProperty(exports, "registerRateLimit", { enumerable: true, get: function () { return loginRateLimit_1.registerRateLimit; } });
26
+ var Socialite_1 = require("./lib/Socialite");
27
+ Object.defineProperty(exports, "Socialite", { enumerable: true, get: function () { return Socialite_1.Socialite; } });
28
+ Object.defineProperty(exports, "AbstractProvider", { enumerable: true, get: function () { return Socialite_1.AbstractProvider; } });
29
+ Object.defineProperty(exports, "SocialiteProvider", { enumerable: true, get: function () { return Socialite_1.SocialiteProvider; } });
30
+ Object.defineProperty(exports, "resolveSocialiteConfig", { enumerable: true, get: function () { return Socialite_1.resolveSocialiteConfig; } });
31
+ Object.defineProperty(exports, "GoogleProvider", { enumerable: true, get: function () { return Socialite_1.GoogleProvider; } });
32
+ Object.defineProperty(exports, "GitHubProvider", { enumerable: true, get: function () { return Socialite_1.GitHubProvider; } });
33
+ Object.defineProperty(exports, "FacebookProvider", { enumerable: true, get: function () { return Socialite_1.FacebookProvider; } });
34
+ Object.defineProperty(exports, "GitLabProvider", { enumerable: true, get: function () { return Socialite_1.GitLabProvider; } });
35
+ Object.defineProperty(exports, "TwitterProvider", { enumerable: true, get: function () { return Socialite_1.TwitterProvider; } });
36
+ Object.defineProperty(exports, "SlackProvider", { enumerable: true, get: function () { return Socialite_1.SlackProvider; } });
37
+ /** Laravel Socialite-style OAuth user profile (class with getters + `toPlainObject()`). */
38
+ var SocialUser_1 = require("./lib/Socialite/SocialUser");
39
+ Object.defineProperty(exports, "SocialiteOAuthUser", { enumerable: true, get: function () { return SocialUser_1.SocialUser; } });
82
40
  exports.guest = AuthMiddleware_1.authMiddleware.guest;
83
41
  exports.apiAuth = AuthMiddleware_1.authMiddleware.apiAuth;
84
42
  exports.auth = AuthMiddleware_1.authMiddleware.auth;
@@ -1 +1 @@
1
- {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Application/Application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAQnE,qBAAa,WAAY,SAAQ,kBAAkB;IACjD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAyB;IACnC,QAAQ,EAAE,MAAM,CAAY;IAC5B,YAAY,EAAE,WAAW,EAAE,CAAM;IACxC,OAAO,CAAC,OAAO,CAAW;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;;IAYxC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,GAAG,EAAE,WAAW,KAAK,eAAe,GAAG,IAAI;IAqB5E,IAAI,IAAI,IAAI;IAUZ,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;IAId,OAAO;IAKR,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB1B,MAAM,CAAC,aAAa;IAIpB,MAAM,CAAC,WAAW;CAGnB"}
1
+ {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Application/Application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAQnE,qBAAa,WAAY,SAAQ,kBAAkB;IACjD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAyB;IACnC,QAAQ,EAAE,MAAM,CAAY;IAC5B,YAAY,EAAE,WAAW,EAAE,CAAM;IACxC,OAAO,CAAC,OAAO,CAAW;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;;IAYxC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,GAAG,EAAE,WAAW,KAAK,eAAe,GAAG,IAAI;IAoB5E,IAAI,IAAI,IAAI;YAUE,YAAY;IAI1B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;IAId,OAAO;IAKR,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB1B,MAAM,CAAC,aAAa;IAIpB,MAAM,CAAC,WAAW;CAGnB"}
@@ -53,8 +53,8 @@ class Application extends ExpressApplication_1.ExpressApplication {
53
53
  return this;
54
54
  }
55
55
  // Boot a specific provider
56
- bootProvider(provider) {
57
- provider.boot();
56
+ async bootProvider(provider) {
57
+ await provider.boot();
58
58
  }
59
59
  bootSubscribers(provider) {
60
60
  provider.subscribers();
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationBuilder.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Application/ApplicationBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAQ3C,qBAAa,kBAAkB;IACtB,GAAG,EAAE,WAAW,CAAC;gBAEZ,GAAG,EAAE,WAAW;IAIrB,UAAU,CAAC,MAAM,EAAE,GAAG;IAKtB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IActC,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE;IAOtC,aAAa,CAClB,SAAS,EAAE,KAAK,CAAC,KAAK,GAAG,EAAE,WAAW,KAAK,eAAe,CAAC;IAgB7D,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,gBAAgB;IAIjB,WAAW;IAKX,cAAc;IAWd,MAAM;CAKd"}
1
+ {"version":3,"file":"ApplicationBuilder.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Application/ApplicationBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAU3C,qBAAa,kBAAkB;IACtB,GAAG,EAAE,WAAW,CAAC;gBAEZ,GAAG,EAAE,WAAW;IAIrB,UAAU,CAAC,MAAM,EAAE,GAAG;IAKtB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IActC,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE;IAOtC,aAAa,CAClB,SAAS,EAAE,KAAK,CAAC,KAAK,GAAG,EAAE,WAAW,KAAK,eAAe,CAAC;IAyB7D,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,gBAAgB;IAIjB,WAAW;IAKX,cAAc;IAWd,MAAM;CAKd"}
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ApplicationBuilder = void 0;
4
+ const DatabaseServiceProvider_1 = require("../Database/DatabaseServiceProvider");
4
5
  const Middleware_1 = require("../Middleware");
5
6
  const NodeArtisanCommand_1 = require("../Command-Line/NodeArtisanCommand");
6
7
  const helpers_1 = require("../Global/helpers");
7
- const Queue_1 = require("../Queue");
8
8
  const AuthServiceProvider_1 = require("../Providers/AuthServiceProvider");
9
+ const SessionServiceProvider_1 = require("../Providers/SessionServiceProvider");
10
+ const QueueServiceProvider_1 = require("../Queue/QueueServiceProvider");
9
11
  class ApplicationBuilder {
10
12
  constructor(app) {
11
13
  this.app = app;
@@ -16,13 +18,13 @@ class ApplicationBuilder {
16
18
  }
17
19
  withConfig(config) {
18
20
  this.app.config = { ...this.app.config, ...config };
19
- if (config.queue?.default && config.queue?.connections) {
20
- this.app.singleton("Queue", () => {
21
- const defaultConnection = config.queue.default;
22
- const queueConfig = config.queue.connections[defaultConnection];
23
- return new Queue_1.Queue(queueConfig ?? config.queue.connections.memory ?? { driver: "memory", queue: "default" });
24
- });
25
- }
21
+ // if (config.queue?.default && config.queue?.connections) {
22
+ // this.app.singleton("Queue", () => {
23
+ // const defaultConnection = config.queue.default;
24
+ // const queueConfig = (config.queue.connections as any)[defaultConnection];
25
+ // return new Queue(queueConfig ?? config.queue.connections.memory ?? { driver: "memory", queue: "default" });
26
+ // });
27
+ // }
26
28
  return this;
27
29
  }
28
30
  withRouting(routeConfig) {
@@ -35,11 +37,20 @@ class ApplicationBuilder {
35
37
  // Register AuthServiceProvider first when present (so auth events are set up before other providers)
36
38
  const ordered = providers.includes(AuthServiceProvider_1.AuthServiceProvider) &&
37
39
  providers[0] !== AuthServiceProvider_1.AuthServiceProvider
38
- ? [AuthServiceProvider_1.AuthServiceProvider, ...providers.filter((P) => P !== AuthServiceProvider_1.AuthServiceProvider)]
40
+ ? [
41
+ AuthServiceProvider_1.AuthServiceProvider,
42
+ ...providers.filter((P) => P !== AuthServiceProvider_1.AuthServiceProvider),
43
+ ]
39
44
  : providers;
40
- ordered.forEach((Provider) => {
45
+ const chain = [
46
+ DatabaseServiceProvider_1.DatabaseServiceProvider,
47
+ SessionServiceProvider_1.SessionServiceProvider,
48
+ ...ordered,
49
+ QueueServiceProvider_1.QueueServiceProvider,
50
+ ];
51
+ for (const Provider of chain) {
41
52
  this.app.registerProviders(Provider);
42
- });
53
+ }
43
54
  return this;
44
55
  }
45
56
  withEvents() {
@@ -1 +1 @@
1
- {"version":3,"file":"AuthMiddleware.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Auth/AuthMiddleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhE,cAAM,cAAc;IAClB,qCAAqC;IACxB,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO;IAuBxD,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO;IAuB3D,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO;CAgB9D;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
1
+ {"version":3,"file":"AuthMiddleware.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Auth/AuthMiddleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAUhE,cAAM,cAAc;IAClB,qCAAqC;IACxB,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO;IA6BxD,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO;IAmC3D,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO;CAgB9D;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -3,22 +3,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.authMiddleware = void 0;
4
4
  const Config_1 = require("../Config/Config");
5
5
  const util_1 = require("../util");
6
- const { User } = (0, util_1.getModel)("User");
7
6
  class AuthMiddleware {
8
7
  /** Middleware: API authentication */
9
8
  async apiAuth(req, res, next) {
9
+ const { User } = (0, util_1.getModel)("User");
10
10
  const token = req.headers.authorization?.split(" ")[1] || req.cookies.auth_token;
11
11
  if (!token)
12
12
  return res.status(401).json({ message: "Not authorized" });
13
13
  try {
14
- const id = (0, util_1.jwtVerify)(token);
15
- const user = Config_1.config.get("DB_ORM") === "mongodb"
14
+ const payload = (0, util_1.jwtVerify)(token);
15
+ if (!(0, util_1.checkJwtAccessTokenPayload)(payload).ok) {
16
+ return res.status(401).json({ message: "Not authorized" });
17
+ }
18
+ const id = (0, util_1.jwtSubjectId)(payload);
19
+ const user = Config_1.config.get("DB_ORM") === "mongodb" ||
20
+ Config_1.config.get("DB_ORM") === "mongoose"
16
21
  ? await User.findById(id)
17
22
  : await User.where("id", id).first();
18
23
  if (!user)
19
24
  return res.status(401).json({ message: "Not authorized" });
20
25
  req.user = user;
21
- req.id = id;
26
+ req.id = String(id);
22
27
  next();
23
28
  }
24
29
  catch (err) {
@@ -26,15 +31,26 @@ class AuthMiddleware {
26
31
  }
27
32
  }
28
33
  async auth(req, res, next) {
34
+ const { User } = (0, util_1.getModel)("User");
29
35
  const token = req.cookies.auth_token;
30
- if (!token)
36
+ if (!token) {
37
+ req.jccSession?.put("redirect", req.url || "/");
31
38
  return res.redirect(`/login?redirect=${req.url || "/"}`);
39
+ }
32
40
  try {
33
41
  const payload = (0, util_1.jwtVerify)(token);
34
- const user = await (0, util_1.findUserById)(User, payload.id);
42
+ if (!(0, util_1.checkJwtAccessTokenPayload)(payload).ok) {
43
+ res.clearCookie("auth_token", (0, util_1.authSessionCookieOptions)());
44
+ res.clearCookie("refresh_token", (0, util_1.authSessionCookieOptions)());
45
+ req.jccSession?.put("redirect", req.url || "/");
46
+ return res.redirect(`/login?redirect=${req.url || "/"}`);
47
+ }
48
+ const id = (0, util_1.jwtSubjectId)(payload);
49
+ const user = await (0, util_1.findUserById)(User, id);
35
50
  if (!user) {
36
- res.clearCookie("auth_token");
37
- res.clearCookie("refresh_token");
51
+ res.clearCookie("auth_token", (0, util_1.authSessionCookieOptions)());
52
+ res.clearCookie("refresh_token", (0, util_1.authSessionCookieOptions)());
53
+ req.jccSession?.put("redirect", req.url || "/");
38
54
  return res.redirect(`/login?redirect=${req.url || "/"}`);
39
55
  }
40
56
  req.user = user;
@@ -42,8 +58,9 @@ class AuthMiddleware {
42
58
  next();
43
59
  }
44
60
  catch (err) {
45
- res.clearCookie("auth_token");
46
- res.clearCookie("refresh_token");
61
+ res.clearCookie("auth_token", (0, util_1.authSessionCookieOptions)());
62
+ res.clearCookie("refresh_token", (0, util_1.authSessionCookieOptions)());
63
+ req.jccSession?.put("redirect", req.url || "/");
47
64
  return res.redirect(`/login?redirect=${req.url || "/"}`);
48
65
  }
49
66
  }
@@ -55,8 +72,8 @@ class AuthMiddleware {
55
72
  return res.redirect(303, req.previousUrls[1]);
56
73
  }
57
74
  else {
58
- res.clearCookie("auth_token");
59
- res.clearCookie("refresh_token");
75
+ res.clearCookie("auth_token", (0, util_1.authSessionCookieOptions)());
76
+ res.clearCookie("refresh_token", (0, util_1.authSessionCookieOptions)());
60
77
  return res.redirect(303, req.url);
61
78
  }
62
79
  }
@@ -1,16 +1,30 @@
1
1
  import { AppRequest, AppResponse, AppNext } from "../Interface";
2
+ import { type IRefreshTokenStore } from "./refreshTokenStore";
2
3
  export declare class Authentication {
4
+ private static refreshStore;
5
+ /** Use a shared store (e.g. Redis) when running multiple app instances. */
6
+ static setRefreshTokenStore(store: IRefreshTokenStore): void;
3
7
  /** Get user lookup field (email, phone, username) */
4
8
  private static getCredentials;
5
9
  /** Fetch user from DB (MongoDB, Sequelize, or JCC ORM) */
6
10
  private static getUser;
7
- /** Generate and attach tokens to cookies */
11
+ /** Generate and attach tokens to cookies (refresh is rotated server-side via `jti`). */
8
12
  private static setTokens;
9
13
  /** Handle user login attempt */
10
- static attempt: (req: AppRequest, res: AppResponse, next: AppNext, redirect?: string) => Promise<void | AppResponse>;
14
+ static attempt: (next: AppNext, redirect?: string) => Promise<void>;
15
+ /**
16
+ * After the user is resolved (e.g. OAuth via Socialite), issue JWT cookies
17
+ * and redirect or JSON response like {@link Authentication.attempt}.
18
+ */
19
+ static completeLogin(req: AppRequest, res: AppResponse, userId: string | number, redirect?: string): Promise<void>;
11
20
  /** Refresh token middleware */
12
21
  static refreshToken(req: AppRequest, res: AppResponse, next: AppNext): Promise<AppResponse | undefined>;
13
22
  /** Logout handler */
14
- static logout(req: AppRequest, res: AppResponse): void;
23
+ static logout(): void;
24
+ /** True when the access cookie is a valid, usable JWT (not refresh / disallowed legacy). */
25
+ static check(): boolean;
26
+ static user(): Record<string, any>;
27
+ static id(): any;
28
+ static socialLogin(userId: string | number): Promise<void>;
15
29
  }
16
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAehE,qBAAa,cAAc;IACzB,qDAAqD;IACrD,OAAO,CAAC,MAAM,CAAC,cAAc;IAc7B,0DAA0D;mBACrC,OAAO;IAoB5B,4CAA4C;IAC5C,OAAO,CAAC,MAAM,CAAC,SAAS;IAuBxB,gCAAgC;IAChC,MAAM,CAAC,OAAO,GACZ,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,MAAM,OAAO,EACb,WAAU,MAAgB,iCAuB1B;IAEF,+BAA+B;WAClB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO;IAmB1E,qBAAqB;IACrB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW;CAKhD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAgBhE,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAsB7B,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,YAAY,CAAgD;IAE3E,2EAA2E;IAC3E,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAI5D,qDAAqD;IACrD,OAAO,CAAC,MAAM,CAAC,cAAc;IAc7B,0DAA0D;mBACrC,OAAO;IAqB5B,wFAAwF;IACxF,OAAO,CAAC,MAAM,CAAC,SAAS;IA0BxB,gCAAgC;IAChC,MAAM,CAAC,OAAO,GAAU,MAAM,OAAO,EAAE,WAAU,MAAgB,mBAqB/D;IAEF;;;OAGG;WACU,aAAa,CACxB,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,QAAQ,GAAE,MAAgB,GACzB,OAAO,CAAC,IAAI,CAAC;IA4BhB,+BAA+B;WAClB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO;IAsC1E,qBAAqB;IACrB,MAAM,CAAC,MAAM;IAsBb,4FAA4F;IAC5F,MAAM,CAAC,KAAK,IAAI,OAAO;IAWvB,MAAM,CAAC,IAAI;IAIX,MAAM,CAAC,EAAE;WAII,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAGjD"}
package/lib/Auth/index.js CHANGED
@@ -6,8 +6,28 @@ const util_1 = require("../util");
6
6
  const Config_1 = require("../Config/Config");
7
7
  const ValidationException_v2_1 = require("../Error/ValidationException-v2");
8
8
  const Jcc_eloquent_1 = require("../Jcc-eloquent");
9
- const { User } = (0, util_1.getModel)("User");
9
+ const refreshTokenStore_1 = require("./refreshTokenStore");
10
+ const REFRESH_TTL_MS = 7 * 24 * 60 * 60 * 1000;
11
+ const ACCESS_MAX_AGE_MS = 60 * 60 * 1000;
12
+ function clearAuthCookies(res) {
13
+ const base = (0, util_1.authSessionCookieOptions)();
14
+ res.clearCookie("auth_token", base);
15
+ res.clearCookie("refresh_token", base);
16
+ }
17
+ /** Avoid open redirects: only same-origin relative paths. */
18
+ function safeInternalRedirect(url, fallback) {
19
+ if (!url || typeof url !== "string")
20
+ return fallback;
21
+ const t = url.trim();
22
+ if (t.startsWith("/") && !t.startsWith("//") && !t.includes("\\"))
23
+ return t;
24
+ return fallback;
25
+ }
10
26
  class Authentication {
27
+ /** Use a shared store (e.g. Redis) when running multiple app instances. */
28
+ static setRefreshTokenStore(store) {
29
+ _a.refreshStore = store;
30
+ }
11
31
  /** Get user lookup field (email, phone, username) */
12
32
  static getCredentials(data) {
13
33
  const query = {};
@@ -24,12 +44,13 @@ class Authentication {
24
44
  }
25
45
  /** Fetch user from DB (MongoDB, Sequelize, or JCC ORM) */
26
46
  static async getUser(data) {
47
+ const { User } = (0, util_1.getModel)("User");
27
48
  const field = this.getCredentials(data);
28
49
  if (!Object.keys(field).length)
29
50
  return { user: null, field: "email" };
30
51
  let user = null;
31
52
  const orm = Config_1.config.get("DB_ORM");
32
- if (orm === "mongodb") {
53
+ if (orm === "mongodb" || orm === "mongoose") {
33
54
  user = await User.findOne(field).select("+password");
34
55
  }
35
56
  else if (orm === "sequelize") {
@@ -43,54 +64,140 @@ class Authentication {
43
64
  }
44
65
  return { user, field: Object.keys(field)[0] || "email" };
45
66
  }
46
- /** Generate and attach tokens to cookies */
67
+ /** Generate and attach tokens to cookies (refresh is rotated server-side via `jti`). */
47
68
  static setTokens(res, userId) {
48
- const accessToken = (0, util_1.jwtSign)(userId.toString(), { expiresIn: "1h" });
49
- const refreshToken = (0, util_1.jwtSign)(userId.toString(), { expiresIn: "7d" });
50
- const cookieOptions = {
51
- httpOnly: true,
52
- secure: Config_1.config.get("APP_ENV") === "production",
53
- sameSite: "lax",
54
- };
69
+ const id = String(userId);
70
+ const jti = _a.refreshStore.generateJti();
71
+ _a.refreshStore.register(jti, id, REFRESH_TTL_MS);
72
+ const accessToken = (0, util_1.jwtSign)(id, { expiresIn: "1h" });
73
+ const refreshToken = (0, util_1.jwtSign)({ id, typ: "refresh", jti }, { expiresIn: "7d" });
74
+ const cookieOptions = (0, util_1.authSessionCookieOptions)();
55
75
  res.cookie("auth_token", accessToken, {
56
76
  ...cookieOptions,
57
- maxAge: 1000 * 60 * 60, // 1 hour
77
+ maxAge: ACCESS_MAX_AGE_MS,
58
78
  });
59
79
  res.cookie("refresh_token", refreshToken, {
60
80
  ...cookieOptions,
61
- maxAge: 1000 * 60 * 60 * 24 * 7, // 7 days
81
+ maxAge: REFRESH_TTL_MS,
62
82
  });
63
83
  return { accessToken, refreshToken };
64
84
  }
85
+ /**
86
+ * After the user is resolved (e.g. OAuth via Socialite), issue JWT cookies
87
+ * and redirect or JSON response like {@link Authentication.attempt}.
88
+ */
89
+ static async completeLogin(req, res, userId, redirect = "/home") {
90
+ const { User } = (0, util_1.getModel)("User");
91
+ const tokens = this.setTokens(res, userId);
92
+ const user = await (0, util_1.findUserById)(User, userId);
93
+ if (!user) {
94
+ if (req.expectsJson() && !req.isInertia()) {
95
+ res.status(401).json({ message: "Unauthorized" });
96
+ }
97
+ else {
98
+ req.jccSession?.flash("error", "Could not sign you in.");
99
+ res.redirect(303, "/login");
100
+ }
101
+ return;
102
+ }
103
+ if (req.expectsJson() && !req.isInertia()) {
104
+ const plain = typeof user?.toObject === "function" ? user.toObject() : user;
105
+ res.status(200).json({
106
+ tokens: { accessToken: tokens.accessToken },
107
+ user: plain,
108
+ });
109
+ return;
110
+ }
111
+ const sessionRedirect = req.jccSession?.get("redirect") || "";
112
+ req.jccSession?.forget("redirect");
113
+ const redirectTo = safeInternalRedirect(sessionRedirect, redirect);
114
+ res.redirect(303, redirectTo);
115
+ }
65
116
  /** Refresh token middleware */
66
117
  static async refreshToken(req, res, next) {
118
+ const { User } = (0, util_1.getModel)("User");
67
119
  try {
68
120
  const refreshToken = req.cookies.refresh_token;
69
121
  if (!refreshToken)
70
122
  throw new Error("No refresh token");
71
- const userId = (0, util_1.jwtVerify)(refreshToken);
123
+ const payload = (0, util_1.jwtVerify)(refreshToken);
124
+ const kind = (0, util_1.jwtTokenType)(payload);
125
+ if (kind === "access") {
126
+ throw new Error("Invalid refresh token");
127
+ }
128
+ const jti = payload != null &&
129
+ typeof payload === "object" &&
130
+ typeof payload.jti === "string"
131
+ ? payload.jti
132
+ : "";
133
+ if (!jti) {
134
+ throw new Error("Invalid refresh token");
135
+ }
136
+ const session = _a.refreshStore.consume(jti);
137
+ const userId = (0, util_1.jwtSubjectId)(payload);
138
+ if (!session || session.userId !== String(userId)) {
139
+ throw new Error("Invalid refresh token");
140
+ }
72
141
  this.setTokens(res, userId);
73
- // Use universal finder
74
142
  req.user = await (0, util_1.findUserById)(User, userId);
75
143
  next();
76
144
  }
77
145
  catch (error) {
78
- res.clearCookie("auth_token");
79
- res.clearCookie("refresh_token");
146
+ clearAuthCookies(res);
80
147
  return res.status(401).json({ message: "Unauthorized" });
81
148
  }
82
149
  }
83
150
  /** Logout handler */
84
- static logout(req, res) {
85
- res.clearCookie("auth_token");
86
- res.clearCookie("refresh_token");
151
+ static logout() {
152
+ const req = request();
153
+ const res = response();
154
+ try {
155
+ const rt = req.cookies?.refresh_token;
156
+ if (rt) {
157
+ const payload = (0, util_1.jwtVerify)(rt);
158
+ if (payload != null &&
159
+ typeof payload === "object" &&
160
+ typeof payload.jti === "string") {
161
+ _a.refreshStore.revoke(payload.jti);
162
+ }
163
+ }
164
+ }
165
+ catch {
166
+ /* expired or malformed */
167
+ }
168
+ clearAuthCookies(res);
87
169
  return res.redirect("/login");
88
170
  }
171
+ /** True when the access cookie is a valid, usable JWT (not refresh / disallowed legacy). */
172
+ static check() {
173
+ const token = request().cookies?.auth_token;
174
+ if (!token)
175
+ return false;
176
+ try {
177
+ const payload = (0, util_1.jwtVerify)(token);
178
+ return (0, util_1.checkJwtAccessTokenPayload)(payload).ok;
179
+ }
180
+ catch {
181
+ return false;
182
+ }
183
+ }
184
+ static user() {
185
+ return request().user;
186
+ }
187
+ static id() {
188
+ return request().user?.id || request().user?._id;
189
+ }
190
+ static async socialLogin(userId) {
191
+ return this.completeLogin(request(), response(), userId, "/home");
192
+ }
89
193
  }
90
194
  exports.Authentication = Authentication;
91
195
  _a = Authentication;
196
+ Authentication.refreshStore = refreshTokenStore_1.defaultRefreshTokenStore;
92
197
  /** Handle user login attempt */
93
- Authentication.attempt = async (req, res, next, redirect = "/home") => {
198
+ Authentication.attempt = async (next, redirect = "/home") => {
199
+ const req = request();
200
+ const res = response();
94
201
  try {
95
202
  const { user, field } = await _a.getUser(req.body);
96
203
  if (!user)
@@ -98,12 +205,7 @@ Authentication.attempt = async (req, res, next, redirect = "/home") => {
98
205
  if (!(await (0, util_1.verifyHash)(req.body.password, user.password))) {
99
206
  throw new ValidationException_v2_1.ValidationException({ [field]: ["Invalid credentials"] });
100
207
  }
101
- const tokens = _a.setTokens(res, user.id || user._id);
102
- if (req.expectsJson() && !req.isInertia()) {
103
- return res.status(200).json({ tokens, user });
104
- }
105
- const redirectTo = req.query.redirect?.toString() || redirect;
106
- return res.redirect(303, redirectTo);
208
+ await _a.completeLogin(req, res, user.id || user._id, redirect);
107
209
  }
108
210
  catch (error) {
109
211
  next(error);
@@ -0,0 +1,6 @@
1
+ import type { RequestHandler } from "express";
2
+ /** Stricter limit for login attempts (per IP). */
3
+ export declare const loginRateLimit: RequestHandler;
4
+ /** Stricter limit for registration (per IP). */
5
+ export declare const registerRateLimit: RequestHandler;
6
+ //# sourceMappingURL=loginRateLimit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loginRateLimit.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Auth/loginRateLimit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,kDAAkD;AAClD,eAAO,MAAM,cAAc,EAAE,cAO3B,CAAC;AAEH,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,EAAE,cAO9B,CAAC"}