@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.
- package/dist/adapter-context.d.ts +19 -0
- package/dist/adapter-context.d.ts.map +1 -0
- package/dist/adapter-context.js +68 -0
- package/dist/adapter-context.js.map +1 -0
- package/dist/adapters/__tests__/adapter-tests.d.ts +7 -0
- package/dist/adapters/__tests__/adapter-tests.d.ts.map +1 -0
- package/dist/adapters/__tests__/adapter-tests.js +206 -0
- package/dist/adapters/__tests__/adapter-tests.js.map +1 -0
- package/dist/adapters/adapter.d.ts +60 -0
- package/dist/adapters/adapter.d.ts.map +1 -0
- package/dist/adapters/adapter.js +2 -0
- package/dist/adapters/adapter.js.map +1 -0
- package/dist/adapters/filesystem-adapter.d.ts +26 -0
- package/dist/adapters/filesystem-adapter.d.ts.map +1 -0
- package/dist/adapters/filesystem-adapter.js +148 -0
- package/dist/adapters/filesystem-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +6 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +5 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/mongodb-adapter.d.ts +27 -0
- package/dist/adapters/mongodb-adapter.d.ts.map +1 -0
- package/dist/adapters/mongodb-adapter.js +213 -0
- package/dist/adapters/mongodb-adapter.js.map +1 -0
- package/dist/adapters/postgres-adapter.d.ts +30 -0
- package/dist/adapters/postgres-adapter.d.ts.map +1 -0
- package/dist/adapters/postgres-adapter.js +237 -0
- package/dist/adapters/postgres-adapter.js.map +1 -0
- package/dist/adapters/sqlite-adapter.d.ts +26 -0
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-adapter.js +261 -0
- package/dist/adapters/sqlite-adapter.js.map +1 -0
- package/dist/auth.d.ts +48 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +205 -0
- package/dist/auth.js.map +1 -0
- package/dist/client-jwt.d.ts +30 -0
- package/dist/client-jwt.d.ts.map +1 -0
- package/dist/client-jwt.js +57 -0
- package/dist/client-jwt.js.map +1 -0
- package/dist/client-store.d.ts +31 -0
- package/dist/client-store.d.ts.map +1 -0
- package/dist/client-store.js +122 -0
- package/dist/client-store.js.map +1 -0
- package/dist/cors.d.ts +48 -0
- package/dist/cors.d.ts.map +1 -0
- package/dist/cors.js +88 -0
- package/dist/cors.js.map +1 -0
- package/dist/csrf.d.ts +57 -0
- package/dist/csrf.d.ts.map +1 -0
- package/dist/csrf.js +95 -0
- package/dist/csrf.js.map +1 -0
- package/dist/db.d.ts +22 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +43 -0
- package/dist/db.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/input-validation.d.ts +78 -0
- package/dist/input-validation.d.ts.map +1 -0
- package/dist/input-validation.js +238 -0
- package/dist/input-validation.js.map +1 -0
- package/dist/oauth-callback.d.ts +31 -0
- package/dist/oauth-callback.d.ts.map +1 -0
- package/dist/oauth-callback.js +254 -0
- package/dist/oauth-callback.js.map +1 -0
- package/dist/oauth-providers.d.ts +92 -0
- package/dist/oauth-providers.d.ts.map +1 -0
- package/dist/oauth-providers.js +213 -0
- package/dist/oauth-providers.js.map +1 -0
- package/dist/oauth-types.d.ts +77 -0
- package/dist/oauth-types.d.ts.map +1 -0
- package/dist/oauth-types.js +2 -0
- package/dist/oauth-types.js.map +1 -0
- package/dist/password.d.ts +31 -0
- package/dist/password.d.ts.map +1 -0
- package/dist/password.js +54 -0
- package/dist/password.js.map +1 -0
- package/dist/providers/github-oauth.d.ts +58 -0
- package/dist/providers/github-oauth.d.ts.map +1 -0
- package/dist/providers/github-oauth.js +230 -0
- package/dist/providers/github-oauth.js.map +1 -0
- package/dist/providers/google-oauth.d.ts +46 -0
- package/dist/providers/google-oauth.d.ts.map +1 -0
- package/dist/providers/google-oauth.js +177 -0
- package/dist/providers/google-oauth.js.map +1 -0
- package/dist/providers/oidc-oauth.d.ts +85 -0
- package/dist/providers/oidc-oauth.d.ts.map +1 -0
- package/dist/providers/oidc-oauth.js +301 -0
- package/dist/providers/oidc-oauth.js.map +1 -0
- package/dist/rate-limit.d.ts +36 -0
- package/dist/rate-limit.d.ts.map +1 -0
- package/dist/rate-limit.js +88 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/rate-limiting.d.ts +113 -0
- package/dist/rate-limiting.d.ts.map +1 -0
- package/dist/rate-limiting.js +221 -0
- package/dist/rate-limiting.js.map +1 -0
- package/dist/security-headers.d.ts +54 -0
- package/dist/security-headers.d.ts.map +1 -0
- package/dist/security-headers.js +123 -0
- package/dist/security-headers.js.map +1 -0
- package/dist/session.d.ts +13 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +33 -0
- package/dist/session.js.map +1 -0
- package/dist/sql-injection-prevention.d.ts +94 -0
- package/dist/sql-injection-prevention.d.ts.map +1 -0
- package/dist/sql-injection-prevention.js +222 -0
- package/dist/sql-injection-prevention.js.map +1 -0
- package/dist/token.d.ts +22 -0
- package/dist/token.d.ts.map +1 -0
- package/dist/token.js +31 -0
- package/dist/token.js.map +1 -0
- package/dist/types.d.ts +81 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/user.d.ts +33 -0
- package/dist/user.d.ts.map +1 -0
- package/dist/user.js +144 -0
- package/dist/user.js.map +1 -0
- package/package.json +48 -0
- package/src/adapter-context.ts +72 -0
- package/src/adapters/__tests__/adapter-tests.ts +254 -0
- package/src/adapters/__tests__/filesystem-adapter.test.ts +48 -0
- package/src/adapters/__tests__/mongodb-adapter.test.ts +64 -0
- package/src/adapters/__tests__/postgres-adapter.test.ts +62 -0
- package/src/adapters/__tests__/sqlite-adapter.test.ts +103 -0
- package/src/adapters/__tests__/test-fs-adapter.json +4 -0
- package/src/adapters/adapter.ts +72 -0
- package/src/adapters/filesystem-adapter.ts +153 -0
- package/src/adapters/index.ts +5 -0
- package/src/adapters/mongodb-adapter.ts +208 -0
- package/src/adapters/postgres-adapter.ts +261 -0
- package/src/adapters/sqlite-adapter.ts +284 -0
- package/src/auth.ts +239 -0
- package/src/client-jwt.test.ts +137 -0
- package/src/client-jwt.ts +67 -0
- package/src/client-store.test.ts +149 -0
- package/src/client-store.ts +144 -0
- package/src/cors.test.ts +175 -0
- package/src/cors.ts +115 -0
- package/src/csrf.test.ts +226 -0
- package/src/csrf.ts +126 -0
- package/src/db.ts +57 -0
- package/src/index.ts +143 -0
- package/src/input-validation.test.ts +347 -0
- package/src/input-validation.ts +307 -0
- package/src/integration.test.ts +322 -0
- package/src/oauth-callback.test.ts +282 -0
- package/src/oauth-callback.ts +323 -0
- package/src/oauth-providers.ts +232 -0
- package/src/oauth-types.ts +82 -0
- package/src/password.test.ts +89 -0
- package/src/password.ts +62 -0
- package/src/providers/github-oauth.test.ts +290 -0
- package/src/providers/github-oauth.ts +226 -0
- package/src/providers/google-oauth.test.ts +240 -0
- package/src/providers/google-oauth.ts +166 -0
- package/src/providers/oidc-oauth.test.ts +367 -0
- package/src/providers/oidc-oauth.ts +302 -0
- package/src/rate-limit.test.ts +308 -0
- package/src/rate-limit.ts +118 -0
- package/src/rate-limiting.test.ts +390 -0
- package/src/rate-limiting.ts +275 -0
- package/src/security-headers.test.ts +242 -0
- package/src/security-headers.ts +160 -0
- package/src/security-penetration.test.ts +705 -0
- package/src/session.ts +42 -0
- package/src/sql-injection-prevention.test.ts +337 -0
- package/src/sql-injection-prevention.ts +272 -0
- package/src/token.test.ts +67 -0
- package/src/token.ts +34 -0
- package/src/types.ts +87 -0
- 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 @@
|
|
|
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"}
|
package/dist/password.js
ADDED
|
@@ -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"}
|