@alliance-droid/svelte-auth-core 1.0.0

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 (178) hide show
  1. package/dist/adapter-context.d.ts +19 -0
  2. package/dist/adapter-context.d.ts.map +1 -0
  3. package/dist/adapter-context.js +68 -0
  4. package/dist/adapter-context.js.map +1 -0
  5. package/dist/adapters/__tests__/adapter-tests.d.ts +7 -0
  6. package/dist/adapters/__tests__/adapter-tests.d.ts.map +1 -0
  7. package/dist/adapters/__tests__/adapter-tests.js +206 -0
  8. package/dist/adapters/__tests__/adapter-tests.js.map +1 -0
  9. package/dist/adapters/adapter.d.ts +60 -0
  10. package/dist/adapters/adapter.d.ts.map +1 -0
  11. package/dist/adapters/adapter.js +2 -0
  12. package/dist/adapters/adapter.js.map +1 -0
  13. package/dist/adapters/filesystem-adapter.d.ts +26 -0
  14. package/dist/adapters/filesystem-adapter.d.ts.map +1 -0
  15. package/dist/adapters/filesystem-adapter.js +148 -0
  16. package/dist/adapters/filesystem-adapter.js.map +1 -0
  17. package/dist/adapters/index.d.ts +6 -0
  18. package/dist/adapters/index.d.ts.map +1 -0
  19. package/dist/adapters/index.js +5 -0
  20. package/dist/adapters/index.js.map +1 -0
  21. package/dist/adapters/mongodb-adapter.d.ts +27 -0
  22. package/dist/adapters/mongodb-adapter.d.ts.map +1 -0
  23. package/dist/adapters/mongodb-adapter.js +213 -0
  24. package/dist/adapters/mongodb-adapter.js.map +1 -0
  25. package/dist/adapters/postgres-adapter.d.ts +30 -0
  26. package/dist/adapters/postgres-adapter.d.ts.map +1 -0
  27. package/dist/adapters/postgres-adapter.js +237 -0
  28. package/dist/adapters/postgres-adapter.js.map +1 -0
  29. package/dist/adapters/sqlite-adapter.d.ts +26 -0
  30. package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
  31. package/dist/adapters/sqlite-adapter.js +261 -0
  32. package/dist/adapters/sqlite-adapter.js.map +1 -0
  33. package/dist/auth.d.ts +48 -0
  34. package/dist/auth.d.ts.map +1 -0
  35. package/dist/auth.js +205 -0
  36. package/dist/auth.js.map +1 -0
  37. package/dist/client-jwt.d.ts +30 -0
  38. package/dist/client-jwt.d.ts.map +1 -0
  39. package/dist/client-jwt.js +57 -0
  40. package/dist/client-jwt.js.map +1 -0
  41. package/dist/client-store.d.ts +31 -0
  42. package/dist/client-store.d.ts.map +1 -0
  43. package/dist/client-store.js +122 -0
  44. package/dist/client-store.js.map +1 -0
  45. package/dist/cors.d.ts +48 -0
  46. package/dist/cors.d.ts.map +1 -0
  47. package/dist/cors.js +88 -0
  48. package/dist/cors.js.map +1 -0
  49. package/dist/csrf.d.ts +57 -0
  50. package/dist/csrf.d.ts.map +1 -0
  51. package/dist/csrf.js +95 -0
  52. package/dist/csrf.js.map +1 -0
  53. package/dist/db.d.ts +22 -0
  54. package/dist/db.d.ts.map +1 -0
  55. package/dist/db.js +43 -0
  56. package/dist/db.js.map +1 -0
  57. package/dist/index.d.ts +35 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +36 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/input-validation.d.ts +78 -0
  62. package/dist/input-validation.d.ts.map +1 -0
  63. package/dist/input-validation.js +238 -0
  64. package/dist/input-validation.js.map +1 -0
  65. package/dist/oauth-callback.d.ts +31 -0
  66. package/dist/oauth-callback.d.ts.map +1 -0
  67. package/dist/oauth-callback.js +254 -0
  68. package/dist/oauth-callback.js.map +1 -0
  69. package/dist/oauth-providers.d.ts +92 -0
  70. package/dist/oauth-providers.d.ts.map +1 -0
  71. package/dist/oauth-providers.js +213 -0
  72. package/dist/oauth-providers.js.map +1 -0
  73. package/dist/oauth-types.d.ts +77 -0
  74. package/dist/oauth-types.d.ts.map +1 -0
  75. package/dist/oauth-types.js +2 -0
  76. package/dist/oauth-types.js.map +1 -0
  77. package/dist/password.d.ts +31 -0
  78. package/dist/password.d.ts.map +1 -0
  79. package/dist/password.js +54 -0
  80. package/dist/password.js.map +1 -0
  81. package/dist/providers/github-oauth.d.ts +58 -0
  82. package/dist/providers/github-oauth.d.ts.map +1 -0
  83. package/dist/providers/github-oauth.js +230 -0
  84. package/dist/providers/github-oauth.js.map +1 -0
  85. package/dist/providers/google-oauth.d.ts +46 -0
  86. package/dist/providers/google-oauth.d.ts.map +1 -0
  87. package/dist/providers/google-oauth.js +177 -0
  88. package/dist/providers/google-oauth.js.map +1 -0
  89. package/dist/providers/oidc-oauth.d.ts +85 -0
  90. package/dist/providers/oidc-oauth.d.ts.map +1 -0
  91. package/dist/providers/oidc-oauth.js +301 -0
  92. package/dist/providers/oidc-oauth.js.map +1 -0
  93. package/dist/rate-limit.d.ts +36 -0
  94. package/dist/rate-limit.d.ts.map +1 -0
  95. package/dist/rate-limit.js +88 -0
  96. package/dist/rate-limit.js.map +1 -0
  97. package/dist/rate-limiting.d.ts +113 -0
  98. package/dist/rate-limiting.d.ts.map +1 -0
  99. package/dist/rate-limiting.js +221 -0
  100. package/dist/rate-limiting.js.map +1 -0
  101. package/dist/security-headers.d.ts +54 -0
  102. package/dist/security-headers.d.ts.map +1 -0
  103. package/dist/security-headers.js +123 -0
  104. package/dist/security-headers.js.map +1 -0
  105. package/dist/session.d.ts +13 -0
  106. package/dist/session.d.ts.map +1 -0
  107. package/dist/session.js +33 -0
  108. package/dist/session.js.map +1 -0
  109. package/dist/sql-injection-prevention.d.ts +94 -0
  110. package/dist/sql-injection-prevention.d.ts.map +1 -0
  111. package/dist/sql-injection-prevention.js +222 -0
  112. package/dist/sql-injection-prevention.js.map +1 -0
  113. package/dist/token.d.ts +22 -0
  114. package/dist/token.d.ts.map +1 -0
  115. package/dist/token.js +31 -0
  116. package/dist/token.js.map +1 -0
  117. package/dist/types.d.ts +81 -0
  118. package/dist/types.d.ts.map +1 -0
  119. package/dist/types.js +2 -0
  120. package/dist/types.js.map +1 -0
  121. package/dist/user.d.ts +33 -0
  122. package/dist/user.d.ts.map +1 -0
  123. package/dist/user.js +144 -0
  124. package/dist/user.js.map +1 -0
  125. package/package.json +48 -0
  126. package/src/adapter-context.ts +72 -0
  127. package/src/adapters/__tests__/adapter-tests.ts +254 -0
  128. package/src/adapters/__tests__/filesystem-adapter.test.ts +48 -0
  129. package/src/adapters/__tests__/mongodb-adapter.test.ts +64 -0
  130. package/src/adapters/__tests__/postgres-adapter.test.ts +62 -0
  131. package/src/adapters/__tests__/sqlite-adapter.test.ts +103 -0
  132. package/src/adapters/__tests__/test-fs-adapter.json +4 -0
  133. package/src/adapters/adapter.ts +72 -0
  134. package/src/adapters/filesystem-adapter.ts +153 -0
  135. package/src/adapters/index.ts +5 -0
  136. package/src/adapters/mongodb-adapter.ts +208 -0
  137. package/src/adapters/postgres-adapter.ts +261 -0
  138. package/src/adapters/sqlite-adapter.ts +284 -0
  139. package/src/auth.ts +239 -0
  140. package/src/client-jwt.test.ts +137 -0
  141. package/src/client-jwt.ts +67 -0
  142. package/src/client-store.test.ts +149 -0
  143. package/src/client-store.ts +144 -0
  144. package/src/cors.test.ts +175 -0
  145. package/src/cors.ts +115 -0
  146. package/src/csrf.test.ts +226 -0
  147. package/src/csrf.ts +126 -0
  148. package/src/db.ts +57 -0
  149. package/src/index.ts +143 -0
  150. package/src/input-validation.test.ts +347 -0
  151. package/src/input-validation.ts +307 -0
  152. package/src/integration.test.ts +322 -0
  153. package/src/oauth-callback.test.ts +282 -0
  154. package/src/oauth-callback.ts +323 -0
  155. package/src/oauth-providers.ts +232 -0
  156. package/src/oauth-types.ts +82 -0
  157. package/src/password.test.ts +89 -0
  158. package/src/password.ts +62 -0
  159. package/src/providers/github-oauth.test.ts +290 -0
  160. package/src/providers/github-oauth.ts +226 -0
  161. package/src/providers/google-oauth.test.ts +240 -0
  162. package/src/providers/google-oauth.ts +166 -0
  163. package/src/providers/oidc-oauth.test.ts +367 -0
  164. package/src/providers/oidc-oauth.ts +302 -0
  165. package/src/rate-limit.test.ts +308 -0
  166. package/src/rate-limit.ts +118 -0
  167. package/src/rate-limiting.test.ts +390 -0
  168. package/src/rate-limiting.ts +275 -0
  169. package/src/security-headers.test.ts +242 -0
  170. package/src/security-headers.ts +160 -0
  171. package/src/security-penetration.test.ts +705 -0
  172. package/src/session.ts +42 -0
  173. package/src/sql-injection-prevention.test.ts +337 -0
  174. package/src/sql-injection-prevention.ts +272 -0
  175. package/src/token.test.ts +67 -0
  176. package/src/token.ts +34 -0
  177. package/src/types.ts +87 -0
  178. package/src/user.ts +165 -0
