@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,230 @@
1
+ /**
2
+ * GitHub OAuth Provider
3
+ * Handles GitHub OAuth 2.0 flow
4
+ */
5
+ export class GitHubOAuthProvider {
6
+ constructor(config) {
7
+ Object.defineProperty(this, "clientId", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: void 0
12
+ });
13
+ Object.defineProperty(this, "clientSecret", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: void 0
18
+ });
19
+ Object.defineProperty(this, "redirectUri", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: void 0
24
+ });
25
+ Object.defineProperty(this, "scope", {
26
+ enumerable: true,
27
+ configurable: true,
28
+ writable: true,
29
+ value: void 0
30
+ });
31
+ Object.defineProperty(this, "allowSignup", {
32
+ enumerable: true,
33
+ configurable: true,
34
+ writable: true,
35
+ value: void 0
36
+ });
37
+ Object.defineProperty(this, "authorizationEndpoint", {
38
+ enumerable: true,
39
+ configurable: true,
40
+ writable: true,
41
+ value: 'https://github.com/login/oauth/authorize'
42
+ });
43
+ Object.defineProperty(this, "tokenEndpoint", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: 'https://github.com/login/oauth/access_token'
48
+ });
49
+ Object.defineProperty(this, "userinfoEndpoint", {
50
+ enumerable: true,
51
+ configurable: true,
52
+ writable: true,
53
+ value: 'https://api.github.com/user'
54
+ });
55
+ if (!config.clientId || !config.clientSecret || !config.redirectUri) {
56
+ throw new Error('GitHub OAuth configuration is missing required fields');
57
+ }
58
+ this.clientId = config.clientId;
59
+ this.clientSecret = config.clientSecret;
60
+ this.redirectUri = config.redirectUri;
61
+ this.scope = config.scope || ['read:user', 'user:email'];
62
+ this.allowSignup = config.allowSignup !== false;
63
+ }
64
+ /**
65
+ * Generate authorization URL
66
+ */
67
+ generateAuthorizationUrl(state) {
68
+ const params = new URLSearchParams({
69
+ client_id: this.clientId,
70
+ redirect_uri: this.redirectUri,
71
+ scope: this.scope.join(' '),
72
+ state,
73
+ allow_signup: this.allowSignup.toString()
74
+ });
75
+ return `${this.authorizationEndpoint}?${params.toString()}`;
76
+ }
77
+ /**
78
+ * Exchange authorization code for tokens
79
+ */
80
+ async exchangeCode(code) {
81
+ try {
82
+ const response = await fetch(this.tokenEndpoint, {
83
+ method: 'POST',
84
+ headers: {
85
+ 'Content-Type': 'application/json',
86
+ Accept: 'application/json'
87
+ },
88
+ body: JSON.stringify({
89
+ code,
90
+ client_id: this.clientId,
91
+ client_secret: this.clientSecret,
92
+ redirect_uri: this.redirectUri
93
+ })
94
+ });
95
+ if (!response.ok) {
96
+ throw new Error(`GitHub token exchange failed: ${response.statusText}`);
97
+ }
98
+ const data = await response.json();
99
+ if (data.error) {
100
+ throw new Error(`GitHub OAuth error: ${data.error}`);
101
+ }
102
+ return {
103
+ accessToken: data.access_token,
104
+ expiresIn: data.expires_in || 28800, // 8 hours default
105
+ tokenType: data.token_type || 'Bearer'
106
+ };
107
+ }
108
+ catch (error) {
109
+ throw new Error(`Failed to exchange GitHub authorization code: ${error}`);
110
+ }
111
+ }
112
+ /**
113
+ * Fetch user profile from GitHub
114
+ * Also fetches email if not in primary profile
115
+ */
116
+ async fetchUserProfile(accessToken) {
117
+ try {
118
+ // Fetch user profile
119
+ const profileResponse = await fetch(this.userinfoEndpoint, {
120
+ headers: {
121
+ Authorization: `Bearer ${accessToken}`,
122
+ 'User-Agent': 'svelte-auth-system'
123
+ }
124
+ });
125
+ if (!profileResponse.ok) {
126
+ throw new Error(`Failed to fetch GitHub user info: ${profileResponse.statusText}`);
127
+ }
128
+ const profileData = await profileResponse.json();
129
+ // If email is not public, fetch from emails endpoint
130
+ let email = profileData.email;
131
+ if (!email) {
132
+ email = await this.fetchUserEmail(accessToken);
133
+ }
134
+ if (!email) {
135
+ throw new Error('Could not retrieve email from GitHub');
136
+ }
137
+ return {
138
+ id: profileData.id.toString(),
139
+ email,
140
+ name: profileData.name,
141
+ avatar: profileData.avatar_url,
142
+ provider: 'github'
143
+ };
144
+ }
145
+ catch (error) {
146
+ throw new Error(`Failed to fetch GitHub user profile: ${error}`);
147
+ }
148
+ }
149
+ /**
150
+ * Fetch user email from GitHub emails endpoint
151
+ */
152
+ async fetchUserEmail(accessToken) {
153
+ try {
154
+ const response = await fetch('https://api.github.com/user/emails', {
155
+ headers: {
156
+ Authorization: `Bearer ${accessToken}`,
157
+ 'User-Agent': 'svelte-auth-system'
158
+ }
159
+ });
160
+ if (!response.ok) {
161
+ return null;
162
+ }
163
+ const emails = await response.json();
164
+ // Find primary email
165
+ const primaryEmail = emails.find((e) => e.primary);
166
+ if (primaryEmail) {
167
+ return primaryEmail.email;
168
+ }
169
+ // Find verified email
170
+ const verifiedEmail = emails.find((e) => e.verified);
171
+ if (verifiedEmail) {
172
+ return verifiedEmail.email;
173
+ }
174
+ // Return first email if available
175
+ return emails[0]?.email || null;
176
+ }
177
+ catch (error) {
178
+ console.error('Failed to fetch GitHub user email:', error);
179
+ return null;
180
+ }
181
+ }
182
+ /**
183
+ * GitHub does not support refresh tokens (token doesn't expire)
184
+ * This method is a no-op but included for API consistency
185
+ */
186
+ async refreshAccessToken(accessToken) {
187
+ // GitHub tokens don't expire, so we just return the same token
188
+ return {
189
+ accessToken,
190
+ expiresIn: 0,
191
+ tokenType: 'Bearer'
192
+ };
193
+ }
194
+ /**
195
+ * Validate authorization code format
196
+ */
197
+ validateAuthorizationCode(code) {
198
+ return !!(code && typeof code === 'string' && code.length > 0);
199
+ }
200
+ /**
201
+ * Validate access token format
202
+ */
203
+ validateAccessToken(token) {
204
+ return !!(token && typeof token === 'string' && token.length > 0);
205
+ }
206
+ /**
207
+ * Revoke access token
208
+ */
209
+ async revokeAccessToken(accessToken) {
210
+ try {
211
+ // GitHub requires basic auth with clientId:clientSecret
212
+ const auth = Buffer.from(`${this.clientId}:${this.clientSecret}`).toString('base64');
213
+ const response = await fetch(`https://api.github.com/applications/${this.clientId}/token`, {
214
+ method: 'DELETE',
215
+ headers: {
216
+ Authorization: `Basic ${auth}`,
217
+ 'User-Agent': 'svelte-auth-system',
218
+ 'Content-Type': 'application/json'
219
+ },
220
+ body: JSON.stringify({ access_token: accessToken })
221
+ });
222
+ return response.ok;
223
+ }
224
+ catch (error) {
225
+ console.error('Failed to revoke GitHub access token:', error);
226
+ return false;
227
+ }
228
+ }
229
+ }
230
+ //# sourceMappingURL=github-oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-oauth.js","sourceRoot":"","sources":["../../src/providers/github-oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { OAuthProviderConfig, OAuthUserProfile, OAuthTokenResponse } from '../oauth-types';
2
+ /**
3
+ * Google OAuth Configuration
4
+ */
5
+ export interface GoogleOAuthConfig extends OAuthProviderConfig {
6
+ scope?: string[];
7
+ }
8
+ /**
9
+ * Google OAuth Provider
10
+ * Handles Google OAuth 2.0 flow
11
+ */
12
+ export declare class GoogleOAuthProvider {
13
+ private clientId;
14
+ private clientSecret;
15
+ private redirectUri;
16
+ private scope;
17
+ private readonly authorizationEndpoint;
18
+ private readonly tokenEndpoint;
19
+ private readonly userinfoEndpoint;
20
+ constructor(config: GoogleOAuthConfig);
21
+ /**
22
+ * Generate authorization URL
23
+ */
24
+ generateAuthorizationUrl(state: string): string;
25
+ /**
26
+ * Exchange authorization code for tokens
27
+ */
28
+ exchangeCode(code: string): Promise<OAuthTokenResponse>;
29
+ /**
30
+ * Fetch user profile from Google
31
+ */
32
+ fetchUserProfile(accessToken: string): Promise<OAuthUserProfile>;
33
+ /**
34
+ * Refresh access token
35
+ */
36
+ refreshAccessToken(refreshToken: string): Promise<OAuthTokenResponse>;
37
+ /**
38
+ * Validate authorization code format
39
+ */
40
+ validateAuthorizationCode(code: string): boolean;
41
+ /**
42
+ * Validate access token format
43
+ */
44
+ validateAccessToken(token: string): boolean;
45
+ }
46
+ //# sourceMappingURL=google-oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-oauth.d.ts","sourceRoot":"","sources":["../../src/providers/google-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;CACjB;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;IAExB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAkD;IACxF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgD;IAC9E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmD;gBAExE,MAAM,EAAE,iBAAiB;IAWrC;;OAEG;IACH,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAc/C;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiC7D;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2BtE;;OAEG;IACG,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAgC3E;;OAEG;IACH,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhD;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAG3C"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Google OAuth Provider
3
+ * Handles Google OAuth 2.0 flow
4
+ */
5
+ export class GoogleOAuthProvider {
6
+ constructor(config) {
7
+ Object.defineProperty(this, "clientId", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: void 0
12
+ });
13
+ Object.defineProperty(this, "clientSecret", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: void 0
18
+ });
19
+ Object.defineProperty(this, "redirectUri", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: void 0
24
+ });
25
+ Object.defineProperty(this, "scope", {
26
+ enumerable: true,
27
+ configurable: true,
28
+ writable: true,
29
+ value: void 0
30
+ });
31
+ Object.defineProperty(this, "authorizationEndpoint", {
32
+ enumerable: true,
33
+ configurable: true,
34
+ writable: true,
35
+ value: 'https://accounts.google.com/o/oauth2/v2/auth'
36
+ });
37
+ Object.defineProperty(this, "tokenEndpoint", {
38
+ enumerable: true,
39
+ configurable: true,
40
+ writable: true,
41
+ value: 'https://www.googleapis.com/oauth2/v4/token'
42
+ });
43
+ Object.defineProperty(this, "userinfoEndpoint", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: 'https://www.googleapis.com/oauth2/v2/userinfo'
48
+ });
49
+ if (!config.clientId || !config.clientSecret || !config.redirectUri) {
50
+ throw new Error('Google OAuth configuration is missing required fields');
51
+ }
52
+ this.clientId = config.clientId;
53
+ this.clientSecret = config.clientSecret;
54
+ this.redirectUri = config.redirectUri;
55
+ this.scope = config.scope || ['openid', 'email', 'profile'];
56
+ }
57
+ /**
58
+ * Generate authorization URL
59
+ */
60
+ generateAuthorizationUrl(state) {
61
+ const params = new URLSearchParams({
62
+ client_id: this.clientId,
63
+ redirect_uri: this.redirectUri,
64
+ response_type: 'code',
65
+ scope: this.scope.join(' '),
66
+ state,
67
+ access_type: 'offline',
68
+ prompt: 'consent'
69
+ });
70
+ return `${this.authorizationEndpoint}?${params.toString()}`;
71
+ }
72
+ /**
73
+ * Exchange authorization code for tokens
74
+ */
75
+ async exchangeCode(code) {
76
+ try {
77
+ const response = await fetch(this.tokenEndpoint, {
78
+ method: 'POST',
79
+ headers: {
80
+ 'Content-Type': 'application/x-www-form-urlencoded'
81
+ },
82
+ body: new URLSearchParams({
83
+ code,
84
+ client_id: this.clientId,
85
+ client_secret: this.clientSecret,
86
+ redirect_uri: this.redirectUri,
87
+ grant_type: 'authorization_code'
88
+ }).toString()
89
+ });
90
+ if (!response.ok) {
91
+ throw new Error(`Google token exchange failed: ${response.statusText}`);
92
+ }
93
+ const data = await response.json();
94
+ return {
95
+ accessToken: data.access_token,
96
+ refreshToken: data.refresh_token,
97
+ expiresIn: data.expires_in || 3600,
98
+ tokenType: data.token_type || 'Bearer'
99
+ };
100
+ }
101
+ catch (error) {
102
+ throw new Error(`Failed to exchange Google authorization code: ${error}`);
103
+ }
104
+ }
105
+ /**
106
+ * Fetch user profile from Google
107
+ */
108
+ async fetchUserProfile(accessToken) {
109
+ try {
110
+ const response = await fetch(this.userinfoEndpoint, {
111
+ headers: {
112
+ Authorization: `Bearer ${accessToken}`,
113
+ 'User-Agent': 'svelte-auth-system'
114
+ }
115
+ });
116
+ if (!response.ok) {
117
+ throw new Error(`Failed to fetch Google user info: ${response.statusText}`);
118
+ }
119
+ const data = await response.json();
120
+ return {
121
+ id: data.id,
122
+ email: data.email,
123
+ name: data.name,
124
+ avatar: data.picture,
125
+ provider: 'google'
126
+ };
127
+ }
128
+ catch (error) {
129
+ throw new Error(`Failed to fetch Google user profile: ${error}`);
130
+ }
131
+ }
132
+ /**
133
+ * Refresh access token
134
+ */
135
+ async refreshAccessToken(refreshToken) {
136
+ try {
137
+ const response = await fetch(this.tokenEndpoint, {
138
+ method: 'POST',
139
+ headers: {
140
+ 'Content-Type': 'application/x-www-form-urlencoded'
141
+ },
142
+ body: new URLSearchParams({
143
+ refresh_token: refreshToken,
144
+ client_id: this.clientId,
145
+ client_secret: this.clientSecret,
146
+ grant_type: 'refresh_token'
147
+ }).toString()
148
+ });
149
+ if (!response.ok) {
150
+ throw new Error(`Google token refresh failed: ${response.statusText}`);
151
+ }
152
+ const data = await response.json();
153
+ return {
154
+ accessToken: data.access_token,
155
+ refreshToken: data.refresh_token || refreshToken,
156
+ expiresIn: data.expires_in || 3600,
157
+ tokenType: data.token_type || 'Bearer'
158
+ };
159
+ }
160
+ catch (error) {
161
+ throw new Error(`Failed to refresh Google access token: ${error}`);
162
+ }
163
+ }
164
+ /**
165
+ * Validate authorization code format
166
+ */
167
+ validateAuthorizationCode(code) {
168
+ return !!(code && typeof code === 'string' && code.length > 0);
169
+ }
170
+ /**
171
+ * Validate access token format
172
+ */
173
+ validateAccessToken(token) {
174
+ return !!(token && typeof token === 'string' && token.length > 0);
175
+ }
176
+ }
177
+ //# sourceMappingURL=google-oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-oauth.js","sourceRoot":"","sources":["../../src/providers/google-oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import type { OAuthProviderConfig, OAuthUserProfile, OAuthTokenResponse } from '../oauth-types';
2
+ /**
3
+ * OIDC Provider Configuration
4
+ */
5
+ export interface OIDCProviderConfig extends OAuthProviderConfig {
6
+ discoveryUrl?: string;
7
+ authorizationEndpoint: string;
8
+ tokenEndpoint: string;
9
+ userInfoEndpoint: string;
10
+ scope?: string[];
11
+ responseType?: string;
12
+ responseMode?: string;
13
+ }
14
+ /**
15
+ * OIDC (OpenID Connect) Provider
16
+ * Handles generic OIDC 1.0 flow
17
+ */
18
+ export declare class OIDCOAuthProvider {
19
+ private clientId;
20
+ private clientSecret;
21
+ private redirectUri;
22
+ private authorizationEndpoint;
23
+ private tokenEndpoint;
24
+ private userInfoEndpoint;
25
+ private scope;
26
+ private responseType;
27
+ private responseMode;
28
+ constructor(config: OIDCProviderConfig);
29
+ /**
30
+ * Discover OIDC endpoints from .well-known/openid-configuration
31
+ */
32
+ static discoverEndpoints(discoveryUrl: string): Promise<{
33
+ authorizationEndpoint: string;
34
+ tokenEndpoint: string;
35
+ userInfoEndpoint: string;
36
+ }>;
37
+ /**
38
+ * Create from discovery URL
39
+ */
40
+ static createFromDiscovery(config: Omit<OIDCProviderConfig, 'authorizationEndpoint' | 'tokenEndpoint' | 'userInfoEndpoint'> & {
41
+ discoveryUrl: string;
42
+ }): Promise<OIDCOAuthProvider>;
43
+ /**
44
+ * Generate authorization URL
45
+ */
46
+ generateAuthorizationUrl(state: string, nonce: string): string;
47
+ /**
48
+ * Exchange authorization code for tokens
49
+ */
50
+ exchangeCode(code: string): Promise<OAuthTokenResponse>;
51
+ /**
52
+ * Fetch user profile from OIDC userinfo endpoint
53
+ */
54
+ fetchUserProfile(accessToken: string): Promise<OAuthUserProfile>;
55
+ /**
56
+ * Refresh access token
57
+ */
58
+ refreshAccessToken(refreshToken: string): Promise<OAuthTokenResponse>;
59
+ /**
60
+ * Validate ID token (basic validation)
61
+ * In production, should use a JWT library to verify signature
62
+ */
63
+ validateIdToken(idToken: string): boolean;
64
+ /**
65
+ * Decode ID token (without validation - for debugging only)
66
+ */
67
+ decodeIdToken(idToken: string): Record<string, any>;
68
+ /**
69
+ * Extract provider name from authorization endpoint
70
+ */
71
+ private extractProviderName;
72
+ /**
73
+ * Validate authorization code format
74
+ */
75
+ validateAuthorizationCode(code: string): boolean;
76
+ /**
77
+ * Validate access token format
78
+ */
79
+ validateAccessToken(token: string): boolean;
80
+ /**
81
+ * Revoke access token
82
+ */
83
+ revokeAccessToken(accessToken: string): Promise<boolean>;
84
+ }
85
+ //# sourceMappingURL=oidc-oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidc-oauth.d.ts","sourceRoot":"","sources":["../../src/providers/oidc-oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,kBAAkB;IAuBtC;;OAEG;WACU,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7D,qBAAqB,EAAE,MAAM,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;KACzB,CAAC;IAoBF;;OAEG;WACU,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,uBAAuB,GAAG,eAAe,GAAG,kBAAkB,CAAC,GAAG;QACnI,YAAY,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAS9B;;OAEG;IACH,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAc9D;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiC7D;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkCtE;;OAEG;IACG,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoC3E;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IASzC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAWnD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;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;CAsB9D"}