@better-auth/core 1.7.0-rc.1 → 1.7.0-rc.3

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 (213) hide show
  1. package/dist/api/index.d.mts +28 -28
  2. package/dist/async_hooks/index.d.mts +0 -1
  3. package/dist/async_hooks/pure.index.d.mts +0 -1
  4. package/dist/context/endpoint-context.d.mts +1 -1
  5. package/dist/context/global.d.mts +0 -1
  6. package/dist/context/global.mjs +1 -1
  7. package/dist/context/request-state.d.mts +0 -1
  8. package/dist/context/request-state.mjs +8 -5
  9. package/dist/context/transaction.d.mts +8 -3
  10. package/dist/context/transaction.mjs +27 -10
  11. package/dist/db/adapter/factory.d.mts +3 -5
  12. package/dist/db/adapter/factory.mjs +7 -5
  13. package/dist/db/adapter/get-default-field-name.d.mts +2 -9
  14. package/dist/db/adapter/get-default-model-name.d.mts +1 -5
  15. package/dist/db/adapter/get-default-model-name.mjs +6 -5
  16. package/dist/db/adapter/get-field-attributes.d.mts +4 -11
  17. package/dist/db/adapter/get-field-name.d.mts +2 -9
  18. package/dist/db/adapter/get-id-field.d.mts +4 -12
  19. package/dist/db/adapter/get-model-name.d.mts +1 -5
  20. package/dist/db/adapter/index.d.mts +7 -32
  21. package/dist/db/adapter/types.d.mts +5 -17
  22. package/dist/db/adapter/utils.d.mts +0 -1
  23. package/dist/db/database-index.d.mts +44 -0
  24. package/dist/db/database-index.mjs +168 -0
  25. package/dist/db/get-tables.d.mts +7 -1
  26. package/dist/db/get-tables.mjs +47 -6
  27. package/dist/db/index.d.mts +3 -3
  28. package/dist/db/index.mjs +2 -2
  29. package/dist/db/internal.d.mts +3 -0
  30. package/dist/db/internal.mjs +3 -0
  31. package/dist/db/plugin.d.mts +4 -3
  32. package/dist/db/schema/account.d.mts +16 -3
  33. package/dist/db/schema/account.mjs +35 -2
  34. package/dist/db/schema/rate-limit.d.mts +1 -1
  35. package/dist/db/schema/rate-limit.mjs +9 -0
  36. package/dist/db/schema/session.d.mts +1 -1
  37. package/dist/db/schema/shared.d.mts +0 -1
  38. package/dist/db/schema/user.d.mts +1 -1
  39. package/dist/db/schema/verification.d.mts +1 -1
  40. package/dist/db/type.d.mts +17 -9
  41. package/dist/env/logger.d.mts +25 -25
  42. package/dist/error/codes.d.mts +0 -1
  43. package/dist/error/index.d.mts +0 -1
  44. package/dist/index.d.mts +1 -1
  45. package/dist/instrumentation/attributes.d.mts +0 -1
  46. package/dist/instrumentation/pure.index.d.mts +0 -1
  47. package/dist/instrumentation/tracer.mjs +1 -1
  48. package/dist/oauth2/authorization-params.d.mts +0 -1
  49. package/dist/oauth2/client-assertion.d.mts +3 -13
  50. package/dist/oauth2/client-credentials-token.d.mts +3 -17
  51. package/dist/oauth2/client-credentials-token.mjs +1 -4
  52. package/dist/oauth2/create-authorization-url.d.mts +3 -21
  53. package/dist/oauth2/dpop.d.mts +2 -23
  54. package/dist/oauth2/dpop.mjs +1 -1
  55. package/dist/oauth2/index.d.mts +3 -3
  56. package/dist/oauth2/index.mjs +2 -2
  57. package/dist/oauth2/oauth-provider.d.mts +94 -36
  58. package/dist/oauth2/refresh-access-token.d.mts +3 -19
  59. package/dist/oauth2/refresh-access-token.mjs +3 -9
  60. package/dist/oauth2/reject-redirects.mjs +1 -1
  61. package/dist/oauth2/token-endpoint-auth.d.mts +0 -1
  62. package/dist/oauth2/utils.d.mts +0 -1
  63. package/dist/oauth2/utils.mjs +2 -3
  64. package/dist/oauth2/validate-authorization-code.d.mts +5 -29
  65. package/dist/oauth2/verify-id-token.d.mts +3 -2
  66. package/dist/oauth2/verify-id-token.mjs +3 -3
  67. package/dist/oauth2/verify.d.mts +18 -9
  68. package/dist/oauth2/verify.mjs +68 -5
  69. package/dist/social-providers/apple.d.mts +9 -24
  70. package/dist/social-providers/apple.mjs +2 -1
  71. package/dist/social-providers/atlassian.d.mts +18 -19
  72. package/dist/social-providers/atlassian.mjs +1 -1
  73. package/dist/social-providers/cognito.d.mts +33 -22
  74. package/dist/social-providers/cognito.mjs +2 -2
  75. package/dist/social-providers/discord.d.mts +7 -20
  76. package/dist/social-providers/discord.mjs +1 -1
  77. package/dist/social-providers/dropbox.d.mts +7 -22
  78. package/dist/social-providers/dropbox.mjs +1 -1
  79. package/dist/social-providers/facebook.d.mts +19 -27
  80. package/dist/social-providers/facebook.mjs +6 -17
  81. package/dist/social-providers/figma.d.mts +7 -22
  82. package/dist/social-providers/figma.mjs +1 -1
  83. package/dist/social-providers/github.d.mts +7 -23
  84. package/dist/social-providers/github.mjs +1 -1
  85. package/dist/social-providers/gitlab.d.mts +6 -43
  86. package/dist/social-providers/gitlab.mjs +1 -1
  87. package/dist/social-providers/google.d.mts +10 -32
  88. package/dist/social-providers/google.mjs +2 -1
  89. package/dist/social-providers/huggingface.d.mts +7 -22
  90. package/dist/social-providers/huggingface.mjs +1 -1
  91. package/dist/social-providers/index.d.mts +229 -787
  92. package/dist/social-providers/kakao.d.mts +8 -33
  93. package/dist/social-providers/kakao.mjs +1 -1
  94. package/dist/social-providers/kick.d.mts +7 -22
  95. package/dist/social-providers/kick.mjs +1 -1
  96. package/dist/social-providers/line.d.mts +8 -44
  97. package/dist/social-providers/line.mjs +4 -6
  98. package/dist/social-providers/linear.d.mts +7 -21
  99. package/dist/social-providers/linear.mjs +1 -1
  100. package/dist/social-providers/linkedin.d.mts +7 -21
  101. package/dist/social-providers/linkedin.mjs +1 -1
  102. package/dist/social-providers/microsoft-entra-id.d.mts +8 -18
  103. package/dist/social-providers/microsoft-entra-id.mjs +24 -4
  104. package/dist/social-providers/naver.d.mts +27 -42
  105. package/dist/social-providers/naver.mjs +1 -1
  106. package/dist/social-providers/notion.d.mts +7 -21
  107. package/dist/social-providers/notion.mjs +1 -1
  108. package/dist/social-providers/paybin.d.mts +8 -23
  109. package/dist/social-providers/paybin.mjs +2 -1
  110. package/dist/social-providers/paypal.d.mts +8 -33
  111. package/dist/social-providers/paypal.mjs +1 -1
  112. package/dist/social-providers/polar.d.mts +7 -22
  113. package/dist/social-providers/polar.mjs +1 -1
  114. package/dist/social-providers/railway.d.mts +7 -22
  115. package/dist/social-providers/railway.mjs +1 -1
  116. package/dist/social-providers/reddit.d.mts +7 -20
  117. package/dist/social-providers/reddit.mjs +1 -1
  118. package/dist/social-providers/roblox.d.mts +7 -20
  119. package/dist/social-providers/roblox.mjs +1 -1
  120. package/dist/social-providers/salesforce.d.mts +7 -22
  121. package/dist/social-providers/salesforce.mjs +1 -1
  122. package/dist/social-providers/slack.d.mts +7 -20
  123. package/dist/social-providers/slack.mjs +1 -1
  124. package/dist/social-providers/spotify.d.mts +7 -22
  125. package/dist/social-providers/spotify.mjs +1 -1
  126. package/dist/social-providers/tiktok.d.mts +10 -22
  127. package/dist/social-providers/tiktok.mjs +1 -1
  128. package/dist/social-providers/twitch.d.mts +7 -20
  129. package/dist/social-providers/twitch.mjs +1 -1
  130. package/dist/social-providers/twitter.d.mts +29 -26
  131. package/dist/social-providers/twitter.mjs +1 -1
  132. package/dist/social-providers/vercel.d.mts +7 -22
  133. package/dist/social-providers/vercel.mjs +1 -1
  134. package/dist/social-providers/vk.d.mts +8 -24
  135. package/dist/social-providers/vk.mjs +5 -6
  136. package/dist/social-providers/wechat.d.mts +7 -19
  137. package/dist/social-providers/wechat.mjs +1 -1
  138. package/dist/social-providers/zoom.d.mts +9 -25
  139. package/dist/social-providers/zoom.mjs +1 -1
  140. package/dist/types/context.d.mts +16 -9
  141. package/dist/types/cookie.d.mts +0 -1
  142. package/dist/types/helper.d.mts +1 -1
  143. package/dist/types/index.d.mts +1 -1
  144. package/dist/types/init-options.d.mts +37 -26
  145. package/dist/types/plugin-client.d.mts +1 -3
  146. package/dist/types/plugin.d.mts +2 -2
  147. package/dist/utils/async.d.mts +0 -1
  148. package/dist/utils/db.d.mts +1 -0
  149. package/dist/utils/deprecate.d.mts +0 -1
  150. package/dist/utils/error-codes.d.mts +2 -2
  151. package/dist/utils/host.d.mts +27 -1
  152. package/dist/utils/host.mjs +1 -1
  153. package/dist/utils/ip.d.mts +1 -0
  154. package/dist/utils/ip.mjs +1 -1
  155. package/dist/utils/is-api-error.d.mts +0 -1
  156. package/dist/utils/redirect-uri.d.mts +6 -2
  157. package/dist/utils/redirect-uri.mjs +11 -1
  158. package/package.json +10 -2
  159. package/src/context/request-state.ts +26 -6
  160. package/src/context/transaction.ts +37 -18
  161. package/src/db/adapter/factory.ts +34 -28
  162. package/src/db/adapter/get-default-model-name.ts +23 -14
  163. package/src/db/database-index.ts +351 -0
  164. package/src/db/get-tables.ts +89 -9
  165. package/src/db/index.ts +4 -0
  166. package/src/db/internal.ts +12 -0
  167. package/src/db/plugin.ts +3 -1
  168. package/src/db/schema/account.ts +27 -1
  169. package/src/db/schema/user.ts +1 -1
  170. package/src/db/type.ts +12 -0
  171. package/src/error/codes.ts +1 -0
  172. package/src/oauth2/index.ts +5 -0
  173. package/src/oauth2/oauth-provider.ts +105 -36
  174. package/src/oauth2/verify-id-token.ts +4 -2
  175. package/src/oauth2/verify.ts +121 -12
  176. package/src/social-providers/apple.ts +2 -1
  177. package/src/social-providers/atlassian.ts +1 -1
  178. package/src/social-providers/cognito.ts +2 -2
  179. package/src/social-providers/discord.ts +1 -1
  180. package/src/social-providers/dropbox.ts +1 -1
  181. package/src/social-providers/facebook.ts +21 -28
  182. package/src/social-providers/figma.ts +1 -1
  183. package/src/social-providers/github.ts +1 -1
  184. package/src/social-providers/gitlab.ts +1 -1
  185. package/src/social-providers/google.ts +2 -1
  186. package/src/social-providers/huggingface.ts +1 -1
  187. package/src/social-providers/kakao.ts +1 -1
  188. package/src/social-providers/kick.ts +1 -1
  189. package/src/social-providers/line.ts +7 -12
  190. package/src/social-providers/linear.ts +1 -1
  191. package/src/social-providers/linkedin.ts +1 -1
  192. package/src/social-providers/microsoft-entra-id.ts +36 -27
  193. package/src/social-providers/naver.ts +1 -1
  194. package/src/social-providers/notion.ts +1 -1
  195. package/src/social-providers/paybin.ts +2 -1
  196. package/src/social-providers/paypal.ts +1 -1
  197. package/src/social-providers/polar.ts +1 -1
  198. package/src/social-providers/railway.ts +1 -1
  199. package/src/social-providers/reddit.ts +1 -1
  200. package/src/social-providers/roblox.ts +1 -1
  201. package/src/social-providers/salesforce.ts +1 -1
  202. package/src/social-providers/slack.ts +1 -1
  203. package/src/social-providers/spotify.ts +1 -1
  204. package/src/social-providers/tiktok.ts +2 -2
  205. package/src/social-providers/twitch.ts +1 -1
  206. package/src/social-providers/twitter.ts +1 -1
  207. package/src/social-providers/vercel.ts +1 -1
  208. package/src/social-providers/vk.ts +2 -2
  209. package/src/social-providers/wechat.ts +1 -1
  210. package/src/social-providers/zoom.ts +1 -1
  211. package/src/types/context.ts +21 -14
  212. package/src/types/init-options.ts +15 -14
  213. package/src/utils/redirect-uri.ts +20 -0
