jcc-express-mvc 1.8.8 → 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 (215) hide show
  1. package/__tests__/MySqlSchemaBlueprint.test.d.ts +2 -0
  2. package/__tests__/MySqlSchemaBlueprint.test.d.ts.map +1 -0
  3. package/__tests__/MySqlSchemaBlueprint.test.js +55 -0
  4. package/__tests__/PostgresTranslator.test.d.ts +2 -0
  5. package/__tests__/PostgresTranslator.test.d.ts.map +1 -0
  6. package/__tests__/PostgresTranslator.test.js +82 -0
  7. package/__tests__/SQLiteTranslator.test.d.ts +2 -0
  8. package/__tests__/SQLiteTranslator.test.d.ts.map +1 -0
  9. package/__tests__/SQLiteTranslator.test.js +125 -0
  10. package/__tests__/SchemaAlterBlueprint.test.d.ts +2 -0
  11. package/__tests__/SchemaAlterBlueprint.test.d.ts.map +1 -0
  12. package/__tests__/SchemaAlterBlueprint.test.js +35 -0
  13. package/global.d.ts +3 -1
  14. package/index.d.ts +28 -3
  15. package/index.d.ts.map +1 -1
  16. package/index.js +33 -75
  17. package/lib/Application/Application.d.ts +1 -1
  18. package/lib/Application/Application.d.ts.map +1 -1
  19. package/lib/Application/Application.js +2 -2
  20. package/lib/Application/ApplicationBuilder.d.ts.map +1 -1
  21. package/lib/Application/ApplicationBuilder.js +9 -2
  22. package/lib/Auth/AuthMiddleware.d.ts.map +1 -1
  23. package/lib/Auth/AuthMiddleware.js +29 -12
  24. package/lib/Auth/index.d.ts +17 -3
  25. package/lib/Auth/index.d.ts.map +1 -1
  26. package/lib/Auth/index.js +128 -26
  27. package/lib/Auth/loginRateLimit.d.ts +6 -0
  28. package/lib/Auth/loginRateLimit.d.ts.map +1 -0
  29. package/lib/Auth/loginRateLimit.js +25 -0
  30. package/lib/Auth/refreshTokenStore.d.ts +24 -0
  31. package/lib/Auth/refreshTokenStore.d.ts.map +1 -0
  32. package/lib/Auth/refreshTokenStore.js +46 -0
  33. package/lib/Command-Line/DBCommand.d.ts.map +1 -1
  34. package/lib/Command-Line/DBCommand.js +9 -3
  35. package/lib/Command-Line/KeyGenerateCommand.d.ts +6 -0
  36. package/lib/Command-Line/KeyGenerateCommand.d.ts.map +1 -0
  37. package/lib/Command-Line/KeyGenerateCommand.js +47 -0
  38. package/lib/Command-Line/NodeArtisanCommand.d.ts +2 -0
  39. package/lib/Command-Line/NodeArtisanCommand.d.ts.map +1 -1
  40. package/lib/Command-Line/NodeArtisanCommand.js +20 -3
  41. package/lib/Command-Line/NodeTinker/Tinker.d.ts +5 -2
  42. package/lib/Command-Line/NodeTinker/Tinker.d.ts.map +1 -1
  43. package/lib/Command-Line/NodeTinker/Tinker.js +13 -3
  44. package/lib/Command-Line/WatchCommand.d.ts +29 -0
  45. package/lib/Command-Line/WatchCommand.d.ts.map +1 -0
  46. package/lib/Command-Line/WatchCommand.js +234 -0
  47. package/lib/Command-Line/files/Models.d.ts.map +1 -1
  48. package/lib/Command-Line/files/Models.js +41 -16
  49. package/lib/Console/Command.d.ts +18 -0
  50. package/lib/Console/Command.d.ts.map +1 -1
  51. package/lib/Console/Command.js +29 -0
  52. package/lib/Container/index.d.ts.map +1 -1
  53. package/lib/Container/index.js +21 -7
  54. package/lib/Database/Database.d.ts +2 -1
  55. package/lib/Database/Database.d.ts.map +1 -1
  56. package/lib/Database/Database.js +6 -5
  57. package/lib/Database/DatabaseServiceProvider.d.ts +0 -4
  58. package/lib/Database/DatabaseServiceProvider.d.ts.map +1 -1
  59. package/lib/Database/DatabaseServiceProvider.js +9 -56
  60. package/lib/Database/Drivers/MongooseDriver.d.ts +2 -0
  61. package/lib/Database/Drivers/MongooseDriver.d.ts.map +1 -1
  62. package/lib/Database/Drivers/MongooseDriver.js +11 -13
  63. package/lib/Database/Drivers/SequelizeDriver.d.ts +9 -1
  64. package/lib/Database/Drivers/SequelizeDriver.d.ts.map +1 -1
  65. package/lib/Database/Drivers/SequelizeDriver.js +43 -18
  66. package/lib/Error/SocialiteAuthError/SocialiteAuthError.d.ts +9 -0
  67. package/lib/Error/SocialiteAuthError/SocialiteAuthError.d.ts.map +1 -0
  68. package/lib/Error/SocialiteAuthError/SocialiteAuthError.js +17 -0
  69. package/lib/Global/helpers.d.ts.map +1 -1
  70. package/lib/Global/helpers.js +6 -4
  71. package/lib/Http/index.d.ts +3 -1
  72. package/lib/Http/index.d.ts.map +1 -1
  73. package/lib/Http/index.js +26 -5
  74. package/lib/Interface/index.d.ts +12 -3
  75. package/lib/Interface/index.d.ts.map +1 -1
  76. package/lib/Jcc-eloquent/lib/Builder.d.ts +12 -1
  77. package/lib/Jcc-eloquent/lib/Builder.d.ts.map +1 -1
  78. package/lib/Jcc-eloquent/lib/Builder.js +116 -4
  79. package/lib/Jcc-eloquent/lib/Interfaces/index.d.ts +37 -2
  80. package/lib/Jcc-eloquent/lib/Interfaces/index.d.ts.map +1 -1
  81. package/lib/Jcc-eloquent/lib/Migration.d.ts +6 -0
  82. package/lib/Jcc-eloquent/lib/Migration.d.ts.map +1 -1
  83. package/lib/Jcc-eloquent/lib/Migration.js +24 -2
  84. package/lib/Jcc-eloquent/lib/Model.d.ts +24 -7
  85. package/lib/Jcc-eloquent/lib/Model.d.ts.map +1 -1
  86. package/lib/Jcc-eloquent/lib/Model.js +35 -2
  87. package/lib/Jcc-eloquent/lib/QueryBuilder.d.ts +2 -1
  88. package/lib/Jcc-eloquent/lib/QueryBuilder.d.ts.map +1 -1
  89. package/lib/Jcc-eloquent/lib/QueryBuilder.js +10 -1
  90. package/lib/Jcc-eloquent/lib/Rollback.d.ts.map +1 -1
  91. package/lib/Jcc-eloquent/lib/Rollback.js +9 -2
  92. package/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.d.ts.map +1 -1
  93. package/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.js +3 -3
  94. package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.d.ts +6 -2
  95. package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.d.ts.map +1 -1
  96. package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.js +41 -12
  97. package/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.d.ts.map +1 -1
  98. package/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.js +21 -3
  99. package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.d.ts +1 -0
  100. package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.d.ts.map +1 -1
  101. package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.js +70 -14
  102. package/lib/Jcc-eloquent/lib/Schema/index.d.ts +12 -0
  103. package/lib/Jcc-eloquent/lib/Schema/index.d.ts.map +1 -1
  104. package/lib/Jcc-eloquent/lib/Schema/index.js +27 -6
  105. package/lib/Jcc-eloquent/lib/utils/index.d.ts +13 -0
  106. package/lib/Jcc-eloquent/lib/utils/index.d.ts.map +1 -1
  107. package/lib/Jcc-eloquent/lib/utils/index.js +62 -0
  108. package/lib/Middleware/index.d.ts.map +1 -1
  109. package/lib/Middleware/index.js +4 -7
  110. package/lib/Model/Sequelize.d.ts +3 -0
  111. package/lib/Model/Sequelize.d.ts.map +1 -0
  112. package/lib/Model/Sequelize.js +6 -0
  113. package/lib/Providers/SessionServiceProvider.d.ts +12 -0
  114. package/lib/Providers/SessionServiceProvider.d.ts.map +1 -0
  115. package/lib/Providers/SessionServiceProvider.js +47 -0
  116. package/lib/Queue/Controllers/QueueControllers.d.ts +4 -13
  117. package/lib/Queue/Controllers/QueueControllers.d.ts.map +1 -1
  118. package/lib/Queue/Controllers/QueueControllers.js +1 -16
  119. package/lib/Queue/Route/web.js +4 -1
  120. package/lib/Queue/index.d.ts +1 -0
  121. package/lib/Queue/index.d.ts.map +1 -1
  122. package/lib/Queue/index.js +3 -0
  123. package/lib/Queue/middleware/queueDashboardGuard.d.ts +7 -0
  124. package/lib/Queue/middleware/queueDashboardGuard.d.ts.map +1 -0
  125. package/lib/Queue/middleware/queueDashboardGuard.js +43 -0
  126. package/lib/Response/index.d.ts.map +1 -1
  127. package/lib/Response/index.js +6 -1
  128. package/lib/Routes/Route.d.ts +2 -2
  129. package/lib/Routes/Route.d.ts.map +1 -1
  130. package/lib/Routes/RouteBuilder.d.ts +2 -2
  131. package/lib/Routes/RouteBuilder.d.ts.map +1 -1
  132. package/lib/Security/CsrfMiddleware.d.ts.map +1 -1
  133. package/lib/Security/CsrfMiddleware.js +6 -4
  134. package/lib/Session/DatabaseSession.d.ts +9 -3
  135. package/lib/Session/DatabaseSession.d.ts.map +1 -1
  136. package/lib/Session/DatabaseSession.js +38 -36
  137. package/lib/Session/ExpressJccSession.d.ts +23 -0
  138. package/lib/Session/ExpressJccSession.d.ts.map +1 -0
  139. package/lib/Session/ExpressJccSession.js +110 -0
  140. package/lib/Session/RedisSession.d.ts +2 -2
  141. package/lib/Session/RedisSession.d.ts.map +1 -1
  142. package/lib/Session/RedisSession.js +19 -5
  143. package/lib/Session/SessionManager.d.ts +18 -4
  144. package/lib/Session/SessionManager.d.ts.map +1 -1
  145. package/lib/Session/SessionManager.js +53 -17
  146. package/lib/Socialite/AbstractProvider.d.ts +60 -0
  147. package/lib/Socialite/AbstractProvider.d.ts.map +1 -0
  148. package/lib/Socialite/AbstractProvider.js +136 -0
  149. package/lib/Socialite/Drivers/facebook/FacebookDriver.d.ts +9 -0
  150. package/lib/Socialite/Drivers/facebook/FacebookDriver.d.ts.map +1 -0
  151. package/lib/Socialite/Drivers/facebook/FacebookDriver.js +40 -0
  152. package/lib/Socialite/Drivers/facebook/FacebookProvider.d.ts +15 -0
  153. package/lib/Socialite/Drivers/facebook/FacebookProvider.d.ts.map +1 -0
  154. package/lib/Socialite/Drivers/facebook/FacebookProvider.js +28 -0
  155. package/lib/Socialite/Drivers/github/GitHubDriver.d.ts +9 -0
  156. package/lib/Socialite/Drivers/github/GitHubDriver.d.ts.map +1 -0
  157. package/lib/Socialite/Drivers/github/GitHubDriver.js +54 -0
  158. package/lib/Socialite/Drivers/github/GitHubProvider.d.ts +15 -0
  159. package/lib/Socialite/Drivers/github/GitHubProvider.d.ts.map +1 -0
  160. package/lib/Socialite/Drivers/github/GitHubProvider.js +28 -0
  161. package/lib/Socialite/Drivers/gitlab/GitLabDriver.d.ts +10 -0
  162. package/lib/Socialite/Drivers/gitlab/GitLabDriver.d.ts.map +1 -0
  163. package/lib/Socialite/Drivers/gitlab/GitLabDriver.js +37 -0
  164. package/lib/Socialite/Drivers/gitlab/GitLabProvider.d.ts +15 -0
  165. package/lib/Socialite/Drivers/gitlab/GitLabProvider.d.ts.map +1 -0
  166. package/lib/Socialite/Drivers/gitlab/GitLabProvider.js +28 -0
  167. package/lib/Socialite/Drivers/google/GoogleDriver.d.ts +9 -0
  168. package/lib/Socialite/Drivers/google/GoogleDriver.d.ts.map +1 -0
  169. package/lib/Socialite/Drivers/google/GoogleDriver.js +39 -0
  170. package/lib/Socialite/Drivers/google/GoogleProvider.d.ts +15 -0
  171. package/lib/Socialite/Drivers/google/GoogleProvider.d.ts.map +1 -0
  172. package/lib/Socialite/Drivers/google/GoogleProvider.js +28 -0
  173. package/lib/Socialite/Drivers/slack/SlackDriver.d.ts +9 -0
  174. package/lib/Socialite/Drivers/slack/SlackDriver.d.ts.map +1 -0
  175. package/lib/Socialite/Drivers/slack/SlackDriver.js +41 -0
  176. package/lib/Socialite/Drivers/slack/SlackProvider.d.ts +16 -0
  177. package/lib/Socialite/Drivers/slack/SlackProvider.d.ts.map +1 -0
  178. package/lib/Socialite/Drivers/slack/SlackProvider.js +37 -0
  179. package/lib/Socialite/Drivers/twitter/TwitterDriver.d.ts +9 -0
  180. package/lib/Socialite/Drivers/twitter/TwitterDriver.d.ts.map +1 -0
  181. package/lib/Socialite/Drivers/twitter/TwitterDriver.js +57 -0
  182. package/lib/Socialite/Drivers/twitter/TwitterProvider.d.ts +16 -0
  183. package/lib/Socialite/Drivers/twitter/TwitterProvider.d.ts.map +1 -0
  184. package/lib/Socialite/Drivers/twitter/TwitterProvider.js +38 -0
  185. package/lib/Socialite/SocialUser.d.ts +42 -0
  186. package/lib/Socialite/SocialUser.d.ts.map +1 -0
  187. package/lib/Socialite/SocialUser.js +116 -0
  188. package/lib/Socialite/Socialite.d.ts +13 -0
  189. package/lib/Socialite/Socialite.d.ts.map +1 -0
  190. package/lib/Socialite/Socialite.js +41 -0
  191. package/lib/Socialite/SocialiteProvider.d.ts +9 -0
  192. package/lib/Socialite/SocialiteProvider.d.ts.map +1 -0
  193. package/lib/Socialite/SocialiteProvider.js +15 -0
  194. package/lib/Socialite/config.d.ts +7 -0
  195. package/lib/Socialite/config.d.ts.map +1 -0
  196. package/lib/Socialite/config.js +44 -0
  197. package/lib/Socialite/constant.d.ts +18 -0
  198. package/lib/Socialite/constant.d.ts.map +1 -0
  199. package/lib/Socialite/constant.js +20 -0
  200. package/lib/Socialite/index.d.ts +13 -0
  201. package/lib/Socialite/index.d.ts.map +1 -0
  202. package/lib/Socialite/index.js +25 -0
  203. package/lib/Socialite/types.d.ts +13 -0
  204. package/lib/Socialite/types.d.ts.map +1 -0
  205. package/lib/Socialite/types.js +2 -0
  206. package/lib/Type/index.d.ts +1 -0
  207. package/lib/Type/index.d.ts.map +1 -1
  208. package/lib/Validation/Validator/CustomValidation.d.ts.map +1 -1
  209. package/lib/Validation/Validator/CustomValidation.js +2 -2
  210. package/lib/Validation/Validator/helper.d.ts.map +1 -1
  211. package/lib/Validation/Validator/helper.js +8 -1
  212. package/lib/util/index.d.ts +36 -1
  213. package/lib/util/index.d.ts.map +1 -1
  214. package/lib/util/index.js +123 -26
  215. package/package.json +1 -1
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SocialiteProvider = void 0;
4
+ const ServiceProvider_1 = require("../Providers/ServiceProvider");
5
+ const Socialite_1 = require("./Socialite");
6
+ /**
7
+ * Optional registration — Socialite is primarily static (`Socialite.driver()`).
8
+ * Bind for container resolution if you prefer `app.make("Socialite")`.
9
+ */
10
+ class SocialiteProvider extends ServiceProvider_1.ServiceProvider {
11
+ register() {
12
+ this.app.instance("Socialite", Socialite_1.Socialite);
13
+ }
14
+ }
15
+ exports.SocialiteProvider = SocialiteProvider;
@@ -0,0 +1,7 @@
1
+ import type { OAuthProviderConfig } from "./types";
2
+ /**
3
+ * Laravel `config/services.php` shape expressed via env:
4
+ * `{DRIVER}_CLIENT_ID`, `{DRIVER}_CLIENT_SECRET`, optional `{DRIVER}_REDIRECT_URI`.
5
+ */
6
+ export declare function resolveSocialiteConfig(driver: string): OAuthProviderConfig;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Socialite/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAkBnD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAsB1E"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveSocialiteConfig = resolveSocialiteConfig;
4
+ const Config_1 = require("../Config/Config");
5
+ function normalizeAppUrl(url) {
6
+ let u = (url || "").trim().replace(/\/$/, "");
7
+ if (!u)
8
+ u = "http://localhost:5500";
9
+ if (!/^https?:\/\//i.test(u))
10
+ u = `http://${u}`;
11
+ return u;
12
+ }
13
+ const defaultCallbackPath = {
14
+ google: "/auth/google/callback",
15
+ github: "/auth/github/callback",
16
+ facebook: "/auth/facebook/callback",
17
+ gitlab: "/auth/gitlab/callback",
18
+ twitter: "/auth/twitter/callback",
19
+ slack: "/auth/slack/callback",
20
+ };
21
+ /**
22
+ * Laravel `config/services.php` shape expressed via env:
23
+ * `{DRIVER}_CLIENT_ID`, `{DRIVER}_CLIENT_SECRET`, optional `{DRIVER}_REDIRECT_URI`.
24
+ */
25
+ function resolveSocialiteConfig(driver) {
26
+ const key = driver.toUpperCase();
27
+ const clientId = String(Config_1.config.get(`${key}_CLIENT_ID`, "") ?? "");
28
+ const clientSecret = String(Config_1.config.get(`${key}_CLIENT_SECRET`, "") ?? "");
29
+ let redirectUri = String(Config_1.config.get(`${key}_REDIRECT_URI`, "") ?? "");
30
+ if (!redirectUri) {
31
+ const base = normalizeAppUrl(String(Config_1.config.get("APP_URL", "") ?? ""));
32
+ const path = defaultCallbackPath[driver] ?? `/auth/${encodeURIComponent(driver)}/callback`;
33
+ redirectUri = `${base}${path.startsWith("/") ? path : `/${path}`}`;
34
+ }
35
+ const out = {
36
+ clientId,
37
+ clientSecret,
38
+ redirectUri,
39
+ };
40
+ if (driver === "gitlab") {
41
+ out.gitlabUrl = String(Config_1.config.get("GITLAB_URL", "https://gitlab.com") ?? "https://gitlab.com").replace(/\/$/, "");
42
+ }
43
+ return out;
44
+ }
@@ -0,0 +1,18 @@
1
+ export declare const GOOGLE_AUTH = "https://accounts.google.com/o/oauth2/v2/auth";
2
+ export declare const GOOGLE_TOKEN = "https://oauth2.googleapis.com/token";
3
+ export declare const GOOGLE_USERINFO = "https://openidconnect.googleapis.com/v1/userinfo";
4
+ export declare const GITHUB_AUTHORIZE = "https://github.com/login/oauth/authorize";
5
+ export declare const GITHUB_TOKEN = "https://github.com/login/oauth/access_token";
6
+ export declare const GITHUB_USER = "https://api.github.com/user";
7
+ export declare const GITHUB_EMAILS = "https://api.github.com/user/emails";
8
+ export declare const FACEBOOK_GRAPH_VERSION = "v21.0";
9
+ export declare const FACEBOOK_AUTHORIZE = "https://www.facebook.com/v21.0/dialog/oauth";
10
+ export declare const FACEBOOK_TOKEN = "https://graph.facebook.com/v21.0/oauth/access_token";
11
+ export declare const TWITTER_AUTHORIZE = "https://twitter.com/i/oauth2/authorize";
12
+ export declare const TWITTER_TOKEN = "https://api.twitter.com/2/oauth2/token";
13
+ export declare const TWITTER_USER_ME = "https://api.twitter.com/2/users/me";
14
+ /** Slack Sign in with Slack — OpenID Connect */
15
+ export declare const SLACK_OPENID_AUTHORIZE = "https://slack.com/openid/connect/authorize";
16
+ export declare const SLACK_OPENID_TOKEN = "https://slack.com/api/openid.connect.token";
17
+ export declare const SLACK_OPENID_USERINFO = "https://slack.com/api/openid.connect.userInfo";
18
+ //# sourceMappingURL=constant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Socialite/constant.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAC1E,eAAO,MAAM,YAAY,wCAAwC,CAAC;AAClE,eAAO,MAAM,eAAe,qDACwB,CAAC;AAErD,eAAO,MAAM,gBAAgB,6CAA6C,CAAC;AAC3E,eAAO,MAAM,YAAY,gDAAgD,CAAC;AAC1E,eAAO,MAAM,WAAW,gCAAgC,CAAC;AACzD,eAAO,MAAM,aAAa,uCAAuC,CAAC;AAElE,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAC9C,eAAO,MAAM,kBAAkB,gDAAoE,CAAC;AACpG,eAAO,MAAM,cAAc,wDAA4E,CAAC;AAExG,eAAO,MAAM,iBAAiB,2CAA2C,CAAC;AAC1E,eAAO,MAAM,aAAa,2CAA2C,CAAC;AACtE,eAAO,MAAM,eAAe,uCAAuC,CAAC;AAEpE,gDAAgD;AAChD,eAAO,MAAM,sBAAsB,+CACW,CAAC;AAC/C,eAAO,MAAM,kBAAkB,+CAA+C,CAAC;AAC/E,eAAO,MAAM,qBAAqB,kDACe,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SLACK_OPENID_USERINFO = exports.SLACK_OPENID_TOKEN = exports.SLACK_OPENID_AUTHORIZE = exports.TWITTER_USER_ME = exports.TWITTER_TOKEN = exports.TWITTER_AUTHORIZE = exports.FACEBOOK_TOKEN = exports.FACEBOOK_AUTHORIZE = exports.FACEBOOK_GRAPH_VERSION = exports.GITHUB_EMAILS = exports.GITHUB_USER = exports.GITHUB_TOKEN = exports.GITHUB_AUTHORIZE = exports.GOOGLE_USERINFO = exports.GOOGLE_TOKEN = exports.GOOGLE_AUTH = void 0;
4
+ exports.GOOGLE_AUTH = "https://accounts.google.com/o/oauth2/v2/auth";
5
+ exports.GOOGLE_TOKEN = "https://oauth2.googleapis.com/token";
6
+ exports.GOOGLE_USERINFO = "https://openidconnect.googleapis.com/v1/userinfo";
7
+ exports.GITHUB_AUTHORIZE = "https://github.com/login/oauth/authorize";
8
+ exports.GITHUB_TOKEN = "https://github.com/login/oauth/access_token";
9
+ exports.GITHUB_USER = "https://api.github.com/user";
10
+ exports.GITHUB_EMAILS = "https://api.github.com/user/emails";
11
+ exports.FACEBOOK_GRAPH_VERSION = "v21.0";
12
+ exports.FACEBOOK_AUTHORIZE = `https://www.facebook.com/${exports.FACEBOOK_GRAPH_VERSION}/dialog/oauth`;
13
+ exports.FACEBOOK_TOKEN = `https://graph.facebook.com/${exports.FACEBOOK_GRAPH_VERSION}/oauth/access_token`;
14
+ exports.TWITTER_AUTHORIZE = "https://twitter.com/i/oauth2/authorize";
15
+ exports.TWITTER_TOKEN = "https://api.twitter.com/2/oauth2/token";
16
+ exports.TWITTER_USER_ME = "https://api.twitter.com/2/users/me";
17
+ /** Slack Sign in with Slack — OpenID Connect */
18
+ exports.SLACK_OPENID_AUTHORIZE = "https://slack.com/openid/connect/authorize";
19
+ exports.SLACK_OPENID_TOKEN = "https://slack.com/api/openid.connect.token";
20
+ exports.SLACK_OPENID_USERINFO = "https://slack.com/api/openid.connect.userInfo";
@@ -0,0 +1,13 @@
1
+ export { Socialite } from "./Socialite";
2
+ export { AbstractProvider } from "./AbstractProvider";
3
+ export type { OAuthAuthorizeContext, OAuthProviderConfig } from "./types";
4
+ export { resolveSocialiteConfig } from "./config";
5
+ export { SocialUser } from "./SocialUser";
6
+ export { SocialiteProvider } from "./SocialiteProvider";
7
+ export { GoogleProvider } from "./Drivers/google/GoogleProvider";
8
+ export { GitHubProvider } from "./Drivers/github/GitHubProvider";
9
+ export { FacebookProvider } from "./Drivers/facebook/FacebookProvider";
10
+ export { GitLabProvider } from "./Drivers/gitlab/GitLabProvider";
11
+ export { TwitterProvider } from "./Drivers/twitter/TwitterProvider";
12
+ export { SlackProvider } from "./Drivers/slack/SlackProvider";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Socialite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SlackProvider = exports.TwitterProvider = exports.GitLabProvider = exports.FacebookProvider = exports.GitHubProvider = exports.GoogleProvider = exports.SocialiteProvider = exports.SocialUser = exports.resolveSocialiteConfig = exports.AbstractProvider = exports.Socialite = void 0;
4
+ var Socialite_1 = require("./Socialite");
5
+ Object.defineProperty(exports, "Socialite", { enumerable: true, get: function () { return Socialite_1.Socialite; } });
6
+ var AbstractProvider_1 = require("./AbstractProvider");
7
+ Object.defineProperty(exports, "AbstractProvider", { enumerable: true, get: function () { return AbstractProvider_1.AbstractProvider; } });
8
+ var config_1 = require("./config");
9
+ Object.defineProperty(exports, "resolveSocialiteConfig", { enumerable: true, get: function () { return config_1.resolveSocialiteConfig; } });
10
+ var SocialUser_1 = require("./SocialUser");
11
+ Object.defineProperty(exports, "SocialUser", { enumerable: true, get: function () { return SocialUser_1.SocialUser; } });
12
+ var SocialiteProvider_1 = require("./SocialiteProvider");
13
+ Object.defineProperty(exports, "SocialiteProvider", { enumerable: true, get: function () { return SocialiteProvider_1.SocialiteProvider; } });
14
+ var GoogleProvider_1 = require("./Drivers/google/GoogleProvider");
15
+ Object.defineProperty(exports, "GoogleProvider", { enumerable: true, get: function () { return GoogleProvider_1.GoogleProvider; } });
16
+ var GitHubProvider_1 = require("./Drivers/github/GitHubProvider");
17
+ Object.defineProperty(exports, "GitHubProvider", { enumerable: true, get: function () { return GitHubProvider_1.GitHubProvider; } });
18
+ var FacebookProvider_1 = require("./Drivers/facebook/FacebookProvider");
19
+ Object.defineProperty(exports, "FacebookProvider", { enumerable: true, get: function () { return FacebookProvider_1.FacebookProvider; } });
20
+ var GitLabProvider_1 = require("./Drivers/gitlab/GitLabProvider");
21
+ Object.defineProperty(exports, "GitLabProvider", { enumerable: true, get: function () { return GitLabProvider_1.GitLabProvider; } });
22
+ var TwitterProvider_1 = require("./Drivers/twitter/TwitterProvider");
23
+ Object.defineProperty(exports, "TwitterProvider", { enumerable: true, get: function () { return TwitterProvider_1.TwitterProvider; } });
24
+ var SlackProvider_1 = require("./Drivers/slack/SlackProvider");
25
+ Object.defineProperty(exports, "SlackProvider", { enumerable: true, get: function () { return SlackProvider_1.SlackProvider; } });
@@ -0,0 +1,13 @@
1
+ export interface OAuthProviderConfig {
2
+ clientId: string;
3
+ clientSecret: string;
4
+ redirectUri: string;
5
+ /** Self-hosted GitLab base URL (no trailing slash). Default https://gitlab.com */
6
+ gitlabUrl?: string;
7
+ }
8
+ /** Optional PKCE context passed to {@link AbstractProvider.buildAuthorizeUrl} (Twitter). */
9
+ export type OAuthAuthorizeContext = {
10
+ codeChallenge: string;
11
+ codeChallengeMethod: string;
12
+ };
13
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Socialite/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,4FAA4F;AAC5F,MAAM,MAAM,qBAAqB,GAAG;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -25,6 +25,7 @@ export type ValidationObject = {
25
25
  export type HttpMethodType = "get" | "post" | "patch" | "put" | "delete";
26
26
  export type RouteHandler = ExpressCallback | [BaseController, string] | string;
27
27
  export type Middleware = ExpressCallback[] | ExpressCallback;
28
+ export type MiddlewareInput = Middleware | string | Array<Middleware | string>;
28
29
  export type HttpRoutes = Array<{
29
30
  url: string;
30
31
  method: HttpMethodType;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Type/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Type/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomValidation.d.ts","sourceRoot":"","sources":["../../../../jcc-express-mvc/lib/Validation/Validator/CustomValidation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE/C,qBAAa,gBAAgB;IAI3B,MAAM,CAAC,QAAQ,CACb,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU;WASP,MAAM,CACjB,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU;IAapB,MAAM,CAAC,IAAI,CACT,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU;IAQpB,MAAM,CAAC,KAAK,CACV,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU;WAQP,MAAM,CACjB,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU;CAWrB;AAED,eAAO,MAAM,gBAAgB;;;;;;CAM5B,CAAC"}
1
+ {"version":3,"file":"CustomValidation.d.ts","sourceRoot":"","sources":["../../../../jcc-express-mvc/lib/Validation/Validator/CustomValidation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE/C,qBAAa,gBAAgB;IAI3B,MAAM,CAAC,QAAQ,CACb,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU;WASP,MAAM,CACjB,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU;IAkBpB,MAAM,CAAC,IAAI,CACT,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU;IAQpB,MAAM,CAAC,KAAK,CACV,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU;WAQP,MAAM,CACjB,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU;CAerB;AAED,eAAO,MAAM,gBAAgB;;;;;;CAM5B,CAAC"}
@@ -16,7 +16,7 @@ class CustomValidation {
16
16
  if (!this.ruleValue || !attribute) {
17
17
  return passes(false, "Invalid unique rule definition.");
18
18
  }
19
- const result = await (0, helper_1.existsHelper)(attribute, value, this.ruleValue);
19
+ const result = await (0, helper_1.existsHelper)(this.attribute || attribute, value, this.ruleValue);
20
20
  if (result) {
21
21
  return passes(false, `This ${this.attribute} has already been taken`);
22
22
  }
@@ -38,7 +38,7 @@ class CustomValidation {
38
38
  if (!value) {
39
39
  return passes(false, "The field is required.");
40
40
  }
41
- const result = await (0, helper_1.existsHelper)(attribute, value, this.ruleValue);
41
+ const result = await (0, helper_1.existsHelper)(this.attribute || attribute, value, this.ruleValue);
42
42
  if (!result) {
43
43
  return passes(false, `The ${this.attribute} does not exist`);
44
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../../jcc-express-mvc/lib/Validation/Validator/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GACvB,WAAW,MAAM,EACjB,OAAO,SAAS,EAChB,WAAW,MAAM,iBAkBlB,CAAC"}
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../../jcc-express-mvc/lib/Validation/Validator/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAQnC;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GACvB,WAAW,MAAM,EACjB,OAAO,SAAS,EAChB,WAAW,MAAM,iBAwBlB,CAAC"}
@@ -14,11 +14,18 @@ const existsHelper = async (attribute, value, ruleValue) => {
14
14
  const Model = (0, index_1.getModelFile)(model);
15
15
  const modelInstance = (0, index_1.getModel)(Model);
16
16
  let result;
17
- if (process.env.DB_CONNECTION === "mongodb") {
17
+ if ((0, index_1.isMongooseModel)()) {
18
18
  result = await modelInstance[Model].findOne({
19
19
  [column || attribute]: value,
20
20
  });
21
21
  }
22
+ else if ((0, index_1.isSequelizeModel)()) {
23
+ result = await modelInstance[Model].findOne({
24
+ where: {
25
+ [column || attribute]: value,
26
+ },
27
+ });
28
+ }
22
29
  else {
23
30
  result = await modelInstance[Model].where(column || attribute, value).exists();
24
31
  }
@@ -75,6 +75,9 @@ export declare const verifyHash: (password: string, hashPassword: string) => Pro
75
75
  * @param {object} data - The data to be encoded in the token.
76
76
  * @returns {string} - Signed JWT token.
77
77
  */
78
+ export type JwtTokenKind = "access" | "refresh" | "legacy";
79
+ /** `typ` claim: access for API/session, refresh for refresh flow only. */
80
+ export declare const jwtTokenType: (payload: unknown) => JwtTokenKind;
78
81
  export declare const jwtSign: (data: string | Record<string, any>, options?: Record<string, any>) => string | any;
79
82
  /**
80
83
  * Function to verify a JWT token.
@@ -82,6 +85,32 @@ export declare const jwtSign: (data: string | Record<string, any>, options?: Rec
82
85
  * @returns {object} - Decoded JWT payload.
83
86
  */
84
87
  export declare const jwtVerify: (token: string) => string | any;
88
+ /** User id from JWT payload (jwt.sign stores subject as `{ id }` from jwtSign string helper). */
89
+ export declare const jwtSubjectId: (payload: unknown) => string | number;
90
+ /** Shared options for `auth_token` / `refresh_token` cookies (set and clear). */
91
+ export declare function authSessionCookieOptions(): {
92
+ path: "/";
93
+ httpOnly: true;
94
+ secure: boolean;
95
+ sameSite: "lax";
96
+ };
97
+ /** When `JWT_REQUIRE_TYPED_TOKENS=true`, legacy access tokens (no `typ`) are rejected. */
98
+ export declare function jwtLegacyAccessTokenRejected(payload: unknown): boolean;
99
+ export type JwtAccessTokenPayloadResult = {
100
+ ok: true;
101
+ } | {
102
+ ok: false;
103
+ reason: "refresh" | "legacy";
104
+ };
105
+ /**
106
+ * After `jwtVerify`, ensures the payload is a session/API access token, not refresh
107
+ * and not a disallowed legacy token when strict mode is on.
108
+ */
109
+ export declare function checkJwtAccessTokenPayload(payload: unknown): JwtAccessTokenPayloadResult;
110
+ /**
111
+ * In production, refuse weak or missing JWT_SECRET (call once at bootstrap).
112
+ */
113
+ export declare function assertProductionJwtSecret(): void;
85
114
  /**
86
115
  * Function to save an image file.
87
116
  * @param {object} req - The request object containing the file.
@@ -114,7 +143,9 @@ export declare const getJobClass: (jobName: string) => any;
114
143
  export declare const pluralizeStr: (str: string) => string;
115
144
  /** Universal user finder that supports MongoDB, Sequelize, and JCC ORM */
116
145
  export declare const findUserById: (User: any, userId: string | number) => Promise<any>;
117
- export declare const resolveModelBinding: (req: AppRequest, ModelClass: typeof Model, resolved: any) => Promise<any>;
146
+ export declare const isMongooseModel: () => boolean;
147
+ export declare const isSequelizeModel: () => boolean;
148
+ export declare const resolveModelBinding: (req: AppRequest, ModelClass: typeof Model | any, resolved: any) => Promise<any>;
118
149
  /**
119
150
  * Passes the value to a callback and returns the value.
120
151
  *
@@ -130,4 +161,8 @@ export declare const tap: <T>(data: T, callback?: (data: T) => any) => Promise<T
130
161
  * @returns {boolean} - True if the model is an instance of a model, false otherwise.
131
162
  */
132
163
  export declare const isModelInstance: (model: any) => boolean;
164
+ export declare const extractQuery: (url: string) => {
165
+ [k: string]: string;
166
+ };
167
+ export declare const JSInBuilTClass: (className: string) => boolean;
133
168
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/util/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAW,UAAU,EAAe,MAAM,cAAc,CAAC;AAIhE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKxC;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,GAC0B,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,UAAU,QAAO,IAG7B,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,SAMtC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,GACW,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,GACY,CAAC;AAE7D;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,GACM,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,GACW,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,GACW,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,GAEvC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,QAAO,KAAK,CAAC,GAAG,CAGxC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,GAM1C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,MAAM,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,CAGxD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GACrB,UAAU,MAAM,EAChB,cAAc,MAAM,KACnB,OAAO,CAAC,OAAO,CAEjB,CAAC;AAEF;;;;GAIG;AAEH,eAAO,MAAM,OAAO,GAClB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC5B,MAAM,GAAG,GAWX,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,GAMlD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GACpB,KAAK,GAAG,EACR,WAAW,MAAM,EACjB,SAAQ,MAAgB,KACvB,MAgBF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,MAExC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACtB,MAAM,GAAG,KAAG,GAEsC,CAAC;AAEtD,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,KAAG,MAEhD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,GAAG,KAAG,GAezC,CAAC;AAEL,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,GAQ7C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAG1C,CAAC;AAOF,0EAA0E;AAC1E,eAAO,MAAM,YAAY,GAAU,MAAM,GAAG,EAAE,QAAQ,MAAM,GAAG,MAAM,iBAkBpE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,KAAK,UAAU,EACf,YAAY,OAAO,KAAK,EACxB,UAAU,GAAG,iBAoDd,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,GAAU,CAAC,EACzB,MAAM,CAAC,EACP,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,KAC1B,OAAO,CAAC,CAAC,CASX,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,GAAG,KAAG,OAc5C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/util/index.ts"],"names":[],"mappings":"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"}
package/lib/util/index.js CHANGED
@@ -3,7 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isModelInstance = exports.tap = exports.resolveModelBinding = exports.findUserById = exports.pluralizeStr = exports.getJobClass = exports.cloudinaryUpload = exports.getModelFile = exports.asyncHandler = exports.capitalize = exports.saveImage = exports.jwtVerify = exports.jwtSign = exports.verifyHash = exports.bcrypt = exports.getProvider = exports.getProviders = exports.getRoute = exports.getRequest = exports.getMiddleware = exports.getModel = exports.getApiController = exports.getController = exports.loadRoute = exports.loadRoutes = exports.rootPath = void 0;
6
+ exports.JSInBuilTClass = exports.extractQuery = exports.isModelInstance = exports.tap = exports.resolveModelBinding = exports.isSequelizeModel = exports.isMongooseModel = exports.findUserById = exports.pluralizeStr = exports.getJobClass = exports.cloudinaryUpload = exports.getModelFile = exports.asyncHandler = exports.capitalize = exports.saveImage = exports.jwtSubjectId = exports.jwtVerify = exports.jwtSign = exports.jwtTokenType = exports.verifyHash = exports.bcrypt = exports.getProvider = exports.getProviders = exports.getRoute = exports.getRequest = exports.getMiddleware = exports.getModel = exports.getApiController = exports.getController = exports.loadRoute = exports.loadRoutes = exports.rootPath = void 0;
7
+ exports.authSessionCookieOptions = authSessionCookieOptions;
8
+ exports.jwtLegacyAccessTokenRejected = jwtLegacyAccessTokenRejected;
9
+ exports.checkJwtAccessTokenPayload = checkJwtAccessTokenPayload;
10
+ exports.assertProductionJwtSecret = assertProductionJwtSecret;
7
11
  const bcryptjs_1 = __importDefault(require("bcryptjs"));
8
12
  const app_root_path_1 = __importDefault(require("app-root-path"));
9
13
  const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
@@ -23,7 +27,7 @@ const getRootPath = app_root_path_1.default.path;
23
27
  * @param {string} file - The file path relative to the project root.
24
28
  * @returns {string} - Absolute path of the specified file.
25
29
  */
26
- const rootPath = (file) => require(`${path_1.default.resolve(`${getRootPath}/${(0, exports.capitalize)(file)}`)}`);
30
+ const rootPath = (file) => require(`${path_1.default.resolve(`${getRootPath}/${file}`)}`);
27
31
  exports.rootPath = rootPath;
28
32
  /**
29
33
  * Function load all route files
@@ -103,8 +107,8 @@ const getProvider = (name) => {
103
107
  try {
104
108
  return require(`${getRootPath}/app/Providers/${name}`);
105
109
  }
106
- catch {
107
- console.log("Cannot find module");
110
+ catch (error) {
111
+ console.error("Cannot find module", error.message);
108
112
  }
109
113
  };
110
114
  exports.getProvider = getProvider;
@@ -128,17 +132,28 @@ const verifyHash = async (password, hashPassword) => {
128
132
  return bcryptjs_1.default.compare(`${password || ""}`, hashPassword);
129
133
  };
130
134
  exports.verifyHash = verifyHash;
131
- /**
132
- * Function to sign a JWT token.
133
- * @param {object} data - The data to be encoded in the token.
134
- * @returns {string} - Signed JWT token.
135
- */
135
+ /** `typ` claim: access for API/session, refresh for refresh flow only. */
136
+ const jwtTokenType = (payload) => {
137
+ if (payload == null || typeof payload !== "object")
138
+ return "legacy";
139
+ const typ = payload.typ;
140
+ if (typ === "refresh")
141
+ return "refresh";
142
+ if (typ === "access")
143
+ return "access";
144
+ return "legacy";
145
+ };
146
+ exports.jwtTokenType = jwtTokenType;
136
147
  const jwtSign = (data, options) => {
137
148
  try {
138
149
  const secret = Config_1.config.get("JWT_SECRET") || "app-generated-key";
139
- // Wrap string payload in an object
140
- const payload = typeof data === "string" ? { id: data } : data;
141
- return jsonwebtoken_1.default.sign(payload, secret, options);
150
+ const payload = typeof data === "string"
151
+ ? { id: data, typ: "access" }
152
+ : { typ: "access", ...data };
153
+ return jsonwebtoken_1.default.sign(payload, secret, {
154
+ algorithm: "HS256",
155
+ ...options,
156
+ });
142
157
  }
143
158
  catch (error) {
144
159
  throw new AppError_1.AppError(error?.message, error_1.JWT_SIGN_ERROR);
@@ -152,13 +167,72 @@ exports.jwtSign = jwtSign;
152
167
  */
153
168
  const jwtVerify = (token) => {
154
169
  try {
155
- return jsonwebtoken_1.default.verify(token, Config_1.config.get(Constants_1.JWT_SECRET, "app-generated-key") || "");
170
+ return jsonwebtoken_1.default.verify(token, Config_1.config.get(Constants_1.JWT_SECRET, "app-generated-key") || "", {
171
+ algorithms: ["HS256"],
172
+ clockTolerance: 30,
173
+ });
156
174
  }
157
175
  catch (error) {
158
176
  throw new AppError_1.AppError(error?.message, error_1.JWT_VERIFY_ERROR);
159
177
  }
160
178
  };
161
179
  exports.jwtVerify = jwtVerify;
180
+ /** User id from JWT payload (jwt.sign stores subject as `{ id }` from jwtSign string helper). */
181
+ const jwtSubjectId = (payload) => {
182
+ if (payload != null && typeof payload === "object" && "id" in payload) {
183
+ return payload.id;
184
+ }
185
+ if (typeof payload === "string" || typeof payload === "number") {
186
+ return payload;
187
+ }
188
+ throw new AppError_1.AppError("Invalid token payload", error_1.JWT_VERIFY_ERROR);
189
+ };
190
+ exports.jwtSubjectId = jwtSubjectId;
191
+ /** Shared options for `auth_token` / `refresh_token` cookies (set and clear). */
192
+ function authSessionCookieOptions() {
193
+ return {
194
+ path: "/",
195
+ httpOnly: true,
196
+ secure: Config_1.config.get("APP_ENV") === "production",
197
+ sameSite: "lax",
198
+ };
199
+ }
200
+ /** When `JWT_REQUIRE_TYPED_TOKENS=true`, legacy access tokens (no `typ`) are rejected. */
201
+ function jwtLegacyAccessTokenRejected(payload) {
202
+ if (Config_1.config.get("JWT_REQUIRE_TYPED_TOKENS", "").toLowerCase() !== "true") {
203
+ return false;
204
+ }
205
+ return (0, exports.jwtTokenType)(payload) === "legacy";
206
+ }
207
+ /**
208
+ * After `jwtVerify`, ensures the payload is a session/API access token, not refresh
209
+ * and not a disallowed legacy token when strict mode is on.
210
+ */
211
+ function checkJwtAccessTokenPayload(payload) {
212
+ if ((0, exports.jwtTokenType)(payload) === "refresh") {
213
+ return { ok: false, reason: "refresh" };
214
+ }
215
+ if (jwtLegacyAccessTokenRejected(payload)) {
216
+ return { ok: false, reason: "legacy" };
217
+ }
218
+ return { ok: true };
219
+ }
220
+ /**
221
+ * In production, refuse weak or missing JWT_SECRET (call once at bootstrap).
222
+ */
223
+ function assertProductionJwtSecret() {
224
+ const secret = (Config_1.config.get(Constants_1.JWT_SECRET, "") || "").trim();
225
+ const appEnv = (Config_1.config.get("APP_ENV", "") || "").trim().toLowerCase();
226
+ const isProduction = process.env.NODE_ENV === "production" || appEnv === "production";
227
+ if (!isProduction)
228
+ return;
229
+ if (secret.length < 32) {
230
+ throw new Error("[security] JWT_SECRET must be at least 32 characters in production.");
231
+ }
232
+ if (secret === "app-generated-key") {
233
+ throw new Error("[security] JWT_SECRET must not use the default placeholder in production.");
234
+ }
235
+ }
162
236
  /**
163
237
  * Function to save an image file.
164
238
  * @param {object} req - The request object containing the file.
@@ -246,7 +320,8 @@ exports.pluralizeStr = pluralizeStr;
246
320
  /** Universal user finder that supports MongoDB, Sequelize, and JCC ORM */
247
321
  const findUserById = async (User, userId) => {
248
322
  const orm = Config_1.config.get("DB_ORM");
249
- if (orm === "mongodb" && typeof User.findById === "function") {
323
+ if (orm === "mongodb" ||
324
+ (orm === "mongoose" && typeof User.findById === "function")) {
250
325
  return await User.findById(userId);
251
326
  }
252
327
  if (orm === "sequelize" && typeof User.findByPk === "function") {
@@ -260,22 +335,35 @@ const findUserById = async (User, userId) => {
260
335
  throw new Error("User lookup method not found for current ORM.");
261
336
  };
262
337
  exports.findUserById = findUserById;
263
- const resolveModelBinding = async (req, ModelClass, resolved) => {
338
+ const isMongooseModel = () => {
339
+ const dbConnection = Config_1.config.get("DB_CONNECTION").toLowerCase();
340
+ const dbOrm = Config_1.config.get("DB_ORM").toLowerCase();
341
+ return (dbConnection === "mongodb" ||
342
+ dbConnection === "mongoose" ||
343
+ dbOrm === "mongoose");
344
+ };
345
+ exports.isMongooseModel = isMongooseModel;
346
+ const isSequelizeModel = () => {
264
347
  const dbConnection = Config_1.config.get("DB_CONNECTION").toLowerCase();
265
348
  const dbOrm = Config_1.config.get("DB_ORM").toLowerCase();
266
- const modelParamName = Str_1.Str.camel(ModelClass.name);
349
+ return dbConnection === "sequelize" || dbOrm === "sequelize";
350
+ };
351
+ exports.isSequelizeModel = isSequelizeModel;
352
+ const resolveModelBinding = async (req, ModelClass, resolved) => {
353
+ //
354
+ const modelParamName = (0, exports.isMongooseModel)()
355
+ ? Str_1.Str.camel(ModelClass.modelName)
356
+ : Str_1.Str.camel(ModelClass.name);
267
357
  const params = req.params;
268
358
  // ---------------------------------
269
359
  // 1. Standard binding: /users/:user
270
360
  // ---------------------------------
271
361
  if (params[modelParamName] !== undefined) {
272
362
  const id = params[modelParamName];
273
- if (dbConnection === "mongodb" ||
274
- dbConnection === "mongoose" ||
275
- dbOrm === "mongoose") {
363
+ if ((0, exports.isMongooseModel)()) {
276
364
  return await ModelClass.findById(id);
277
365
  }
278
- if (dbConnection === "sequelize") {
366
+ if ((0, exports.isSequelizeModel)()) {
279
367
  return await ModelClass.findByPk(id);
280
368
  }
281
369
  return await ModelClass.find(id);
@@ -288,12 +376,10 @@ const resolveModelBinding = async (req, ModelClass, resolved) => {
288
376
  if (key.endsWith(suffix)) {
289
377
  const column = key.replace(suffix, "");
290
378
  const value = params[key];
291
- if (dbConnection === "mongodb" ||
292
- dbConnection === "mongoose" ||
293
- dbOrm === "mongoose") {
379
+ if ((0, exports.isMongooseModel)()) {
294
380
  return await ModelClass.findOne({ [column]: value });
295
381
  }
296
- if (dbConnection === "sequelize" || dbOrm === "sequelize") {
382
+ if ((0, exports.isSequelizeModel)()) {
297
383
  return await ModelClass.findOne({
298
384
  where: { [column]: value },
299
385
  });
@@ -337,9 +423,20 @@ const isModelInstance = (model) => {
337
423
  return model instanceof mongoose.Model;
338
424
  }
339
425
  if (dbOrm === "sequelize" || dbConnection === "sequelize") {
340
- const { sequelize } = require("sequelize");
341
- return model instanceof sequelize.Model;
426
+ const { Model } = require("sequelize");
427
+ return model instanceof Model;
342
428
  }
343
429
  return model instanceof Jcc_eloquent_1.Model;
344
430
  };
345
431
  exports.isModelInstance = isModelInstance;
432
+ const extractQuery = (url) => {
433
+ const parsed = new URL(url, process.env.APP_URL); // base required for relative URLs
434
+ return Object.fromEntries(parsed.searchParams.entries());
435
+ };
436
+ exports.extractQuery = extractQuery;
437
+ const JSInBuilTClass = (className) => {
438
+ return Str_1.Str.lower(className) == "string" || "number" || "boolean" || "object"
439
+ ? true
440
+ : false;
441
+ };
442
+ exports.JSInBuilTClass = JSInBuilTClass;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jcc-express-mvc",
3
- "version": "1.8.8",
3
+ "version": "1.8.21",
4
4
  "description": "express mvc structure",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",