@draftlab/auth 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/dist/esm/allow.js +26 -0
  2. package/dist/esm/client.js +254 -0
  3. package/dist/esm/core.js +597 -0
  4. package/dist/esm/css.d.js +0 -0
  5. package/dist/esm/error.js +88 -0
  6. package/dist/esm/index.js +5 -0
  7. package/dist/esm/keys.js +126 -0
  8. package/dist/esm/mutex.js +53 -0
  9. package/dist/esm/pkce.js +87 -0
  10. package/dist/esm/provider/apple.js +15 -0
  11. package/dist/esm/provider/code.js +62 -0
  12. package/dist/esm/provider/discord.js +15 -0
  13. package/dist/esm/provider/facebook.js +15 -0
  14. package/dist/esm/provider/github.js +15 -0
  15. package/dist/esm/provider/gitlab.js +15 -0
  16. package/dist/esm/provider/google.js +16 -0
  17. package/dist/esm/provider/linkedin.js +15 -0
  18. package/dist/esm/provider/magiclink.js +83 -0
  19. package/dist/esm/provider/microsoft.js +15 -0
  20. package/dist/esm/provider/oauth2.js +130 -0
  21. package/dist/esm/provider/password.js +331 -0
  22. package/dist/esm/provider/provider.js +18 -0
  23. package/dist/esm/provider/reddit.js +15 -0
  24. package/dist/esm/provider/slack.js +15 -0
  25. package/dist/esm/provider/spotify.js +15 -0
  26. package/dist/esm/provider/twitch.js +15 -0
  27. package/dist/esm/provider/vercel.js +17 -0
  28. package/dist/esm/random.js +40 -0
  29. package/dist/esm/revocation.js +27 -0
  30. package/dist/esm/storage/memory.js +110 -0
  31. package/dist/esm/storage/storage.js +56 -0
  32. package/dist/esm/storage/turso.js +93 -0
  33. package/dist/esm/storage/unstorage.js +78 -0
  34. package/dist/esm/subject.js +7 -0
  35. package/dist/esm/themes/theme.js +115 -0
  36. package/dist/esm/toolkit/client.js +119 -0
  37. package/dist/esm/toolkit/index.js +25 -0
  38. package/dist/esm/toolkit/providers/facebook.js +11 -0
  39. package/dist/esm/toolkit/providers/github.js +11 -0
  40. package/dist/esm/toolkit/providers/google.js +11 -0
  41. package/dist/esm/toolkit/providers/strategy.js +0 -0
  42. package/dist/esm/toolkit/storage.js +81 -0
  43. package/dist/esm/toolkit/utils.js +18 -0
  44. package/dist/esm/types.js +0 -0
  45. package/dist/esm/ui/base.js +478 -0
  46. package/dist/esm/ui/code.js +186 -0
  47. package/dist/esm/ui/form.js +46 -0
  48. package/dist/esm/ui/icon.js +242 -0
  49. package/dist/esm/ui/magiclink.js +158 -0
  50. package/dist/esm/ui/password.js +435 -0
  51. package/dist/esm/ui/select.js +102 -0
  52. package/dist/esm/util.js +59 -0
  53. package/dist/{allow.d.mts → types/allow.d.ts} +9 -11
  54. package/dist/types/allow.d.ts.map +1 -0
  55. package/dist/types/client.d.ts +462 -0
  56. package/dist/types/client.d.ts.map +1 -0
  57. package/dist/types/core.d.ts +113 -0
  58. package/dist/types/core.d.ts.map +1 -0
  59. package/dist/{error.d.mts → types/error.d.ts} +95 -97
  60. package/dist/types/error.d.ts.map +1 -0
  61. package/dist/types/index.d.ts +2 -0
  62. package/dist/types/index.d.ts.map +1 -0
  63. package/dist/{keys.d.mts → types/keys.d.ts} +20 -24
  64. package/dist/types/keys.d.ts.map +1 -0
  65. package/dist/types/mutex.d.ts +42 -0
  66. package/dist/types/mutex.d.ts.map +1 -0
  67. package/dist/{pkce.d.mts → types/pkce.d.ts} +10 -11
  68. package/dist/types/pkce.d.ts.map +1 -0
  69. package/dist/types/provider/apple.d.ts +197 -0
  70. package/dist/types/provider/apple.d.ts.map +1 -0
  71. package/dist/types/provider/code.d.ts +288 -0
  72. package/dist/types/provider/code.d.ts.map +1 -0
  73. package/dist/types/provider/discord.d.ts +206 -0
  74. package/dist/types/provider/discord.d.ts.map +1 -0
  75. package/dist/types/provider/facebook.d.ts +200 -0
  76. package/dist/types/provider/facebook.d.ts.map +1 -0
  77. package/dist/types/provider/github.d.ts +220 -0
  78. package/dist/types/provider/github.d.ts.map +1 -0
  79. package/dist/types/provider/gitlab.d.ts +180 -0
  80. package/dist/types/provider/gitlab.d.ts.map +1 -0
  81. package/dist/types/provider/google.d.ts +158 -0
  82. package/dist/types/provider/google.d.ts.map +1 -0
  83. package/dist/types/provider/linkedin.d.ts +190 -0
  84. package/dist/types/provider/linkedin.d.ts.map +1 -0
  85. package/dist/types/provider/magiclink.d.ts +141 -0
  86. package/dist/types/provider/magiclink.d.ts.map +1 -0
  87. package/dist/types/provider/microsoft.d.ts +247 -0
  88. package/dist/types/provider/microsoft.d.ts.map +1 -0
  89. package/dist/types/provider/oauth2.d.ts +229 -0
  90. package/dist/types/provider/oauth2.d.ts.map +1 -0
  91. package/dist/types/provider/password.d.ts +408 -0
  92. package/dist/types/provider/password.d.ts.map +1 -0
  93. package/dist/types/provider/provider.d.ts +226 -0
  94. package/dist/types/provider/provider.d.ts.map +1 -0
  95. package/dist/types/provider/reddit.d.ts +159 -0
  96. package/dist/types/provider/reddit.d.ts.map +1 -0
  97. package/dist/types/provider/slack.d.ts +171 -0
  98. package/dist/types/provider/slack.d.ts.map +1 -0
  99. package/dist/types/provider/spotify.d.ts +168 -0
  100. package/dist/types/provider/spotify.d.ts.map +1 -0
  101. package/dist/types/provider/twitch.d.ts +163 -0
  102. package/dist/types/provider/twitch.d.ts.map +1 -0
  103. package/dist/types/provider/vercel.d.ts +294 -0
  104. package/dist/types/provider/vercel.d.ts.map +1 -0
  105. package/dist/{random.d.mts → types/random.d.ts} +4 -6
  106. package/dist/types/random.d.ts.map +1 -0
  107. package/dist/types/revocation.d.ts +76 -0
  108. package/dist/types/revocation.d.ts.map +1 -0
  109. package/dist/{storage/memory.d.mts → types/storage/memory.d.ts} +17 -21
  110. package/dist/types/storage/memory.d.ts.map +1 -0
  111. package/dist/types/storage/storage.d.ts +177 -0
  112. package/dist/types/storage/storage.d.ts.map +1 -0
  113. package/dist/{storage/turso.d.mts → types/storage/turso.d.ts} +4 -8
  114. package/dist/types/storage/turso.d.ts.map +1 -0
  115. package/dist/{storage/unstorage.d.mts → types/storage/unstorage.d.ts} +12 -11
  116. package/dist/types/storage/unstorage.d.ts.map +1 -0
  117. package/dist/types/subject.d.ts +115 -0
  118. package/dist/types/subject.d.ts.map +1 -0
  119. package/dist/types/themes/theme.d.ts +207 -0
  120. package/dist/types/themes/theme.d.ts.map +1 -0
  121. package/dist/types/toolkit/client.d.ts +235 -0
  122. package/dist/types/toolkit/client.d.ts.map +1 -0
  123. package/dist/types/toolkit/index.d.ts +45 -0
  124. package/dist/types/toolkit/index.d.ts.map +1 -0
  125. package/dist/types/toolkit/providers/facebook.d.ts +8 -0
  126. package/dist/types/toolkit/providers/facebook.d.ts.map +1 -0
  127. package/dist/types/toolkit/providers/github.d.ts +8 -0
  128. package/dist/types/toolkit/providers/github.d.ts.map +1 -0
  129. package/dist/types/toolkit/providers/google.d.ts +8 -0
  130. package/dist/types/toolkit/providers/google.d.ts.map +1 -0
  131. package/dist/types/toolkit/providers/strategy.d.ts +38 -0
  132. package/dist/types/toolkit/providers/strategy.d.ts.map +1 -0
  133. package/dist/{toolkit/storage.d.mts → types/toolkit/storage.d.ts} +37 -39
  134. package/dist/types/toolkit/storage.d.ts.map +1 -0
  135. package/dist/{toolkit/utils.d.mts → types/toolkit/utils.d.ts} +2 -4
  136. package/dist/types/toolkit/utils.d.ts.map +1 -0
  137. package/dist/types/types.d.ts +92 -0
  138. package/dist/types/types.d.ts.map +1 -0
  139. package/dist/types/ui/base.d.ts +18 -0
  140. package/dist/types/ui/base.d.ts.map +1 -0
  141. package/dist/types/ui/code.d.ts +43 -0
  142. package/dist/types/ui/code.d.ts.map +1 -0
  143. package/dist/types/ui/form.d.ts +24 -0
  144. package/dist/types/ui/form.d.ts.map +1 -0
  145. package/dist/types/ui/icon.d.ts +60 -0
  146. package/dist/types/ui/icon.d.ts.map +1 -0
  147. package/dist/types/ui/magiclink.d.ts +41 -0
  148. package/dist/types/ui/magiclink.d.ts.map +1 -0
  149. package/dist/types/ui/password.d.ts +43 -0
  150. package/dist/types/ui/password.d.ts.map +1 -0
  151. package/dist/types/ui/select.d.ts +33 -0
  152. package/dist/types/ui/select.d.ts.map +1 -0
  153. package/dist/{util.d.mts → types/util.d.ts} +11 -13
  154. package/dist/types/util.d.ts.map +1 -0
  155. package/package.json +10 -16
  156. package/dist/adapters/node.d.mts +0 -18
  157. package/dist/adapters/node.mjs +0 -69
  158. package/dist/allow.mjs +0 -63
  159. package/dist/client.d.mts +0 -456
  160. package/dist/client.mjs +0 -283
  161. package/dist/core.d.mts +0 -110
  162. package/dist/core.mjs +0 -595
  163. package/dist/error.mjs +0 -237
  164. package/dist/index.d.mts +0 -2
  165. package/dist/index.mjs +0 -3
  166. package/dist/keys.mjs +0 -146
  167. package/dist/mutex.d.mts +0 -44
  168. package/dist/mutex.mjs +0 -110
  169. package/dist/pkce.mjs +0 -157
  170. package/dist/provider/apple.d.mts +0 -111
  171. package/dist/provider/apple.mjs +0 -164
  172. package/dist/provider/code.d.mts +0 -228
  173. package/dist/provider/code.mjs +0 -246
  174. package/dist/provider/discord.d.mts +0 -146
  175. package/dist/provider/discord.mjs +0 -156
  176. package/dist/provider/facebook.d.mts +0 -142
  177. package/dist/provider/facebook.mjs +0 -150
  178. package/dist/provider/github.d.mts +0 -140
  179. package/dist/provider/github.mjs +0 -169
  180. package/dist/provider/gitlab.d.mts +0 -106
  181. package/dist/provider/gitlab.mjs +0 -147
  182. package/dist/provider/google.d.mts +0 -112
  183. package/dist/provider/google.mjs +0 -109
  184. package/dist/provider/linkedin.d.mts +0 -132
  185. package/dist/provider/linkedin.mjs +0 -142
  186. package/dist/provider/magiclink.d.mts +0 -89
  187. package/dist/provider/magiclink.mjs +0 -143
  188. package/dist/provider/microsoft.d.mts +0 -178
  189. package/dist/provider/microsoft.mjs +0 -177
  190. package/dist/provider/oauth2.d.mts +0 -176
  191. package/dist/provider/oauth2.mjs +0 -222
  192. package/dist/provider/passkey.d.mts +0 -104
  193. package/dist/provider/passkey.mjs +0 -320
  194. package/dist/provider/password.d.mts +0 -412
  195. package/dist/provider/password.mjs +0 -363
  196. package/dist/provider/provider.d.mts +0 -227
  197. package/dist/provider/provider.mjs +0 -44
  198. package/dist/provider/reddit.d.mts +0 -107
  199. package/dist/provider/reddit.mjs +0 -127
  200. package/dist/provider/slack.d.mts +0 -114
  201. package/dist/provider/slack.mjs +0 -138
  202. package/dist/provider/spotify.d.mts +0 -113
  203. package/dist/provider/spotify.mjs +0 -135
  204. package/dist/provider/totp.d.mts +0 -112
  205. package/dist/provider/totp.mjs +0 -191
  206. package/dist/provider/twitch.d.mts +0 -108
  207. package/dist/provider/twitch.mjs +0 -131
  208. package/dist/provider/vercel.d.mts +0 -177
  209. package/dist/provider/vercel.mjs +0 -230
  210. package/dist/random.mjs +0 -86
  211. package/dist/revocation.d.mts +0 -55
  212. package/dist/revocation.mjs +0 -63
  213. package/dist/router/context.d.mts +0 -21
  214. package/dist/router/context.mjs +0 -193
  215. package/dist/router/cookies.d.mts +0 -8
  216. package/dist/router/cookies.mjs +0 -13
  217. package/dist/router/index.d.mts +0 -21
  218. package/dist/router/index.mjs +0 -107
  219. package/dist/router/matcher.d.mts +0 -15
  220. package/dist/router/matcher.mjs +0 -76
  221. package/dist/router/middleware/cors.d.mts +0 -15
  222. package/dist/router/middleware/cors.mjs +0 -114
  223. package/dist/router/safe-request.d.mts +0 -52
  224. package/dist/router/safe-request.mjs +0 -160
  225. package/dist/router/types.d.mts +0 -67
  226. package/dist/router/types.mjs +0 -1
  227. package/dist/router/variables.d.mts +0 -12
  228. package/dist/router/variables.mjs +0 -20
  229. package/dist/storage/memory.mjs +0 -125
  230. package/dist/storage/storage.d.mts +0 -179
  231. package/dist/storage/storage.mjs +0 -104
  232. package/dist/storage/turso.mjs +0 -117
  233. package/dist/storage/unstorage.mjs +0 -103
  234. package/dist/subject.d.mts +0 -62
  235. package/dist/subject.mjs +0 -36
  236. package/dist/themes/theme.d.mts +0 -209
  237. package/dist/themes/theme.mjs +0 -120
  238. package/dist/toolkit/client.d.mts +0 -169
  239. package/dist/toolkit/client.mjs +0 -209
  240. package/dist/toolkit/index.d.mts +0 -9
  241. package/dist/toolkit/index.mjs +0 -9
  242. package/dist/toolkit/providers/facebook.d.mts +0 -12
  243. package/dist/toolkit/providers/facebook.mjs +0 -16
  244. package/dist/toolkit/providers/github.d.mts +0 -12
  245. package/dist/toolkit/providers/github.mjs +0 -16
  246. package/dist/toolkit/providers/google.d.mts +0 -12
  247. package/dist/toolkit/providers/google.mjs +0 -20
  248. package/dist/toolkit/providers/strategy.d.mts +0 -40
  249. package/dist/toolkit/providers/strategy.mjs +0 -1
  250. package/dist/toolkit/storage.mjs +0 -157
  251. package/dist/toolkit/utils.mjs +0 -30
  252. package/dist/types.d.mts +0 -94
  253. package/dist/types.mjs +0 -1
  254. package/dist/ui/base.d.mts +0 -30
  255. package/dist/ui/base.mjs +0 -407
  256. package/dist/ui/code.d.mts +0 -43
  257. package/dist/ui/code.mjs +0 -173
  258. package/dist/ui/form.d.mts +0 -32
  259. package/dist/ui/form.mjs +0 -49
  260. package/dist/ui/icon.d.mts +0 -58
  261. package/dist/ui/icon.mjs +0 -247
  262. package/dist/ui/magiclink.d.mts +0 -41
  263. package/dist/ui/magiclink.mjs +0 -152
  264. package/dist/ui/passkey.d.mts +0 -27
  265. package/dist/ui/passkey.mjs +0 -323
  266. package/dist/ui/password.d.mts +0 -42
  267. package/dist/ui/password.mjs +0 -402
  268. package/dist/ui/select.d.mts +0 -34
  269. package/dist/ui/select.mjs +0 -98
  270. package/dist/ui/totp.d.mts +0 -34
  271. package/dist/ui/totp.mjs +0 -270
  272. package/dist/util.mjs +0 -128
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facebook.d.ts","sourceRoot":"","sources":["../../../src/provider/facebook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnE;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IAC1D;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IAEzB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAE7B;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;IAEzB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsEG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,cAAc,qEAStD,CAAA"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * GitHub authentication provider for Draft Auth.
3
+ * Implements OAuth 2.0 flow for authenticating users with their GitHub accounts.
4
+ *
5
+ * ## Quick Setup
6
+ *
7
+ * ```ts
8
+ * import { GithubProvider } from "@draftlab/auth/provider/github"
9
+ *
10
+ * export default issuer({
11
+ * basePath: "/auth", // Important for callback URL
12
+ * providers: {
13
+ * github: GithubProvider({
14
+ * clientID: process.env.GITHUB_CLIENT_ID,
15
+ * clientSecret: process.env.GITHUB_CLIENT_SECRET,
16
+ * scopes: ["user:email", "read:user"]
17
+ * })
18
+ * }
19
+ * })
20
+ * ```
21
+ *
22
+ * **Callback URL Pattern**: `{baseURL}{basePath}/{provider}/callback`
23
+ * - Development: `http://localhost:3000/auth/github/callback`
24
+ * - Production: `https://yourapp.com/auth/github/callback`
25
+ *
26
+ * Register this URL in your GitHub App/OAuth App settings.
27
+ *
28
+ * ## GitHub App vs OAuth App
29
+ *
30
+ * This provider works with both GitHub OAuth Apps and GitHub Apps:
31
+ *
32
+ * ### OAuth App (Recommended for user authentication)
33
+ * ```ts
34
+ * GithubProvider({
35
+ * clientID: "your-oauth-app-client-id",
36
+ * clientSecret: "your-oauth-app-client-secret",
37
+ * scopes: ["user:email", "read:user"]
38
+ * })
39
+ * ```
40
+ *
41
+ * ### GitHub App (For organization-level integrations)
42
+ * ```ts
43
+ * GithubProvider({
44
+ * clientID: "your-github-app-client-id",
45
+ * clientSecret: "your-github-app-client-secret",
46
+ * scopes: ["user:email", "read:user", "repo"]
47
+ * })
48
+ * ```
49
+ *
50
+ * ## Common Scopes
51
+ *
52
+ * - `user:email` - Access user's email addresses
53
+ * - `read:user` - Read user profile information
54
+ * - `repo` - Access public and private repositories
55
+ * - `public_repo` - Access public repositories only
56
+ * - `read:org` - Read organization membership
57
+ * - `gist` - Create and update gists
58
+ *
59
+ * ## User Data Access
60
+ *
61
+ * ```ts
62
+ * success: async (ctx, value) => {
63
+ * if (value.provider === "github") {
64
+ * const accessToken = value.tokenset.access
65
+ *
66
+ * // Fetch user information
67
+ * const userResponse = await fetch('https://api.github.com/user', {
68
+ * headers: { Authorization: `Bearer ${accessToken}` }
69
+ * })
70
+ * const user = await userResponse.json()
71
+ *
72
+ * // Fetch user emails (requires user:email scope)
73
+ * const emailsResponse = await fetch('https://api.github.com/user/emails', {
74
+ * headers: { Authorization: `Bearer ${accessToken}` }
75
+ * })
76
+ * const emails = await emailsResponse.json()
77
+ *
78
+ * // User info: `${user.login} (${user.name})`
79
+ * // Primary email: emails.find(e => e.primary)?.email
80
+ * }
81
+ * }
82
+ * ```
83
+ *
84
+ * @packageDocumentation
85
+ */
86
+ import { type Oauth2WrappedConfig } from "./oauth2";
87
+ /**
88
+ * Configuration options for GitHub OAuth 2.0 provider.
89
+ * Extends the base OAuth 2.0 configuration with GitHub-specific documentation.
90
+ */
91
+ export interface GithubConfig extends Oauth2WrappedConfig {
92
+ /**
93
+ * GitHub OAuth App client ID or GitHub App client ID.
94
+ * Found in your GitHub App settings or OAuth App settings.
95
+ *
96
+ * @example
97
+ * ```ts
98
+ * {
99
+ * clientID: "Iv1.a629723000043722" // OAuth App
100
+ * // or
101
+ * clientID: "Iv23liAG5t7VwMkUsKTi" // GitHub App
102
+ * }
103
+ * ```
104
+ */
105
+ readonly clientID: string;
106
+ /**
107
+ * GitHub OAuth App client secret or GitHub App client secret.
108
+ * Keep this secure and never expose it to client-side code.
109
+ *
110
+ * @example
111
+ * ```ts
112
+ * {
113
+ * clientSecret: process.env.GITHUB_CLIENT_SECRET
114
+ * }
115
+ * ```
116
+ */
117
+ readonly clientSecret: string;
118
+ /**
119
+ * GitHub OAuth scopes to request access for.
120
+ * Determines what data and actions your app can access.
121
+ *
122
+ * @example
123
+ * ```ts
124
+ * {
125
+ * scopes: [
126
+ * "user:email", // Access user email addresses
127
+ * "read:user", // Read user profile info
128
+ * "public_repo", // Access public repositories
129
+ * "read:org" // Read organization membership
130
+ * ]
131
+ * }
132
+ * ```
133
+ */
134
+ readonly scopes: string[];
135
+ /**
136
+ * Additional query parameters for GitHub OAuth authorization.
137
+ * Useful for GitHub-specific options like restricting to organizations.
138
+ *
139
+ * @example
140
+ * ```ts
141
+ * {
142
+ * query: {
143
+ * allow_signup: "false", // Disable new account creation
144
+ * login: "suggested-username" // Pre-fill username field
145
+ * }
146
+ * }
147
+ * ```
148
+ */
149
+ readonly query?: Record<string, string>;
150
+ }
151
+ /**
152
+ * Creates a GitHub OAuth 2.0 authentication provider.
153
+ * Supports both GitHub OAuth Apps and GitHub Apps for user authentication.
154
+ *
155
+ * @param config - GitHub OAuth 2.0 configuration
156
+ * @returns OAuth 2.0 provider configured for GitHub
157
+ *
158
+ * @example
159
+ * ```ts
160
+ * // Basic GitHub authentication
161
+ * const basicGithub = GithubProvider({
162
+ * clientID: process.env.GITHUB_CLIENT_ID,
163
+ * clientSecret: process.env.GITHUB_CLIENT_SECRET
164
+ * })
165
+ *
166
+ * // GitHub with specific scopes
167
+ * const githubWithScopes = GithubProvider({
168
+ * clientID: process.env.GITHUB_CLIENT_ID,
169
+ * clientSecret: process.env.GITHUB_CLIENT_SECRET,
170
+ * scopes: [
171
+ * "user:email",
172
+ * "read:user",
173
+ * "public_repo",
174
+ * "read:org"
175
+ * ]
176
+ * })
177
+ *
178
+ * // GitHub with custom authorization options
179
+ * const restrictedGithub = GithubProvider({
180
+ * clientID: process.env.GITHUB_CLIENT_ID,
181
+ * clientSecret: process.env.GITHUB_CLIENT_SECRET,
182
+ * scopes: ["user:email", "read:user"],
183
+ * query: {
184
+ * allow_signup: "false" // Don't allow new GitHub account creation
185
+ * }
186
+ * })
187
+ *
188
+ * // Using the access token to fetch data
189
+ * export default issuer({
190
+ * providers: { github: githubWithScopes },
191
+ * success: async (ctx, value) => {
192
+ * if (value.provider === "github") {
193
+ * const token = value.tokenset.access
194
+ *
195
+ * // Get user profile
196
+ * const userRes = await fetch('https://api.github.com/user', {
197
+ * headers: { Authorization: `Bearer ${token}` }
198
+ * })
199
+ * const user = await userRes.json()
200
+ *
201
+ * // Get user repositories (if repo scope granted)
202
+ * const reposRes = await fetch('https://api.github.com/user/repos', {
203
+ * headers: { Authorization: `Bearer ${token}` }
204
+ * })
205
+ * const repos = await reposRes.json()
206
+ *
207
+ * return ctx.subject("user", {
208
+ * githubId: user.id,
209
+ * username: user.login,
210
+ * email: user.email,
211
+ * name: user.name,
212
+ * repoCount: repos.length
213
+ * })
214
+ * }
215
+ * }
216
+ * })
217
+ * ```
218
+ */
219
+ export declare const GithubProvider: (config: GithubConfig) => import("./provider").Provider<import("./oauth2").Oauth2UserData>;
220
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/provider/github.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AAEH,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnE;;;GAGG;AACH,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACxD;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IAEzB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAE7B;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;IAEzB;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,YAAY,qEASlD,CAAA"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * GitLab authentication provider for Draft Auth.
3
+ * Implements OAuth 2.0 flow for authenticating users with their GitLab accounts.
4
+ *
5
+ * ## Quick Setup
6
+ *
7
+ * ```ts
8
+ * import { GitlabProvider } from "@draftlab/auth/provider/gitlab"
9
+ *
10
+ * export default issuer({
11
+ * basePath: "/auth", // Important for callback URL
12
+ * providers: {
13
+ * gitlab: GitlabProvider({
14
+ * clientID: process.env.GITLAB_CLIENT_ID,
15
+ * clientSecret: process.env.GITLAB_CLIENT_SECRET,
16
+ * scopes: ["read_user", "read_api"]
17
+ * })
18
+ * }
19
+ * })
20
+ * ```
21
+ *
22
+ * **Callback URL Pattern**: `{baseURL}{basePath}/{provider}/callback`
23
+ * - Development: `http://localhost:3000/auth/gitlab/callback`
24
+ * - Production: `https://yourapp.com/auth/gitlab/callback`
25
+ *
26
+ * Register this URL in your GitLab Application settings.
27
+ *
28
+ * ## Common Scopes
29
+ *
30
+ * - `read_user` - Access user profile
31
+ * - `read_api` - Read-access to the API
32
+ * - `read_repository` - Access to project repositories
33
+ * - `write_repository` - Write access to repositories
34
+ * - `api` - Full API access
35
+ * - `read_user_email` - Access user email
36
+ *
37
+ * ## Self-Hosted GitLab
38
+ *
39
+ * For self-hosted GitLab instances, you can override the endpoint URLs:
40
+ *
41
+ * ```ts
42
+ * const selfHostedGitlab = Oauth2Provider({
43
+ * clientID: process.env.GITLAB_CLIENT_ID,
44
+ * clientSecret: process.env.GITLAB_CLIENT_SECRET,
45
+ * scopes: ["read_user"],
46
+ * type: "gitlab",
47
+ * endpoint: {
48
+ * authorization: "https://your-gitlab.com/oauth/authorize",
49
+ * token: "https://your-gitlab.com/oauth/token"
50
+ * }
51
+ * })
52
+ * ```
53
+ *
54
+ * **Callback URL Pattern**: `{baseURL}{basePath}/{provider}/callback`
55
+ * - Development: `http://localhost:3000/auth/gitlab/callback`
56
+ * - Production: `https://yourapp.com/auth/gitlab/callback`
57
+ *
58
+ * Register this URL in your GitLab Application settings.
59
+ *
60
+ * ## User Data Access
61
+ *
62
+ * ```ts
63
+ * success: async (ctx, value) => {
64
+ * if (value.provider === "gitlab") {
65
+ * const accessToken = value.tokenset.access
66
+ *
67
+ * // Fetch user information
68
+ * const userResponse = await fetch('https://gitlab.com/api/v4/user', {
69
+ * headers: { Authorization: `Bearer ${accessToken}` }
70
+ * })
71
+ * const user = await userResponse.json()
72
+ *
73
+ * // User info: id, username, email, name, avatar_url
74
+ * }
75
+ * }
76
+ * ```
77
+ *
78
+ * @packageDocumentation
79
+ */
80
+ import { type Oauth2WrappedConfig } from "./oauth2";
81
+ /**
82
+ * Configuration options for GitLab OAuth 2.0 provider.
83
+ * Extends the base OAuth 2.0 configuration with GitLab-specific documentation.
84
+ */
85
+ export interface GitlabConfig extends Oauth2WrappedConfig {
86
+ /**
87
+ * GitLab application client ID.
88
+ * Get this from your GitLab application settings.
89
+ *
90
+ * @example
91
+ * ```ts
92
+ * {
93
+ * clientID: "abcdef123456"
94
+ * }
95
+ * ```
96
+ */
97
+ readonly clientID: string;
98
+ /**
99
+ * GitLab application client secret.
100
+ * Keep this secure and never expose it to client-side code.
101
+ *
102
+ * @example
103
+ * ```ts
104
+ * {
105
+ * clientSecret: process.env.GITLAB_CLIENT_SECRET
106
+ * }
107
+ * ```
108
+ */
109
+ readonly clientSecret: string;
110
+ /**
111
+ * GitLab OAuth scopes to request access for.
112
+ * Determines what data and actions your app can access.
113
+ *
114
+ * @example
115
+ * ```ts
116
+ * {
117
+ * scopes: [
118
+ * "read_user", // Access user profile
119
+ * "read_api", // Read-access to API
120
+ * "read_repository" // Access repositories
121
+ * ]
122
+ * }
123
+ * ```
124
+ */
125
+ readonly scopes: string[];
126
+ }
127
+ /**
128
+ * Creates a GitLab OAuth 2.0 authentication provider.
129
+ * Allows users to authenticate using their GitLab accounts (gitlab.com or self-hosted).
130
+ *
131
+ * @param config - GitLab OAuth 2.0 configuration
132
+ * @returns OAuth 2.0 provider configured for GitLab
133
+ *
134
+ * @example
135
+ * ```ts
136
+ * // Basic GitLab.com authentication
137
+ * const basicGitlab = GitlabProvider({
138
+ * clientID: process.env.GITLAB_CLIENT_ID,
139
+ * clientSecret: process.env.GITLAB_CLIENT_SECRET
140
+ * })
141
+ *
142
+ * // GitLab with read access
143
+ * const gitlabWithRead = GitlabProvider({
144
+ * clientID: process.env.GITLAB_CLIENT_ID,
145
+ * clientSecret: process.env.GITLAB_CLIENT_SECRET,
146
+ * scopes: ["read_user", "read_api"]
147
+ * })
148
+ *
149
+ * // Using the access token to fetch user data
150
+ * export default issuer({
151
+ * providers: { gitlab: gitlabWithRead },
152
+ * success: async (ctx, value) => {
153
+ * if (value.provider === "gitlab") {
154
+ * const token = value.tokenset.access
155
+ *
156
+ * const userRes = await fetch('https://gitlab.com/api/v4/user', {
157
+ * headers: { Authorization: `Bearer ${token}` }
158
+ * })
159
+ * const user = await userRes.json()
160
+ *
161
+ * return ctx.subject("user", {
162
+ * gitlabId: user.id,
163
+ * username: user.username,
164
+ * email: user.email,
165
+ * name: user.name,
166
+ * avatar: user.avatar_url
167
+ * })
168
+ * }
169
+ * }
170
+ * })
171
+ * ```
172
+ *
173
+ * **Callback URL Pattern**: `{baseURL}{basePath}/{provider}/callback`
174
+ * - Development: `http://localhost:3000/auth/gitlab/callback`
175
+ * - Production: `https://yourapp.com/auth/gitlab/callback`
176
+ *
177
+ * Register this URL in your GitLab Application settings.
178
+ */
179
+ export declare const GitlabProvider: (config: GitlabConfig) => import("./provider").Provider<import("./oauth2").Oauth2UserData>;
180
+ //# sourceMappingURL=gitlab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../../src/provider/gitlab.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8EG;AAEH,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnE;;;GAGG;AACH,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACxD;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IAEzB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAE7B;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,YAAY,qEASlD,CAAA"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Google OAuth 2.0 authentication provider for Draft Auth.
3
+ * Provides access tokens for calling Google APIs on behalf of users.
4
+ *
5
+ * ## Quick Setup
6
+ *
7
+ * ```ts
8
+ * import { GoogleProvider } from "@draftlab/auth/provider/google"
9
+ *
10
+ * export default issuer({
11
+ * basePath: "/auth", // Important for callback URL
12
+ * providers: {
13
+ * google: GoogleProvider({
14
+ * clientID: process.env.GOOGLE_CLIENT_ID,
15
+ * clientSecret: process.env.GOOGLE_CLIENT_SECRET,
16
+ * scopes: ["profile", "email", "https://www.googleapis.com/auth/calendar.readonly"]
17
+ * })
18
+ * }
19
+ * })
20
+ * ```
21
+ *
22
+ * **Callback URL Pattern**: `{baseURL}{basePath}/{provider}/callback`
23
+ * - Development: `http://localhost:3000/auth/google/callback`
24
+ * - Production: `https://yourapp.com/auth/google/callback`
25
+ *
26
+ * Register this URL in your Google Cloud Console OAuth 2.0 credentials.
27
+ *
28
+ * ## Configuration Options
29
+ *
30
+ * - Access tokens for Google API calls
31
+ * - Refresh tokens for long-lived access
32
+ * - Support for offline access
33
+ * - Custom scopes for specific Google services
34
+ *
35
+ * ## User Data Access
36
+ *
37
+ * ```ts
38
+ * success: async (ctx, value) => {
39
+ * if (value.provider === "google") {
40
+ * // Access token for API calls: value.tokenset.access
41
+ * // Refresh token (if requested): value.tokenset.refresh
42
+ * // Use the access token to call Google APIs
43
+ * const response = await fetch('https://www.googleapis.com/oauth2/v2/userinfo', {
44
+ * headers: { Authorization: `Bearer ${value.tokenset.access}` }
45
+ * })
46
+ * }
47
+ * }
48
+ * ```
49
+ *
50
+ * @packageDocumentation
51
+ */
52
+ import { type Oauth2WrappedConfig } from "./oauth2";
53
+ /**
54
+ * Configuration options for Google OAuth 2.0 provider.
55
+ * Extends the base OAuth 2.0 configuration with Google-specific defaults.
56
+ */
57
+ export interface GoogleConfig extends Oauth2WrappedConfig {
58
+ /**
59
+ * Google OAuth 2.0 client ID from Google Cloud Console.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * {
64
+ * clientID: "123456789-abc123.apps.googleusercontent.com"
65
+ * }
66
+ * ```
67
+ */
68
+ readonly clientID: string;
69
+ /**
70
+ * Google OAuth 2.0 client secret from Google Cloud Console.
71
+ * Required for server-side OAuth 2.0 flows.
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * {
76
+ * clientSecret: process.env.GOOGLE_CLIENT_SECRET
77
+ * }
78
+ * ```
79
+ */
80
+ readonly clientSecret: string;
81
+ /**
82
+ * Google OAuth 2.0 scopes to request.
83
+ * Common scopes include 'profile', 'email', and specific Google API scopes.
84
+ *
85
+ * @example
86
+ * ```ts
87
+ * {
88
+ * scopes: [
89
+ * "profile",
90
+ * "email",
91
+ * "https://www.googleapis.com/auth/calendar.readonly",
92
+ * "https://www.googleapis.com/auth/drive.file"
93
+ * ]
94
+ * }
95
+ * ```
96
+ */
97
+ readonly scopes: string[];
98
+ /**
99
+ * Additional query parameters for Google OAuth 2.0.
100
+ * Useful for Google-specific options like hosted domain restrictions.
101
+ *
102
+ * @example
103
+ * ```ts
104
+ * {
105
+ * query: {
106
+ * hd: "mycompany.com", // Restrict to Google Workspace domain
107
+ * access_type: "offline", // Request refresh token
108
+ * prompt: "consent", // Force consent screen
109
+ * include_granted_scopes: "true" // Incremental authorization
110
+ * }
111
+ * }
112
+ * ```
113
+ */
114
+ readonly query?: Record<string, string>;
115
+ }
116
+ /**
117
+ * Creates a Google OAuth 2.0 authentication provider.
118
+ * Use this when you need access tokens to call Google APIs on behalf of the user.
119
+ *
120
+ * @param config - Google OAuth 2.0 configuration
121
+ * @returns OAuth 2.0 provider configured for Google
122
+ *
123
+ * @example
124
+ * ```ts
125
+ * // Basic setup for user authentication
126
+ * const basicGoogle = GoogleProvider({
127
+ * clientID: process.env.GOOGLE_CLIENT_ID,
128
+ * clientSecret: process.env.GOOGLE_CLIENT_SECRET
129
+ * })
130
+ *
131
+ * // Advanced setup with API access
132
+ * const advancedGoogle = GoogleProvider({
133
+ * clientID: process.env.GOOGLE_CLIENT_ID,
134
+ * clientSecret: process.env.GOOGLE_CLIENT_SECRET,
135
+ * scopes: [
136
+ * "profile",
137
+ * "email",
138
+ * "https://www.googleapis.com/auth/calendar.readonly",
139
+ * "https://www.googleapis.com/auth/drive.file"
140
+ * ],
141
+ * query: {
142
+ * access_type: "offline", // Get refresh token
143
+ * prompt: "consent", // Force consent for refresh token
144
+ * hd: "mycompany.com" // Restrict to company domain
145
+ * }
146
+ * })
147
+ *
148
+ * // Use the access token for API calls
149
+ * success: async (ctx, value) => {
150
+ * const accessToken = value.tokenset.access
151
+ * const response = await fetch('https://www.googleapis.com/calendar/v3/calendars/primary/events', {
152
+ * headers: { Authorization: `Bearer ${accessToken}` }
153
+ * })
154
+ * }
155
+ * ```
156
+ */
157
+ export declare const GoogleProvider: (config: GoogleConfig) => import("./provider").Provider<import("./oauth2").Oauth2UserData>;
158
+ //# sourceMappingURL=google.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/provider/google.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnE;;;GAGG;AACH,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACxD;;;;;;;;;OASG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IAEzB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAE7B;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;IAEzB;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,YAAY,qEAUlD,CAAA"}