@robelest/convex-auth 0.0.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 (280) hide show
  1. package/README.md +6 -0
  2. package/dist/bin.cjs +27733 -0
  3. package/dist/client/index.d.ts +49 -0
  4. package/dist/client/index.d.ts.map +1 -0
  5. package/dist/client/index.js +283 -0
  6. package/dist/client/index.js.map +1 -0
  7. package/dist/component/_generated/api.d.ts +36 -0
  8. package/dist/component/_generated/api.d.ts.map +1 -0
  9. package/dist/component/_generated/api.js +31 -0
  10. package/dist/component/_generated/api.js.map +1 -0
  11. package/dist/component/_generated/component.d.ts +295 -0
  12. package/dist/component/_generated/component.d.ts.map +1 -0
  13. package/dist/component/_generated/component.js +11 -0
  14. package/dist/component/_generated/component.js.map +1 -0
  15. package/dist/component/_generated/dataModel.d.ts +46 -0
  16. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  17. package/dist/component/_generated/dataModel.js +11 -0
  18. package/dist/component/_generated/dataModel.js.map +1 -0
  19. package/dist/component/_generated/server.d.ts +121 -0
  20. package/dist/component/_generated/server.d.ts.map +1 -0
  21. package/dist/component/_generated/server.js +78 -0
  22. package/dist/component/_generated/server.js.map +1 -0
  23. package/dist/component/convex.config.d.ts +3 -0
  24. package/dist/component/convex.config.d.ts.map +1 -0
  25. package/dist/component/convex.config.js +4 -0
  26. package/dist/component/convex.config.js.map +1 -0
  27. package/dist/component/index.d.ts +15 -0
  28. package/dist/component/index.d.ts.map +1 -0
  29. package/dist/component/index.js +13 -0
  30. package/dist/component/index.js.map +1 -0
  31. package/dist/component/public.d.ts +450 -0
  32. package/dist/component/public.d.ts.map +1 -0
  33. package/dist/component/public.js +528 -0
  34. package/dist/component/public.js.map +1 -0
  35. package/dist/component/schema.d.ts +107 -0
  36. package/dist/component/schema.d.ts.map +1 -0
  37. package/dist/component/schema.js +26 -0
  38. package/dist/component/schema.js.map +1 -0
  39. package/dist/providers/Anonymous.d.ts +50 -0
  40. package/dist/providers/Anonymous.d.ts.map +1 -0
  41. package/dist/providers/Anonymous.js +39 -0
  42. package/dist/providers/Anonymous.js.map +1 -0
  43. package/dist/providers/ConvexCredentials.d.ts +88 -0
  44. package/dist/providers/ConvexCredentials.d.ts.map +1 -0
  45. package/dist/providers/ConvexCredentials.js +37 -0
  46. package/dist/providers/ConvexCredentials.js.map +1 -0
  47. package/dist/providers/Email.d.ts +33 -0
  48. package/dist/providers/Email.d.ts.map +1 -0
  49. package/dist/providers/Email.js +50 -0
  50. package/dist/providers/Email.js.map +1 -0
  51. package/dist/providers/Password.d.ts +95 -0
  52. package/dist/providers/Password.d.ts.map +1 -0
  53. package/dist/providers/Password.js +174 -0
  54. package/dist/providers/Password.js.map +1 -0
  55. package/dist/providers/Phone.d.ts +22 -0
  56. package/dist/providers/Phone.d.ts.map +1 -0
  57. package/dist/providers/Phone.js +37 -0
  58. package/dist/providers/Phone.js.map +1 -0
  59. package/dist/server/convex_types.d.ts +17 -0
  60. package/dist/server/convex_types.d.ts.map +1 -0
  61. package/dist/server/convex_types.js +2 -0
  62. package/dist/server/convex_types.js.map +1 -0
  63. package/dist/server/cookies.d.ts +35 -0
  64. package/dist/server/cookies.d.ts.map +1 -0
  65. package/dist/server/cookies.js +34 -0
  66. package/dist/server/cookies.js.map +1 -0
  67. package/dist/server/implementation/db.d.ts +80 -0
  68. package/dist/server/implementation/db.d.ts.map +1 -0
  69. package/dist/server/implementation/db.js +59 -0
  70. package/dist/server/implementation/db.js.map +1 -0
  71. package/dist/server/implementation/index.d.ts +370 -0
  72. package/dist/server/implementation/index.d.ts.map +1 -0
  73. package/dist/server/implementation/index.js +521 -0
  74. package/dist/server/implementation/index.js.map +1 -0
  75. package/dist/server/implementation/mutations/createAccountFromCredentials.d.ts +33 -0
  76. package/dist/server/implementation/mutations/createAccountFromCredentials.d.ts.map +1 -0
  77. package/dist/server/implementation/mutations/createAccountFromCredentials.js +71 -0
  78. package/dist/server/implementation/mutations/createAccountFromCredentials.js.map +1 -0
  79. package/dist/server/implementation/mutations/createVerificationCode.d.ts +25 -0
  80. package/dist/server/implementation/mutations/createVerificationCode.d.ts.map +1 -0
  81. package/dist/server/implementation/mutations/createVerificationCode.js +84 -0
  82. package/dist/server/implementation/mutations/createVerificationCode.js.map +1 -0
  83. package/dist/server/implementation/mutations/index.d.ts +304 -0
  84. package/dist/server/implementation/mutations/index.d.ts.map +1 -0
  85. package/dist/server/implementation/mutations/index.js +108 -0
  86. package/dist/server/implementation/mutations/index.js.map +1 -0
  87. package/dist/server/implementation/mutations/invalidateSessions.d.ts +13 -0
  88. package/dist/server/implementation/mutations/invalidateSessions.d.ts.map +1 -0
  89. package/dist/server/implementation/mutations/invalidateSessions.js +35 -0
  90. package/dist/server/implementation/mutations/invalidateSessions.js.map +1 -0
  91. package/dist/server/implementation/mutations/modifyAccount.d.ts +23 -0
  92. package/dist/server/implementation/mutations/modifyAccount.d.ts.map +1 -0
  93. package/dist/server/implementation/mutations/modifyAccount.js +48 -0
  94. package/dist/server/implementation/mutations/modifyAccount.js.map +1 -0
  95. package/dist/server/implementation/mutations/refreshSession.d.ts +16 -0
  96. package/dist/server/implementation/mutations/refreshSession.d.ts.map +1 -0
  97. package/dist/server/implementation/mutations/refreshSession.js +116 -0
  98. package/dist/server/implementation/mutations/refreshSession.js.map +1 -0
  99. package/dist/server/implementation/mutations/retrieveAccountWithCredentials.d.ts +27 -0
  100. package/dist/server/implementation/mutations/retrieveAccountWithCredentials.d.ts.map +1 -0
  101. package/dist/server/implementation/mutations/retrieveAccountWithCredentials.js +55 -0
  102. package/dist/server/implementation/mutations/retrieveAccountWithCredentials.js.map +1 -0
  103. package/dist/server/implementation/mutations/signIn.d.ts +17 -0
  104. package/dist/server/implementation/mutations/signIn.d.ts.map +1 -0
  105. package/dist/server/implementation/mutations/signIn.js +26 -0
  106. package/dist/server/implementation/mutations/signIn.js.map +1 -0
  107. package/dist/server/implementation/mutations/signOut.d.ts +11 -0
  108. package/dist/server/implementation/mutations/signOut.d.ts.map +1 -0
  109. package/dist/server/implementation/mutations/signOut.js +24 -0
  110. package/dist/server/implementation/mutations/signOut.js.map +1 -0
  111. package/dist/server/implementation/mutations/userOAuth.d.ts +19 -0
  112. package/dist/server/implementation/mutations/userOAuth.d.ts.map +1 -0
  113. package/dist/server/implementation/mutations/userOAuth.js +84 -0
  114. package/dist/server/implementation/mutations/userOAuth.js.map +1 -0
  115. package/dist/server/implementation/mutations/verifier.d.ts +8 -0
  116. package/dist/server/implementation/mutations/verifier.d.ts.map +1 -0
  117. package/dist/server/implementation/mutations/verifier.js +19 -0
  118. package/dist/server/implementation/mutations/verifier.js.map +1 -0
  119. package/dist/server/implementation/mutations/verifierSignature.d.ts +15 -0
  120. package/dist/server/implementation/mutations/verifierSignature.d.ts.map +1 -0
  121. package/dist/server/implementation/mutations/verifierSignature.js +29 -0
  122. package/dist/server/implementation/mutations/verifierSignature.js.map +1 -0
  123. package/dist/server/implementation/mutations/verifyCodeAndSignIn.d.ts +21 -0
  124. package/dist/server/implementation/mutations/verifyCodeAndSignIn.d.ts.map +1 -0
  125. package/dist/server/implementation/mutations/verifyCodeAndSignIn.js +127 -0
  126. package/dist/server/implementation/mutations/verifyCodeAndSignIn.js.map +1 -0
  127. package/dist/server/implementation/provider.d.ts +6 -0
  128. package/dist/server/implementation/provider.d.ts.map +1 -0
  129. package/dist/server/implementation/provider.js +21 -0
  130. package/dist/server/implementation/provider.js.map +1 -0
  131. package/dist/server/implementation/rateLimit.d.ts +6 -0
  132. package/dist/server/implementation/rateLimit.d.ts.map +1 -0
  133. package/dist/server/implementation/rateLimit.js +76 -0
  134. package/dist/server/implementation/rateLimit.js.map +1 -0
  135. package/dist/server/implementation/redirects.d.ts +6 -0
  136. package/dist/server/implementation/redirects.d.ts.map +1 -0
  137. package/dist/server/implementation/redirects.js +40 -0
  138. package/dist/server/implementation/redirects.js.map +1 -0
  139. package/dist/server/implementation/refreshTokens.d.ts +40 -0
  140. package/dist/server/implementation/refreshTokens.d.ts.map +1 -0
  141. package/dist/server/implementation/refreshTokens.js +160 -0
  142. package/dist/server/implementation/refreshTokens.js.map +1 -0
  143. package/dist/server/implementation/sessions.d.ts +43 -0
  144. package/dist/server/implementation/sessions.d.ts.map +1 -0
  145. package/dist/server/implementation/sessions.js +94 -0
  146. package/dist/server/implementation/sessions.js.map +1 -0
  147. package/dist/server/implementation/signIn.d.ts +31 -0
  148. package/dist/server/implementation/signIn.d.ts.map +1 -0
  149. package/dist/server/implementation/signIn.js +148 -0
  150. package/dist/server/implementation/signIn.js.map +1 -0
  151. package/dist/server/implementation/tokens.d.ts +7 -0
  152. package/dist/server/implementation/tokens.d.ts.map +1 -0
  153. package/dist/server/implementation/tokens.js +18 -0
  154. package/dist/server/implementation/tokens.js.map +1 -0
  155. package/dist/server/implementation/types.d.ts +288 -0
  156. package/dist/server/implementation/types.d.ts.map +1 -0
  157. package/dist/server/implementation/types.js +182 -0
  158. package/dist/server/implementation/types.js.map +1 -0
  159. package/dist/server/implementation/users.d.ts +27 -0
  160. package/dist/server/implementation/users.d.ts.map +1 -0
  161. package/dist/server/implementation/users.js +181 -0
  162. package/dist/server/implementation/users.js.map +1 -0
  163. package/dist/server/implementation/utils.d.ts +17 -0
  164. package/dist/server/implementation/utils.d.ts.map +1 -0
  165. package/dist/server/implementation/utils.js +72 -0
  166. package/dist/server/implementation/utils.js.map +1 -0
  167. package/dist/server/index.d.ts +17 -0
  168. package/dist/server/index.d.ts.map +1 -0
  169. package/dist/server/index.js +54 -0
  170. package/dist/server/index.js.map +1 -0
  171. package/dist/server/oauth/authorizationUrl.d.ts +13 -0
  172. package/dist/server/oauth/authorizationUrl.d.ts.map +1 -0
  173. package/dist/server/oauth/authorizationUrl.js +91 -0
  174. package/dist/server/oauth/authorizationUrl.js.map +1 -0
  175. package/dist/server/oauth/callback.d.ts +19 -0
  176. package/dist/server/oauth/callback.d.ts.map +1 -0
  177. package/dist/server/oauth/callback.js +173 -0
  178. package/dist/server/oauth/callback.js.map +1 -0
  179. package/dist/server/oauth/checks.d.ts +52 -0
  180. package/dist/server/oauth/checks.d.ts.map +1 -0
  181. package/dist/server/oauth/checks.js +106 -0
  182. package/dist/server/oauth/checks.js.map +1 -0
  183. package/dist/server/oauth/convexAuth.d.ts +12 -0
  184. package/dist/server/oauth/convexAuth.d.ts.map +1 -0
  185. package/dist/server/oauth/convexAuth.js +137 -0
  186. package/dist/server/oauth/convexAuth.js.map +1 -0
  187. package/dist/server/oauth/lib/utils/customFetch.d.ts +9 -0
  188. package/dist/server/oauth/lib/utils/customFetch.d.ts.map +1 -0
  189. package/dist/server/oauth/lib/utils/customFetch.js +11 -0
  190. package/dist/server/oauth/lib/utils/customFetch.js.map +1 -0
  191. package/dist/server/oauth/lib/utils/providers.d.ts +3 -0
  192. package/dist/server/oauth/lib/utils/providers.d.ts.map +1 -0
  193. package/dist/server/oauth/lib/utils/providers.js +7 -0
  194. package/dist/server/oauth/lib/utils/providers.js.map +1 -0
  195. package/dist/server/oauth/providers/oauth.d.ts +43 -0
  196. package/dist/server/oauth/providers/oauth.d.ts.map +1 -0
  197. package/dist/server/oauth/providers/oauth.js +3 -0
  198. package/dist/server/oauth/providers/oauth.js.map +1 -0
  199. package/dist/server/oauth/types.d.ts +24 -0
  200. package/dist/server/oauth/types.d.ts.map +1 -0
  201. package/dist/server/oauth/types.js +5 -0
  202. package/dist/server/oauth/types.js.map +1 -0
  203. package/dist/server/provider_utils.d.ts +76 -0
  204. package/dist/server/provider_utils.d.ts.map +1 -0
  205. package/dist/server/provider_utils.js +177 -0
  206. package/dist/server/provider_utils.js.map +1 -0
  207. package/dist/server/types.d.ts +412 -0
  208. package/dist/server/types.d.ts.map +1 -0
  209. package/dist/server/types.js +2 -0
  210. package/dist/server/types.js.map +1 -0
  211. package/dist/server/utils.d.ts +3 -0
  212. package/dist/server/utils.d.ts.map +1 -0
  213. package/dist/server/utils.js +11 -0
  214. package/dist/server/utils.js.map +1 -0
  215. package/package.json +126 -0
  216. package/providers/Anonymous/package.json +6 -0
  217. package/providers/ConvexCredentials/package.json +6 -0
  218. package/providers/Email/package.json +6 -0
  219. package/providers/Password/package.json +6 -0
  220. package/providers/Phone/package.json +6 -0
  221. package/server/package.json +6 -0
  222. package/src/cli/command.ts +69 -0
  223. package/src/cli/generateKeys.ts +20 -0
  224. package/src/cli/index.ts +840 -0
  225. package/src/client/index.ts +415 -0
  226. package/src/component/_generated/api.ts +52 -0
  227. package/src/component/_generated/component.ts +586 -0
  228. package/src/component/_generated/dataModel.ts +60 -0
  229. package/src/component/_generated/server.ts +156 -0
  230. package/src/component/convex.config.ts +5 -0
  231. package/src/component/index.ts +40 -0
  232. package/src/component/public.ts +607 -0
  233. package/src/component/schema.ts +35 -0
  234. package/src/providers/Anonymous.ts +79 -0
  235. package/src/providers/ConvexCredentials.ts +108 -0
  236. package/src/providers/Email.ts +60 -0
  237. package/src/providers/Password.ts +253 -0
  238. package/src/providers/Phone.ts +46 -0
  239. package/src/server/convex_types.ts +55 -0
  240. package/src/server/cookies.ts +42 -0
  241. package/src/server/implementation/db.ts +125 -0
  242. package/src/server/implementation/index.ts +815 -0
  243. package/src/server/implementation/mutations/createAccountFromCredentials.ts +113 -0
  244. package/src/server/implementation/mutations/createVerificationCode.ts +139 -0
  245. package/src/server/implementation/mutations/index.ts +157 -0
  246. package/src/server/implementation/mutations/invalidateSessions.ts +47 -0
  247. package/src/server/implementation/mutations/modifyAccount.ts +65 -0
  248. package/src/server/implementation/mutations/refreshSession.ts +188 -0
  249. package/src/server/implementation/mutations/retrieveAccountWithCredentials.ts +87 -0
  250. package/src/server/implementation/mutations/signIn.ts +51 -0
  251. package/src/server/implementation/mutations/signOut.ts +38 -0
  252. package/src/server/implementation/mutations/userOAuth.ts +112 -0
  253. package/src/server/implementation/mutations/verifier.ts +29 -0
  254. package/src/server/implementation/mutations/verifierSignature.ts +44 -0
  255. package/src/server/implementation/mutations/verifyCodeAndSignIn.ts +205 -0
  256. package/src/server/implementation/provider.ts +38 -0
  257. package/src/server/implementation/rateLimit.ts +105 -0
  258. package/src/server/implementation/redirects.ts +58 -0
  259. package/src/server/implementation/refreshTokens.ts +221 -0
  260. package/src/server/implementation/sessions.ts +155 -0
  261. package/src/server/implementation/signIn.ts +253 -0
  262. package/src/server/implementation/tokens.ts +29 -0
  263. package/src/server/implementation/types.ts +220 -0
  264. package/src/server/implementation/users.ts +286 -0
  265. package/src/server/implementation/utils.ts +91 -0
  266. package/src/server/index.ts +74 -0
  267. package/src/server/oauth/NOTICE.txt +21 -0
  268. package/src/server/oauth/README.md +7 -0
  269. package/src/server/oauth/authorizationUrl.ts +113 -0
  270. package/src/server/oauth/callback.ts +243 -0
  271. package/src/server/oauth/checks.ts +136 -0
  272. package/src/server/oauth/convexAuth.ts +168 -0
  273. package/src/server/oauth/lib/utils/customFetch.ts +18 -0
  274. package/src/server/oauth/lib/utils/providers.ts +12 -0
  275. package/src/server/oauth/providers/oauth.ts +56 -0
  276. package/src/server/oauth/types.ts +60 -0
  277. package/src/server/provider_utils.ts +222 -0
  278. package/src/server/types.ts +470 -0
  279. package/src/server/utils.ts +12 -0
  280. package/src/test.ts +24 -0
