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.
Files changed (94) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/README.md +102 -15
  3. package/dist/auth/handler.d.ts +2 -0
  4. package/dist/auth/handler.js +183 -12
  5. package/dist/auth/handler.js.map +1 -1
  6. package/dist/auth/magic-link.d.ts +94 -0
  7. package/dist/auth/magic-link.js +188 -0
  8. package/dist/auth/magic-link.js.map +1 -0
  9. package/dist/auth/utils.d.ts +18 -0
  10. package/dist/auth/utils.js +38 -0
  11. package/dist/auth/utils.js.map +1 -1
  12. package/dist/createMechAuth.d.ts +2 -0
  13. package/dist/createMechAuth.js +2 -0
  14. package/dist/createMechAuth.js.map +1 -1
  15. package/dist/database/providers/d1.d.ts +72 -0
  16. package/dist/database/providers/d1.js +117 -0
  17. package/dist/database/providers/d1.js.map +1 -0
  18. package/dist/database/providers/index.d.ts +18 -0
  19. package/dist/database/providers/index.js +19 -0
  20. package/dist/database/providers/index.js.map +1 -0
  21. package/dist/database/providers/neon.d.ts +41 -0
  22. package/dist/database/providers/neon.js +135 -0
  23. package/dist/database/providers/neon.js.map +1 -0
  24. package/dist/database/providers/planetscale.d.ts +51 -0
  25. package/dist/database/providers/planetscale.js +145 -0
  26. package/dist/database/providers/planetscale.js.map +1 -0
  27. package/dist/database/providers/supabase.d.ts +44 -0
  28. package/dist/database/providers/supabase.js +148 -0
  29. package/dist/database/providers/supabase.js.map +1 -0
  30. package/dist/database/providers/turso.d.ts +45 -0
  31. package/dist/database/providers/turso.js +149 -0
  32. package/dist/database/providers/turso.js.map +1 -0
  33. package/dist/database/schema.d.ts +28 -0
  34. package/dist/database/schema.js +6 -0
  35. package/dist/database/schema.js.map +1 -1
  36. package/dist/edge.d.ts +47 -0
  37. package/dist/edge.js +47 -0
  38. package/dist/edge.js.map +1 -1
  39. package/dist/email/manager.d.ts +26 -0
  40. package/dist/email/manager.js +88 -0
  41. package/dist/email/manager.js.map +1 -0
  42. package/dist/email/providers/postmark.d.ts +17 -0
  43. package/dist/email/providers/postmark.js +42 -0
  44. package/dist/email/providers/postmark.js.map +1 -0
  45. package/dist/email/providers/resend.d.ts +17 -0
  46. package/dist/email/providers/resend.js +40 -0
  47. package/dist/email/providers/resend.js.map +1 -0
  48. package/dist/email/providers/sendgrid.d.ts +20 -0
  49. package/dist/email/providers/sendgrid.js +52 -0
  50. package/dist/email/providers/sendgrid.js.map +1 -0
  51. package/dist/email/templates.d.ts +20 -0
  52. package/dist/email/templates.js +82 -0
  53. package/dist/email/templates.js.map +1 -0
  54. package/dist/index.d.ts +13 -3
  55. package/dist/index.js +15 -3
  56. package/dist/index.js.map +1 -1
  57. package/dist/oauth/apple.d.ts +9 -0
  58. package/dist/oauth/apple.js +36 -0
  59. package/dist/oauth/apple.js.map +1 -0
  60. package/dist/oauth/arctic-providers.d.ts +26 -1
  61. package/dist/oauth/arctic-providers.js +103 -1
  62. package/dist/oauth/arctic-providers.js.map +1 -1
  63. package/dist/oauth/callbacks.d.ts +3 -3
  64. package/dist/oauth/callbacks.js +2 -2
  65. package/dist/oauth/callbacks.js.map +1 -1
  66. package/dist/oauth/discord.d.ts +9 -0
  67. package/dist/oauth/discord.js +40 -0
  68. package/dist/oauth/discord.js.map +1 -0
  69. package/dist/oauth/handler.d.ts +1 -14
  70. package/dist/oauth/handler.js +103 -178
  71. package/dist/oauth/handler.js.map +1 -1
  72. package/dist/oauth/linkedin.d.ts +9 -0
  73. package/dist/oauth/linkedin.js +42 -0
  74. package/dist/oauth/linkedin.js.map +1 -0
  75. package/dist/oauth/meta.d.ts +9 -0
  76. package/dist/oauth/meta.js +40 -0
  77. package/dist/oauth/meta.js.map +1 -0
  78. package/dist/oauth/microsoft.d.ts +10 -0
  79. package/dist/oauth/microsoft.js +38 -0
  80. package/dist/oauth/microsoft.js.map +1 -0
  81. package/dist/password-hasher.d.ts +11 -0
  82. package/dist/password-hasher.js +20 -1
  83. package/dist/password-hasher.js.map +1 -1
  84. package/dist/react.d.ts +2 -0
  85. package/dist/react.js +16 -1
  86. package/dist/react.js.map +1 -1
  87. package/dist/session/validate.d.ts +87 -0
  88. package/dist/session/validate.js +125 -0
  89. package/dist/session/validate.js.map +1 -0
  90. package/dist/types.d.ts +78 -0
  91. package/dist/utils/cookies.d.ts +70 -0
  92. package/dist/utils/cookies.js +90 -0
  93. package/dist/utils/cookies.js.map +1 -0
  94. 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, '&lt;')
10
+ .replace(/>/g, '&gt;')
11
+ .replace(/"/g, '&quot;')
12
+ .replace(/'/g, '&#039;');
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 "./oauth/arctic-providers.js";
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,6BAA6B,CAAA;AAC3C,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAElC,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,cAAc,sBAAsB,CAAA;AAEpC,4CAA4C;AAC5C,cAAc,cAAc,CAAA;AAE5B,YAAY;AACZ,cAAc,iBAAiB,CAAA"}
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;AAGvC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAuB;IAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAA;IAEnE,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAA;IAC9G,CAAC;IAED,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAA;AACxD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAuB;IAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAA;IAEnE,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAA;IAC9G,CAAC;IAED,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAA;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAuB;IAI5D,MAAM,SAAS,GAAyC,EAAE,CAAA;IAE1D,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,SAAS,CAAC,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,SAAS,CAAC,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
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 ('github' or 'google')
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: 'github' | 'google', profile: OAuthUserProfile): Promise<User>;
29
+ export declare function upsertOAuthUser(db: Kysely<Database>, provider: OAuthProvider, profile: OAuthUserProfile): Promise<User>;
30
30
  /**
31
31
  * Create session for user
32
32
  *
@@ -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 ('github' or 'google')
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 === 'github' ? 'github_id' : 'google_id';
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":"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"}
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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * OAuth HTTP Request Handler
3
3
  *
4
- * Handles OAuth-related HTTP requests for GitHub and Google authentication.
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>;