@@ -1,4 +1,5 @@
1
- import { OAuth2Tokens, ProviderOptions } from "../oauth2/oauth-provider.mjs";
1
+ import { OAuth2Tokens, OAuth2UserInfo, OAuthAccountKeyContext, ProviderOptions } from "../oauth2/oauth-provider.mjs";
2
+ import "../oauth2/index.mjs";
2
3
  //#region src/social-providers/dropbox.d.ts
3
4
  interface DropboxProfile {
4
5
  account_id: string;
@@ -20,13 +21,8 @@ interface DropboxOptions extends ProviderOptions<DropboxProfile> {
20
21
  declare const dropbox: (options: DropboxOptions) => {
21
22
  id: "dropbox";
22
23
  name: string;
23
- createAuthorizationURL: ({
24
- state,
25
- scopes,
26
- codeVerifier,
27
- redirectURI,
28
- additionalParams
29
- }: {
24
+ accountSubject: ({ profile }: OAuthAccountKeyContext<DropboxProfile>) => string;
25
+ createAuthorizationURL: ({ state, scopes, codeVerifier, redirectURI, additionalParams }: {
30
26
  state: string;
31
27
  codeVerifier: string;
32
28
  scopes?: string[] | undefined;
@@ -36,11 +32,7 @@ declare const dropbox: (options: DropboxOptions) => {
36
32
  idTokenNonce?: string | undefined;
37
33
  additionalParams?: Record<string, string> | undefined;
38
34
  }) => Promise<URL>;
39
- validateAuthorizationCode: ({
40
- code,
41
- codeVerifier,
42
- redirectURI
43
- }: {
35
+ validateAuthorizationCode: ({ code, codeVerifier, redirectURI }: {
44
36
  code: string;
45
37
  redirectURI: string;
46
38
  codeVerifier?: string | undefined;
@@ -57,15 +49,8 @@ declare const dropbox: (options: DropboxOptions) => {
57
49
  email?: string;
58
50
  } | undefined;
59
51
  }): Promise<{
60
- user: {
61
- id: string;
62
- name?: string;
63
- email?: string | null;
64
- image?: string;
65
- emailVerified: boolean;
66
- [key: string]: any;
67
- };
68
- data: any;
52
+ user: OAuth2UserInfo & Record<string, unknown>;
53
+ data: DropboxProfile;
69
54
  } | null>;
70
55
  options: DropboxOptions;
71
56
  };
@@ -8,6 +8,7 @@ const dropbox = (options) => {
8
8
  return {
9
9
  id: "dropbox",
10
10
  name: "Dropbox",
11
+ accountSubject: ({ profile }) => profile.account_id,
11
12
  createAuthorizationURL: async ({ state, scopes, codeVerifier, redirectURI, additionalParams }) => {
12
13
  const _scopes = options.disableDefaultScope ? [] : ["account_info.read"];
13
14
  if (options.scope) _scopes.push(...options.scope);
@@ -56,7 +57,6 @@ const dropbox = (options) => {
56
57
  const userMap = await options.mapProfileToUser?.(profile);
57
58
  return {
58
59
  user: {
59
- id: profile.account_id,
60
60
  name: profile.name?.display_name,
61
61
  email: profile.email,
62
62
  emailVerified: profile.email_verified || false,
@@ -1,8 +1,7 @@
1
- import { OAuth2Tokens, ProviderOptions } from "../oauth2/oauth-provider.mjs";
2
- import * as jose from "jose";
3
-
1
+ import { OAuth2Tokens, OAuth2UserInfo, OAuthAccountKeyContext, ProviderOptions } from "../oauth2/oauth-provider.mjs";
2
+ import "../oauth2/index.mjs";
4
3
  //#region src/social-providers/facebook.d.ts
5
- interface FacebookProfile {
4
+ interface FacebookGraphProfile {
6
5
  id: string;
7
6
  name: string;
8
7
  email?: string;
@@ -16,6 +15,13 @@ interface FacebookProfile {
16
15
  };
17
16
  };
18
17
  }
18
+ interface FacebookLimitedLoginProfile {
19
+ sub: string;
20
+ email: string;
21
+ name: string;
22
+ picture: string;
23
+ }
24
+ type FacebookProfile = FacebookGraphProfile | FacebookLimitedLoginProfile;
19
25
  interface FacebookOptions extends ProviderOptions<FacebookProfile> {
20
26
  clientId: string | string[];
21
27
  /**
@@ -32,13 +38,9 @@ interface FacebookOptions extends ProviderOptions<FacebookProfile> {
32
38
  declare const facebook: (options: FacebookOptions) => {
33
39
  id: "facebook";
34
40
  name: string;
35
- createAuthorizationURL({
36
- state,
37
- scopes,
38
- redirectURI,
39
- loginHint,
40
- additionalParams
41
- }: {
41
+ accountSubject: ({ profile }: OAuthAccountKeyContext<FacebookProfile>) => string;
42
+ accountIssuer: string;
43
+ createAuthorizationURL({ state, scopes, redirectURI, loginHint, additionalParams }: {
42
44
  state: string;
43
45
  codeVerifier: string;
44
46
  scopes?: string[] | undefined;
@@ -48,10 +50,7 @@ declare const facebook: (options: FacebookOptions) => {
48
50
  idTokenNonce?: string | undefined;
49
51
  additionalParams?: Record<string, string> | undefined;
50
52
  }): Promise<URL>;
51
- validateAuthorizationCode: ({
52
- code,
53
- redirectURI
54
- }: {
53
+ validateAuthorizationCode: ({ code, redirectURI }: {
55
54
  code: string;
56
55
  redirectURI: string;
57
56
  codeVerifier?: string | undefined;
@@ -59,12 +58,12 @@ declare const facebook: (options: FacebookOptions) => {
59
58
  }) => Promise<OAuth2Tokens>;
60
59
  idToken: {
61
60
  jwks: {
62
- (protectedHeader?: jose.JWSHeaderParameters, token?: jose.FlattenedJWSInput): Promise<jose.CryptoKey>;
61
+ (protectedHeader?: import("jose").JWSHeaderParameters, token?: import("jose").FlattenedJWSInput): Promise<import("jose").CryptoKey>;
63
62
  coolingDown: boolean;
64
63
  fresh: boolean;
65
64
  reloading: boolean;
66
65
  reload: () => Promise<void>;
67
- jwks: () => jose.JSONWebKeySet | undefined;
66
+ jwks: () => import("jose").JSONWebKeySet | undefined;
68
67
  };
69
68
  issuer: string;
70
69
  audience: string | string[];
@@ -82,17 +81,10 @@ declare const facebook: (options: FacebookOptions) => {
82
81
  email?: string;
83
82
  } | undefined;
84
83
  }): Promise<{
85
- user: {
86
- id: string;
87
- name?: string;
88
- email?: string | null;
89
- image?: string;
90
- emailVerified: boolean;
91
- [key: string]: any;
92
- };
93
- data: any;
84
+ user: OAuth2UserInfo & Record<string, unknown>;
85
+ data: FacebookProfile;
94
86
  } | null>;
95
87
  options: FacebookOptions;
96
88
  };
97
89
  //#endregion
98
- export { FacebookOptions, FacebookProfile, facebook };
90
+ export { FacebookGraphProfile, FacebookLimitedLoginProfile, FacebookOptions, FacebookProfile, facebook };
@@ -39,6 +39,8 @@ const facebook = (options) => {
39
39
  return {
40
40
  id: "facebook",
41
41
  name: "Facebook",
42
+ accountSubject: ({ profile }) => "sub" in profile ? profile.sub : profile.id,
43
+ accountIssuer: "https://www.facebook.com",
42
44
  async createAuthorizationURL({ state, scopes, redirectURI, loginHint, additionalParams }) {
43
45
  if (!getPrimaryClientId(options.clientId) || !options.clientSecret) {
44
46
  logger.error("Client ID and client secret are required for Facebook. Make sure to provide them in the options.");
@@ -91,24 +93,12 @@ const facebook = (options) => {
91
93
  if (options.getUserInfo) return options.getUserInfo(token);
92
94
  if (token.idToken && token.idToken.split(".").length === 3) {
93
95
  const profile = decodeJwt(token.idToken);
94
- const user = {
95
- id: profile.sub,
96
- name: profile.name,
97
- email: profile.email,
98
- picture: { data: {
99
- url: profile.picture,
100
- height: 100,
101
- width: 100,
102
- is_silhouette: false
103
- } }
104
- };
105
- const userMap = await options.mapProfileToUser?.({
106
- ...user,
107
- email_verified: false
108
- });
96
+ const userMap = await options.mapProfileToUser?.(profile);
109
97
  return {
110
98
  user: {
111
- ...user,
99
+ name: profile.name,
100
+ email: profile.email,
101
+ image: profile.picture,
112
102
  emailVerified: false,
113
103
  ...userMap
114
104
  },
@@ -134,7 +124,6 @@ const facebook = (options) => {
134
124
  const userMap = await options.mapProfileToUser?.(profile);
135
125
  return {
136
126
  user: {
137
- id: profile.id,
138
127
  name: profile.name,
139
128
  email: profile.email,
140
129
  image: profile.picture.data.url,
@@ -1,4 +1,5 @@
1
- import { OAuth2Tokens, ProviderOptions } from "../oauth2/oauth-provider.mjs";
1
+ import { OAuth2Tokens, OAuth2UserInfo, OAuthAccountKeyContext, ProviderOptions } from "../oauth2/oauth-provider.mjs";
2
+ import "../oauth2/index.mjs";
2
3
  //#region src/social-providers/figma.d.ts
3
4
  interface FigmaProfile {
4
5
  id: string;
@@ -12,13 +13,8 @@ interface FigmaOptions extends ProviderOptions<FigmaProfile> {
12
13
  declare const figma: (options: FigmaOptions) => {
13
14
  id: "figma";
14
15
  name: string;
15
- createAuthorizationURL({
16
- state,
17
- scopes,
18
- codeVerifier,
19
- redirectURI,
20
- additionalParams
21
- }: {
16
+ accountSubject: ({ profile }: OAuthAccountKeyContext<FigmaProfile>) => string;
17
+ createAuthorizationURL({ state, scopes, codeVerifier, redirectURI, additionalParams }: {
22
18
  state: string;
23
19
  codeVerifier: string;
24
20
  scopes?: string[] | undefined;
@@ -28,11 +24,7 @@ declare const figma: (options: FigmaOptions) => {
28
24
  idTokenNonce?: string | undefined;
29
25
  additionalParams?: Record<string, string> | undefined;
30
26
  }): Promise<URL>;
31
- validateAuthorizationCode: ({
32
- code,
33
- codeVerifier,
34
- redirectURI
35
- }: {
27
+ validateAuthorizationCode: ({ code, codeVerifier, redirectURI }: {
36
28
  code: string;
37
29
  redirectURI: string;
38
30
  codeVerifier?: string | undefined;
@@ -49,15 +41,8 @@ declare const figma: (options: FigmaOptions) => {
49
41
  email?: string;
50
42
  } | undefined;
51
43
  }): Promise<{
52
- user: {
53
- id: string;
54
- name?: string;
55
- email?: string | null;
56
- image?: string;
57
- emailVerified: boolean;
58
- [key: string]: any;
59
- };
60
- data: any;
44
+ user: OAuth2UserInfo & Record<string, unknown>;
45
+ data: FigmaProfile;
61
46
  } | null>;
62
47
  options: FigmaOptions;
63
48
  };
@@ -10,6 +10,7 @@ const figma = (options) => {
10
10
  return {
11
11
  id: "figma",
12
12
  name: "Figma",
13
+ accountSubject: ({ profile }) => profile.id,
13
14
  async createAuthorizationURL({ state, scopes, codeVerifier, redirectURI, additionalParams }) {
14
15
  if (!options.clientId || !options.clientSecret) {
15
16
  logger.error("Client Id and Client Secret are required for Figma. Make sure to provide them in the options.");
@@ -63,7 +64,6 @@ const figma = (options) => {
63
64
  const userMap = await options.mapProfileToUser?.(profile);
64
65
  return {
65
66
  user: {
66
- id: profile.id,
67
67
  name: profile.handle,
68
68
  email: profile.email,
69
69
  image: profile.img_url,
@@ -1,4 +1,5 @@
1
- import { OAuth2Tokens, ProviderOptions } from "../oauth2/oauth-provider.mjs";
1
+ import { OAuth2Tokens, OAuth2UserInfo, OAuthAccountKeyContext, ProviderOptions } from "../oauth2/oauth-provider.mjs";
2
+ import "../oauth2/index.mjs";
2
3
  //#region src/social-providers/github.d.ts
3
4
  interface GithubProfile {
4
5
  login: string;
@@ -52,14 +53,8 @@ interface GithubOptions extends ProviderOptions<GithubProfile> {
52
53
  declare const github: (options: GithubOptions) => {
53
54
  id: "github";
54
55
  name: string;
55
- createAuthorizationURL({
56
- state,
57
- scopes,
58
- loginHint,
59
- codeVerifier,
60
- redirectURI,
61
- additionalParams
62
- }: {
56
+ accountSubject: ({ profile }: OAuthAccountKeyContext<GithubProfile>) => string;
57
+ createAuthorizationURL({ state, scopes, loginHint, codeVerifier, redirectURI, additionalParams }: {
63
58
  state: string;
64
59
  codeVerifier: string;
65
60
  scopes?: string[] | undefined;
@@ -69,11 +64,7 @@ declare const github: (options: GithubOptions) => {
69
64
  idTokenNonce?: string | undefined;
70
65
  additionalParams?: Record<string, string> | undefined;
71
66
  }): Promise<URL>;
72
- validateAuthorizationCode: ({
73
- code,
74
- codeVerifier,
75
- redirectURI
76
- }: {
67
+ validateAuthorizationCode: ({ code, codeVerifier, redirectURI }: {
77
68
  code: string;
78
69
  redirectURI: string;
79
70
  codeVerifier?: string | undefined;
@@ -90,15 +81,8 @@ declare const github: (options: GithubOptions) => {
90
81
  email?: string;
91
82
  } | undefined;
92
83
  }): Promise<{
93
- user: {
94
- id: string;
95
- name?: string;
96
- email?: string | null;
97
- image?: string;
98
- emailVerified: boolean;
99
- [key: string]: any;
100
- };
101
- data: any;
84
+ user: OAuth2UserInfo & Record<string, unknown>;
85
+ data: GithubProfile;
102
86
  } | null>;
103
87
  options: GithubOptions;
104
88
  };
@@ -10,6 +10,7 @@ const github = (options) => {
10
10
  return {
11
11
  id: "github",
12
12
  name: "GitHub",
13
+ accountSubject: ({ profile }) => profile.id,
13
14
  createAuthorizationURL({ state, scopes, loginHint, codeVerifier, redirectURI, additionalParams }) {
14
15
  const _scopes = options.disableDefaultScope ? [] : ["read:user", "user:email"];
15
16
  if (options.scope) _scopes.push(...options.scope);
@@ -76,7 +77,6 @@ const github = (options) => {
76
77
  const userMap = await options.mapProfileToUser?.(profile);
77
78
  return {
78
79
  user: {
79
- id: profile.id,
80
80
  name: profile.name || profile.login || "",
81
81
  email: profile.email,
82
82
  image: profile.avatar_url,
@@ -1,4 +1,5 @@
1
- import { OAuth2Tokens, ProviderOptions } from "../oauth2/oauth-provider.mjs";
1
+ import { OAuth2Tokens, OAuth2UserInfo, OAuthAccountKeyContext, ProviderOptions } from "../oauth2/oauth-provider.mjs";
2
+ import "../oauth2/index.mjs";
2
3
  //#region src/social-providers/gitlab.d.ts
3
4
  interface GitlabProfile extends Record<string, any> {
4
5
  id: number;
@@ -52,14 +53,8 @@ interface GitlabOptions extends ProviderOptions<GitlabProfile> {
52
53
  declare const gitlab: (options: GitlabOptions) => {
53
54
  id: "gitlab";
54
55
  name: string;
55
- createAuthorizationURL: ({
56
- state,
57
- scopes,
58
- codeVerifier,
59
- loginHint,
60
- redirectURI,
61
- additionalParams
62
- }: {
56
+ accountSubject: ({ profile }: OAuthAccountKeyContext<GitlabProfile>) => number;
57
+ createAuthorizationURL: ({ state, scopes, codeVerifier, loginHint, redirectURI, additionalParams }: {
63
58
  state: string;
64
59
  codeVerifier: string;
65
60
  scopes?: string[] | undefined;
@@ -69,11 +64,7 @@ declare const gitlab: (options: GitlabOptions) => {
69
64
  idTokenNonce?: string | undefined;
70
65
  additionalParams?: Record<string, string> | undefined;
71
66
  }) => Promise<URL>;
72
- validateAuthorizationCode: ({
73
- code,
74
- redirectURI,
75
- codeVerifier
76
- }: {
67
+ validateAuthorizationCode: ({ code, redirectURI, codeVerifier }: {
77
68
  code: string;
78
69
  redirectURI: string;
79
70
  codeVerifier?: string | undefined;
@@ -90,35 +81,7 @@ declare const gitlab: (options: GitlabOptions) => {
90
81
  email?: string;
91
82
  } | undefined;
92
83
  }): Promise<{
93
- user: {
94
- id: string;
95
- name?: string;
96
- email?: string | null;
97
- image?: string;
98
- emailVerified: boolean;
99
- [key: string]: any;
100
- };
101
- data: any;
102
- } | {
103
- user: {
104
- id: number;
105
- name: string;
106
- email: string;
107
- image: string;
108
- emailVerified: boolean;
109
- } | {
110
- id: string | number;
111
- name: string;
112
- email: string | null;
113
- image: string;
114
- emailVerified: boolean;
115
- } | {
116
- id: string | number;
117
- name: string;
118
- email: string | null;
119
- image: string;
120
- emailVerified: boolean;
121
- };
84
+ user: OAuth2UserInfo & Record<string, unknown>;
122
85
  data: GitlabProfile;
123
86
  } | null>;
124
87
  options: GitlabOptions;
@@ -20,6 +20,7 @@ const gitlab = (options) => {
20
20
  return {
21
21
  id: issuerId,
22
22
  name: "Gitlab",
23
+ accountSubject: ({ profile }) => profile.id,
23
24
  createAuthorizationURL: async ({ state, scopes, codeVerifier, loginHint, redirectURI, additionalParams }) => {
24
25
  const _scopes = options.disableDefaultScope ? [] : ["read_user"];
25
26
  if (options.scope) _scopes.push(...options.scope);
@@ -63,7 +64,6 @@ const gitlab = (options) => {
63
64
  const userMap = await options.mapProfileToUser?.(profile);
64
65
  return {
65
66
  user: {
66
- id: profile.id,
67
67
  name: profile.name ?? profile.username ?? "",
68
68
  email: profile.email,
69
69
  image: profile.avatar_url,
@@ -1,7 +1,6 @@
1
- import { OAuth2Tokens, ProviderOptions } from "../oauth2/oauth-provider.mjs";
2
- import * as jose from "jose";
1
+ import { OAuth2Tokens, OAuth2UserInfo, OAuthAccountKeyContext, ProviderOptions } from "../oauth2/oauth-provider.mjs";
2
+ import "../oauth2/index.mjs";
3
3
  import { JWTPayload } from "jose";
4
-
5
4
  //#region src/social-providers/google.d.ts
6
5
  interface GoogleProfile {
7
6
  aud: string;
@@ -69,11 +68,7 @@ interface VerifyGoogleIdTokenOptions {
69
68
  * Verifies a Google ID token against Google's issuer, audience, signature,
70
69
  * expiry, and maximum token age.
71
70
  */
72
- declare const verifyGoogleIdToken: ({
73
- token,
74
- audience,
75
- nonce
76
- }: VerifyGoogleIdTokenOptions) => Promise<JWTPayload | null>;
71
+ declare const verifyGoogleIdToken: ({ token, audience, nonce }: VerifyGoogleIdTokenOptions) => Promise<JWTPayload | null>;
77
72
  /**
78
73
  * Checks whether Google's verified `hd` claim satisfies the configured hosted
79
74
  * domain restriction. `hd: "*"` accepts any Google Workspace hosted domain.
@@ -82,15 +77,9 @@ declare const isGoogleHostedDomainAllowed: (configuredHostedDomain: string | und
82
77
  declare const google: (options: GoogleOptions) => {
83
78
  id: "google";
84
79
  name: string;
85
- createAuthorizationURL({
86
- state,
87
- scopes,
88
- codeVerifier,
89
- redirectURI,
90
- loginHint,
91
- display,
92
- additionalParams
93
- }: {
80
+ accountSubject: ({ profile }: OAuthAccountKeyContext<GoogleProfile>) => string;
81
+ accountIssuer: string;
82
+ createAuthorizationURL({ state, scopes, codeVerifier, redirectURI, loginHint, display, additionalParams }: {
94
83
  state: string;
95
84
  codeVerifier: string;
96
85
  scopes?: string[] | undefined;
@@ -100,11 +89,7 @@ declare const google: (options: GoogleOptions) => {
100
89
  idTokenNonce?: string | undefined;
101
90
  additionalParams?: Record<string, string> | undefined;
102
91
  }): Promise<URL>;
103
- validateAuthorizationCode: ({
104
- code,
105
- codeVerifier,
106
- redirectURI
107
- }: {
92
+ validateAuthorizationCode: ({ code, codeVerifier, redirectURI }: {
108
93
  code: string;
109
94
  redirectURI: string;
110
95
  codeVerifier?: string | undefined;
@@ -112,7 +97,7 @@ declare const google: (options: GoogleOptions) => {
112
97
  }) => Promise<OAuth2Tokens>;
113
98
  refreshAccessToken: (refreshToken: string) => Promise<OAuth2Tokens>;
114
99
  idToken: {
115
- jwks: (header: jose.JWTHeaderParameters) => Promise<Uint8Array<ArrayBufferLike> | CryptoKey>;
100
+ jwks: (header: import("jose").JWTHeaderParameters) => Promise<Uint8Array<ArrayBufferLike> | CryptoKey>;
116
101
  issuer: string[];
117
102
  audience: string | string[];
118
103
  maxTokenAge: string;
@@ -128,15 +113,8 @@ declare const google: (options: GoogleOptions) => {
128
113
  email?: string;
129
114
  } | undefined;
130
115
  }): Promise<{
131
- user: {
132
- id: string;
133
- name?: string;
134
- email?: string | null;
135
- image?: string;
136
- emailVerified: boolean;
137
- [key: string]: any;
138
- };
139
- data: any;
116
+ user: OAuth2UserInfo & Record<string, unknown>;
117
+ data: GoogleProfile;
140
118
  } | null>;
141
119
  options: GoogleOptions;
142
120
  };
@@ -53,6 +53,8 @@ const google = (options) => {
53
53
  return {
54
54
  id: "google",
55
55
  name: "Google",
56
+ accountSubject: ({ profile }) => profile.sub,
57
+ accountIssuer: "https://accounts.google.com",
56
58
  async createAuthorizationURL({ state, scopes, codeVerifier, redirectURI, loginHint, display, additionalParams }) {
57
59
  if (!getPrimaryClientId(options.clientId) || !options.clientSecret) {
58
60
  logger.error("Client Id and Client Secret is required for Google. Make sure to provide them in the options.");
@@ -123,7 +125,6 @@ const google = (options) => {
123
125
  const userMap = await options.mapProfileToUser?.(user);
124
126
  return {
125
127
  user: {
126
- id: user.sub,
127
128
  name: user.name,
128
129
  email: user.email,
129
130
  image: user.picture,
@@ -1,4 +1,5 @@
1
- import { OAuth2Tokens, ProviderOptions } from "../oauth2/oauth-provider.mjs";
1
+ import { OAuth2Tokens, OAuth2UserInfo, OAuthAccountKeyContext, ProviderOptions } from "../oauth2/oauth-provider.mjs";
2
+ import "../oauth2/index.mjs";
2
3
  //#region src/social-providers/huggingface.d.ts
3
4
  interface HuggingFaceProfile {
4
5
  sub: string;
@@ -34,13 +35,8 @@ interface HuggingFaceOptions extends ProviderOptions<HuggingFaceProfile> {
34
35
  declare const huggingface: (options: HuggingFaceOptions) => {
35
36
  id: "huggingface";
36
37
  name: string;
37
- createAuthorizationURL({
38
- state,
39
- scopes,
40
- codeVerifier,
41
- redirectURI,
42
- additionalParams
43
- }: {
38
+ accountSubject: ({ profile }: OAuthAccountKeyContext<HuggingFaceProfile>) => string;
39
+ createAuthorizationURL({ state, scopes, codeVerifier, redirectURI, additionalParams }: {
44
40
  state: string;
45
41
  codeVerifier: string;
46
42
  scopes?: string[] | undefined;
@@ -50,11 +46,7 @@ declare const huggingface: (options: HuggingFaceOptions) => {
50
46
  idTokenNonce?: string | undefined;
51
47
  additionalParams?: Record<string, string> | undefined;
52
48
  }): Promise<URL>;
53
- validateAuthorizationCode: ({
54
- code,
55
- codeVerifier,
56
- redirectURI
57
- }: {
49
+ validateAuthorizationCode: ({ code, codeVerifier, redirectURI }: {
58
50
  code: string;
59
51
  redirectURI: string;
60
52
  codeVerifier?: string | undefined;
@@ -71,15 +63,8 @@ declare const huggingface: (options: HuggingFaceOptions) => {
71
63
  email?: string;
72
64
  } | undefined;
73
65
  }): Promise<{
74
- user: {
75
- id: string;
76
- name?: string;
77
- email?: string | null;
78
- image?: string;
79
- emailVerified: boolean;
80
- [key: string]: any;
81
- };
82
- data: any;
66
+ user: OAuth2UserInfo & Record<string, unknown>;
67
+ data: HuggingFaceProfile;
83
68
  } | null>;
84
69
  options: HuggingFaceOptions;
85
70
  };
@@ -8,6 +8,7 @@ const huggingface = (options) => {
8
8
  return {
9
9
  id: "huggingface",
10
10
  name: "Hugging Face",
11
+ accountSubject: ({ profile }) => profile.sub,
11
12
  createAuthorizationURL({ state, scopes, codeVerifier, redirectURI, additionalParams }) {
12
13
  const _scopes = options.disableDefaultScope ? [] : [
13
14
  "openid",
@@ -57,7 +58,6 @@ const huggingface = (options) => {
57
58
  const userMap = await options.mapProfileToUser?.(profile);
58
59
  return {
59
60
  user: {
60
- id: profile.sub,
61
61
  name: profile.name || profile.preferred_username || "",
62
62
  email: profile.email,
63
63
  image: profile.picture,