exisjs 0.5.10 → 0.5.12

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 (191) hide show
  1. package/dist/auth/index.d.ts +3 -1
  2. package/dist/auth/index.d.ts.map +1 -1
  3. package/dist/auth/index.js +4 -1
  4. package/dist/auth/index.js.map +1 -1
  5. package/dist/auth/oauth/core.d.ts +96 -0
  6. package/dist/auth/oauth/core.d.ts.map +1 -0
  7. package/dist/auth/oauth/core.js +203 -0
  8. package/dist/auth/oauth/core.js.map +1 -0
  9. package/dist/auth/oauth/index.d.ts +45 -0
  10. package/dist/auth/oauth/index.d.ts.map +1 -0
  11. package/dist/auth/oauth/index.js +64 -0
  12. package/dist/auth/oauth/index.js.map +1 -0
  13. package/dist/auth/oauth/middleware.d.ts +63 -0
  14. package/dist/auth/oauth/middleware.d.ts.map +1 -0
  15. package/dist/auth/oauth/middleware.js +164 -0
  16. package/dist/auth/oauth/middleware.js.map +1 -0
  17. package/dist/auth/oauth/providers/custom.d.ts +41 -0
  18. package/dist/auth/oauth/providers/custom.d.ts.map +1 -0
  19. package/dist/auth/oauth/providers/custom.js +204 -0
  20. package/dist/auth/oauth/providers/custom.js.map +1 -0
  21. package/dist/auth/oauth/providers/discord.d.ts +23 -0
  22. package/dist/auth/oauth/providers/discord.d.ts.map +1 -0
  23. package/dist/auth/oauth/providers/discord.js +130 -0
  24. package/dist/auth/oauth/providers/discord.js.map +1 -0
  25. package/dist/auth/oauth/providers/facebook.d.ts +28 -0
  26. package/dist/auth/oauth/providers/facebook.d.ts.map +1 -0
  27. package/dist/auth/oauth/providers/facebook.js +124 -0
  28. package/dist/auth/oauth/providers/facebook.js.map +1 -0
  29. package/dist/auth/oauth/providers/github.d.ts +25 -0
  30. package/dist/auth/oauth/providers/github.d.ts.map +1 -0
  31. package/dist/auth/oauth/providers/github.js +132 -0
  32. package/dist/auth/oauth/providers/github.js.map +1 -0
  33. package/dist/auth/oauth/providers/google.d.ts +23 -0
  34. package/dist/auth/oauth/providers/google.d.ts.map +1 -0
  35. package/dist/auth/oauth/providers/google.js +134 -0
  36. package/dist/auth/oauth/providers/google.js.map +1 -0
  37. package/dist/auth/oauth/providers/microsoft.d.ts +28 -0
  38. package/dist/auth/oauth/providers/microsoft.d.ts.map +1 -0
  39. package/dist/auth/oauth/providers/microsoft.js +136 -0
  40. package/dist/auth/oauth/providers/microsoft.js.map +1 -0
  41. package/dist/auth/oauth/types.d.ts +158 -0
  42. package/dist/auth/oauth/types.d.ts.map +1 -0
  43. package/dist/auth/oauth/types.js +4 -0
  44. package/dist/auth/oauth/types.js.map +1 -0
  45. package/dist/cli/commands/dev.d.ts.map +1 -1
  46. package/dist/cli/commands/dev.js +0 -1
  47. package/dist/cli/commands/dev.js.map +1 -1
  48. package/dist/database/adapters/mongodb.d.ts +58 -0
  49. package/dist/database/adapters/mongodb.d.ts.map +1 -0
  50. package/dist/database/adapters/mongodb.js +264 -0
  51. package/dist/database/adapters/mongodb.js.map +1 -0
  52. package/dist/database/adapters/mysql.d.ts +27 -0
  53. package/dist/database/adapters/mysql.d.ts.map +1 -0
  54. package/dist/database/adapters/mysql.js +188 -0
  55. package/dist/database/adapters/mysql.js.map +1 -0
  56. package/dist/database/adapters/postgres.d.ts +28 -0
  57. package/dist/database/adapters/postgres.d.ts.map +1 -0
  58. package/dist/database/adapters/postgres.js +174 -0
  59. package/dist/database/adapters/postgres.js.map +1 -0
  60. package/dist/database/adapters/sqlite.d.ts +27 -0
  61. package/dist/database/adapters/sqlite.d.ts.map +1 -0
  62. package/dist/database/adapters/sqlite.js +149 -0
  63. package/dist/database/adapters/sqlite.js.map +1 -0
  64. package/dist/database/index.d.ts +42 -0
  65. package/dist/database/index.d.ts.map +1 -0
  66. package/dist/database/index.js +58 -0
  67. package/dist/database/index.js.map +1 -0
  68. package/dist/database/manager.d.ts +114 -0
  69. package/dist/database/manager.d.ts.map +1 -0
  70. package/dist/database/manager.js +269 -0
  71. package/dist/database/manager.js.map +1 -0
  72. package/dist/database/migration.d.ts +57 -0
  73. package/dist/database/migration.d.ts.map +1 -0
  74. package/dist/database/migration.js +329 -0
  75. package/dist/database/migration.js.map +1 -0
  76. package/dist/database/query-builder.d.ts +89 -0
  77. package/dist/database/query-builder.d.ts.map +1 -0
  78. package/dist/database/query-builder.js +353 -0
  79. package/dist/database/query-builder.js.map +1 -0
  80. package/dist/database/types.d.ts +184 -0
  81. package/dist/database/types.d.ts.map +1 -0
  82. package/dist/database/types.js +4 -0
  83. package/dist/database/types.js.map +1 -0
  84. package/dist/docs/ARCHITECTURE.md +349 -0
  85. package/dist/docs/BENCHMARKS.md +36 -0
  86. package/dist/docs/README.md +34 -0
  87. package/dist/docs/content/README.md +44 -0
  88. package/dist/docs/content/adapters.mdx +199 -0
  89. package/dist/docs/content/cache.mdx +239 -0
  90. package/dist/docs/content/circuit-breaker.mdx +130 -0
  91. package/dist/docs/content/cli/commands.mdx +214 -0
  92. package/dist/docs/content/cli/overview.mdx +92 -0
  93. package/dist/docs/content/cli/usage.mdx +61 -0
  94. package/dist/docs/content/config.mdx +214 -0
  95. package/dist/docs/content/controllers.mdx +241 -0
  96. package/dist/docs/content/cron.mdx +109 -0
  97. package/dist/docs/content/database.mdx +209 -0
  98. package/dist/docs/content/dataloader.mdx +170 -0
  99. package/dist/docs/content/decorators.mdx +204 -0
  100. package/dist/docs/content/errors.mdx +344 -0
  101. package/dist/docs/content/exisjs-mcp.mdx +97 -0
  102. package/dist/docs/content/gateways.mdx +376 -0
  103. package/dist/docs/content/installation.mdx +210 -0
  104. package/dist/docs/content/introduction.mdx +96 -0
  105. package/dist/docs/content/middleware.mdx +441 -0
  106. package/dist/docs/content/modules.mdx +144 -0
  107. package/dist/docs/content/oauth.mdx +179 -0
  108. package/dist/docs/content/providers.mdx +147 -0
  109. package/dist/docs/content/queues.mdx +177 -0
  110. package/dist/docs/content/requests.mdx +293 -0
  111. package/dist/docs/content/responses.mdx +271 -0
  112. package/dist/docs/content/routing.mdx +541 -0
  113. package/dist/docs/content/rpc.mdx +146 -0
  114. package/dist/docs/content/security.mdx +294 -0
  115. package/dist/docs/content/sse.mdx +159 -0
  116. package/dist/docs/content/structure.mdx +116 -0
  117. package/dist/docs/content/testing.mdx +139 -0
  118. package/dist/docs/content/validation.mdx +249 -0
  119. package/dist/docs/content/websockets.mdx +289 -0
  120. package/dist/docs/integrations/README.md +23 -0
  121. package/dist/docs/integrations/jwt.mdx +151 -0
  122. package/dist/docs/integrations/mongo.mdx +183 -0
  123. package/dist/docs/integrations/observability.mdx +125 -0
  124. package/dist/docs/integrations/openai.mdx +108 -0
  125. package/dist/docs/integrations/postgres.mdx +190 -0
  126. package/dist/docs/integrations/posthog.mdx +122 -0
  127. package/dist/docs/integrations/redis.mdx +141 -0
  128. package/dist/docs/integrations/resend.mdx +117 -0
  129. package/dist/docs/integrations/s3.mdx +122 -0
  130. package/dist/docs/integrations/swagger.mdx +113 -0
  131. package/dist/docs/reference/README.md +3 -0
  132. package/dist/docs/reference/adapters.mdx +130 -0
  133. package/dist/docs/reference/auth.mdx +183 -0
  134. package/dist/docs/reference/cache.mdx +132 -0
  135. package/dist/docs/reference/circuit-breaker.mdx +71 -0
  136. package/dist/docs/reference/config.mdx +118 -0
  137. package/dist/docs/reference/context.mdx +168 -0
  138. package/dist/docs/reference/dataloader.mdx +91 -0
  139. package/dist/docs/reference/decorators.mdx +293 -0
  140. package/dist/docs/reference/di.mdx +123 -0
  141. package/dist/docs/reference/error.mdx +170 -0
  142. package/dist/docs/reference/exis.mdx +124 -0
  143. package/dist/docs/reference/middleware.mdx +304 -0
  144. package/dist/docs/reference/plugin.mdx +113 -0
  145. package/dist/docs/reference/queue.mdx +155 -0
  146. package/dist/docs/reference/router.mdx +248 -0
  147. package/dist/docs/reference/sanitize.mdx +130 -0
  148. package/dist/docs/reference/storage.mdx +116 -0
  149. package/dist/docs/reference/swagger.mdx +132 -0
  150. package/dist/docs/reference/testing.mdx +145 -0
  151. package/dist/docs/reference/validator.mdx +186 -0
  152. package/dist/index.d.ts +4 -0
  153. package/dist/index.d.ts.map +1 -1
  154. package/dist/index.js +10 -1
  155. package/dist/index.js.map +1 -1
  156. package/dist/middleware/compression.d.ts +12 -0
  157. package/dist/middleware/compression.d.ts.map +1 -1
  158. package/dist/middleware/compression.js +61 -99
  159. package/dist/middleware/compression.js.map +1 -1
  160. package/dist/middleware/middleware.d.ts.map +1 -1
  161. package/dist/middleware/middleware.js +25 -8
  162. package/dist/middleware/middleware.js.map +1 -1
  163. package/dist/middleware/security.d.ts.map +1 -1
  164. package/dist/middleware/security.js +6 -3
  165. package/dist/middleware/security.js.map +1 -1
  166. package/dist/router/router.d.ts.map +1 -1
  167. package/dist/router/router.js +11 -7
  168. package/dist/router/router.js.map +1 -1
  169. package/dist/server/bootstrapper.js +1 -1
  170. package/dist/server/bootstrapper.js.map +1 -1
  171. package/dist/server/bun-adapter.d.ts.map +1 -1
  172. package/dist/server/bun-adapter.js +2 -2
  173. package/dist/server/bun-adapter.js.map +1 -1
  174. package/dist/server/request-handler.d.ts +7 -0
  175. package/dist/server/request-handler.d.ts.map +1 -1
  176. package/dist/server/request-handler.js +37 -2
  177. package/dist/server/request-handler.js.map +1 -1
  178. package/dist/server/request.d.ts.map +1 -1
  179. package/dist/server/request.js +4 -6
  180. package/dist/server/request.js.map +1 -1
  181. package/dist/server/route-scanner.d.ts.map +1 -1
  182. package/dist/server/route-scanner.js +4 -1
  183. package/dist/server/route-scanner.js.map +1 -1
  184. package/dist/server/uws-adapter.d.ts +5 -3
  185. package/dist/server/uws-adapter.d.ts.map +1 -1
  186. package/dist/server/uws-adapter.js +39 -4
  187. package/dist/server/uws-adapter.js.map +1 -1
  188. package/dist/server/ws-orchestrator.d.ts.map +1 -1
  189. package/dist/server/ws-orchestrator.js +4 -13
  190. package/dist/server/ws-orchestrator.js.map +1 -1
  191. package/package.json +17 -10