@@ -0,0 +1,92 @@
1
+ import type { OAuthProviderConfig, OAuthUserProfile, OAuthTokenResponse } from './oauth-types';
2
+ /**
3
+ * OAuth Provider Factory
4
+ * Creates and manages OAuth providers
5
+ */
6
+ export declare class OAuthProviderFactory {
7
+ private providers;
8
+ /**
9
+ * Create a Google OAuth provider
10
+ */
11
+ createGoogle(config: OAuthProviderConfig): any;
12
+ /**
13
+ * Create a GitHub OAuth provider
14
+ */
15
+ createGitHub(config: OAuthProviderConfig): any;
16
+ /**
17
+ * Create a generic OIDC provider
18
+ */
19
+ createOIDC(providerId: string, config: OAuthProviderConfig & {
20
+ authorizationEndpoint: string;
21
+ tokenEndpoint: string;
22
+ userInfoEndpoint: string;
23
+ }): any;
24
+ /**
25
+ * Get a registered provider
26
+ */
27
+ getProvider(providerId: string): any | undefined;
28
+ /**
29
+ * Check if provider is registered
30
+ */
31
+ hasProvider(providerId: string): boolean;
32
+ }
33
+ /**
34
+ * OAuth Profile Parser
35
+ * Extracts user profile data from different OAuth providers
36
+ */
37
+ export declare class OAuthProfileParser {
38
+ /**
39
+ * Parse Google OAuth profile
40
+ */
41
+ static parseGoogle(data: any): OAuthUserProfile;
42
+ /**
43
+ * Parse GitHub OAuth profile
44
+ */
45
+ static parseGitHub(data: any): OAuthUserProfile;
46
+ /**
47
+ * Parse generic OIDC profile
48
+ */
49
+ static parseOIDC(data: any, provider: string): OAuthUserProfile;
50
+ }
51
+ /**
52
+ * OAuth Token Manager
53
+ * Handles token exchange and refresh
54
+ */
55
+ export declare class OAuthTokenManager {
56
+ /**
57
+ * Exchange authorization code for tokens
58
+ */
59
+ static exchangeCode(_providerConfig: any, code: string): Promise<OAuthTokenResponse>;
60
+ /**
61
+ * Fetch user profile from OAuth provider
62
+ */
63
+ static fetchUserProfile(provider: string, accessToken: string, endpoint: string): Promise<any>;
64
+ /**
65
+ * Refresh OAuth token
66
+ */
67
+ static refreshToken(_providerConfig: any, refreshToken: string): Promise<OAuthTokenResponse>;
68
+ }
69
+ /**
70
+ * OAuth Configuration Store
71
+ * Manages OAuth provider configurations
72
+ */
73
+ export declare class OAuthConfigStore {
74
+ private configs;
75
+ /**
76
+ * Register a provider configuration
77
+ */
78
+ registerConfig(providerId: string, config: OAuthProviderConfig): void;
79
+ /**
80
+ * Get provider configuration
81
+ */
82
+ getConfig(providerId: string): OAuthProviderConfig | undefined;
83
+ /**
84
+ * Get all registered providers
85
+ */
86
+ getAllProviders(): string[];
87
+ /**
88
+ * Validate provider configuration
89
+ */
90
+ validateConfig(config: OAuthProviderConfig): boolean;
91
+ }
92
+ //# sourceMappingURL=oauth-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-providers.d.ts","sourceRoot":"","sources":["../src/oauth-providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAE/F;;;GAGG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,SAAS,CAA+B;IAEhD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,GAAG;IAY9C;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,GAAG;IAY9C;;OAEG;IACH,UAAU,CACT,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,mBAAmB,GAAG;QAC7B,qBAAqB,EAAE,MAAM,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;KACzB,GACC,GAAG;IAgBN;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS;IAIhD;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;CAGxC;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC9B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,gBAAgB;IAU/C;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,gBAAgB;IAU/C;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB;CAS/D;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC7B;;OAEG;WACU,YAAY,CACxB,eAAe,EAAE,GAAG,EACpB,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,kBAAkB,CAAC;IAc9B;;OAEG;WACU,gBAAgB,CAC5B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,GAAG,CAAC;IAmBf;;OAEG;WACU,YAAY,CACxB,eAAe,EAAE,GAAG,EACpB,YAAY,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC;CAa9B;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,OAAO,CAA+C;IAE9D;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAIrE;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAI9D;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO;CAGpD"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * OAuth Provider Factory
3
+ * Creates and manages OAuth providers
4
+ */
5
+ export class OAuthProviderFactory {
6
+ constructor() {
7
+ Object.defineProperty(this, "providers", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: new Map()
12
+ });
13
+ }
14
+ /**
15
+ * Create a Google OAuth provider
16
+ */
17
+ createGoogle(config) {
18
+ // Google provider config
19
+ const provider = {
20
+ type: 'google',
21
+ clientId: config.clientId,
22
+ clientSecret: config.clientSecret,
23
+ redirectUri: config.redirectUri
24
+ };
25
+ this.providers.set('google', provider);
26
+ return provider;
27
+ }
28
+ /**
29
+ * Create a GitHub OAuth provider
30
+ */
31
+ createGitHub(config) {
32
+ // GitHub provider config
33
+ const provider = {
34
+ type: 'github',
35
+ clientId: config.clientId,
36
+ clientSecret: config.clientSecret,
37
+ redirectUri: config.redirectUri
38
+ };
39
+ this.providers.set('github', provider);
40
+ return provider;
41
+ }
42
+ /**
43
+ * Create a generic OIDC provider
44
+ */
45
+ createOIDC(providerId, config) {
46
+ // Generic OIDC provider
47
+ const providerConfig = {
48
+ type: 'oidc',
49
+ providerId,
50
+ authorizationUrl: config.authorizationEndpoint,
51
+ tokenUrl: config.tokenEndpoint,
52
+ userInfoUrl: config.userInfoEndpoint,
53
+ clientId: config.clientId,
54
+ clientSecret: config.clientSecret,
55
+ redirectUri: config.redirectUri
56
+ };
57
+ this.providers.set(providerId, providerConfig);
58
+ return providerConfig;
59
+ }
60
+ /**
61
+ * Get a registered provider
62
+ */
63
+ getProvider(providerId) {
64
+ return this.providers.get(providerId);
65
+ }
66
+ /**
67
+ * Check if provider is registered
68
+ */
69
+ hasProvider(providerId) {
70
+ return this.providers.has(providerId);
71
+ }
72
+ }
73
+ /**
74
+ * OAuth Profile Parser
75
+ * Extracts user profile data from different OAuth providers
76
+ */
77
+ export class OAuthProfileParser {
78
+ /**
79
+ * Parse Google OAuth profile
80
+ */
81
+ static parseGoogle(data) {
82
+ return {
83
+ id: data.sub || data.id,
84
+ email: data.email,
85
+ name: data.name,
86
+ avatar: data.picture,
87
+ provider: 'google'
88
+ };
89
+ }
90
+ /**
91
+ * Parse GitHub OAuth profile
92
+ */
93
+ static parseGitHub(data) {
94
+ return {
95
+ id: data.id.toString(),
96
+ email: data.email,
97
+ name: data.name,
98
+ avatar: data.avatar_url,
99
+ provider: 'github'
100
+ };
101
+ }
102
+ /**
103
+ * Parse generic OIDC profile
104
+ */
105
+ static parseOIDC(data, provider) {
106
+ return {
107
+ id: data.sub || data.id,
108
+ email: data.email,
109
+ name: data.name,
110
+ avatar: data.picture,
111
+ provider
112
+ };
113
+ }
114
+ }
115
+ /**
116
+ * OAuth Token Manager
117
+ * Handles token exchange and refresh
118
+ */
119
+ export class OAuthTokenManager {
120
+ /**
121
+ * Exchange authorization code for tokens
122
+ */
123
+ static async exchangeCode(_providerConfig, code) {
124
+ try {
125
+ // This will be implemented based on the actual provider config
126
+ // For now, return a placeholder structure
127
+ return {
128
+ accessToken: code,
129
+ expiresIn: 3600,
130
+ tokenType: 'Bearer'
131
+ };
132
+ }
133
+ catch (error) {
134
+ throw new Error(`Failed to exchange authorization code: ${error}`);
135
+ }
136
+ }
137
+ /**
138
+ * Fetch user profile from OAuth provider
139
+ */
140
+ static async fetchUserProfile(provider, accessToken, endpoint) {
141
+ try {
142
+ const response = await fetch(endpoint, {
143
+ headers: {
144
+ Authorization: `Bearer ${accessToken}`,
145
+ 'User-Agent': 'svelte-auth-system'
146
+ }
147
+ });
148
+ if (!response.ok) {
149
+ throw new Error(`Failed to fetch user profile: ${response.statusText}`);
150
+ }
151
+ return await response.json();
152
+ }
153
+ catch (error) {
154
+ throw new Error(`Failed to fetch user profile from ${provider}: ${error}`);
155
+ }
156
+ }
157
+ /**
158
+ * Refresh OAuth token
159
+ */
160
+ static async refreshToken(_providerConfig, refreshToken) {
161
+ try {
162
+ // This will be implemented based on the actual provider config
163
+ // For now, return a placeholder structure
164
+ return {
165
+ accessToken: refreshToken,
166
+ expiresIn: 3600,
167
+ tokenType: 'Bearer'
168
+ };
169
+ }
170
+ catch (error) {
171
+ throw new Error(`Failed to refresh token: ${error}`);
172
+ }
173
+ }
174
+ }
175
+ /**
176
+ * OAuth Configuration Store
177
+ * Manages OAuth provider configurations
178
+ */
179
+ export class OAuthConfigStore {
180
+ constructor() {
181
+ Object.defineProperty(this, "configs", {
182
+ enumerable: true,
183
+ configurable: true,
184
+ writable: true,
185
+ value: new Map()
186
+ });
187
+ }
188
+ /**
189
+ * Register a provider configuration
190
+ */
191
+ registerConfig(providerId, config) {
192
+ this.configs.set(providerId, config);
193
+ }
194
+ /**
195
+ * Get provider configuration
196
+ */
197
+ getConfig(providerId) {
198
+ return this.configs.get(providerId);
199
+ }
200
+ /**
201
+ * Get all registered providers
202
+ */
203
+ getAllProviders() {
204
+ return Array.from(this.configs.keys());
205
+ }
206
+ /**
207
+ * Validate provider configuration
208
+ */
209
+ validateConfig(config) {
210
+ return !!(config.clientId && config.clientSecret && config.redirectUri);
211
+ }
212
+ }
213
+ //# sourceMappingURL=oauth-providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-providers.js","sourceRoot":"","sources":["../src/oauth-providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * OAuth Provider Configuration
3
+ */
4
+ export interface OAuthProviderConfig {
5
+ clientId: string;
6
+ clientSecret: string;
7
+ redirectUri: string;
8
+ }
9
+ /**
10
+ * OAuth User Profile from external provider
11
+ */
12
+ export interface OAuthUserProfile {
13
+ id: string;
14
+ email: string;
15
+ name?: string;
16
+ avatar?: string;
17
+ provider: string;
18
+ }
19
+ /**
20
+ * OAuth Token Response
21
+ */
22
+ export interface OAuthTokenResponse {
23
+ accessToken: string;
24
+ refreshToken?: string;
25
+ expiresIn: number;
26
+ tokenType: string;
27
+ }
28
+ /**
29
+ * OAuth Authorization Code flow response
30
+ */
31
+ export interface OAuthCodeResponse {
32
+ code: string;
33
+ state: string;
34
+ }
35
+ /**
36
+ * OAuth Session (extends regular session with OAuth metadata)
37
+ */
38
+ export interface OAuthSession {
39
+ userId: string;
40
+ email: string;
41
+ provider: string;
42
+ providerUserId: string;
43
+ accessToken: string;
44
+ refreshToken?: string;
45
+ tokenExpiresAt: number;
46
+ createdAt: number;
47
+ expiresAt: number;
48
+ }
49
+ /**
50
+ * User with OAuth provider data
51
+ */
52
+ export interface OAuthUser {
53
+ id: string;
54
+ email: string;
55
+ name?: string;
56
+ avatar?: string;
57
+ passwordHash?: string;
58
+ emailVerified: boolean;
59
+ oauthProviders: {
60
+ provider: string;
61
+ providerUserId: string;
62
+ connectedAt: number;
63
+ }[];
64
+ createdAt: number;
65
+ updatedAt: number;
66
+ }
67
+ /**
68
+ * OAuth callback response
69
+ */
70
+ export interface OAuthCallbackResponse {
71
+ success: boolean;
72
+ message: string;
73
+ user?: OAuthUser;
74
+ session?: OAuthSession;
75
+ error?: string;
76
+ }
77
+ //# sourceMappingURL=oauth-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-types.d.ts","sourceRoot":"","sources":["../src/oauth-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;KACpB,EAAE,CAAC;IACJ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=oauth-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-types.js","sourceRoot":"","sources":["../src/oauth-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Hash a password using bcrypt
3
+ * @param password - Plain text password
4
+ * @returns Hashed password
5
+ */
6
+ export declare function hashPassword(password: string): Promise<string>;
7
+ /**
8
+ * Verify a password against a hash
9
+ * @param password - Plain text password
10
+ * @param hash - Hashed password
11
+ * @returns True if password matches, false otherwise
12
+ */
13
+ export declare function verifyPassword(password: string, hash: string): Promise<boolean>;
14
+ /**
15
+ * Validate password strength
16
+ * Requirements:
17
+ * - At least 8 characters
18
+ * - At least one uppercase letter
19
+ * - At least one lowercase letter
20
+ * - At least one number
21
+ * @param password - Password to validate
22
+ * @returns Error message if invalid, undefined if valid
23
+ */
24
+ export declare function validatePasswordStrength(password: string): string | undefined;
25
+ /**
26
+ * Validate email format
27
+ * @param email - Email to validate
28
+ * @returns True if valid, false otherwise
29
+ */
30
+ export declare function isValidEmail(email: string): boolean;
31
+ //# sourceMappingURL=password.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../src/password.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAErF;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkB7E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGnD"}
@@ -0,0 +1,54 @@
1
+ import * as bcrypt from 'bcryptjs';
2
+ const BCRYPT_ROUNDS = 10;
3
+ /**
4
+ * Hash a password using bcrypt
5
+ * @param password - Plain text password
6
+ * @returns Hashed password
7
+ */
8
+ export async function hashPassword(password) {
9
+ return bcrypt.hash(password, BCRYPT_ROUNDS);
10
+ }
11
+ /**
12
+ * Verify a password against a hash
13
+ * @param password - Plain text password
14
+ * @param hash - Hashed password
15
+ * @returns True if password matches, false otherwise
16
+ */
17
+ export async function verifyPassword(password, hash) {
18
+ return bcrypt.compare(password, hash);
19
+ }
20
+ /**
21
+ * Validate password strength
22
+ * Requirements:
23
+ * - At least 8 characters
24
+ * - At least one uppercase letter
25
+ * - At least one lowercase letter
26
+ * - At least one number
27
+ * @param password - Password to validate
28
+ * @returns Error message if invalid, undefined if valid
29
+ */
30
+ export function validatePasswordStrength(password) {
31
+ if (password.length < 8) {
32
+ return 'Password must be at least 8 characters long';
33
+ }
34
+ if (!/[A-Z]/.test(password)) {
35
+ return 'Password must contain at least one uppercase letter';
36
+ }
37
+ if (!/[a-z]/.test(password)) {
38
+ return 'Password must contain at least one lowercase letter';
39
+ }
40
+ if (!/[0-9]/.test(password)) {
41
+ return 'Password must contain at least one number';
42
+ }
43
+ return undefined;
44
+ }
45
+ /**
46
+ * Validate email format
47
+ * @param email - Email to validate
48
+ * @returns True if valid, false otherwise
49
+ */
50
+ export function isValidEmail(email) {
51
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
52
+ return emailRegex.test(email) && email.length <= 254;
53
+ }
54
+ //# sourceMappingURL=password.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.js","sourceRoot":"","sources":["../src/password.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAEnC,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IAClD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,IAAY;IAClE,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACxD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,6CAA6C,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,qDAAqD,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,qDAAqD,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,2CAA2C,CAAC;IACpD,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACzC,MAAM,UAAU,GAAG,4BAA4B,CAAC;IAChD,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;AACtD,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { OAuthProviderConfig, OAuthUserProfile, OAuthTokenResponse } from '../oauth-types';
2
+ /**
3
+ * GitHub OAuth Configuration
4
+ */
5
+ export interface GitHubOAuthConfig extends OAuthProviderConfig {
6
+ scope?: string[];
7
+ allowSignup?: boolean;
8
+ }
9
+ /**
10
+ * GitHub OAuth Provider
11
+ * Handles GitHub OAuth 2.0 flow
12
+ */
13
+ export declare class GitHubOAuthProvider {
14
+ private clientId;
15
+ private clientSecret;
16
+ private redirectUri;
17
+ private scope;
18
+ private allowSignup;
19
+ private readonly authorizationEndpoint;
20
+ private readonly tokenEndpoint;
21
+ private readonly userinfoEndpoint;
22
+ constructor(config: GitHubOAuthConfig);
23
+ /**
24
+ * Generate authorization URL
25
+ */
26
+ generateAuthorizationUrl(state: string): string;
27
+ /**
28
+ * Exchange authorization code for tokens
29
+ */
30
+ exchangeCode(code: string): Promise<OAuthTokenResponse>;
31
+ /**
32
+ * Fetch user profile from GitHub
33
+ * Also fetches email if not in primary profile
34
+ */
35
+ fetchUserProfile(accessToken: string): Promise<OAuthUserProfile>;
36
+ /**
37
+ * Fetch user email from GitHub emails endpoint
38
+ */
39
+ private fetchUserEmail;
40
+ /**
41
+ * GitHub does not support refresh tokens (token doesn't expire)
42
+ * This method is a no-op but included for API consistency
43
+ */
44
+ refreshAccessToken(accessToken: string): Promise<OAuthTokenResponse>;
45
+ /**
46
+ * Validate authorization code format
47
+ */
48
+ validateAuthorizationCode(code: string): boolean;
49
+ /**
50
+ * Validate access token format
51
+ */
52
+ validateAccessToken(token: string): boolean;
53
+ /**
54
+ * Revoke access token
55
+ */
56
+ revokeAccessToken(accessToken: string): Promise<boolean>;
57
+ }
58
+ //# sourceMappingURL=github-oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-oauth.d.ts","sourceRoot":"","sources":["../../src/providers/github-oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC7D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,WAAW,CAAU;IAE7B,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA8C;IACpF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiD;IAC/E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiC;gBAEtD,MAAM,EAAE,iBAAiB;IAYrC;;OAEG;IACH,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAY/C;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoC7D;;;OAGG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsCtE;;OAEG;YACW,cAAc;IAmC5B;;;OAGG;IACG,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAS1E;;OAEG;IACH,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhD;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI3C;;OAEG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAwB9D"}