clearauth 0.3.2 → 0.4.1
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/CHANGELOG.md +93 -0
- package/README.md +102 -15
- package/dist/auth/handler.d.ts +2 -0
- package/dist/auth/handler.js +183 -12
- package/dist/auth/handler.js.map +1 -1
- package/dist/auth/magic-link.d.ts +94 -0
- package/dist/auth/magic-link.js +188 -0
- package/dist/auth/magic-link.js.map +1 -0
- package/dist/auth/utils.d.ts +18 -0
- package/dist/auth/utils.js +38 -0
- package/dist/auth/utils.js.map +1 -1
- package/dist/createMechAuth.d.ts +2 -0
- package/dist/createMechAuth.js +2 -0
- package/dist/createMechAuth.js.map +1 -1
- package/dist/database/providers/d1.d.ts +72 -0
- package/dist/database/providers/d1.js +117 -0
- package/dist/database/providers/d1.js.map +1 -0
- package/dist/database/providers/index.d.ts +18 -0
- package/dist/database/providers/index.js +19 -0
- package/dist/database/providers/index.js.map +1 -0
- package/dist/database/providers/neon.d.ts +41 -0
- package/dist/database/providers/neon.js +135 -0
- package/dist/database/providers/neon.js.map +1 -0
- package/dist/database/providers/planetscale.d.ts +51 -0
- package/dist/database/providers/planetscale.js +145 -0
- package/dist/database/providers/planetscale.js.map +1 -0
- package/dist/database/providers/supabase.d.ts +44 -0
- package/dist/database/providers/supabase.js +148 -0
- package/dist/database/providers/supabase.js.map +1 -0
- package/dist/database/providers/turso.d.ts +45 -0
- package/dist/database/providers/turso.js +149 -0
- package/dist/database/providers/turso.js.map +1 -0
- package/dist/database/schema.d.ts +28 -0
- package/dist/database/schema.js +6 -0
- package/dist/database/schema.js.map +1 -1
- package/dist/edge.d.ts +47 -0
- package/dist/edge.js +47 -0
- package/dist/edge.js.map +1 -1
- package/dist/email/manager.d.ts +26 -0
- package/dist/email/manager.js +88 -0
- package/dist/email/manager.js.map +1 -0
- package/dist/email/providers/postmark.d.ts +17 -0
- package/dist/email/providers/postmark.js +42 -0
- package/dist/email/providers/postmark.js.map +1 -0
- package/dist/email/providers/resend.d.ts +17 -0
- package/dist/email/providers/resend.js +40 -0
- package/dist/email/providers/resend.js.map +1 -0
- package/dist/email/providers/sendgrid.d.ts +20 -0
- package/dist/email/providers/sendgrid.js +52 -0
- package/dist/email/providers/sendgrid.js.map +1 -0
- package/dist/email/templates.d.ts +20 -0
- package/dist/email/templates.js +82 -0
- package/dist/email/templates.js.map +1 -0
- package/dist/index.d.ts +13 -3
- package/dist/index.js +15 -3
- package/dist/index.js.map +1 -1
- package/dist/oauth/apple.d.ts +9 -0
- package/dist/oauth/apple.js +36 -0
- package/dist/oauth/apple.js.map +1 -0
- package/dist/oauth/arctic-providers.d.ts +26 -1
- package/dist/oauth/arctic-providers.js +103 -1
- package/dist/oauth/arctic-providers.js.map +1 -1
- package/dist/oauth/callbacks.d.ts +3 -3
- package/dist/oauth/callbacks.js +2 -2
- package/dist/oauth/callbacks.js.map +1 -1
- package/dist/oauth/discord.d.ts +9 -0
- package/dist/oauth/discord.js +40 -0
- package/dist/oauth/discord.js.map +1 -0
- package/dist/oauth/handler.d.ts +1 -14
- package/dist/oauth/handler.js +103 -178
- package/dist/oauth/handler.js.map +1 -1
- package/dist/oauth/linkedin.d.ts +9 -0
- package/dist/oauth/linkedin.js +42 -0
- package/dist/oauth/linkedin.js.map +1 -0
- package/dist/oauth/meta.d.ts +9 -0
- package/dist/oauth/meta.js +40 -0
- package/dist/oauth/meta.js.map +1 -0
- package/dist/oauth/microsoft.d.ts +10 -0
- package/dist/oauth/microsoft.js +38 -0
- package/dist/oauth/microsoft.js.map +1 -0
- package/dist/password-hasher.d.ts +11 -0
- package/dist/password-hasher.js +20 -1
- package/dist/password-hasher.js.map +1 -1
- package/dist/react.d.ts +2 -0
- package/dist/react.js +16 -1
- package/dist/react.js.map +1 -1
- package/dist/session/validate.d.ts +87 -0
- package/dist/session/validate.js +125 -0
- package/dist/session/validate.js.map +1 -0
- package/dist/types.d.ts +78 -0
- package/dist/utils/cookies.d.ts +70 -0
- package/dist/utils/cookies.js +90 -0
- package/dist/utils/cookies.js.map +1 -0
- package/package.json +18 -2
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SendGrid Email Provider
|
|
3
|
+
*
|
|
4
|
+
* Simple adapter for SendGrid v3 API using fetch for edge compatibility.
|
|
5
|
+
*/
|
|
6
|
+
export class SendGridProvider {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.name = 'sendgrid';
|
|
9
|
+
this.apiKey = options.apiKey;
|
|
10
|
+
this.from = options.from;
|
|
11
|
+
}
|
|
12
|
+
async send(to, subject, html, text) {
|
|
13
|
+
const response = await fetch('https://api.sendgrid.com/v3/mail/send', {
|
|
14
|
+
method: 'POST',
|
|
15
|
+
headers: {
|
|
16
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
17
|
+
'Content-Type': 'application/json'
|
|
18
|
+
},
|
|
19
|
+
body: JSON.stringify({
|
|
20
|
+
personalizations: [
|
|
21
|
+
{
|
|
22
|
+
to: [{ email: to }]
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
from: this.from,
|
|
26
|
+
subject,
|
|
27
|
+
content: [
|
|
28
|
+
{
|
|
29
|
+
type: 'text/plain',
|
|
30
|
+
value: text
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
type: 'text/html',
|
|
34
|
+
value: html
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
})
|
|
38
|
+
});
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
let errorMessage;
|
|
41
|
+
try {
|
|
42
|
+
const error = await response.json();
|
|
43
|
+
errorMessage = JSON.stringify(error);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
errorMessage = await response.text();
|
|
47
|
+
}
|
|
48
|
+
throw new Error(`SendGrid error (${response.status}): ${errorMessage}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=sendgrid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendgrid.js","sourceRoot":"","sources":["../../../src/email/providers/sendgrid.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAK3B,YAAY,OAAwB;QAJ3B,SAAI,GAAG,UAAU,CAAA;QAKxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAU,EAAE,OAAe,EAAE,IAAY,EAAE,IAAY;QAChE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,uCAAuC,EAAE;YACpE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACxC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,gBAAgB,EAAE;oBAChB;wBACE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;qBACpB;iBACF;gBACD,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO;gBACP,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,YAAY;wBAClB,KAAK,EAAE,IAAI;qBACZ;oBACD;wBACE,IAAI,EAAE,WAAW;wBACjB,KAAK,EAAE,IAAI;qBACZ;iBACF;aACF,CAAC;SACH,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,YAAoB,CAAA;YACxB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;gBACnC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YACtC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,MAAM,YAAY,EAAE,CAAC,CAAA;QACzE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard Email Templates for ClearAuth
|
|
3
|
+
*/
|
|
4
|
+
export declare const emailTemplates: {
|
|
5
|
+
verification: {
|
|
6
|
+
subject: (appName: string) => string;
|
|
7
|
+
html: (linkUrl: string, appName: string) => string;
|
|
8
|
+
text: (linkUrl: string, appName: string) => string;
|
|
9
|
+
};
|
|
10
|
+
passwordReset: {
|
|
11
|
+
subject: (appName: string) => string;
|
|
12
|
+
html: (linkUrl: string, appName: string) => string;
|
|
13
|
+
text: (linkUrl: string, appName: string) => string;
|
|
14
|
+
};
|
|
15
|
+
magicLink: {
|
|
16
|
+
subject: (appName: string) => string;
|
|
17
|
+
html: (linkUrl: string, appName: string) => string;
|
|
18
|
+
text: (linkUrl: string, appName: string) => string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML escape utility to prevent XSS in email templates
|
|
3
|
+
* Note: linkUrl is server-generated and trusted, but appName should be escaped
|
|
4
|
+
* if it ever becomes user-configurable.
|
|
5
|
+
*/
|
|
6
|
+
function escapeHtml(unsafe) {
|
|
7
|
+
return unsafe
|
|
8
|
+
.replace(/&/g, '&')
|
|
9
|
+
.replace(/</g, '<')
|
|
10
|
+
.replace(/>/g, '>')
|
|
11
|
+
.replace(/"/g, '"')
|
|
12
|
+
.replace(/'/g, ''');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Standard Email Templates for ClearAuth
|
|
16
|
+
*/
|
|
17
|
+
export const emailTemplates = {
|
|
18
|
+
verification: {
|
|
19
|
+
subject: (appName) => `Verify your email for ${appName}`,
|
|
20
|
+
html: (linkUrl, appName) => {
|
|
21
|
+
const safeAppName = escapeHtml(appName);
|
|
22
|
+
return `
|
|
23
|
+
<h1>Verify your email</h1>
|
|
24
|
+
<p>Thanks for signing up for ${safeAppName}! Please click the link below to verify your email address:</p>
|
|
25
|
+
<p><a href="${linkUrl}">Verify Email</a></p>
|
|
26
|
+
<p>If you didn't request this, you can safely ignore this email.</p>
|
|
27
|
+
`;
|
|
28
|
+
},
|
|
29
|
+
text: (linkUrl, appName) => `
|
|
30
|
+
Verify your email for ${appName}
|
|
31
|
+
|
|
32
|
+
Thanks for signing up for ${appName}! Please click the link below to verify your email address:
|
|
33
|
+
|
|
34
|
+
${linkUrl}
|
|
35
|
+
|
|
36
|
+
If you didn't request this, you can safely ignore this email.
|
|
37
|
+
`
|
|
38
|
+
},
|
|
39
|
+
passwordReset: {
|
|
40
|
+
subject: (appName) => `Reset your password for ${appName}`,
|
|
41
|
+
html: (linkUrl, appName) => {
|
|
42
|
+
const safeAppName = escapeHtml(appName);
|
|
43
|
+
return `
|
|
44
|
+
<h1>Reset your password</h1>
|
|
45
|
+
<p>You requested a password reset for your ${safeAppName} account. Please click the link below to set a new password:</p>
|
|
46
|
+
<p><a href="${linkUrl}">Reset Password</a></p>
|
|
47
|
+
<p>If you didn't request this, you can safely ignore this email.</p>
|
|
48
|
+
`;
|
|
49
|
+
},
|
|
50
|
+
text: (linkUrl, appName) => `
|
|
51
|
+
Reset your password for ${appName}
|
|
52
|
+
|
|
53
|
+
You requested a password reset for your ${appName} account. Please click the link below to set a new password:
|
|
54
|
+
|
|
55
|
+
${linkUrl}
|
|
56
|
+
|
|
57
|
+
If you didn't request this, you can safely ignore this email.
|
|
58
|
+
`
|
|
59
|
+
},
|
|
60
|
+
magicLink: {
|
|
61
|
+
subject: (appName) => `Sign in to ${appName}`,
|
|
62
|
+
html: (linkUrl, appName) => {
|
|
63
|
+
const safeAppName = escapeHtml(appName);
|
|
64
|
+
return `
|
|
65
|
+
<h1>Sign in to ${safeAppName}</h1>
|
|
66
|
+
<p>Click the link below to sign in to your account. This link will expire in 15 minutes.</p>
|
|
67
|
+
<p><a href="${linkUrl}">Sign In</a></p>
|
|
68
|
+
<p>If you didn't request this, you can safely ignore this email.</p>
|
|
69
|
+
`;
|
|
70
|
+
},
|
|
71
|
+
text: (linkUrl, appName) => `
|
|
72
|
+
Sign in to ${appName}
|
|
73
|
+
|
|
74
|
+
Click the link below to sign in to your account. This link will expire in 15 minutes:
|
|
75
|
+
|
|
76
|
+
${linkUrl}
|
|
77
|
+
|
|
78
|
+
If you didn't request this, you can safely ignore this email.
|
|
79
|
+
`
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/email/templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO,MAAM;SACV,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY,EAAE;QACZ,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,yBAAyB,OAAO,EAAE;QAChE,IAAI,EAAE,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE;YACzC,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;YACvC,OAAO;;qCAEwB,WAAW;oBAC5B,OAAO;;KAEtB,CAAA;QACD,CAAC;QACD,IAAI,EAAE,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE,CAAC;8BAClB,OAAO;;kCAEH,OAAO;;QAEjC,OAAO;;;KAGV;KACF;IACD,aAAa,EAAE;QACb,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,2BAA2B,OAAO,EAAE;QAClE,IAAI,EAAE,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE;YACzC,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;YACvC,OAAO;;mDAEsC,WAAW;oBAC1C,OAAO;;KAEtB,CAAA;QACD,CAAC;QACD,IAAI,EAAE,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE,CAAC;gCAChB,OAAO;;gDAES,OAAO;;QAE/C,OAAO;;;KAGV;KACF;IACD,SAAS,EAAE;QACT,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,cAAc,OAAO,EAAE;QACrD,IAAI,EAAE,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE;YACzC,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;YACvC,OAAO;uBACU,WAAW;;oBAEd,OAAO;;KAEtB,CAAA;QACD,CAAC;QACD,IAAI,EAAE,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE,CAAC;mBAC7B,OAAO;;;;QAIlB,OAAO;;;KAGV;KACF;CACF,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,17 +6,27 @@ export * from "./mech-kysely.js";
|
|
|
6
6
|
export * from "./createMechAuth.js";
|
|
7
7
|
export * from "./types.js";
|
|
8
8
|
export * from "./database/schema.js";
|
|
9
|
-
export * from "./
|
|
10
|
-
export * from "./oauth/github.js";
|
|
11
|
-
export * from "./oauth/google.js";
|
|
9
|
+
export * from "./database/providers/index.js";
|
|
12
10
|
export * from "./oauth/callbacks.js";
|
|
13
11
|
export * from "./oauth/handler.js";
|
|
12
|
+
export * from "./oauth/github.js";
|
|
13
|
+
export * from "./oauth/google.js";
|
|
14
|
+
export * from "./oauth/discord.js";
|
|
15
|
+
export * from "./oauth/apple.js";
|
|
16
|
+
export * from "./oauth/microsoft.js";
|
|
17
|
+
export * from "./oauth/linkedin.js";
|
|
18
|
+
export * from "./oauth/meta.js";
|
|
14
19
|
export * from "./auth/utils.js";
|
|
15
20
|
export * from "./auth/register.js";
|
|
16
21
|
export * from "./auth/verify-email.js";
|
|
17
22
|
export * from "./auth/login.js";
|
|
18
23
|
export * from "./auth/reset-password.js";
|
|
19
24
|
export * from "./auth/handler.js";
|
|
25
|
+
export * from "./email/manager.js";
|
|
26
|
+
export * from "./email/templates.js";
|
|
27
|
+
export * from "./email/providers/resend.js";
|
|
28
|
+
export * from "./email/providers/postmark.js";
|
|
29
|
+
export * from "./email/providers/sendgrid.js";
|
|
20
30
|
export * from "./password-hasher.js";
|
|
21
31
|
export * from "./handler.js";
|
|
22
32
|
export * from "./utils/cors.js";
|
package/dist/index.js
CHANGED
|
@@ -7,12 +7,18 @@ export * from "./createMechAuth.js";
|
|
|
7
7
|
// Type definitions
|
|
8
8
|
export * from "./types.js";
|
|
9
9
|
export * from "./database/schema.js";
|
|
10
|
+
// Database providers
|
|
11
|
+
export * from "./database/providers/index.js";
|
|
10
12
|
// OAuth functionality
|
|
11
|
-
export * from "./oauth/arctic-providers.js";
|
|
12
|
-
export * from "./oauth/github.js";
|
|
13
|
-
export * from "./oauth/google.js";
|
|
14
13
|
export * from "./oauth/callbacks.js";
|
|
15
14
|
export * from "./oauth/handler.js";
|
|
15
|
+
export * from "./oauth/github.js";
|
|
16
|
+
export * from "./oauth/google.js";
|
|
17
|
+
export * from "./oauth/discord.js";
|
|
18
|
+
export * from "./oauth/apple.js";
|
|
19
|
+
export * from "./oauth/microsoft.js";
|
|
20
|
+
export * from "./oauth/linkedin.js";
|
|
21
|
+
export * from "./oauth/meta.js";
|
|
16
22
|
// Email/Password authentication
|
|
17
23
|
export * from "./auth/utils.js";
|
|
18
24
|
export * from "./auth/register.js";
|
|
@@ -20,6 +26,12 @@ export * from "./auth/verify-email.js";
|
|
|
20
26
|
export * from "./auth/login.js";
|
|
21
27
|
export * from "./auth/reset-password.js";
|
|
22
28
|
export * from "./auth/handler.js";
|
|
29
|
+
// Email helpers and providers
|
|
30
|
+
export * from "./email/manager.js";
|
|
31
|
+
export * from "./email/templates.js";
|
|
32
|
+
export * from "./email/providers/resend.js";
|
|
33
|
+
export * from "./email/providers/postmark.js";
|
|
34
|
+
export * from "./email/providers/sendgrid.js";
|
|
23
35
|
export * from "./password-hasher.js";
|
|
24
36
|
// Unified handler (recommended entry point)
|
|
25
37
|
export * from "./handler.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AAEnC,mBAAmB;AACnB,cAAc,YAAY,CAAA;AAC1B,cAAc,sBAAsB,CAAA;AAEpC,sBAAsB;AACtB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AAEnC,mBAAmB;AACnB,cAAc,YAAY,CAAA;AAC1B,cAAc,sBAAsB,CAAA;AAEpC,qBAAqB;AACrB,cAAc,+BAA+B,CAAA;AAE7C,sBAAsB;AACtB,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAE/B,gCAAgC;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AAEjC,8BAA8B;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,+BAA+B,CAAA;AAE7C,cAAc,sBAAsB,CAAA;AAEpC,4CAA4C;AAC5C,cAAc,cAAc,CAAA;AAE5B,YAAY;AACZ,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apple OAuth Flow Implementation
|
|
3
|
+
*/
|
|
4
|
+
import type { ClearAuthConfig, OAuthCallbackResult } from '../types.js';
|
|
5
|
+
export declare function generateAppleAuthUrl(config: ClearAuthConfig): Promise<{
|
|
6
|
+
url: URL;
|
|
7
|
+
state: string;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function handleAppleCallback(config: ClearAuthConfig, code: string, storedState: string, returnedState: string): Promise<OAuthCallbackResult>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apple OAuth Flow Implementation
|
|
3
|
+
*/
|
|
4
|
+
import { generateState } from 'arctic';
|
|
5
|
+
import { createAppleProvider } from './arctic-providers.js';
|
|
6
|
+
import { decodeIdToken } from 'arctic';
|
|
7
|
+
export async function generateAppleAuthUrl(config) {
|
|
8
|
+
const apple = createAppleProvider(config);
|
|
9
|
+
const state = generateState();
|
|
10
|
+
const url = apple.createAuthorizationURL(state, ['name', 'email']);
|
|
11
|
+
return { url, state };
|
|
12
|
+
}
|
|
13
|
+
export async function handleAppleCallback(config, code, storedState, returnedState) {
|
|
14
|
+
if (storedState !== returnedState) {
|
|
15
|
+
throw new Error('Invalid OAuth state parameter');
|
|
16
|
+
}
|
|
17
|
+
const apple = createAppleProvider(config);
|
|
18
|
+
const tokens = await apple.validateAuthorizationCode(code);
|
|
19
|
+
const idToken = tokens.idToken();
|
|
20
|
+
// Apple returns user info in the ID token
|
|
21
|
+
const claims = decodeIdToken(idToken);
|
|
22
|
+
// Apple only sends name on first login in a separate 'user' parameter in the POST body.
|
|
23
|
+
// Arctic handles the standard flow, but the caller must provide the name if they want it.
|
|
24
|
+
const profile = {
|
|
25
|
+
id: claims.sub,
|
|
26
|
+
email: claims.email,
|
|
27
|
+
name: claims.name ? `${claims.name.firstName ?? ''} ${claims.name.lastName ?? ''}`.trim() || null : null,
|
|
28
|
+
avatar_url: null,
|
|
29
|
+
email_verified: claims.email_verified === 'true' || claims.email_verified === true
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
profile,
|
|
33
|
+
accessToken: tokens.accessToken()
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=apple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apple.js","sourceRoot":"","sources":["../../src/oauth/apple.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAEtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAEtC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAuB;IAIhE,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACzC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAA;IAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAClE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAuB,EACvB,IAAY,EACZ,WAAmB,EACnB,aAAqB;IAErB,IAAI,WAAW,KAAK,aAAa,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACzC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;IAEhC,0CAA0C;IAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAQnC,CAAA;IAED,wFAAwF;IACxF,0FAA0F;IAC1F,MAAM,OAAO,GAAqB;QAChC,EAAE,EAAE,MAAM,CAAC,GAAG;QACd,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;QACxG,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,MAAM,CAAC,cAAc,KAAK,MAAM,IAAI,MAAM,CAAC,cAAc,KAAK,IAAI;KACnF,CAAA;IAED,OAAO;QACL,OAAO;QACP,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE;KAClC,CAAA;AACH,CAAC"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @see https://arcticjs.dev/
|
|
9
9
|
*/
|
|
10
|
-
import { GitHub, Google } from 'arctic';
|
|
10
|
+
import { GitHub, Google, Discord, Apple, MicrosoftEntraId, LinkedIn, Facebook } from 'arctic';
|
|
11
11
|
import type { ClearAuthConfig } from '../types.js';
|
|
12
12
|
/**
|
|
13
13
|
* Create GitHub OAuth provider instance
|
|
@@ -37,6 +37,26 @@ export declare function createGitHubProvider(config: ClearAuthConfig): GitHub;
|
|
|
37
37
|
* ```
|
|
38
38
|
*/
|
|
39
39
|
export declare function createGoogleProvider(config: ClearAuthConfig): Google;
|
|
40
|
+
/**
|
|
41
|
+
* Create Discord OAuth provider instance
|
|
42
|
+
*/
|
|
43
|
+
export declare function createDiscordProvider(config: ClearAuthConfig): Discord;
|
|
44
|
+
/**
|
|
45
|
+
* Create Apple OAuth provider instance
|
|
46
|
+
*/
|
|
47
|
+
export declare function createAppleProvider(config: ClearAuthConfig): Apple;
|
|
48
|
+
/**
|
|
49
|
+
* Create Microsoft Entra ID OAuth provider instance
|
|
50
|
+
*/
|
|
51
|
+
export declare function createMicrosoftProvider(config: ClearAuthConfig): MicrosoftEntraId;
|
|
52
|
+
/**
|
|
53
|
+
* Create LinkedIn OAuth provider instance
|
|
54
|
+
*/
|
|
55
|
+
export declare function createLinkedInProvider(config: ClearAuthConfig): LinkedIn;
|
|
56
|
+
/**
|
|
57
|
+
* Create Meta (Facebook) OAuth provider instance
|
|
58
|
+
*/
|
|
59
|
+
export declare function createMetaProvider(config: ClearAuthConfig): Facebook;
|
|
40
60
|
/**
|
|
41
61
|
* Get configured OAuth providers
|
|
42
62
|
*
|
|
@@ -57,4 +77,9 @@ export declare function createGoogleProvider(config: ClearAuthConfig): Google;
|
|
|
57
77
|
export declare function getConfiguredProviders(config: ClearAuthConfig): {
|
|
58
78
|
github?: GitHub;
|
|
59
79
|
google?: Google;
|
|
80
|
+
discord?: Discord;
|
|
81
|
+
apple?: Apple;
|
|
82
|
+
microsoft?: MicrosoftEntraId;
|
|
83
|
+
linkedin?: LinkedIn;
|
|
84
|
+
meta?: Facebook;
|
|
60
85
|
};
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @see https://arcticjs.dev/
|
|
9
9
|
*/
|
|
10
|
-
import { GitHub, Google } from 'arctic';
|
|
10
|
+
import { GitHub, Google, Discord, Apple, MicrosoftEntraId, LinkedIn, Facebook } from 'arctic';
|
|
11
11
|
/**
|
|
12
12
|
* Create GitHub OAuth provider instance
|
|
13
13
|
*
|
|
@@ -54,6 +54,68 @@ export function createGoogleProvider(config) {
|
|
|
54
54
|
}
|
|
55
55
|
return new Google(clientId, clientSecret, redirectUri);
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Create Discord OAuth provider instance
|
|
59
|
+
*/
|
|
60
|
+
export function createDiscordProvider(config) {
|
|
61
|
+
if (!config.oauth?.discord) {
|
|
62
|
+
throw new Error('Discord OAuth is not configured');
|
|
63
|
+
}
|
|
64
|
+
const { clientId, clientSecret, redirectUri } = config.oauth.discord;
|
|
65
|
+
if (!clientId || !clientSecret || !redirectUri) {
|
|
66
|
+
throw new Error('Discord OAuth configuration is incomplete');
|
|
67
|
+
}
|
|
68
|
+
return new Discord(clientId, clientSecret, redirectUri);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Create Apple OAuth provider instance
|
|
72
|
+
*/
|
|
73
|
+
export function createAppleProvider(config) {
|
|
74
|
+
if (!config.oauth?.apple) {
|
|
75
|
+
throw new Error('Apple OAuth is not configured');
|
|
76
|
+
}
|
|
77
|
+
const { clientId, teamId, keyId, privateKey, redirectUri } = config.oauth.apple;
|
|
78
|
+
if (!clientId || !teamId || !keyId || !privateKey || !redirectUri) {
|
|
79
|
+
throw new Error('Apple OAuth configuration is incomplete (missing clientId, teamId, keyId, privateKey, or redirectUri)');
|
|
80
|
+
}
|
|
81
|
+
const encoder = new TextEncoder();
|
|
82
|
+
const privateKeyBytes = encoder.encode(privateKey);
|
|
83
|
+
return new Apple(clientId, teamId, keyId, privateKeyBytes, redirectUri);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create Microsoft Entra ID OAuth provider instance
|
|
87
|
+
*/
|
|
88
|
+
export function createMicrosoftProvider(config) {
|
|
89
|
+
if (!config.oauth?.microsoft) {
|
|
90
|
+
throw new Error('Microsoft OAuth is not configured');
|
|
91
|
+
}
|
|
92
|
+
const { clientId, clientSecret, redirectUri } = config.oauth.microsoft;
|
|
93
|
+
const tenantId = config.oauth.microsoft.tenantId ?? 'common';
|
|
94
|
+
return new MicrosoftEntraId(tenantId, clientId, clientSecret, redirectUri);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Create LinkedIn OAuth provider instance
|
|
98
|
+
*/
|
|
99
|
+
export function createLinkedInProvider(config) {
|
|
100
|
+
if (!config.oauth?.linkedin) {
|
|
101
|
+
throw new Error('LinkedIn OAuth is not configured');
|
|
102
|
+
}
|
|
103
|
+
const { clientId, clientSecret, redirectUri } = config.oauth.linkedin;
|
|
104
|
+
return new LinkedIn(clientId, clientSecret, redirectUri);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Create Meta (Facebook) OAuth provider instance
|
|
108
|
+
*/
|
|
109
|
+
export function createMetaProvider(config) {
|
|
110
|
+
if (!config.oauth?.meta) {
|
|
111
|
+
throw new Error('Meta OAuth is not configured');
|
|
112
|
+
}
|
|
113
|
+
const { clientId, clientSecret, redirectUri } = config.oauth.meta;
|
|
114
|
+
if (!clientId || !clientSecret || !redirectUri) {
|
|
115
|
+
throw new Error('Meta OAuth configuration is incomplete');
|
|
116
|
+
}
|
|
117
|
+
return new Facebook(clientId, clientSecret, redirectUri);
|
|
118
|
+
}
|
|
57
119
|
/**
|
|
58
120
|
* Get configured OAuth providers
|
|
59
121
|
*
|
|
@@ -89,6 +151,46 @@ export function getConfiguredProviders(config) {
|
|
|
89
151
|
console.error('Failed to create Google provider:', err);
|
|
90
152
|
}
|
|
91
153
|
}
|
|
154
|
+
if (config.oauth?.discord) {
|
|
155
|
+
try {
|
|
156
|
+
providers.discord = createDiscordProvider(config);
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
console.error('Failed to create Discord provider:', err);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (config.oauth?.apple) {
|
|
163
|
+
try {
|
|
164
|
+
providers.apple = createAppleProvider(config);
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
console.error('Failed to create Apple provider:', err);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (config.oauth?.microsoft) {
|
|
171
|
+
try {
|
|
172
|
+
providers.microsoft = createMicrosoftProvider(config);
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
console.error('Failed to create Microsoft provider:', err);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (config.oauth?.linkedin) {
|
|
179
|
+
try {
|
|
180
|
+
providers.linkedin = createLinkedInProvider(config);
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
console.error('Failed to create LinkedIn provider:', err);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (config.oauth?.meta) {
|
|
187
|
+
try {
|
|
188
|
+
providers.meta = createMetaProvider(config);
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
console.error('Failed to create Meta provider:', err);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
92
194
|
return providers;
|
|
93
195
|
}
|
|
94
196
|
//# sourceMappingURL=arctic-providers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arctic-providers.js","sourceRoot":"","sources":["../../src/oauth/arctic-providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"arctic-providers.js","sourceRoot":"","sources":["../../src/oauth/arctic-providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { Kysely } from 'kysely';
|
|
11
11
|
import type { Database, User } from '../database/schema.js';
|
|
12
|
-
import type { OAuthUserProfile, RequestContext } from '../types.js';
|
|
12
|
+
import type { OAuthUserProfile, RequestContext, OAuthProvider } from '../types.js';
|
|
13
13
|
/**
|
|
14
14
|
* Upsert user from OAuth profile
|
|
15
15
|
*
|
|
@@ -17,7 +17,7 @@ import type { OAuthUserProfile, RequestContext } from '../types.js';
|
|
|
17
17
|
* Uses github_id or google_id column to identify existing users.
|
|
18
18
|
*
|
|
19
19
|
* @param db - Kysely database instance
|
|
20
|
-
* @param provider - OAuth provider name
|
|
20
|
+
* @param provider - OAuth provider name
|
|
21
21
|
* @param profile - Normalized OAuth user profile
|
|
22
22
|
* @returns User record from database
|
|
23
23
|
*
|
|
@@ -26,7 +26,7 @@ import type { OAuthUserProfile, RequestContext } from '../types.js';
|
|
|
26
26
|
* const user = await upsertOAuthUser(db, 'github', profile)
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
|
29
|
-
export declare function upsertOAuthUser(db: Kysely<Database>, provider:
|
|
29
|
+
export declare function upsertOAuthUser(db: Kysely<Database>, provider: OAuthProvider, profile: OAuthUserProfile): Promise<User>;
|
|
30
30
|
/**
|
|
31
31
|
* Create session for user
|
|
32
32
|
*
|
package/dist/oauth/callbacks.js
CHANGED
|
@@ -25,7 +25,7 @@ function generateSessionId(entropySize = 25) {
|
|
|
25
25
|
* Uses github_id or google_id column to identify existing users.
|
|
26
26
|
*
|
|
27
27
|
* @param db - Kysely database instance
|
|
28
|
-
* @param provider - OAuth provider name
|
|
28
|
+
* @param provider - OAuth provider name
|
|
29
29
|
* @param profile - Normalized OAuth user profile
|
|
30
30
|
* @returns User record from database
|
|
31
31
|
*
|
|
@@ -35,7 +35,7 @@ function generateSessionId(entropySize = 25) {
|
|
|
35
35
|
* ```
|
|
36
36
|
*/
|
|
37
37
|
export async function upsertOAuthUser(db, provider, profile) {
|
|
38
|
-
const providerIdColumn = provider
|
|
38
|
+
const providerIdColumn = `${provider}_id`;
|
|
39
39
|
// Check if user exists by provider ID
|
|
40
40
|
const existingUser = await db
|
|
41
41
|
.selectFrom('users')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../../src/oauth/callbacks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAKzC;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,cAAsB,EAAE;IACjD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;IACzC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IAC7B,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AAClD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../../src/oauth/callbacks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discord OAuth Flow Implementation
|
|
3
|
+
*/
|
|
4
|
+
import type { ClearAuthConfig, OAuthCallbackResult } from '../types.js';
|
|
5
|
+
export declare function generateDiscordAuthUrl(config: ClearAuthConfig): Promise<{
|
|
6
|
+
url: URL;
|
|
7
|
+
state: string;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function handleDiscordCallback(config: ClearAuthConfig, code: string, storedState: string, returnedState: string): Promise<OAuthCallbackResult>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discord OAuth Flow Implementation
|
|
3
|
+
*/
|
|
4
|
+
import { generateState } from 'arctic';
|
|
5
|
+
import { createDiscordProvider } from './arctic-providers.js';
|
|
6
|
+
export async function generateDiscordAuthUrl(config) {
|
|
7
|
+
const discord = createDiscordProvider(config);
|
|
8
|
+
const state = generateState();
|
|
9
|
+
const url = discord.createAuthorizationURL(state, null, ['identify', 'email']);
|
|
10
|
+
return { url, state };
|
|
11
|
+
}
|
|
12
|
+
export async function handleDiscordCallback(config, code, storedState, returnedState) {
|
|
13
|
+
if (storedState !== returnedState) {
|
|
14
|
+
throw new Error('Invalid OAuth state parameter');
|
|
15
|
+
}
|
|
16
|
+
const discord = createDiscordProvider(config);
|
|
17
|
+
const tokens = await discord.validateAuthorizationCode(code, null);
|
|
18
|
+
const accessToken = tokens.accessToken();
|
|
19
|
+
const response = await fetch('https://discord.com/api/users/@me', {
|
|
20
|
+
headers: {
|
|
21
|
+
Authorization: `Bearer ${accessToken}`
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
if (!response.ok) {
|
|
25
|
+
throw new Error(`Discord API error: ${response.status}`);
|
|
26
|
+
}
|
|
27
|
+
const user = await response.json();
|
|
28
|
+
if (!user.email || !user.verified) {
|
|
29
|
+
throw new Error('Discord account must have a verified email');
|
|
30
|
+
}
|
|
31
|
+
const profile = {
|
|
32
|
+
id: user.id,
|
|
33
|
+
email: user.email,
|
|
34
|
+
name: user.username,
|
|
35
|
+
avatar_url: user.avatar ? `https://cdn.discordapp.com/avatars/${user.id}/${user.avatar}.png` : null,
|
|
36
|
+
email_verified: user.verified
|
|
37
|
+
};
|
|
38
|
+
return { profile, accessToken };
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=discord.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discord.js","sourceRoot":"","sources":["../../src/oauth/discord.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAU7D,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAuB;IAIlE,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,KAAK,GAAG,aAAa,EAAE,CAAA;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;IAC9E,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAuB,EACvB,IAAY,EACZ,WAAmB,EACnB,aAAqB;IAErB,IAAI,WAAW,KAAK,aAAa,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAClE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;IAExC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,mCAAmC,EAAE;QAChE,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,WAAW,EAAE;SACvC;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,IAAI,GAAgB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAE/C,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC/D,CAAC;IAED,MAAM,OAAO,GAAqB;QAChC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,QAAQ;QACnB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,sCAAsC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,IAAI;QACnG,cAAc,EAAE,IAAI,CAAC,QAAQ;KAC9B,CAAA;IAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;AACjC,CAAC"}
|
package/dist/oauth/handler.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OAuth HTTP Request Handler
|
|
3
3
|
*
|
|
4
|
-
* Handles OAuth-related HTTP requests for
|
|
4
|
+
* Handles OAuth-related HTTP requests for various providers.
|
|
5
5
|
* Provides login initiation and callback handling endpoints.
|
|
6
6
|
*/
|
|
7
7
|
import type { ClearAuthConfig } from '../types.js';
|
|
@@ -14,18 +14,5 @@ import type { ClearAuthConfig } from '../types.js';
|
|
|
14
14
|
* @param request - HTTP request
|
|
15
15
|
* @param config - Clear Auth configuration
|
|
16
16
|
* @returns HTTP response
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```ts
|
|
20
|
-
* export default {
|
|
21
|
-
* async fetch(request: Request, env: Env) {
|
|
22
|
-
* const url = new URL(request.url)
|
|
23
|
-
* if (url.pathname.startsWith('/auth/oauth/')) {
|
|
24
|
-
* return handleOAuthRequest(request, config)
|
|
25
|
-
* }
|
|
26
|
-
* // ... other routes
|
|
27
|
-
* }
|
|
28
|
-
* }
|
|
29
|
-
* ```
|
|
30
17
|
*/
|
|
31
18
|
export declare function handleOAuthRequest(request: Request, config: ClearAuthConfig): Promise<Response>;
|