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.
- package/Core/index.d.ts +4 -0
- package/Core/index.d.ts.map +1 -1
- package/Core/index.js +5 -0
- package/__tests__/Job.test.d.ts +2 -0
- package/__tests__/Job.test.d.ts.map +1 -0
- package/__tests__/Job.test.js +205 -0
- package/__tests__/MySqlSchemaBlueprint.test.d.ts +2 -0
- package/__tests__/MySqlSchemaBlueprint.test.d.ts.map +1 -0
- package/__tests__/MySqlSchemaBlueprint.test.js +55 -0
- package/__tests__/PostgresTranslator.test.d.ts +2 -0
- package/__tests__/PostgresTranslator.test.d.ts.map +1 -0
- package/__tests__/PostgresTranslator.test.js +82 -0
- package/__tests__/SQLiteTranslator.test.d.ts +2 -0
- package/__tests__/SQLiteTranslator.test.d.ts.map +1 -0
- package/__tests__/SQLiteTranslator.test.js +125 -0
- package/__tests__/SchemaAlterBlueprint.test.d.ts +2 -0
- package/__tests__/SchemaAlterBlueprint.test.d.ts.map +1 -0
- package/__tests__/SchemaAlterBlueprint.test.js +35 -0
- package/global.d.ts +3 -1
- package/index.d.ts +28 -3
- package/index.d.ts.map +1 -1
- package/index.js +33 -75
- package/lib/Application/Application.d.ts.map +1 -1
- package/lib/Application/Application.js +2 -2
- package/lib/Application/ApplicationBuilder.d.ts.map +1 -1
- package/lib/Application/ApplicationBuilder.js +22 -11
- package/lib/Auth/AuthMiddleware.d.ts.map +1 -1
- package/lib/Auth/AuthMiddleware.js +29 -12
- package/lib/Auth/index.d.ts +17 -3
- package/lib/Auth/index.d.ts.map +1 -1
- package/lib/Auth/index.js +128 -26
- package/lib/Auth/loginRateLimit.d.ts +6 -0
- package/lib/Auth/loginRateLimit.d.ts.map +1 -0
- package/lib/Auth/loginRateLimit.js +25 -0
- package/lib/Auth/refreshTokenStore.d.ts +24 -0
- package/lib/Auth/refreshTokenStore.d.ts.map +1 -0
- package/lib/Auth/refreshTokenStore.js +46 -0
- package/lib/Command-Line/DBCommand.d.ts.map +1 -1
- package/lib/Command-Line/DBCommand.js +9 -3
- package/lib/Command-Line/KeyGenerateCommand.d.ts +6 -0
- package/lib/Command-Line/KeyGenerateCommand.d.ts.map +1 -0
- package/lib/Command-Line/KeyGenerateCommand.js +47 -0
- package/lib/Command-Line/MakeCommand.d.ts +1 -0
- package/lib/Command-Line/MakeCommand.d.ts.map +1 -1
- package/lib/Command-Line/MakeCommand.js +36 -32
- package/lib/Command-Line/NodeArtisanCommand.d.ts +2 -0
- package/lib/Command-Line/NodeArtisanCommand.d.ts.map +1 -1
- package/lib/Command-Line/NodeArtisanCommand.js +24 -6
- package/lib/Command-Line/NodeTinker/Tinker.d.ts +5 -2
- package/lib/Command-Line/NodeTinker/Tinker.d.ts.map +1 -1
- package/lib/Command-Line/NodeTinker/Tinker.js +13 -3
- package/lib/Command-Line/WatchCommand.d.ts +29 -0
- package/lib/Command-Line/WatchCommand.d.ts.map +1 -0
- package/lib/Command-Line/WatchCommand.js +234 -0
- package/lib/Command-Line/files/Models.d.ts.map +1 -1
- package/lib/Command-Line/files/Models.js +67 -0
- package/lib/Console/Command.d.ts +18 -0
- package/lib/Console/Command.d.ts.map +1 -1
- package/lib/Console/Command.js +29 -0
- package/lib/Container/index.d.ts.map +1 -1
- package/lib/Container/index.js +22 -8
- package/lib/Database/Database.d.ts +21 -0
- package/lib/Database/Database.d.ts.map +1 -0
- package/lib/Database/Database.js +55 -0
- package/lib/Database/DatabaseServiceProvider.d.ts +22 -0
- package/lib/Database/DatabaseServiceProvider.d.ts.map +1 -0
- package/lib/Database/DatabaseServiceProvider.js +50 -0
- package/lib/Database/Drivers/KnexDriver.d.ts +13 -0
- package/lib/Database/Drivers/KnexDriver.d.ts.map +1 -0
- package/lib/Database/Drivers/KnexDriver.js +29 -0
- package/lib/Database/Drivers/MongooseDriver.d.ts +20 -0
- package/lib/Database/Drivers/MongooseDriver.d.ts.map +1 -0
- package/lib/Database/Drivers/MongooseDriver.js +57 -0
- package/lib/Database/Drivers/SequelizeDriver.d.ts +24 -0
- package/lib/Database/Drivers/SequelizeDriver.d.ts.map +1 -0
- package/lib/Database/Drivers/SequelizeDriver.js +82 -0
- package/lib/Database/index.d.ts +7 -0
- package/lib/Database/index.d.ts.map +1 -0
- package/lib/Database/index.js +11 -0
- package/lib/Database/interface.d.ts +14 -0
- package/lib/Database/interface.d.ts.map +1 -0
- package/lib/Database/interface.js +2 -0
- package/lib/Database/type.d.ts +18 -0
- package/lib/Database/type.d.ts.map +1 -0
- package/lib/Database/type.js +2 -0
- package/lib/Error/DisplayErrorCode.d.ts.map +1 -1
- package/lib/Error/DisplayErrorCode.js +27 -17
- package/lib/Error/MissMatchTokenException/index.d.ts +4 -0
- package/lib/Error/MissMatchTokenException/index.d.ts.map +1 -0
- package/lib/Error/MissMatchTokenException/index.js +9 -0
- package/lib/Error/SocialiteAuthError/SocialiteAuthError.d.ts +9 -0
- package/lib/Error/SocialiteAuthError/SocialiteAuthError.d.ts.map +1 -0
- package/lib/Error/SocialiteAuthError/SocialiteAuthError.js +17 -0
- package/lib/Global/helpers.d.ts.map +1 -1
- package/lib/Global/helpers.js +7 -6
- package/lib/Http/index.d.ts +3 -1
- package/lib/Http/index.d.ts.map +1 -1
- package/lib/Http/index.js +26 -5
- package/lib/Interface/index.d.ts +17 -3
- package/lib/Interface/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Builder.d.ts +12 -1
- package/lib/Jcc-eloquent/lib/Builder.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Builder.js +119 -5
- package/lib/Jcc-eloquent/lib/Database/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Database/index.js +2 -1
- package/lib/Jcc-eloquent/lib/Interfaces/index.d.ts +37 -2
- package/lib/Jcc-eloquent/lib/Interfaces/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Migration.d.ts +6 -0
- package/lib/Jcc-eloquent/lib/Migration.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Migration.js +24 -2
- package/lib/Jcc-eloquent/lib/Model.d.ts +24 -7
- package/lib/Jcc-eloquent/lib/Model.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Model.js +35 -2
- package/lib/Jcc-eloquent/lib/QueryBuilder.d.ts +2 -1
- package/lib/Jcc-eloquent/lib/QueryBuilder.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/QueryBuilder.js +10 -1
- package/lib/Jcc-eloquent/lib/Rollback.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Rollback.js +9 -2
- package/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.js +3 -3
- package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.d.ts +6 -2
- package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.js +41 -12
- package/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.js +21 -3
- package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.d.ts +1 -0
- package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.js +70 -14
- package/lib/Jcc-eloquent/lib/Schema/index.d.ts +12 -0
- package/lib/Jcc-eloquent/lib/Schema/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Schema/index.js +27 -6
- package/lib/Jcc-eloquent/lib/utils/index.d.ts +13 -0
- package/lib/Jcc-eloquent/lib/utils/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/utils/index.js +62 -0
- package/lib/Middleware/index.d.ts +1 -0
- package/lib/Middleware/index.d.ts.map +1 -1
- package/lib/Middleware/index.js +20 -8
- package/lib/Model/Sequelize.d.ts +3 -0
- package/lib/Model/Sequelize.d.ts.map +1 -0
- package/lib/Model/Sequelize.js +6 -0
- package/lib/Providers/RouteServiceProvider.d.ts.map +1 -1
- package/lib/Providers/RouteServiceProvider.js +3 -0
- package/lib/Providers/SessionServiceProvider.d.ts +12 -0
- package/lib/Providers/SessionServiceProvider.d.ts.map +1 -0
- package/lib/Providers/SessionServiceProvider.js +47 -0
- package/lib/Queue/Controllers/QueueControllers.d.ts +31 -0
- package/lib/Queue/Controllers/QueueControllers.d.ts.map +1 -0
- package/lib/Queue/Controllers/QueueControllers.js +126 -0
- package/lib/Queue/Drivers/DatabaseDriver.d.ts +6 -1
- package/lib/Queue/Drivers/DatabaseDriver.d.ts.map +1 -1
- package/lib/Queue/Drivers/DatabaseDriver.js +76 -21
- package/lib/Queue/Drivers/MemoryDriver.d.ts +17 -6
- package/lib/Queue/Drivers/MemoryDriver.d.ts.map +1 -1
- package/lib/Queue/Drivers/MemoryDriver.js +323 -14
- package/lib/Queue/Drivers/RedisDriver.d.ts +48 -0
- package/lib/Queue/Drivers/RedisDriver.d.ts.map +1 -0
- package/lib/Queue/Drivers/RedisDriver.js +533 -0
- package/lib/Queue/Job.d.ts +8 -0
- package/lib/Queue/Job.d.ts.map +1 -1
- package/lib/Queue/Job.js +25 -1
- package/lib/Queue/JobsLogger.d.ts.map +1 -1
- package/lib/Queue/JobsLogger.js +6 -3
- package/lib/Queue/Queue.d.ts +17 -0
- package/lib/Queue/Queue.d.ts.map +1 -1
- package/lib/Queue/Queue.js +146 -11
- package/lib/Queue/QueueServiceProvider.d.ts +6 -0
- package/lib/Queue/QueueServiceProvider.d.ts.map +1 -0
- package/lib/Queue/QueueServiceProvider.js +18 -0
- package/lib/Queue/Route/web.d.ts +2 -0
- package/lib/Queue/Route/web.d.ts.map +1 -0
- package/lib/Queue/Route/web.js +16 -0
- package/lib/Queue/index.d.ts +1 -0
- package/lib/Queue/index.d.ts.map +1 -1
- package/lib/Queue/index.js +3 -0
- package/lib/Queue/interface.d.ts +25 -0
- package/lib/Queue/interface.d.ts.map +1 -1
- package/lib/Queue/middleware/queueDashboardGuard.d.ts +7 -0
- package/lib/Queue/middleware/queueDashboardGuard.d.ts.map +1 -0
- package/lib/Queue/middleware/queueDashboardGuard.js +43 -0
- package/lib/Queue/type.d.ts +12 -1
- package/lib/Queue/type.d.ts.map +1 -1
- package/lib/Response/index.d.ts.map +1 -1
- package/lib/Response/index.js +6 -1
- package/lib/Routes/Route.d.ts +2 -2
- package/lib/Routes/Route.d.ts.map +1 -1
- package/lib/Routes/RouteBuilder.d.ts +2 -2
- package/lib/Routes/RouteBuilder.d.ts.map +1 -1
- package/lib/Security/CsrfMiddleware.d.ts +37 -0
- package/lib/Security/CsrfMiddleware.d.ts.map +1 -0
- package/lib/Security/CsrfMiddleware.js +85 -0
- package/lib/Security/MethodSpoofingMiddleware.d.ts +36 -0
- package/lib/Security/MethodSpoofingMiddleware.d.ts.map +1 -0
- package/lib/Security/MethodSpoofingMiddleware.js +51 -0
- package/lib/Security/index.d.ts +5 -0
- package/lib/Security/index.d.ts.map +1 -0
- package/lib/Security/index.js +7 -0
- package/lib/Session/DatabaseSession.d.ts +9 -3
- package/lib/Session/DatabaseSession.d.ts.map +1 -1
- package/lib/Session/DatabaseSession.js +38 -36
- package/lib/Session/ExpressJccSession.d.ts +23 -0
- package/lib/Session/ExpressJccSession.d.ts.map +1 -0
- package/lib/Session/ExpressJccSession.js +110 -0
- package/lib/Session/RedisSession.d.ts +2 -2
- package/lib/Session/RedisSession.d.ts.map +1 -1
- package/lib/Session/RedisSession.js +19 -5
- package/lib/Session/SessionManager.d.ts +18 -4
- package/lib/Session/SessionManager.d.ts.map +1 -1
- package/lib/Session/SessionManager.js +53 -17
- package/lib/Socialite/AbstractProvider.d.ts +60 -0
- package/lib/Socialite/AbstractProvider.d.ts.map +1 -0
- package/lib/Socialite/AbstractProvider.js +136 -0
- package/lib/Socialite/Drivers/facebook/FacebookDriver.d.ts +9 -0
- package/lib/Socialite/Drivers/facebook/FacebookDriver.d.ts.map +1 -0
- package/lib/Socialite/Drivers/facebook/FacebookDriver.js +40 -0
- package/lib/Socialite/Drivers/facebook/FacebookProvider.d.ts +15 -0
- package/lib/Socialite/Drivers/facebook/FacebookProvider.d.ts.map +1 -0
- package/lib/Socialite/Drivers/facebook/FacebookProvider.js +28 -0
- package/lib/Socialite/Drivers/github/GitHubDriver.d.ts +9 -0
- package/lib/Socialite/Drivers/github/GitHubDriver.d.ts.map +1 -0
- package/lib/Socialite/Drivers/github/GitHubDriver.js +54 -0
- package/lib/Socialite/Drivers/github/GitHubProvider.d.ts +15 -0
- package/lib/Socialite/Drivers/github/GitHubProvider.d.ts.map +1 -0
- package/lib/Socialite/Drivers/github/GitHubProvider.js +28 -0
- package/lib/Socialite/Drivers/gitlab/GitLabDriver.d.ts +10 -0
- package/lib/Socialite/Drivers/gitlab/GitLabDriver.d.ts.map +1 -0
- package/lib/Socialite/Drivers/gitlab/GitLabDriver.js +37 -0
- package/lib/Socialite/Drivers/gitlab/GitLabProvider.d.ts +15 -0
- package/lib/Socialite/Drivers/gitlab/GitLabProvider.d.ts.map +1 -0
- package/lib/Socialite/Drivers/gitlab/GitLabProvider.js +28 -0
- package/lib/Socialite/Drivers/google/GoogleDriver.d.ts +9 -0
- package/lib/Socialite/Drivers/google/GoogleDriver.d.ts.map +1 -0
- package/lib/Socialite/Drivers/google/GoogleDriver.js +39 -0
- package/lib/Socialite/Drivers/google/GoogleProvider.d.ts +15 -0
- package/lib/Socialite/Drivers/google/GoogleProvider.d.ts.map +1 -0
- package/lib/Socialite/Drivers/google/GoogleProvider.js +28 -0
- package/lib/Socialite/Drivers/slack/SlackDriver.d.ts +9 -0
- package/lib/Socialite/Drivers/slack/SlackDriver.d.ts.map +1 -0
- package/lib/Socialite/Drivers/slack/SlackDriver.js +41 -0
- package/lib/Socialite/Drivers/slack/SlackProvider.d.ts +16 -0
- package/lib/Socialite/Drivers/slack/SlackProvider.d.ts.map +1 -0
- package/lib/Socialite/Drivers/slack/SlackProvider.js +37 -0
- package/lib/Socialite/Drivers/twitter/TwitterDriver.d.ts +9 -0
- package/lib/Socialite/Drivers/twitter/TwitterDriver.d.ts.map +1 -0
- package/lib/Socialite/Drivers/twitter/TwitterDriver.js +57 -0
- package/lib/Socialite/Drivers/twitter/TwitterProvider.d.ts +16 -0
- package/lib/Socialite/Drivers/twitter/TwitterProvider.d.ts.map +1 -0
- package/lib/Socialite/Drivers/twitter/TwitterProvider.js +38 -0
- package/lib/Socialite/SocialUser.d.ts +42 -0
- package/lib/Socialite/SocialUser.d.ts.map +1 -0
- package/lib/Socialite/SocialUser.js +116 -0
- package/lib/Socialite/Socialite.d.ts +13 -0
- package/lib/Socialite/Socialite.d.ts.map +1 -0
- package/lib/Socialite/Socialite.js +41 -0
- package/lib/Socialite/SocialiteProvider.d.ts +9 -0
- package/lib/Socialite/SocialiteProvider.d.ts.map +1 -0
- package/lib/Socialite/SocialiteProvider.js +15 -0
- package/lib/Socialite/config.d.ts +7 -0
- package/lib/Socialite/config.d.ts.map +1 -0
- package/lib/Socialite/config.js +44 -0
- package/lib/Socialite/constant.d.ts +18 -0
- package/lib/Socialite/constant.d.ts.map +1 -0
- package/lib/Socialite/constant.js +20 -0
- package/lib/Socialite/index.d.ts +13 -0
- package/lib/Socialite/index.d.ts.map +1 -0
- package/lib/Socialite/index.js +25 -0
- package/lib/Socialite/types.d.ts +13 -0
- package/lib/Socialite/types.d.ts.map +1 -0
- package/lib/Socialite/types.js +2 -0
- package/lib/Templating-engine/benchmark.d.ts +7 -0
- package/lib/Templating-engine/benchmark.d.ts.map +1 -0
- package/lib/Templating-engine/benchmark.js +44 -0
- package/lib/Templating-engine/engineHelper.d.ts +37 -8
- package/lib/Templating-engine/engineHelper.d.ts.map +1 -1
- package/lib/Templating-engine/engineHelper.js +203 -26
- package/lib/Templating-engine/errors.d.ts +15 -0
- package/lib/Templating-engine/errors.d.ts.map +1 -0
- package/lib/Templating-engine/errors.js +35 -0
- package/lib/Templating-engine/expressions.d.ts +24 -0
- package/lib/Templating-engine/expressions.d.ts.map +1 -1
- package/lib/Templating-engine/expressions.js +27 -5
- package/lib/Templating-engine/index.d.ts +87 -17
- package/lib/Templating-engine/index.d.ts.map +1 -1
- package/lib/Templating-engine/index.js +701 -96
- package/lib/Templating-engine/plugins.d.ts +30 -0
- package/lib/Templating-engine/plugins.d.ts.map +1 -0
- package/lib/Templating-engine/plugins.js +47 -0
- package/lib/Type/index.d.ts +1 -0
- package/lib/Type/index.d.ts.map +1 -1
- package/lib/Validation/Validator/CustomValidation.d.ts.map +1 -1
- package/lib/Validation/Validator/CustomValidation.js +2 -2
- package/lib/Validation/Validator/helper.d.ts.map +1 -1
- package/lib/Validation/Validator/helper.js +8 -1
- package/lib/util/index.d.ts +42 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +154 -17
- 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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
});
|
|
40
|
-
Object.defineProperty(exports, "
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
Object.defineProperty(exports, "
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
});
|
|
58
|
-
Object.defineProperty(exports, "
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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;
|
|
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;
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
? [
|
|
40
|
+
? [
|
|
41
|
+
AuthServiceProvider_1.AuthServiceProvider,
|
|
42
|
+
...providers.filter((P) => P !== AuthServiceProvider_1.AuthServiceProvider),
|
|
43
|
+
]
|
|
39
44
|
: providers;
|
|
40
|
-
|
|
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;
|
|
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
|
|
15
|
-
|
|
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
|
-
|
|
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
|
}
|
package/lib/Auth/index.d.ts
CHANGED
|
@@ -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: (
|
|
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(
|
|
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
|
package/lib/Auth/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
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
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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:
|
|
77
|
+
maxAge: ACCESS_MAX_AGE_MS,
|
|
58
78
|
});
|
|
59
79
|
res.cookie("refresh_token", refreshToken, {
|
|
60
80
|
...cookieOptions,
|
|
61
|
-
maxAge:
|
|
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
|
|
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
|
|
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(
|
|
85
|
-
|
|
86
|
-
res
|
|
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 (
|
|
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
|
-
|
|
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"}
|