@@ -0,0 +1,182 @@
1
+ import { defineTable, } from "convex/server";
2
+ import { v } from "convex/values";
3
+ /**
4
+ * The table definitions required by the library.
5
+ *
6
+ * Your schema must include these so that the indexes
7
+ * are set up:
8
+ *
9
+ *
10
+ * ```ts filename="convex/schema.ts"
11
+ * import { defineSchema } from "convex/server";
12
+ * import { authTables } from "@robelest/convex-auth/component";
13
+ *
14
+ * const schema = defineSchema({
15
+ * ...authTables,
16
+ * });
17
+ *
18
+ * export default schema;
19
+ * ```
20
+ *
21
+ * You can inline the table definitions into your schema
22
+ * and extend them with additional optional and required
23
+ * fields. See https://labs.convex.dev/auth/setup/schema
24
+ * for more details.
25
+ */
26
+ export const authTables = {
27
+ /**
28
+ * Users.
29
+ */
30
+ user: defineTable({
31
+ name: v.optional(v.string()),
32
+ image: v.optional(v.string()),
33
+ email: v.optional(v.string()),
34
+ emailVerificationTime: v.optional(v.number()),
35
+ phone: v.optional(v.string()),
36
+ phoneVerificationTime: v.optional(v.number()),
37
+ isAnonymous: v.optional(v.boolean()),
38
+ })
39
+ .index("email", ["email"])
40
+ .index("phone", ["phone"]),
41
+ /**
42
+ * Sessions.
43
+ * A single user can have multiple active sessions.
44
+ * See [Session document lifecycle](https://labs.convex.dev/auth/advanced#session-document-lifecycle).
45
+ */
46
+ session: defineTable({
47
+ userId: v.id("user"),
48
+ expirationTime: v.number(),
49
+ }).index("userId", ["userId"]),
50
+ /**
51
+ * Accounts. An account corresponds to
52
+ * a single authentication provider.
53
+ * A single user can have multiple accounts linked.
54
+ */
55
+ account: defineTable({
56
+ userId: v.id("user"),
57
+ provider: v.string(),
58
+ providerAccountId: v.string(),
59
+ secret: v.optional(v.string()),
60
+ emailVerified: v.optional(v.string()),
61
+ phoneVerified: v.optional(v.string()),
62
+ })
63
+ .index("userIdAndProvider", ["userId", "provider"])
64
+ .index("providerAndAccountId", ["provider", "providerAccountId"]),
65
+ /**
66
+ * Refresh tokens.
67
+ * Refresh tokens are generally meant to be used once, to be exchanged for another
68
+ * refresh token and a JWT access token, but with a few exceptions:
69
+ * - The "active refresh token" is the most recently created refresh token that has
70
+ * not been used yet. The parent of the active refresh token can always be used to
71
+ * obtain the active refresh token.
72
+ * - A refresh token can be used within a 10 second window ("reuse window") to
73
+ * obtain a new refresh token.
74
+ * - On any invalid use of a refresh token, the token itself and all its descendants
75
+ * are invalidated.
76
+ */
77
+ token: defineTable({
78
+ sessionId: v.id("session"),
79
+ expirationTime: v.number(),
80
+ firstUsedTime: v.optional(v.number()),
81
+ // This is the ID of the refresh token that was exchanged to create this one.
82
+ parentRefreshTokenId: v.optional(v.id("token")),
83
+ })
84
+ // Sort by creationTime
85
+ .index("sessionId", ["sessionId"])
86
+ .index("sessionIdAndParentRefreshTokenId", [
87
+ "sessionId",
88
+ "parentRefreshTokenId",
89
+ ]),
90
+ /**
91
+ * Verification codes:
92
+ * - OTP tokens
93
+ * - magic link tokens
94
+ * - OAuth codes
95
+ */
96
+ verification: defineTable({
97
+ accountId: v.id("account"),
98
+ provider: v.string(),
99
+ code: v.string(),
100
+ expirationTime: v.number(),
101
+ verifier: v.optional(v.string()),
102
+ emailVerified: v.optional(v.string()),
103
+ phoneVerified: v.optional(v.string()),
104
+ })
105
+ .index("accountId", ["accountId"])
106
+ .index("code", ["code"]),
107
+ /**
108
+ * PKCE verifiers for OAuth.
109
+ */
110
+ verifier: defineTable({
111
+ sessionId: v.optional(v.id("session")),
112
+ signature: v.optional(v.string()),
113
+ }).index("signature", ["signature"]),
114
+ /**
115
+ * Rate limits for OTP and password sign-in.
116
+ */
117
+ limit: defineTable({
118
+ identifier: v.string(),
119
+ lastAttemptTime: v.number(),
120
+ attemptsLeft: v.number(),
121
+ }).index("identifier", ["identifier"]),
122
+ organization: defineTable({
123
+ name: v.string(),
124
+ slug: v.optional(v.string()),
125
+ ownerUserId: v.optional(v.id("user")),
126
+ parentOrganizationId: v.optional(v.id("organization")),
127
+ metadata: v.optional(v.any()),
128
+ })
129
+ .index("slug", ["slug"])
130
+ .index("ownerUserId", ["ownerUserId"])
131
+ .index("parentOrganizationId", ["parentOrganizationId"]),
132
+ team: defineTable({
133
+ organizationId: v.id("organization"),
134
+ name: v.string(),
135
+ slug: v.optional(v.string()),
136
+ parentTeamId: v.optional(v.id("team")),
137
+ metadata: v.optional(v.any()),
138
+ })
139
+ .index("organizationId", ["organizationId"])
140
+ .index("organizationIdAndSlug", ["organizationId", "slug"])
141
+ .index("parentTeamId", ["parentTeamId"]),
142
+ teamRelation: defineTable({
143
+ organizationId: v.id("organization"),
144
+ parentTeamId: v.id("team"),
145
+ childTeamId: v.id("team"),
146
+ relation: v.optional(v.string()),
147
+ })
148
+ .index("organizationId", ["organizationId"])
149
+ .index("organizationIdAndParentTeamId", ["organizationId", "parentTeamId"])
150
+ .index("organizationIdAndChildTeamId", ["organizationId", "childTeamId"]),
151
+ member: defineTable({
152
+ organizationId: v.id("organization"),
153
+ userId: v.id("user"),
154
+ teamId: v.optional(v.id("team")),
155
+ role: v.optional(v.string()),
156
+ status: v.optional(v.string()),
157
+ metadata: v.optional(v.any()),
158
+ })
159
+ .index("organizationId", ["organizationId"])
160
+ .index("organizationIdAndUserId", ["organizationId", "userId"])
161
+ .index("teamId", ["teamId"])
162
+ .index("userId", ["userId"]),
163
+ invite: defineTable({
164
+ organizationId: v.optional(v.id("organization")),
165
+ teamId: v.optional(v.id("team")),
166
+ invitedByUserId: v.id("user"),
167
+ email: v.string(),
168
+ tokenHash: v.string(),
169
+ role: v.optional(v.string()),
170
+ status: v.union(v.literal("pending"), v.literal("accepted"), v.literal("revoked"), v.literal("expired")),
171
+ expiresTime: v.number(),
172
+ acceptedByUserId: v.optional(v.id("user")),
173
+ acceptedTime: v.optional(v.number()),
174
+ metadata: v.optional(v.any()),
175
+ })
176
+ .index("tokenHash", ["tokenHash"])
177
+ .index("emailAndStatus", ["email", "status"])
178
+ .index("invitedByUserIdAndStatus", ["invitedByUserId", "status"])
179
+ .index("organizationId", ["organizationId"])
180
+ .index("organizationIdAndStatus", ["organizationId", "status"]),
181
+ };
182
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/implementation/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { GenericId } from "convex/values";
2
+ import { Doc, MutationCtx } from "./types.js";
3
+ import { AuthProviderMaterializedConfig, ConvexAuthConfig } from "../types.js";
4
+ type CreateOrUpdateUserArgs = {
5
+ type: "oauth" | "credentials" | "email" | "phone" | "verification";
6
+ provider: AuthProviderMaterializedConfig;
7
+ profile: Record<string, unknown> & {
8
+ email?: string;
9
+ phone?: string;
10
+ emailVerified?: boolean;
11
+ phoneVerified?: boolean;
12
+ };
13
+ shouldLinkViaEmail?: boolean;
14
+ shouldLinkViaPhone?: boolean;
15
+ };
16
+ export declare function upsertUserAndAccount(ctx: MutationCtx, sessionId: GenericId<"session"> | null, account: {
17
+ existingAccount: Doc<"account">;
18
+ } | {
19
+ providerAccountId: string;
20
+ secret?: string;
21
+ }, args: CreateOrUpdateUserArgs, config: ConvexAuthConfig): Promise<{
22
+ userId: GenericId<"user">;
23
+ accountId: GenericId<"account">;
24
+ }>;
25
+ export declare function getAccountOrThrow(ctx: MutationCtx, existingAccountId: GenericId<"account">, config: ConvexAuthConfig): Promise<any>;
26
+ export {};
27
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/server/implementation/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI/E,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,cAAc,CAAC;IACnE,QAAQ,EAAE,8BAA8B,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACjC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,EACtC,OAAO,EACH;IAAE,eAAe,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;CAAE,GACnC;IACE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,EACL,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC;IACT,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACjC,CAAC,CAUD;AAmOD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,WAAW,EAChB,iBAAiB,EAAE,SAAS,CAAC,SAAS,CAAC,EACvC,MAAM,EAAE,gBAAgB,gBAYzB"}
@@ -0,0 +1,181 @@
1
+ import { LOG_LEVELS, logWithLevel } from "./utils.js";
2
+ import { createAuthDb } from "./db.js";
3
+ export async function upsertUserAndAccount(ctx, sessionId, account, args, config) {
4
+ const userId = await defaultCreateOrUpdateUser(ctx, sessionId, "existingAccount" in account ? account.existingAccount : null, args, config);
5
+ const accountId = await createOrUpdateAccount(ctx, userId, account, args, config);
6
+ return { userId, accountId };
7
+ }
8
+ async function defaultCreateOrUpdateUser(ctx, existingSessionId, existingAccount, args, config) {
9
+ logWithLevel(LOG_LEVELS.DEBUG, "defaultCreateOrUpdateUser args:", {
10
+ existingAccountId: existingAccount?._id,
11
+ existingSessionId,
12
+ args,
13
+ });
14
+ const existingUserId = existingAccount?.userId ?? null;
15
+ const authDb = config.component !== undefined ? createAuthDb(ctx, config.component) : null;
16
+ if (config.callbacks?.createOrUpdateUser !== undefined) {
17
+ logWithLevel(LOG_LEVELS.DEBUG, "Using custom createOrUpdateUser callback");
18
+ return await config.callbacks.createOrUpdateUser(ctx, {
19
+ existingUserId,
20
+ ...args,
21
+ });
22
+ }
23
+ const { provider, profile: { emailVerified: profileEmailVerified, phoneVerified: profilePhoneVerified, ...profile }, } = args;
24
+ const emailVerified = profileEmailVerified ??
25
+ ((provider.type === "oauth" || provider.type === "oidc") &&
26
+ provider.allowDangerousEmailAccountLinking !== false);
27
+ const phoneVerified = profilePhoneVerified ?? false;
28
+ const shouldLinkViaEmail = args.shouldLinkViaEmail || emailVerified || provider.type === "email";
29
+ const shouldLinkViaPhone = args.shouldLinkViaPhone || phoneVerified || provider.type === "phone";
30
+ let userId = existingUserId;
31
+ if (existingUserId === null) {
32
+ const existingUserWithVerifiedEmailId = typeof profile.email === "string" && shouldLinkViaEmail
33
+ ? (await uniqueUserWithVerifiedEmail(ctx, profile.email, config))?._id ??
34
+ null
35
+ : null;
36
+ const existingUserWithVerifiedPhoneId = typeof profile.phone === "string" && shouldLinkViaPhone
37
+ ? (await uniqueUserWithVerifiedPhone(ctx, profile.phone, config))?._id ??
38
+ null
39
+ : null;
40
+ // If there is both email and phone verified user
41
+ // already we can't link.
42
+ if (existingUserWithVerifiedEmailId !== null &&
43
+ existingUserWithVerifiedPhoneId !== null) {
44
+ logWithLevel(LOG_LEVELS.DEBUG, `Found existing email and phone verified users, so not linking: email: ${existingUserWithVerifiedEmailId}, phone: ${existingUserWithVerifiedPhoneId}`);
45
+ userId = null;
46
+ }
47
+ else if (existingUserWithVerifiedEmailId !== null) {
48
+ logWithLevel(LOG_LEVELS.DEBUG, `Found existing email verified user, linking: ${existingUserWithVerifiedEmailId}`);
49
+ userId = existingUserWithVerifiedEmailId;
50
+ }
51
+ else if (existingUserWithVerifiedPhoneId !== null) {
52
+ logWithLevel(LOG_LEVELS.DEBUG, `Found existing phone verified user, linking: ${existingUserWithVerifiedPhoneId}`);
53
+ userId = existingUserWithVerifiedPhoneId;
54
+ }
55
+ else {
56
+ logWithLevel(LOG_LEVELS.DEBUG, "No existing verified users found, creating new user");
57
+ userId = null;
58
+ }
59
+ }
60
+ const userData = {
61
+ ...(emailVerified ? { emailVerificationTime: Date.now() } : null),
62
+ ...(phoneVerified ? { phoneVerificationTime: Date.now() } : null),
63
+ ...profile,
64
+ };
65
+ const existingOrLinkedUserId = userId;
66
+ if (userId !== null) {
67
+ try {
68
+ if (authDb !== null) {
69
+ await authDb.users.patch(userId, userData);
70
+ }
71
+ else {
72
+ await ctx.db.patch(userId, userData);
73
+ }
74
+ }
75
+ catch (error) {
76
+ throw new Error(`Could not update user document with ID \`${userId}\`, ` +
77
+ `either the user has been deleted but their account has not, ` +
78
+ `or the profile data doesn't match the \`users\` table schema: ` +
79
+ `${error.message}`);
80
+ }
81
+ }
82
+ else {
83
+ userId =
84
+ authDb !== null
85
+ ? (await authDb.users.insert(userData))
86
+ : await ctx.db.insert("user", userData);
87
+ }
88
+ const afterUserCreatedOrUpdated = config.callbacks?.afterUserCreatedOrUpdated;
89
+ if (afterUserCreatedOrUpdated !== undefined) {
90
+ logWithLevel(LOG_LEVELS.DEBUG, "Calling custom afterUserCreatedOrUpdated callback");
91
+ await afterUserCreatedOrUpdated(ctx, {
92
+ userId,
93
+ existingUserId: existingOrLinkedUserId,
94
+ ...args,
95
+ });
96
+ }
97
+ else {
98
+ logWithLevel(LOG_LEVELS.DEBUG, "No custom afterUserCreatedOrUpdated callback, skipping");
99
+ }
100
+ return userId;
101
+ }
102
+ async function uniqueUserWithVerifiedEmail(ctx, email, config) {
103
+ if (config.component !== undefined) {
104
+ const authDb = createAuthDb(ctx, config.component);
105
+ return (await authDb.users.findByVerifiedEmail(email));
106
+ }
107
+ const users = await ctx.db
108
+ .query("user")
109
+ .withIndex("email", (q) => q.eq("email", email))
110
+ .filter((q) => q.neq(q.field("emailVerificationTime"), undefined))
111
+ .take(2);
112
+ return users.length === 1 ? users[0] : null;
113
+ }
114
+ async function uniqueUserWithVerifiedPhone(ctx, phone, config) {
115
+ if (config.component !== undefined) {
116
+ const authDb = createAuthDb(ctx, config.component);
117
+ return (await authDb.users.findByVerifiedPhone(phone));
118
+ }
119
+ const users = await ctx.db
120
+ .query("user")
121
+ .withIndex("phone", (q) => q.eq("phone", phone))
122
+ .filter((q) => q.neq(q.field("phoneVerificationTime"), undefined))
123
+ .take(2);
124
+ return users.length === 1 ? users[0] : null;
125
+ }
126
+ async function createOrUpdateAccount(ctx, userId, account, args, config) {
127
+ const authDb = config.component !== undefined ? createAuthDb(ctx, config.component) : null;
128
+ const accountId = "existingAccount" in account
129
+ ? account.existingAccount._id
130
+ : authDb !== null
131
+ ? (await authDb.accounts.create({
132
+ userId,
133
+ provider: args.provider.id,
134
+ providerAccountId: account.providerAccountId,
135
+ secret: account.secret,
136
+ }))
137
+ : await ctx.db.insert("account", {
138
+ userId,
139
+ provider: args.provider.id,
140
+ providerAccountId: account.providerAccountId,
141
+ secret: account.secret,
142
+ });
143
+ // This is never used with the default `createOrUpdateUser` implementation,
144
+ // but it is used for manual linking via custom `createOrUpdateUser`:
145
+ if ("existingAccount" in account &&
146
+ account.existingAccount.userId !== userId) {
147
+ if (authDb !== null) {
148
+ await authDb.accounts.patch(accountId, { userId });
149
+ }
150
+ else {
151
+ await ctx.db.patch(accountId, { userId });
152
+ }
153
+ }
154
+ if (args.profile.emailVerified) {
155
+ if (authDb !== null) {
156
+ await authDb.accounts.patch(accountId, { emailVerified: args.profile.email });
157
+ }
158
+ else {
159
+ await ctx.db.patch(accountId, { emailVerified: args.profile.email });
160
+ }
161
+ }
162
+ if (args.profile.phoneVerified) {
163
+ if (authDb !== null) {
164
+ await authDb.accounts.patch(accountId, { phoneVerified: args.profile.phone });
165
+ }
166
+ else {
167
+ await ctx.db.patch(accountId, { phoneVerified: args.profile.phone });
168
+ }
169
+ }
170
+ return accountId;
171
+ }
172
+ export async function getAccountOrThrow(ctx, existingAccountId, config) {
173
+ const existingAccount = config.component !== undefined
174
+ ? await createAuthDb(ctx, config.component).accounts.getById(existingAccountId)
175
+ : await ctx.db.get(existingAccountId);
176
+ if (existingAccount === null) {
177
+ throw new Error(`Expected an account to exist for ID "${existingAccountId}"`);
178
+ }
179
+ return existingAccount;
180
+ }
181
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/server/implementation/users.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare const TOKEN_SUB_CLAIM_DIVIDER = "|";
2
+ export declare const REFRESH_TOKEN_DIVIDER = "|";
3
+ export declare function stringToNumber(value: string | undefined): number | undefined;
4
+ export declare function sha256(input: string): Promise<string>;
5
+ export declare function generateRandomString(length: number, alphabet: string): string;
6
+ export declare function logError(error: unknown): void;
7
+ export declare const LOG_LEVELS: {
8
+ readonly ERROR: "ERROR";
9
+ readonly WARN: "WARN";
10
+ readonly INFO: "INFO";
11
+ readonly DEBUG: "DEBUG";
12
+ };
13
+ type LogLevel = keyof typeof LOG_LEVELS;
14
+ export declare function logWithLevel(level: LogLevel, ...args: unknown[]): void;
15
+ export declare function maybeRedact(value: string): string;
16
+ export {};
17
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/server/implementation/utils.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,sBAEvD;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,mBAEzC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAQpE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,QAOtC;AAED,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AACX,KAAK,QAAQ,GAAG,MAAM,OAAO,UAAU,CAAC;AAExC,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAyB/D;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,UAiBxC"}
@@ -0,0 +1,72 @@
1
+ import { sha256 as rawSha256 } from "@oslojs/crypto/sha2";
2
+ import { encodeHexLowerCase } from "@oslojs/encoding";
3
+ import { generateRandomString as osloGenerateRandomString, } from "@oslojs/crypto/random";
4
+ export const TOKEN_SUB_CLAIM_DIVIDER = "|";
5
+ export const REFRESH_TOKEN_DIVIDER = "|";
6
+ export function stringToNumber(value) {
7
+ return value !== undefined ? Number(value) : undefined;
8
+ }
9
+ export async function sha256(input) {
10
+ return encodeHexLowerCase(rawSha256(new TextEncoder().encode(input)));
11
+ }
12
+ export function generateRandomString(length, alphabet) {
13
+ const random = {
14
+ read(bytes) {
15
+ crypto.getRandomValues(bytes);
16
+ },
17
+ };
18
+ return osloGenerateRandomString(random, alphabet, length);
19
+ }
20
+ export function logError(error) {
21
+ logWithLevel(LOG_LEVELS.ERROR, error instanceof Error
22
+ ? error.message + "\n" + error.stack?.replace("\\n", "\n")
23
+ : error);
24
+ }
25
+ export const LOG_LEVELS = {
26
+ ERROR: "ERROR",
27
+ WARN: "WARN",
28
+ INFO: "INFO",
29
+ DEBUG: "DEBUG",
30
+ };
31
+ export function logWithLevel(level, ...args) {
32
+ const configuredLogLevel = LOG_LEVELS[process.env.AUTH_LOG_LEVEL ?? "INFO"] ?? "INFO";
33
+ switch (level) {
34
+ case "ERROR":
35
+ console.error(...args);
36
+ break;
37
+ case "WARN":
38
+ if (configuredLogLevel !== "ERROR") {
39
+ console.warn(...args);
40
+ }
41
+ break;
42
+ case "INFO":
43
+ if (configuredLogLevel === "INFO" || configuredLogLevel === "DEBUG") {
44
+ console.info(...args);
45
+ }
46
+ break;
47
+ case "DEBUG":
48
+ if (configuredLogLevel === "DEBUG") {
49
+ console.debug(...args);
50
+ }
51
+ break;
52
+ }
53
+ }
54
+ const UNREDACTED_LENGTH = 5;
55
+ export function maybeRedact(value) {
56
+ if (value === "") {
57
+ return "";
58
+ }
59
+ const shouldRedact = process.env.AUTH_LOG_SECRETS !== "true";
60
+ if (shouldRedact) {
61
+ if (value.length < UNREDACTED_LENGTH * 2) {
62
+ return "<redacted>";
63
+ }
64
+ return (value.substring(0, UNREDACTED_LENGTH) +
65
+ "<redacted>" +
66
+ value.substring(value.length - UNREDACTED_LENGTH));
67
+ }
68
+ else {
69
+ return value;
70
+ }
71
+ }
72
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/server/implementation/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type AuthCookieConfig = {
2
+ maxAge: number | null;
3
+ };
4
+ export type AuthCookies = {
5
+ token: string | null;
6
+ refreshToken: string | null;
7
+ verifier: string | null;
8
+ };
9
+ export declare function authCookieNames(host?: string): {
10
+ token: string;
11
+ refreshToken: string;
12
+ verifier: string;
13
+ };
14
+ export declare function parseAuthCookies(cookieHeader: string | null | undefined, host?: string): AuthCookies;
15
+ export declare function serializeAuthCookies(cookies: AuthCookies, host?: string, config?: AuthCookieConfig): string[];
16
+ export declare function shouldProxyAuthAction(pathname: string, apiRoute: string): boolean;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM;;;;EAO5C;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACvC,IAAI,CAAC,EAAE,MAAM,GACZ,WAAW,CAQb;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,GAAE,gBAAmC,YA4B5C;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAKvE"}
@@ -0,0 +1,54 @@
1
+ import { parse, serialize } from "cookie";
2
+ import { isLocalHost } from "./utils.js";
3
+ export function authCookieNames(host) {
4
+ const prefix = isLocalHost(host) ? "" : "__Host-";
5
+ return {
6
+ token: `${prefix}__convexAuthJWT`,
7
+ refreshToken: `${prefix}__convexAuthRefreshToken`,
8
+ verifier: `${prefix}__convexAuthOAuthVerifier`,
9
+ };
10
+ }
11
+ export function parseAuthCookies(cookieHeader, host) {
12
+ const names = authCookieNames(host);
13
+ const parsed = parse(cookieHeader ?? "");
14
+ return {
15
+ token: parsed[names.token] ?? null,
16
+ refreshToken: parsed[names.refreshToken] ?? null,
17
+ verifier: parsed[names.verifier] ?? null,
18
+ };
19
+ }
20
+ export function serializeAuthCookies(cookies, host, config = { maxAge: null }) {
21
+ const names = authCookieNames(host);
22
+ const secure = !isLocalHost(host);
23
+ const base = {
24
+ path: "/",
25
+ httpOnly: true,
26
+ sameSite: "lax",
27
+ secure,
28
+ };
29
+ const maxAge = config.maxAge ?? undefined;
30
+ return [
31
+ serialize(names.token, cookies.token ?? "", {
32
+ ...base,
33
+ maxAge: cookies.token === null ? 0 : maxAge,
34
+ expires: cookies.token === null ? new Date(0) : undefined,
35
+ }),
36
+ serialize(names.refreshToken, cookies.refreshToken ?? "", {
37
+ ...base,
38
+ maxAge: cookies.refreshToken === null ? 0 : maxAge,
39
+ expires: cookies.refreshToken === null ? new Date(0) : undefined,
40
+ }),
41
+ serialize(names.verifier, cookies.verifier ?? "", {
42
+ ...base,
43
+ maxAge: cookies.verifier === null ? 0 : maxAge,
44
+ expires: cookies.verifier === null ? new Date(0) : undefined,
45
+ }),
46
+ ];
47
+ }
48
+ export function shouldProxyAuthAction(pathname, apiRoute) {
49
+ if (apiRoute.endsWith("/")) {
50
+ return pathname === apiRoute || pathname === apiRoute.slice(0, -1);
51
+ }
52
+ return pathname === apiRoute || pathname === `${apiRoute}/`;
53
+ }
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { InternalOptions } from "./types.js";
2
+ import { Cookie } from "@auth/core/lib/utils/cookie.js";
3
+ /**
4
+ * Generates an authorization/request token URL.
5
+ *
6
+ * [OAuth 2](https://www.oauth.com/oauth2-servers/authorization/the-authorization-request/)
7
+ */
8
+ export declare function getAuthorizationUrl(options: InternalOptions<"oauth" | "oidc">): Promise<{
9
+ redirect: string;
10
+ cookies: Cookie[];
11
+ signature: string;
12
+ }>;
13
+ //# sourceMappingURL=authorizationUrl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorizationUrl.d.ts","sourceRoot":"","sources":["../../../src/server/oauth/authorizationUrl.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAK7C,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAGxD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAEvC,OAAO,EAAE,eAAe,CAAC,OAAO,GAAG,MAAM,CAAC;;;;GA+F3C"}