@@ -1,6 +1,8 @@
1
1
  import * as Password from './password';
2
2
  import * as JWT from './jwt';
3
+ import * as OAuth from './oauth';
3
4
  export * from './rbac';
4
5
  export * from './session';
5
- export { Password, JWT };
6
+ export * from './oauth';
7
+ export { Password, JWT, OAuth };
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,GAAG,MAAM,OAAO,CAAA;AAE5B,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,GAAG,MAAM,OAAO,CAAA;AAC5B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAEhC,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA"}
@@ -36,11 +36,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
36
36
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.JWT = exports.Password = void 0;
39
+ exports.OAuth = exports.JWT = exports.Password = void 0;
40
40
  const Password = __importStar(require("./password"));
41
41
  exports.Password = Password;
42
42
  const JWT = __importStar(require("./jwt"));
43
43
  exports.JWT = JWT;
44
+ const OAuth = __importStar(require("./oauth"));
45
+ exports.OAuth = OAuth;
44
46
  __exportStar(require("./rbac"), exports);
45
47
  __exportStar(require("./session"), exports);
48
+ __exportStar(require("./oauth"), exports);
46
49
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAsC;AAK7B,4BAAQ;AAJjB,2CAA4B;AAIT,kBAAG;AAFtB,yCAAsB;AACtB,4CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAsC;AAO7B,4BAAQ;AANjB,2CAA4B;AAMT,kBAAG;AALtB,+CAAgC;AAKR,sBAAK;AAH7B,yCAAsB;AACtB,4CAAyB;AACzB,0CAAuB"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * OAuth Manager — The core orchestration engine.
3
+ *
4
+ * Manages OAuth provider registrations, generates authorization URLs with
5
+ * PKCE + state, handles the token exchange callback, and normalizes user profiles.
6
+ *
7
+ * Usage:
8
+ * import { OAuth } from 'exisjs/auth'
9
+ *
10
+ * OAuth.configure({
11
+ * google: { clientId: '...', clientSecret: '...', redirectUri: '...' },
12
+ * github: { clientId: '...', clientSecret: '...', redirectUri: '...' },
13
+ * })
14
+ *
15
+ * const { url, state, codeVerifier } = OAuth.getAuthUrl('google')
16
+ * const { profile, tokens } = await OAuth.handleCallback('google', code, codeVerifier)
17
+ */
18
+ import type { OAuthProviderConfig, OAuthProviderAdapter, OAuthTokens, OAuthUserProfile, OAuthFlowState, CustomOAuthProviderConfig } from './types';
19
+ /**
20
+ * Generate a cryptographically random code verifier for PKCE.
21
+ */
22
+ declare function generateCodeVerifier(): string;
23
+ /**
24
+ * Derive the code challenge from a code verifier using S256 method.
25
+ */
26
+ declare function generateCodeChallenge(verifier: string): string;
27
+ /**
28
+ * Generate a cryptographically random state token for CSRF protection.
29
+ */
30
+ declare function generateState(): string;
31
+ export declare class OAuthManager {
32
+ private providers;
33
+ /**
34
+ * Configure multiple OAuth providers at once.
35
+ */
36
+ configure(providers: Record<string, OAuthProviderConfig>): this;
37
+ /**
38
+ * Register a single OAuth provider.
39
+ */
40
+ register(name: string, config: OAuthProviderConfig): this;
41
+ /**
42
+ * Register a custom OAuth provider.
43
+ */
44
+ custom(config: CustomOAuthProviderConfig): this;
45
+ /**
46
+ * Register a fully custom provider adapter directly.
47
+ */
48
+ registerAdapter(name: string, adapter: OAuthProviderAdapter): this;
49
+ /**
50
+ * Generate the authorization URL for a provider.
51
+ * Returns the URL, state token, and PKCE code verifier.
52
+ */
53
+ getAuthUrl(provider: string, options?: {
54
+ usePKCE?: boolean;
55
+ additionalParams?: Record<string, string>;
56
+ }): {
57
+ url: string;
58
+ state: string;
59
+ codeVerifier?: string;
60
+ flowState: OAuthFlowState;
61
+ };
62
+ /**
63
+ * Handle the OAuth callback — exchange the authorization code for tokens
64
+ * and fetch the user profile.
65
+ */
66
+ handleCallback(provider: string, code: string, codeVerifier?: string): Promise<{
67
+ profile: OAuthUserProfile;
68
+ tokens: OAuthTokens;
69
+ }>;
70
+ /**
71
+ * Refresh an expired access token.
72
+ */
73
+ refreshAccessToken(provider: string, refreshToken: string): Promise<OAuthTokens>;
74
+ /**
75
+ * Revoke a token.
76
+ */
77
+ revokeToken(provider: string, token: string): Promise<void>;
78
+ /**
79
+ * Get a registered provider adapter.
80
+ */
81
+ getProvider(name: string): OAuthProviderAdapter;
82
+ /**
83
+ * Check if a provider is registered.
84
+ */
85
+ hasProvider(name: string): boolean;
86
+ /**
87
+ * Get all registered provider names.
88
+ */
89
+ getProviderNames(): string[];
90
+ }
91
+ /**
92
+ * Default global OAuthManager instance.
93
+ */
94
+ export declare const OAuth: OAuthManager;
95
+ export { generateCodeVerifier, generateCodeChallenge, generateState };
96
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/auth/oauth/core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAEV,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,yBAAyB,EAC1B,MAAM,SAAS,CAAA;AA2ChB;;GAEG;AACH,iBAAS,oBAAoB,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,iBAAS,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,iBAAS,aAAa,IAAI,MAAM,CAE/B;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAA0C;IAE3D;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,IAAI;IAO/D;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAMzD;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI;IAQ/C;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAKlE;;;OAGG;IACH,UAAU,CACR,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GACzE;QACD,GAAG,EAAE,MAAM,CAAA;QACX,KAAK,EAAE,MAAM,CAAA;QACb,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,SAAS,EAAE,cAAc,CAAA;KAC1B;IAkCD;;;OAGG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,CAAC;IAY9D;;OAEG;IACG,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC;IAKvB;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjE;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB;IAU/C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;CAG7B;AAID;;GAEG;AACH,eAAO,MAAM,KAAK,cAAqB,CAAA;AAGvC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,aAAa,EAAE,CAAA"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ /**
3
+ * OAuth Manager — The core orchestration engine.
4
+ *
5
+ * Manages OAuth provider registrations, generates authorization URLs with
6
+ * PKCE + state, handles the token exchange callback, and normalizes user profiles.
7
+ *
8
+ * Usage:
9
+ * import { OAuth } from 'exisjs/auth'
10
+ *
11
+ * OAuth.configure({
12
+ * google: { clientId: '...', clientSecret: '...', redirectUri: '...' },
13
+ * github: { clientId: '...', clientSecret: '...', redirectUri: '...' },
14
+ * })
15
+ *
16
+ * const { url, state, codeVerifier } = OAuth.getAuthUrl('google')
17
+ * const { profile, tokens } = await OAuth.handleCallback('google', code, codeVerifier)
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.OAuth = exports.OAuthManager = void 0;
21
+ exports.generateCodeVerifier = generateCodeVerifier;
22
+ exports.generateCodeChallenge = generateCodeChallenge;
23
+ exports.generateState = generateState;
24
+ const node_crypto_1 = require("node:crypto");
25
+ // ─── Provider Factories ──────────────────────────────────────────────────────
26
+ function createBuiltInProvider(name, config) {
27
+ switch (name) {
28
+ case 'google': {
29
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
30
+ const { GoogleProvider } = require('./providers/google');
31
+ return new GoogleProvider(config);
32
+ }
33
+ case 'github': {
34
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
35
+ const { GithubProvider } = require('./providers/github');
36
+ return new GithubProvider(config);
37
+ }
38
+ case 'microsoft': {
39
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
40
+ const { MicrosoftProvider } = require('./providers/microsoft');
41
+ return new MicrosoftProvider(config);
42
+ }
43
+ case 'discord': {
44
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
45
+ const { DiscordProvider } = require('./providers/discord');
46
+ return new DiscordProvider(config);
47
+ }
48
+ case 'facebook': {
49
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
50
+ const { FacebookProvider } = require('./providers/facebook');
51
+ return new FacebookProvider(config);
52
+ }
53
+ default:
54
+ throw new Error(`Unknown OAuth provider '${name}'. Use OAuth.custom() for custom providers.`);
55
+ }
56
+ }
57
+ // ─── PKCE Helpers ────────────────────────────────────────────────────────────
58
+ /**
59
+ * Generate a cryptographically random code verifier for PKCE.
60
+ */
61
+ function generateCodeVerifier() {
62
+ return (0, node_crypto_1.randomBytes)(32).toString('base64url');
63
+ }
64
+ /**
65
+ * Derive the code challenge from a code verifier using S256 method.
66
+ */
67
+ function generateCodeChallenge(verifier) {
68
+ return (0, node_crypto_1.createHash)('sha256').update(verifier).digest('base64url');
69
+ }
70
+ /**
71
+ * Generate a cryptographically random state token for CSRF protection.
72
+ */
73
+ function generateState() {
74
+ return (0, node_crypto_1.randomBytes)(24).toString('base64url');
75
+ }
76
+ // ─── OAuth Manager ───────────────────────────────────────────────────────────
77
+ class OAuthManager {
78
+ constructor() {
79
+ this.providers = new Map();
80
+ }
81
+ /**
82
+ * Configure multiple OAuth providers at once.
83
+ */
84
+ configure(providers) {
85
+ for (const [name, config] of Object.entries(providers)) {
86
+ this.register(name, config);
87
+ }
88
+ return this;
89
+ }
90
+ /**
91
+ * Register a single OAuth provider.
92
+ */
93
+ register(name, config) {
94
+ const adapter = createBuiltInProvider(name, config);
95
+ this.providers.set(name, adapter);
96
+ return this;
97
+ }
98
+ /**
99
+ * Register a custom OAuth provider.
100
+ */
101
+ custom(config) {
102
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
103
+ const { CustomProvider } = require('./providers/custom');
104
+ const adapter = new CustomProvider(config);
105
+ this.providers.set(config.name, adapter);
106
+ return this;
107
+ }
108
+ /**
109
+ * Register a fully custom provider adapter directly.
110
+ */
111
+ registerAdapter(name, adapter) {
112
+ this.providers.set(name, adapter);
113
+ return this;
114
+ }
115
+ /**
116
+ * Generate the authorization URL for a provider.
117
+ * Returns the URL, state token, and PKCE code verifier.
118
+ */
119
+ getAuthUrl(provider, options) {
120
+ const adapter = this.getProvider(provider);
121
+ const state = generateState();
122
+ const usePKCE = options?.usePKCE !== false; // PKCE on by default
123
+ let codeVerifier;
124
+ let url;
125
+ if (usePKCE) {
126
+ codeVerifier = generateCodeVerifier();
127
+ url = adapter.getAuthorizationUrl(state, codeVerifier);
128
+ }
129
+ else {
130
+ url = adapter.getAuthorizationUrl(state);
131
+ }
132
+ // Append any additional query params
133
+ if (options?.additionalParams) {
134
+ const urlObj = new URL(url);
135
+ for (const [key, value] of Object.entries(options.additionalParams)) {
136
+ urlObj.searchParams.set(key, value);
137
+ }
138
+ url = urlObj.toString();
139
+ }
140
+ const flowState = {
141
+ state,
142
+ codeVerifier,
143
+ provider,
144
+ createdAt: Date.now(),
145
+ };
146
+ return { url, state, codeVerifier, flowState };
147
+ }
148
+ /**
149
+ * Handle the OAuth callback — exchange the authorization code for tokens
150
+ * and fetch the user profile.
151
+ */
152
+ async handleCallback(provider, code, codeVerifier) {
153
+ const adapter = this.getProvider(provider);
154
+ // Exchange the code for tokens
155
+ const tokens = await adapter.exchangeCode(code, codeVerifier);
156
+ // Fetch the user profile
157
+ const profile = await adapter.getUserProfile(tokens);
158
+ return { profile, tokens };
159
+ }
160
+ /**
161
+ * Refresh an expired access token.
162
+ */
163
+ async refreshAccessToken(provider, refreshToken) {
164
+ const adapter = this.getProvider(provider);
165
+ return adapter.refreshToken(refreshToken);
166
+ }
167
+ /**
168
+ * Revoke a token.
169
+ */
170
+ async revokeToken(provider, token) {
171
+ const adapter = this.getProvider(provider);
172
+ return adapter.revokeToken(token);
173
+ }
174
+ /**
175
+ * Get a registered provider adapter.
176
+ */
177
+ getProvider(name) {
178
+ const adapter = this.providers.get(name);
179
+ if (!adapter) {
180
+ throw new Error(`OAuth provider '${name}' is not registered. Call OAuth.register() or OAuth.configure() first.`);
181
+ }
182
+ return adapter;
183
+ }
184
+ /**
185
+ * Check if a provider is registered.
186
+ */
187
+ hasProvider(name) {
188
+ return this.providers.has(name);
189
+ }
190
+ /**
191
+ * Get all registered provider names.
192
+ */
193
+ getProviderNames() {
194
+ return Array.from(this.providers.keys());
195
+ }
196
+ }
197
+ exports.OAuthManager = OAuthManager;
198
+ // ─── Singleton & Exports ─────────────────────────────────────────────────────
199
+ /**
200
+ * Default global OAuthManager instance.
201
+ */
202
+ exports.OAuth = new OAuthManager();
203
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/auth/oauth/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * ExisJS OAuth Provider System
3
+ *
4
+ * A complete OAuth 2.0 / OpenID Connect implementation with built-in providers
5
+ * for Google, GitHub, Microsoft, Discord, and Facebook. Includes PKCE support,
6
+ * state validation, profile normalization, and route middleware helpers.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { OAuth } from 'exisjs/auth'
11
+ *
12
+ * // Configure providers
13
+ * OAuth.configure({
14
+ * google: {
15
+ * clientId: process.env.GOOGLE_CLIENT_ID!,
16
+ * clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
17
+ * redirectUri: 'http://localhost:3000/auth/google/callback',
18
+ * },
19
+ * github: {
20
+ * clientId: process.env.GITHUB_CLIENT_ID!,
21
+ * clientSecret: process.env.GITHUB_CLIENT_SECRET!,
22
+ * redirectUri: 'http://localhost:3000/auth/github/callback',
23
+ * },
24
+ * })
25
+ *
26
+ * // Use middleware
27
+ * app.get('/auth/google', oauthRedirect('google'))
28
+ * app.get('/auth/google/callback', oauthCallback('google', {
29
+ * onSuccess: async (req, res, profile) => {
30
+ * req.session.userId = profile.id
31
+ * res.redirect('/dashboard')
32
+ * },
33
+ * }))
34
+ * ```
35
+ */
36
+ export { OAuthManager, OAuth, generateCodeVerifier, generateCodeChallenge, generateState, } from './core';
37
+ export { oauthRedirect, oauthCallback, requireAuth } from './middleware';
38
+ export { GoogleProvider } from './providers/google';
39
+ export { GithubProvider } from './providers/github';
40
+ export { MicrosoftProvider } from './providers/microsoft';
41
+ export { DiscordProvider } from './providers/discord';
42
+ export { FacebookProvider } from './providers/facebook';
43
+ export { CustomProvider } from './providers/custom';
44
+ export type { OAuthProvider, OAuthProviderConfig, OAuthProviderAdapter, OAuthTokens, OAuthUserProfile, OAuthCallbackOptions, OAuthFlowState, CustomOAuthProviderConfig, } from './types';
45
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/oauth/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,EACL,YAAY,EACZ,KAAK,EACL,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,GACd,MAAM,QAAQ,CAAA;AAGf,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAGxE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGnD,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,yBAAyB,GAC1B,MAAM,SAAS,CAAA"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ /**
3
+ * ExisJS OAuth Provider System
4
+ *
5
+ * A complete OAuth 2.0 / OpenID Connect implementation with built-in providers
6
+ * for Google, GitHub, Microsoft, Discord, and Facebook. Includes PKCE support,
7
+ * state validation, profile normalization, and route middleware helpers.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import { OAuth } from 'exisjs/auth'
12
+ *
13
+ * // Configure providers
14
+ * OAuth.configure({
15
+ * google: {
16
+ * clientId: process.env.GOOGLE_CLIENT_ID!,
17
+ * clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
18
+ * redirectUri: 'http://localhost:3000/auth/google/callback',
19
+ * },
20
+ * github: {
21
+ * clientId: process.env.GITHUB_CLIENT_ID!,
22
+ * clientSecret: process.env.GITHUB_CLIENT_SECRET!,
23
+ * redirectUri: 'http://localhost:3000/auth/github/callback',
24
+ * },
25
+ * })
26
+ *
27
+ * // Use middleware
28
+ * app.get('/auth/google', oauthRedirect('google'))
29
+ * app.get('/auth/google/callback', oauthCallback('google', {
30
+ * onSuccess: async (req, res, profile) => {
31
+ * req.session.userId = profile.id
32
+ * res.redirect('/dashboard')
33
+ * },
34
+ * }))
35
+ * ```
36
+ */
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.CustomProvider = exports.FacebookProvider = exports.DiscordProvider = exports.MicrosoftProvider = exports.GithubProvider = exports.GoogleProvider = exports.requireAuth = exports.oauthCallback = exports.oauthRedirect = exports.generateState = exports.generateCodeChallenge = exports.generateCodeVerifier = exports.OAuth = exports.OAuthManager = void 0;
39
+ // ─── Core ────────────────────────────────────────────────────────────────────
40
+ var core_1 = require("./core");
41
+ Object.defineProperty(exports, "OAuthManager", { enumerable: true, get: function () { return core_1.OAuthManager; } });
42
+ Object.defineProperty(exports, "OAuth", { enumerable: true, get: function () { return core_1.OAuth; } });
43
+ Object.defineProperty(exports, "generateCodeVerifier", { enumerable: true, get: function () { return core_1.generateCodeVerifier; } });
44
+ Object.defineProperty(exports, "generateCodeChallenge", { enumerable: true, get: function () { return core_1.generateCodeChallenge; } });
45
+ Object.defineProperty(exports, "generateState", { enumerable: true, get: function () { return core_1.generateState; } });
46
+ // ─── Middleware ───────────────────────────────────────────────────────────────
47
+ var middleware_1 = require("./middleware");
48
+ Object.defineProperty(exports, "oauthRedirect", { enumerable: true, get: function () { return middleware_1.oauthRedirect; } });
49
+ Object.defineProperty(exports, "oauthCallback", { enumerable: true, get: function () { return middleware_1.oauthCallback; } });
50
+ Object.defineProperty(exports, "requireAuth", { enumerable: true, get: function () { return middleware_1.requireAuth; } });
51
+ // ─── Providers ───────────────────────────────────────────────────────────────
52
+ var google_1 = require("./providers/google");
53
+ Object.defineProperty(exports, "GoogleProvider", { enumerable: true, get: function () { return google_1.GoogleProvider; } });
54
+ var github_1 = require("./providers/github");
55
+ Object.defineProperty(exports, "GithubProvider", { enumerable: true, get: function () { return github_1.GithubProvider; } });
56
+ var microsoft_1 = require("./providers/microsoft");
57
+ Object.defineProperty(exports, "MicrosoftProvider", { enumerable: true, get: function () { return microsoft_1.MicrosoftProvider; } });
58
+ var discord_1 = require("./providers/discord");
59
+ Object.defineProperty(exports, "DiscordProvider", { enumerable: true, get: function () { return discord_1.DiscordProvider; } });
60
+ var facebook_1 = require("./providers/facebook");
61
+ Object.defineProperty(exports, "FacebookProvider", { enumerable: true, get: function () { return facebook_1.FacebookProvider; } });
62
+ var custom_1 = require("./providers/custom");
63
+ Object.defineProperty(exports, "CustomProvider", { enumerable: true, get: function () { return custom_1.CustomProvider; } });
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/oauth/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;;;AAEH,gFAAgF;AAChF,+BAMe;AALb,oGAAA,YAAY,OAAA;AACZ,6FAAA,KAAK,OAAA;AACL,4GAAA,oBAAoB,OAAA;AACpB,6GAAA,qBAAqB,OAAA;AACrB,qGAAA,aAAa,OAAA;AAGf,iFAAiF;AACjF,2CAAwE;AAA/D,2GAAA,aAAa,OAAA;AAAE,2GAAA,aAAa,OAAA;AAAE,yGAAA,WAAW,OAAA;AAElD,gFAAgF;AAChF,6CAAmD;AAA1C,wGAAA,cAAc,OAAA;AACvB,6CAAmD;AAA1C,wGAAA,cAAc,OAAA;AACvB,mDAAyD;AAAhD,8GAAA,iBAAiB,OAAA;AAC1B,+CAAqD;AAA5C,0GAAA,eAAe,OAAA;AACxB,iDAAuD;AAA9C,4GAAA,gBAAgB,OAAA;AACzB,6CAAmD;AAA1C,wGAAA,cAAc,OAAA"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * OAuth Middleware Helpers.
3
+ *
4
+ * Express-style middleware functions for handling OAuth redirects, callbacks,
5
+ * and authentication guards in ExisJS route handlers.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { oauthRedirect, oauthCallback, requireAuth } from 'exisjs/auth/oauth'
10
+ *
11
+ * app.get('/auth/google', oauthRedirect('google'))
12
+ * app.get('/auth/google/callback', oauthCallback('google', {
13
+ * onSuccess: async (req, res, profile, tokens) => {
14
+ * // Create or update user in your database
15
+ * req.session.userId = profile.id
16
+ * res.redirect('/dashboard')
17
+ * },
18
+ * }))
19
+ *
20
+ * // Protect routes
21
+ * app.get('/dashboard', requireAuth(), (req, res) => {
22
+ * res.json({ user: req.user })
23
+ * })
24
+ * ```
25
+ */
26
+ import type { Request, Response, NextFunction } from '../../types';
27
+ import type { OAuthCallbackOptions } from './types';
28
+ /**
29
+ * Middleware that redirects the user to an OAuth provider's login page.
30
+ * Stores the state and code verifier in the user's session for validation on callback.
31
+ *
32
+ * @param provider The OAuth provider name (e.g. 'google', 'github')
33
+ * @param options Optional settings like additional params or disabling PKCE
34
+ */
35
+ export declare function oauthRedirect(provider: string, options?: {
36
+ usePKCE?: boolean;
37
+ additionalParams?: Record<string, string>;
38
+ stateKey?: string;
39
+ }): (req: Request, res: Response, _next: NextFunction) => void;
40
+ /**
41
+ * Middleware that handles the OAuth callback from a provider.
42
+ * Validates the state, exchanges the authorization code for tokens,
43
+ * fetches the user profile, and calls the onSuccess callback.
44
+ *
45
+ * @param provider The OAuth provider name
46
+ * @param options Callback options including onSuccess and onError handlers
47
+ */
48
+ export declare function oauthCallback(provider: string, options: OAuthCallbackOptions): (req: Request, res: Response, next: NextFunction) => Promise<void>;
49
+ /**
50
+ * Guard middleware that ensures the user is authenticated.
51
+ * Checks for `req.user` or `req.session.userId` to determine authentication status.
52
+ *
53
+ * @param options Configuration options
54
+ */
55
+ export declare function requireAuth(options?: {
56
+ /** Custom function to check if the request is authenticated */
57
+ isAuthenticated?: (req: Request) => boolean;
58
+ /** URL to redirect to if not authenticated (for browser requests). If not set, returns 401 JSON */
59
+ redirectTo?: string;
60
+ /** Custom error message */
61
+ message?: string;
62
+ }): (req: Request, res: Response, next: NextFunction) => void;
63
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/auth/oauth/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAGlE,OAAO,KAAK,EAAE,oBAAoB,EAAkB,MAAM,SAAS,CAAA;AAKnE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,IAEO,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,OAAO,YAAY,UAuBzD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,IAG7D,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAkF9D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE;IACpC,+DAA+D;IAC/D,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAA;IAC3C,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,IACS,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,UA0BxD"}