create-croissant 0.1.0 → 0.1.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 (588) hide show
  1. package/dist/index.js +3 -3
  2. package/package.json +16 -8
  3. package/template/.prettierignore +10 -0
  4. package/template/.prettierrc +11 -0
  5. package/template/README.md +88 -0
  6. package/template/apps/web/.env.example +4 -0
  7. package/template/apps/web/components.json +23 -0
  8. package/template/apps/web/drizzle.config.ts +11 -0
  9. package/template/apps/web/eslint.config.js +10 -0
  10. package/template/apps/web/node_modules/@better-auth/core/LICENSE.md +20 -0
  11. package/template/apps/web/node_modules/@better-auth/core/README.md +17 -0
  12. package/template/apps/web/node_modules/@better-auth/core/dist/api/index.d.mts +278 -0
  13. package/template/apps/web/node_modules/@better-auth/core/dist/api/index.mjs +30 -0
  14. package/template/apps/web/node_modules/@better-auth/core/dist/async_hooks/index.d.mts +6 -0
  15. package/template/apps/web/node_modules/@better-auth/core/dist/async_hooks/index.mjs +20 -0
  16. package/template/apps/web/node_modules/@better-auth/core/dist/async_hooks/pure.index.d.mts +6 -0
  17. package/template/apps/web/node_modules/@better-auth/core/dist/async_hooks/pure.index.mjs +33 -0
  18. package/template/apps/web/node_modules/@better-auth/core/dist/context/endpoint-context.d.mts +18 -0
  19. package/template/apps/web/node_modules/@better-auth/core/dist/context/endpoint-context.mjs +29 -0
  20. package/template/apps/web/node_modules/@better-auth/core/dist/context/global.d.mts +6 -0
  21. package/template/apps/web/node_modules/@better-auth/core/dist/context/global.mjs +36 -0
  22. package/template/apps/web/node_modules/@better-auth/core/dist/context/index.d.mts +5 -0
  23. package/template/apps/web/node_modules/@better-auth/core/dist/context/index.mjs +5 -0
  24. package/template/apps/web/node_modules/@better-auth/core/dist/context/request-state.d.mts +27 -0
  25. package/template/apps/web/node_modules/@better-auth/core/dist/context/request-state.mjs +47 -0
  26. package/template/apps/web/node_modules/@better-auth/core/dist/context/transaction.d.mts +24 -0
  27. package/template/apps/web/node_modules/@better-auth/core/dist/context/transaction.mjs +93 -0
  28. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/factory.d.mts +17 -0
  29. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/factory.mjs +754 -0
  30. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/get-default-field-name.d.mts +18 -0
  31. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/get-default-field-name.mjs +36 -0
  32. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/get-default-model-name.d.mts +12 -0
  33. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/get-default-model-name.mjs +30 -0
  34. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/get-field-attributes.d.mts +26 -0
  35. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/get-field-attributes.mjs +37 -0
  36. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/get-field-name.d.mts +18 -0
  37. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/get-field-name.mjs +31 -0
  38. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/get-id-field.d.mts +36 -0
  39. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/get-id-field.mjs +64 -0
  40. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/get-model-name.d.mts +12 -0
  41. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/get-model-name.mjs +21 -0
  42. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/index.d.mts +525 -0
  43. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/index.mjs +24 -0
  44. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/types.d.mts +105 -0
  45. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/utils.d.mts +7 -0
  46. package/template/apps/web/node_modules/@better-auth/core/dist/db/adapter/utils.mjs +37 -0
  47. package/template/apps/web/node_modules/@better-auth/core/dist/db/get-tables.d.mts +6 -0
  48. package/template/apps/web/node_modules/@better-auth/core/dist/db/get-tables.mjs +265 -0
  49. package/template/apps/web/node_modules/@better-auth/core/dist/db/index.d.mts +10 -0
  50. package/template/apps/web/node_modules/@better-auth/core/dist/db/index.mjs +8 -0
  51. package/template/apps/web/node_modules/@better-auth/core/dist/db/plugin.d.mts +12 -0
  52. package/template/apps/web/node_modules/@better-auth/core/dist/db/schema/account.d.mts +28 -0
  53. package/template/apps/web/node_modules/@better-auth/core/dist/db/schema/account.mjs +17 -0
  54. package/template/apps/web/node_modules/@better-auth/core/dist/db/schema/rate-limit.d.mts +18 -0
  55. package/template/apps/web/node_modules/@better-auth/core/dist/db/schema/rate-limit.mjs +9 -0
  56. package/template/apps/web/node_modules/@better-auth/core/dist/db/schema/session.d.mts +23 -0
  57. package/template/apps/web/node_modules/@better-auth/core/dist/db/schema/session.mjs +12 -0
  58. package/template/apps/web/node_modules/@better-auth/core/dist/db/schema/shared.d.mts +10 -0
  59. package/template/apps/web/node_modules/@better-auth/core/dist/db/schema/shared.mjs +9 -0
  60. package/template/apps/web/node_modules/@better-auth/core/dist/db/schema/user.d.mts +22 -0
  61. package/template/apps/web/node_modules/@better-auth/core/dist/db/schema/user.mjs +11 -0
  62. package/template/apps/web/node_modules/@better-auth/core/dist/db/schema/verification.d.mts +21 -0
  63. package/template/apps/web/node_modules/@better-auth/core/dist/db/schema/verification.mjs +10 -0
  64. package/template/apps/web/node_modules/@better-auth/core/dist/db/type.d.mts +167 -0
  65. package/template/apps/web/node_modules/@better-auth/core/dist/env/color-depth.d.mts +4 -0
  66. package/template/apps/web/node_modules/@better-auth/core/dist/env/color-depth.mjs +86 -0
  67. package/template/apps/web/node_modules/@better-auth/core/dist/env/env-impl.d.mts +32 -0
  68. package/template/apps/web/node_modules/@better-auth/core/dist/env/env-impl.mjs +81 -0
  69. package/template/apps/web/node_modules/@better-auth/core/dist/env/index.d.mts +4 -0
  70. package/template/apps/web/node_modules/@better-auth/core/dist/env/index.mjs +4 -0
  71. package/template/apps/web/node_modules/@better-auth/core/dist/env/logger.d.mts +48 -0
  72. package/template/apps/web/node_modules/@better-auth/core/dist/env/logger.mjs +79 -0
  73. package/template/apps/web/node_modules/@better-auth/core/dist/error/codes.d.mts +68 -0
  74. package/template/apps/web/node_modules/@better-auth/core/dist/error/codes.mjs +54 -0
  75. package/template/apps/web/node_modules/@better-auth/core/dist/error/index.d.mts +19 -0
  76. package/template/apps/web/node_modules/@better-auth/core/dist/error/index.mjs +27 -0
  77. package/template/apps/web/node_modules/@better-auth/core/dist/index.d.mts +9 -0
  78. package/template/apps/web/node_modules/@better-auth/core/dist/index.mjs +1 -0
  79. package/template/apps/web/node_modules/@better-auth/core/dist/instrumentation/api.mjs +42 -0
  80. package/template/apps/web/node_modules/@better-auth/core/dist/instrumentation/attributes.d.mts +11 -0
  81. package/template/apps/web/node_modules/@better-auth/core/dist/instrumentation/attributes.mjs +10 -0
  82. package/template/apps/web/node_modules/@better-auth/core/dist/instrumentation/index.d.mts +3 -0
  83. package/template/apps/web/node_modules/@better-auth/core/dist/instrumentation/index.mjs +3 -0
  84. package/template/apps/web/node_modules/@better-auth/core/dist/instrumentation/tracer.d.mts +13 -0
  85. package/template/apps/web/node_modules/@better-auth/core/dist/instrumentation/tracer.mjs +53 -0
  86. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/client-credentials-token.d.mts +56 -0
  87. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/client-credentials-token.mjs +64 -0
  88. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/create-authorization-url.d.mts +44 -0
  89. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/create-authorization-url.mjs +41 -0
  90. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/index.d.mts +8 -0
  91. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/index.mjs +7 -0
  92. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/oauth-provider.d.mts +192 -0
  93. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/refresh-access-token.d.mts +54 -0
  94. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/refresh-access-token.mjs +73 -0
  95. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/utils.d.mts +7 -0
  96. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/utils.mjs +25 -0
  97. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/validate-authorization-code.d.mts +85 -0
  98. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/validate-authorization-code.mjs +79 -0
  99. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/verify.d.mts +42 -0
  100. package/template/apps/web/node_modules/@better-auth/core/dist/oauth2/verify.mjs +92 -0
  101. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/apple.d.mts +117 -0
  102. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/apple.mjs +101 -0
  103. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/atlassian.d.mts +70 -0
  104. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/atlassian.mjs +80 -0
  105. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/cognito.d.mts +85 -0
  106. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/cognito.mjs +161 -0
  107. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/discord.d.mts +124 -0
  108. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/discord.mjs +62 -0
  109. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/dropbox.d.mts +69 -0
  110. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/dropbox.mjs +72 -0
  111. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/facebook.d.mts +79 -0
  112. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/facebook.mjs +117 -0
  113. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/figma.d.mts +61 -0
  114. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/figma.mjs +83 -0
  115. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/github.d.mts +102 -0
  116. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/github.mjs +92 -0
  117. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/gitlab.d.mts +123 -0
  118. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/gitlab.mjs +79 -0
  119. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/google.d.mts +97 -0
  120. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/google.mjs +108 -0
  121. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/huggingface.d.mts +83 -0
  122. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/huggingface.mjs +73 -0
  123. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/index.d.mts +1834 -0
  124. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/index.mjs +78 -0
  125. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/kakao.d.mts +161 -0
  126. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/kakao.mjs +70 -0
  127. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/kick.d.mts +73 -0
  128. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/kick.mjs +68 -0
  129. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/line.d.mts +105 -0
  130. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/line.mjs +110 -0
  131. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/linear.d.mts +68 -0
  132. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/linear.mjs +85 -0
  133. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/linkedin.d.mts +67 -0
  134. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/linkedin.mjs +73 -0
  135. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/microsoft-entra-id.d.mts +174 -0
  136. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/microsoft-entra-id.mjs +135 -0
  137. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/naver.d.mts +92 -0
  138. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/naver.mjs +65 -0
  139. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/notion.d.mts +64 -0
  140. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/notion.mjs +72 -0
  141. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/paybin.d.mts +71 -0
  142. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/paybin.mjs +81 -0
  143. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/paypal.d.mts +129 -0
  144. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/paypal.mjs +140 -0
  145. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/polar.d.mts +74 -0
  146. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/polar.mjs +71 -0
  147. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/railway.d.mts +65 -0
  148. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/railway.mjs +74 -0
  149. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/reddit.d.mts +62 -0
  150. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/reddit.mjs +80 -0
  151. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/roblox.d.mts +70 -0
  152. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/roblox.mjs +57 -0
  153. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/salesforce.d.mts +79 -0
  154. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/salesforce.mjs +87 -0
  155. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/slack.d.mts +83 -0
  156. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/slack.mjs +66 -0
  157. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/spotify.d.mts +63 -0
  158. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/spotify.mjs +69 -0
  159. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/tiktok.d.mts +168 -0
  160. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/tiktok.mjs +60 -0
  161. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/twitch.d.mts +79 -0
  162. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/twitch.mjs +75 -0
  163. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/twitter.d.mts +126 -0
  164. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/twitter.mjs +85 -0
  165. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/vercel.d.mts +62 -0
  166. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/vercel.mjs +58 -0
  167. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/vk.d.mts +70 -0
  168. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/vk.mjs +81 -0
  169. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/wechat.d.mts +113 -0
  170. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/wechat.mjs +81 -0
  171. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/zoom.d.mts +163 -0
  172. package/template/apps/web/node_modules/@better-auth/core/dist/social-providers/zoom.mjs +69 -0
  173. package/template/apps/web/node_modules/@better-auth/core/dist/types/context.d.mts +277 -0
  174. package/template/apps/web/node_modules/@better-auth/core/dist/types/cookie.d.mts +15 -0
  175. package/template/apps/web/node_modules/@better-auth/core/dist/types/helper.d.mts +10 -0
  176. package/template/apps/web/node_modules/@better-auth/core/dist/types/index.d.mts +9 -0
  177. package/template/apps/web/node_modules/@better-auth/core/dist/types/init-options.d.mts +1358 -0
  178. package/template/apps/web/node_modules/@better-auth/core/dist/types/plugin-client.d.mts +113 -0
  179. package/template/apps/web/node_modules/@better-auth/core/dist/types/plugin.d.mts +124 -0
  180. package/template/apps/web/node_modules/@better-auth/core/dist/types/secret.d.mts +11 -0
  181. package/template/apps/web/node_modules/@better-auth/core/dist/utils/async.d.mts +22 -0
  182. package/template/apps/web/node_modules/@better-auth/core/dist/utils/async.mjs +32 -0
  183. package/template/apps/web/node_modules/@better-auth/core/dist/utils/db.d.mts +9 -0
  184. package/template/apps/web/node_modules/@better-auth/core/dist/utils/db.mjs +15 -0
  185. package/template/apps/web/node_modules/@better-auth/core/dist/utils/deprecate.d.mts +9 -0
  186. package/template/apps/web/node_modules/@better-auth/core/dist/utils/deprecate.mjs +16 -0
  187. package/template/apps/web/node_modules/@better-auth/core/dist/utils/error-codes.d.mts +13 -0
  188. package/template/apps/web/node_modules/@better-auth/core/dist/utils/error-codes.mjs +10 -0
  189. package/template/apps/web/node_modules/@better-auth/core/dist/utils/fetch-metadata.d.mts +4 -0
  190. package/template/apps/web/node_modules/@better-auth/core/dist/utils/fetch-metadata.mjs +6 -0
  191. package/template/apps/web/node_modules/@better-auth/core/dist/utils/host.d.mts +147 -0
  192. package/template/apps/web/node_modules/@better-auth/core/dist/utils/host.mjs +291 -0
  193. package/template/apps/web/node_modules/@better-auth/core/dist/utils/id.d.mts +4 -0
  194. package/template/apps/web/node_modules/@better-auth/core/dist/utils/id.mjs +7 -0
  195. package/template/apps/web/node_modules/@better-auth/core/dist/utils/ip.d.mts +54 -0
  196. package/template/apps/web/node_modules/@better-auth/core/dist/utils/ip.mjs +116 -0
  197. package/template/apps/web/node_modules/@better-auth/core/dist/utils/json.d.mts +4 -0
  198. package/template/apps/web/node_modules/@better-auth/core/dist/utils/json.mjs +41 -0
  199. package/template/apps/web/node_modules/@better-auth/core/dist/utils/string.d.mts +4 -0
  200. package/template/apps/web/node_modules/@better-auth/core/dist/utils/string.mjs +6 -0
  201. package/template/apps/web/node_modules/@better-auth/core/dist/utils/url.d.mts +20 -0
  202. package/template/apps/web/node_modules/@better-auth/core/dist/utils/url.mjs +31 -0
  203. package/template/apps/web/node_modules/@better-auth/core/package.json +187 -0
  204. package/template/apps/web/node_modules/@better-auth/core/src/api/index.ts +106 -0
  205. package/template/apps/web/node_modules/@better-auth/core/src/async_hooks/index.ts +40 -0
  206. package/template/apps/web/node_modules/@better-auth/core/src/async_hooks/pure.index.ts +46 -0
  207. package/template/apps/web/node_modules/@better-auth/core/src/context/endpoint-context.ts +50 -0
  208. package/template/apps/web/node_modules/@better-auth/core/src/context/global.ts +57 -0
  209. package/template/apps/web/node_modules/@better-auth/core/src/context/index.ts +23 -0
  210. package/template/apps/web/node_modules/@better-auth/core/src/context/request-state.ts +91 -0
  211. package/template/apps/web/node_modules/@better-auth/core/src/context/transaction.ts +136 -0
  212. package/template/apps/web/node_modules/@better-auth/core/src/db/adapter/factory.ts +1440 -0
  213. package/template/apps/web/node_modules/@better-auth/core/src/db/adapter/get-default-field-name.ts +59 -0
  214. package/template/apps/web/node_modules/@better-auth/core/src/db/adapter/get-default-model-name.ts +51 -0
  215. package/template/apps/web/node_modules/@better-auth/core/src/db/adapter/get-field-attributes.ts +62 -0
  216. package/template/apps/web/node_modules/@better-auth/core/src/db/adapter/get-field-name.ts +43 -0
  217. package/template/apps/web/node_modules/@better-auth/core/src/db/adapter/get-id-field.ts +150 -0
  218. package/template/apps/web/node_modules/@better-auth/core/src/db/adapter/get-model-name.ts +36 -0
  219. package/template/apps/web/node_modules/@better-auth/core/src/db/adapter/index.ts +567 -0
  220. package/template/apps/web/node_modules/@better-auth/core/src/db/adapter/types.ts +132 -0
  221. package/template/apps/web/node_modules/@better-auth/core/src/db/adapter/utils.ts +61 -0
  222. package/template/apps/web/node_modules/@better-auth/core/src/db/get-tables.ts +296 -0
  223. package/template/apps/web/node_modules/@better-auth/core/src/db/index.ts +43 -0
  224. package/template/apps/web/node_modules/@better-auth/core/src/db/plugin.ts +11 -0
  225. package/template/apps/web/node_modules/@better-auth/core/src/db/schema/account.ts +47 -0
  226. package/template/apps/web/node_modules/@better-auth/core/src/db/schema/rate-limit.ts +36 -0
  227. package/template/apps/web/node_modules/@better-auth/core/src/db/schema/session.ts +29 -0
  228. package/template/apps/web/node_modules/@better-auth/core/src/db/schema/shared.ts +7 -0
  229. package/template/apps/web/node_modules/@better-auth/core/src/db/schema/user.ts +28 -0
  230. package/template/apps/web/node_modules/@better-auth/core/src/db/schema/verification.ts +28 -0
  231. package/template/apps/web/node_modules/@better-auth/core/src/db/type.ts +333 -0
  232. package/template/apps/web/node_modules/@better-auth/core/src/env/color-depth.ts +172 -0
  233. package/template/apps/web/node_modules/@better-auth/core/src/env/env-impl.ts +124 -0
  234. package/template/apps/web/node_modules/@better-auth/core/src/env/index.ts +23 -0
  235. package/template/apps/web/node_modules/@better-auth/core/src/env/logger.ts +145 -0
  236. package/template/apps/web/node_modules/@better-auth/core/src/error/codes.ts +71 -0
  237. package/template/apps/web/node_modules/@better-auth/core/src/error/index.ts +35 -0
  238. package/template/apps/web/node_modules/@better-auth/core/src/index.ts +1 -0
  239. package/template/apps/web/node_modules/@better-auth/core/src/instrumentation/api.ts +64 -0
  240. package/template/apps/web/node_modules/@better-auth/core/src/instrumentation/attributes.ts +22 -0
  241. package/template/apps/web/node_modules/@better-auth/core/src/instrumentation/index.ts +2 -0
  242. package/template/apps/web/node_modules/@better-auth/core/src/instrumentation/tracer.ts +95 -0
  243. package/template/apps/web/node_modules/@better-auth/core/src/oauth2/client-credentials-token.ts +126 -0
  244. package/template/apps/web/node_modules/@better-auth/core/src/oauth2/create-authorization-url.ts +89 -0
  245. package/template/apps/web/node_modules/@better-auth/core/src/oauth2/index.ts +29 -0
  246. package/template/apps/web/node_modules/@better-auth/core/src/oauth2/oauth-provider.ts +222 -0
  247. package/template/apps/web/node_modules/@better-auth/core/src/oauth2/refresh-access-token.ts +157 -0
  248. package/template/apps/web/node_modules/@better-auth/core/src/oauth2/utils.ts +38 -0
  249. package/template/apps/web/node_modules/@better-auth/core/src/oauth2/validate-authorization-code.ts +180 -0
  250. package/template/apps/web/node_modules/@better-auth/core/src/oauth2/verify.ts +221 -0
  251. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/apple.ts +223 -0
  252. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/atlassian.ts +133 -0
  253. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/cognito.ts +280 -0
  254. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/discord.ts +170 -0
  255. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/dropbox.ts +112 -0
  256. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/facebook.ts +206 -0
  257. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/figma.ts +118 -0
  258. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/github.ts +184 -0
  259. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/gitlab.ts +155 -0
  260. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/google.ts +203 -0
  261. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/huggingface.ts +119 -0
  262. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/index.ts +132 -0
  263. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/kakao.ts +179 -0
  264. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/kick.ts +109 -0
  265. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/line.ts +169 -0
  266. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/linear.ts +121 -0
  267. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/linkedin.ts +110 -0
  268. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/microsoft-entra-id.ts +342 -0
  269. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/naver.ts +113 -0
  270. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/notion.ts +108 -0
  271. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/paybin.ts +118 -0
  272. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/paypal.ts +263 -0
  273. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/polar.ts +111 -0
  274. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/railway.ts +100 -0
  275. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/reddit.ts +122 -0
  276. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/roblox.ts +112 -0
  277. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/salesforce.ts +159 -0
  278. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/slack.ts +112 -0
  279. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/spotify.ts +94 -0
  280. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/tiktok.ts +211 -0
  281. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/twitch.ts +112 -0
  282. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/twitter.ts +199 -0
  283. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/vercel.ts +87 -0
  284. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/vk.ts +125 -0
  285. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/wechat.ts +213 -0
  286. package/template/apps/web/node_modules/@better-auth/core/src/social-providers/zoom.ts +230 -0
  287. package/template/apps/web/node_modules/@better-auth/core/src/types/context.ts +415 -0
  288. package/template/apps/web/node_modules/@better-auth/core/src/types/cookie.ts +10 -0
  289. package/template/apps/web/node_modules/@better-auth/core/src/types/helper.ts +27 -0
  290. package/template/apps/web/node_modules/@better-auth/core/src/types/index.ts +40 -0
  291. package/template/apps/web/node_modules/@better-auth/core/src/types/init-options.ts +1610 -0
  292. package/template/apps/web/node_modules/@better-auth/core/src/types/plugin-client.ts +129 -0
  293. package/template/apps/web/node_modules/@better-auth/core/src/types/plugin.ts +163 -0
  294. package/template/apps/web/node_modules/@better-auth/core/src/types/secret.ts +8 -0
  295. package/template/apps/web/node_modules/@better-auth/core/src/utils/async.ts +53 -0
  296. package/template/apps/web/node_modules/@better-auth/core/src/utils/db.ts +20 -0
  297. package/template/apps/web/node_modules/@better-auth/core/src/utils/deprecate.ts +21 -0
  298. package/template/apps/web/node_modules/@better-auth/core/src/utils/error-codes.ts +68 -0
  299. package/template/apps/web/node_modules/@better-auth/core/src/utils/fetch-metadata.ts +3 -0
  300. package/template/apps/web/node_modules/@better-auth/core/src/utils/host.ts +401 -0
  301. package/template/apps/web/node_modules/@better-auth/core/src/utils/id.ts +5 -0
  302. package/template/apps/web/node_modules/@better-auth/core/src/utils/ip.ts +211 -0
  303. package/template/apps/web/node_modules/@better-auth/core/src/utils/json.ts +56 -0
  304. package/template/apps/web/node_modules/@better-auth/core/src/utils/string.ts +3 -0
  305. package/template/apps/web/node_modules/@better-auth/core/src/utils/url.ts +43 -0
  306. package/template/apps/web/node_modules/@better-auth/drizzle-adapter/LICENSE.md +20 -0
  307. package/template/apps/web/node_modules/@better-auth/drizzle-adapter/README.md +17 -0
  308. package/template/apps/web/node_modules/@better-auth/drizzle-adapter/dist/index.d.mts +47 -0
  309. package/template/apps/web/node_modules/@better-auth/drizzle-adapter/dist/index.mjs +458 -0
  310. package/template/apps/web/node_modules/@better-auth/drizzle-adapter/package.json +62 -0
  311. package/template/apps/web/node_modules/@better-auth/utils/README.md +384 -0
  312. package/template/apps/web/node_modules/@better-auth/utils/dist/base32.cjs +104 -0
  313. package/template/apps/web/node_modules/@better-auth/utils/dist/base32.d.cts +44 -0
  314. package/template/apps/web/node_modules/@better-auth/utils/dist/base32.d.mts +44 -0
  315. package/template/apps/web/node_modules/@better-auth/utils/dist/base32.d.ts +44 -0
  316. package/template/apps/web/node_modules/@better-auth/utils/dist/base32.mjs +101 -0
  317. package/template/apps/web/node_modules/@better-auth/utils/dist/base64.cjs +80 -0
  318. package/template/apps/web/node_modules/@better-auth/utils/dist/base64.d.cts +16 -0
  319. package/template/apps/web/node_modules/@better-auth/utils/dist/base64.d.mts +16 -0
  320. package/template/apps/web/node_modules/@better-auth/utils/dist/base64.d.ts +16 -0
  321. package/template/apps/web/node_modules/@better-auth/utils/dist/base64.mjs +77 -0
  322. package/template/apps/web/node_modules/@better-auth/utils/dist/binary.cjs +16 -0
  323. package/template/apps/web/node_modules/@better-auth/utils/dist/binary.d.cts +8 -0
  324. package/template/apps/web/node_modules/@better-auth/utils/dist/binary.d.mts +8 -0
  325. package/template/apps/web/node_modules/@better-auth/utils/dist/binary.d.ts +8 -0
  326. package/template/apps/web/node_modules/@better-auth/utils/dist/binary.mjs +14 -0
  327. package/template/apps/web/node_modules/@better-auth/utils/dist/ecdsa.cjs +90 -0
  328. package/template/apps/web/node_modules/@better-auth/utils/dist/ecdsa.d.cts +19 -0
  329. package/template/apps/web/node_modules/@better-auth/utils/dist/ecdsa.d.mts +19 -0
  330. package/template/apps/web/node_modules/@better-auth/utils/dist/ecdsa.d.ts +19 -0
  331. package/template/apps/web/node_modules/@better-auth/utils/dist/ecdsa.mjs +88 -0
  332. package/template/apps/web/node_modules/@better-auth/utils/dist/hash.cjs +31 -0
  333. package/template/apps/web/node_modules/@better-auth/utils/dist/hash.d.cts +7 -0
  334. package/template/apps/web/node_modules/@better-auth/utils/dist/hash.d.mts +7 -0
  335. package/template/apps/web/node_modules/@better-auth/utils/dist/hash.d.ts +7 -0
  336. package/template/apps/web/node_modules/@better-auth/utils/dist/hash.mjs +29 -0
  337. package/template/apps/web/node_modules/@better-auth/utils/dist/hex.cjs +40 -0
  338. package/template/apps/web/node_modules/@better-auth/utils/dist/hex.d.cts +8 -0
  339. package/template/apps/web/node_modules/@better-auth/utils/dist/hex.d.mts +8 -0
  340. package/template/apps/web/node_modules/@better-auth/utils/dist/hex.d.ts +8 -0
  341. package/template/apps/web/node_modules/@better-auth/utils/dist/hex.mjs +38 -0
  342. package/template/apps/web/node_modules/@better-auth/utils/dist/hmac.cjs +58 -0
  343. package/template/apps/web/node_modules/@better-auth/utils/dist/hmac.d.cts +9 -0
  344. package/template/apps/web/node_modules/@better-auth/utils/dist/hmac.d.mts +9 -0
  345. package/template/apps/web/node_modules/@better-auth/utils/dist/hmac.d.ts +9 -0
  346. package/template/apps/web/node_modules/@better-auth/utils/dist/hmac.mjs +56 -0
  347. package/template/apps/web/node_modules/@better-auth/utils/dist/index.cjs +10 -0
  348. package/template/apps/web/node_modules/@better-auth/utils/dist/index.d.cts +3 -0
  349. package/template/apps/web/node_modules/@better-auth/utils/dist/index.d.mts +3 -0
  350. package/template/apps/web/node_modules/@better-auth/utils/dist/index.d.ts +3 -0
  351. package/template/apps/web/node_modules/@better-auth/utils/dist/index.mjs +8 -0
  352. package/template/apps/web/node_modules/@better-auth/utils/dist/otp.cjs +90 -0
  353. package/template/apps/web/node_modules/@better-auth/utils/dist/otp.d.cts +13 -0
  354. package/template/apps/web/node_modules/@better-auth/utils/dist/otp.d.mts +13 -0
  355. package/template/apps/web/node_modules/@better-auth/utils/dist/otp.d.ts +13 -0
  356. package/template/apps/web/node_modules/@better-auth/utils/dist/otp.mjs +88 -0
  357. package/template/apps/web/node_modules/@better-auth/utils/dist/password.cjs +36 -0
  358. package/template/apps/web/node_modules/@better-auth/utils/dist/password.d.cts +4 -0
  359. package/template/apps/web/node_modules/@better-auth/utils/dist/password.d.mts +4 -0
  360. package/template/apps/web/node_modules/@better-auth/utils/dist/password.d.ts +4 -0
  361. package/template/apps/web/node_modules/@better-auth/utils/dist/password.mjs +33 -0
  362. package/template/apps/web/node_modules/@better-auth/utils/dist/password.node.cjs +47 -0
  363. package/template/apps/web/node_modules/@better-auth/utils/dist/password.node.d.cts +4 -0
  364. package/template/apps/web/node_modules/@better-auth/utils/dist/password.node.d.mts +4 -0
  365. package/template/apps/web/node_modules/@better-auth/utils/dist/password.node.d.ts +4 -0
  366. package/template/apps/web/node_modules/@better-auth/utils/dist/password.node.mjs +44 -0
  367. package/template/apps/web/node_modules/@better-auth/utils/dist/random.cjs +55 -0
  368. package/template/apps/web/node_modules/@better-auth/utils/dist/random.d.cts +4 -0
  369. package/template/apps/web/node_modules/@better-auth/utils/dist/random.d.mts +4 -0
  370. package/template/apps/web/node_modules/@better-auth/utils/dist/random.d.ts +4 -0
  371. package/template/apps/web/node_modules/@better-auth/utils/dist/random.mjs +53 -0
  372. package/template/apps/web/node_modules/@better-auth/utils/dist/rsa.cjs +76 -0
  373. package/template/apps/web/node_modules/@better-auth/utils/dist/rsa.d.cts +16 -0
  374. package/template/apps/web/node_modules/@better-auth/utils/dist/rsa.d.mts +16 -0
  375. package/template/apps/web/node_modules/@better-auth/utils/dist/rsa.d.ts +16 -0
  376. package/template/apps/web/node_modules/@better-auth/utils/dist/rsa.mjs +74 -0
  377. package/template/apps/web/node_modules/@better-auth/utils/dist/shared/utils.ecd028f7.d.cts +22 -0
  378. package/template/apps/web/node_modules/@better-auth/utils/dist/shared/utils.ecd028f7.d.mts +22 -0
  379. package/template/apps/web/node_modules/@better-auth/utils/dist/shared/utils.ecd028f7.d.ts +22 -0
  380. package/template/apps/web/node_modules/@better-auth/utils/package.json +95 -0
  381. package/template/apps/web/node_modules/better-call/LICENSE +21 -0
  382. package/template/apps/web/node_modules/better-call/dist/_virtual/_rolldown/runtime.cjs +29 -0
  383. package/template/apps/web/node_modules/better-call/dist/adapters/node/request.cjs +181 -0
  384. package/template/apps/web/node_modules/better-call/dist/adapters/node/request.cjs.map +1 -0
  385. package/template/apps/web/node_modules/better-call/dist/adapters/node/request.d.cts +16 -0
  386. package/template/apps/web/node_modules/better-call/dist/adapters/node/request.d.mts +16 -0
  387. package/template/apps/web/node_modules/better-call/dist/adapters/node/request.mjs +178 -0
  388. package/template/apps/web/node_modules/better-call/dist/adapters/node/request.mjs.map +1 -0
  389. package/template/apps/web/node_modules/better-call/dist/client.cjs +23 -0
  390. package/template/apps/web/node_modules/better-call/dist/client.cjs.map +1 -0
  391. package/template/apps/web/node_modules/better-call/dist/client.d.cts +53 -0
  392. package/template/apps/web/node_modules/better-call/dist/client.d.mts +53 -0
  393. package/template/apps/web/node_modules/better-call/dist/client.mjs +14 -0
  394. package/template/apps/web/node_modules/better-call/dist/client.mjs.map +1 -0
  395. package/template/apps/web/node_modules/better-call/dist/context.cjs +103 -0
  396. package/template/apps/web/node_modules/better-call/dist/context.cjs.map +1 -0
  397. package/template/apps/web/node_modules/better-call/dist/context.d.cts +341 -0
  398. package/template/apps/web/node_modules/better-call/dist/context.d.mts +341 -0
  399. package/template/apps/web/node_modules/better-call/dist/context.mjs +103 -0
  400. package/template/apps/web/node_modules/better-call/dist/context.mjs.map +1 -0
  401. package/template/apps/web/node_modules/better-call/dist/cookies.cjs +87 -0
  402. package/template/apps/web/node_modules/better-call/dist/cookies.cjs.map +1 -0
  403. package/template/apps/web/node_modules/better-call/dist/cookies.d.cts +103 -0
  404. package/template/apps/web/node_modules/better-call/dist/cookies.d.mts +103 -0
  405. package/template/apps/web/node_modules/better-call/dist/cookies.mjs +84 -0
  406. package/template/apps/web/node_modules/better-call/dist/cookies.mjs.map +1 -0
  407. package/template/apps/web/node_modules/better-call/dist/crypto.cjs +39 -0
  408. package/template/apps/web/node_modules/better-call/dist/crypto.cjs.map +1 -0
  409. package/template/apps/web/node_modules/better-call/dist/crypto.mjs +36 -0
  410. package/template/apps/web/node_modules/better-call/dist/crypto.mjs.map +1 -0
  411. package/template/apps/web/node_modules/better-call/dist/endpoint.cjs +70 -0
  412. package/template/apps/web/node_modules/better-call/dist/endpoint.cjs.map +1 -0
  413. package/template/apps/web/node_modules/better-call/dist/endpoint.d.cts +475 -0
  414. package/template/apps/web/node_modules/better-call/dist/endpoint.d.mts +475 -0
  415. package/template/apps/web/node_modules/better-call/dist/endpoint.mjs +70 -0
  416. package/template/apps/web/node_modules/better-call/dist/endpoint.mjs.map +1 -0
  417. package/template/apps/web/node_modules/better-call/dist/error.cjs +141 -0
  418. package/template/apps/web/node_modules/better-call/dist/error.cjs.map +1 -0
  419. package/template/apps/web/node_modules/better-call/dist/error.d.cts +103 -0
  420. package/template/apps/web/node_modules/better-call/dist/error.d.mts +103 -0
  421. package/template/apps/web/node_modules/better-call/dist/error.mjs +133 -0
  422. package/template/apps/web/node_modules/better-call/dist/error.mjs.map +1 -0
  423. package/template/apps/web/node_modules/better-call/dist/helper.d.cts +12 -0
  424. package/template/apps/web/node_modules/better-call/dist/helper.d.mts +12 -0
  425. package/template/apps/web/node_modules/better-call/dist/index.cjs +28 -0
  426. package/template/apps/web/node_modules/better-call/dist/index.d.cts +11 -0
  427. package/template/apps/web/node_modules/better-call/dist/index.d.mts +11 -0
  428. package/template/apps/web/node_modules/better-call/dist/index.mjs +10 -0
  429. package/template/apps/web/node_modules/better-call/dist/middleware.cjs +52 -0
  430. package/template/apps/web/node_modules/better-call/dist/middleware.cjs.map +1 -0
  431. package/template/apps/web/node_modules/better-call/dist/middleware.d.cts +123 -0
  432. package/template/apps/web/node_modules/better-call/dist/middleware.d.mts +123 -0
  433. package/template/apps/web/node_modules/better-call/dist/middleware.mjs +52 -0
  434. package/template/apps/web/node_modules/better-call/dist/middleware.mjs.map +1 -0
  435. package/template/apps/web/node_modules/better-call/dist/node.cjs +18 -0
  436. package/template/apps/web/node_modules/better-call/dist/node.cjs.map +1 -0
  437. package/template/apps/web/node_modules/better-call/dist/node.d.cts +9 -0
  438. package/template/apps/web/node_modules/better-call/dist/node.d.mts +9 -0
  439. package/template/apps/web/node_modules/better-call/dist/node.mjs +15 -0
  440. package/template/apps/web/node_modules/better-call/dist/node.mjs.map +1 -0
  441. package/template/apps/web/node_modules/better-call/dist/openapi.cjs +191 -0
  442. package/template/apps/web/node_modules/better-call/dist/openapi.cjs.map +1 -0
  443. package/template/apps/web/node_modules/better-call/dist/openapi.d.cts +113 -0
  444. package/template/apps/web/node_modules/better-call/dist/openapi.d.mts +113 -0
  445. package/template/apps/web/node_modules/better-call/dist/openapi.mjs +189 -0
  446. package/template/apps/web/node_modules/better-call/dist/openapi.mjs.map +1 -0
  447. package/template/apps/web/node_modules/better-call/dist/router.cjs +118 -0
  448. package/template/apps/web/node_modules/better-call/dist/router.cjs.map +1 -0
  449. package/template/apps/web/node_modules/better-call/dist/router.d.cts +103 -0
  450. package/template/apps/web/node_modules/better-call/dist/router.d.mts +103 -0
  451. package/template/apps/web/node_modules/better-call/dist/router.mjs +117 -0
  452. package/template/apps/web/node_modules/better-call/dist/router.mjs.map +1 -0
  453. package/template/apps/web/node_modules/better-call/dist/standard-schema.d.cts +59 -0
  454. package/template/apps/web/node_modules/better-call/dist/standard-schema.d.mts +59 -0
  455. package/template/apps/web/node_modules/better-call/dist/to-response.cjs +153 -0
  456. package/template/apps/web/node_modules/better-call/dist/to-response.cjs.map +1 -0
  457. package/template/apps/web/node_modules/better-call/dist/to-response.d.cts +12 -0
  458. package/template/apps/web/node_modules/better-call/dist/to-response.d.mts +12 -0
  459. package/template/apps/web/node_modules/better-call/dist/to-response.mjs +153 -0
  460. package/template/apps/web/node_modules/better-call/dist/to-response.mjs.map +1 -0
  461. package/template/apps/web/node_modules/better-call/dist/utils.cjs +86 -0
  462. package/template/apps/web/node_modules/better-call/dist/utils.cjs.map +1 -0
  463. package/template/apps/web/node_modules/better-call/dist/utils.mjs +82 -0
  464. package/template/apps/web/node_modules/better-call/dist/utils.mjs.map +1 -0
  465. package/template/apps/web/node_modules/better-call/dist/validator.cjs +58 -0
  466. package/template/apps/web/node_modules/better-call/dist/validator.cjs.map +1 -0
  467. package/template/apps/web/node_modules/better-call/dist/validator.mjs +57 -0
  468. package/template/apps/web/node_modules/better-call/dist/validator.mjs.map +1 -0
  469. package/template/apps/web/node_modules/better-call/package.json +96 -0
  470. package/template/apps/web/node_modules/set-cookie-parser/LICENSE +21 -0
  471. package/template/apps/web/node_modules/set-cookie-parser/README.md +169 -0
  472. package/template/apps/web/node_modules/set-cookie-parser/dist/.eslintrc.cjs +16 -0
  473. package/template/apps/web/node_modules/set-cookie-parser/dist/set-cookie.cjs +260 -0
  474. package/template/apps/web/node_modules/set-cookie-parser/lib/set-cookie.d.ts +119 -0
  475. package/template/apps/web/node_modules/set-cookie-parser/lib/set-cookie.js +265 -0
  476. package/template/apps/web/node_modules/set-cookie-parser/package.json +61 -0
  477. package/template/apps/web/package.json +44 -0
  478. package/template/apps/web/public/favicon.ico +0 -0
  479. package/template/apps/web/public/manifest.json +25 -0
  480. package/template/apps/web/public/robots.txt +3 -0
  481. package/template/apps/web/src/components/app-sidebar.tsx +183 -0
  482. package/template/apps/web/src/components/login-form.tsx +111 -0
  483. package/template/apps/web/src/components/search-form.tsx +27 -0
  484. package/template/apps/web/src/components/signup-form.tsx +137 -0
  485. package/template/apps/web/src/components/version-switcher.tsx +64 -0
  486. package/template/apps/web/src/hooks/use-mobile.ts +19 -0
  487. package/template/apps/web/src/lib/auth-client.ts +3 -0
  488. package/template/apps/web/src/lib/auth-utils.ts +15 -0
  489. package/template/apps/web/src/lib/orpc.ts +32 -0
  490. package/template/apps/web/src/routeTree.gen.ts +171 -0
  491. package/template/apps/web/src/router.tsx +20 -0
  492. package/template/apps/web/src/routes/__root.tsx +41 -0
  493. package/template/apps/web/src/routes/api/auth/$.ts +15 -0
  494. package/template/apps/web/src/routes/api/rpc.$.ts +34 -0
  495. package/template/apps/web/src/routes/dashboard.tsx +59 -0
  496. package/template/apps/web/src/routes/index.tsx +57 -0
  497. package/template/apps/web/src/routes/login.tsx +16 -0
  498. package/template/apps/web/src/routes/signup.tsx +16 -0
  499. package/template/apps/web/tsconfig.json +29 -0
  500. package/template/apps/web/vite.config.ts +19 -0
  501. package/template/docker-compose.yml +16 -0
  502. package/template/package.json +35 -0
  503. package/template/packages/auth/eslint.config.ts +3 -0
  504. package/template/packages/auth/package.json +24 -0
  505. package/template/packages/auth/src/lib/auth.ts +13 -0
  506. package/template/packages/auth/tsconfig.json +17 -0
  507. package/template/packages/auth/tsconfig.lint.json +14 -0
  508. package/template/packages/db/eslint.config.ts +3 -0
  509. package/template/packages/db/package.json +27 -0
  510. package/template/packages/db/src/auth-schema.ts +93 -0
  511. package/template/packages/db/src/index.ts +7 -0
  512. package/template/packages/db/src/planets-schema.ts +13 -0
  513. package/template/packages/db/src/schema.ts +2 -0
  514. package/template/packages/db/tsconfig.json +17 -0
  515. package/template/packages/db/tsconfig.lint.json +14 -0
  516. package/template/packages/orpc/eslint.config.ts +3 -0
  517. package/template/packages/orpc/package.json +23 -0
  518. package/template/packages/orpc/src/lib/router.ts +52 -0
  519. package/template/packages/orpc/tsconfig.json +17 -0
  520. package/template/packages/orpc/tsconfig.lint.json +14 -0
  521. package/template/packages/ui/components.json +23 -0
  522. package/template/packages/ui/eslint.config.ts +3 -0
  523. package/template/packages/ui/package.json +48 -0
  524. package/template/packages/ui/src/components/.gitkeep +0 -0
  525. package/template/packages/ui/src/components/accordion.tsx +72 -0
  526. package/template/packages/ui/src/components/alert-dialog.tsx +187 -0
  527. package/template/packages/ui/src/components/alert.tsx +77 -0
  528. package/template/packages/ui/src/components/aspect-ratio.tsx +22 -0
  529. package/template/packages/ui/src/components/avatar.tsx +107 -0
  530. package/template/packages/ui/src/components/badge.tsx +53 -0
  531. package/template/packages/ui/src/components/breadcrumb.tsx +125 -0
  532. package/template/packages/ui/src/components/button-group.tsx +88 -0
  533. package/template/packages/ui/src/components/button.tsx +59 -0
  534. package/template/packages/ui/src/components/calendar.tsx +229 -0
  535. package/template/packages/ui/src/components/card.tsx +103 -0
  536. package/template/packages/ui/src/components/carousel.tsx +240 -0
  537. package/template/packages/ui/src/components/chart.tsx +371 -0
  538. package/template/packages/ui/src/components/checkbox.tsx +29 -0
  539. package/template/packages/ui/src/components/collapsible.tsx +19 -0
  540. package/template/packages/ui/src/components/combobox.tsx +295 -0
  541. package/template/packages/ui/src/components/command.tsx +196 -0
  542. package/template/packages/ui/src/components/context-menu.tsx +271 -0
  543. package/template/packages/ui/src/components/dialog.tsx +158 -0
  544. package/template/packages/ui/src/components/direction.tsx +4 -0
  545. package/template/packages/ui/src/components/drawer.tsx +134 -0
  546. package/template/packages/ui/src/components/dropdown-menu.tsx +266 -0
  547. package/template/packages/ui/src/components/empty.tsx +105 -0
  548. package/template/packages/ui/src/components/field.tsx +237 -0
  549. package/template/packages/ui/src/components/hover-card.tsx +51 -0
  550. package/template/packages/ui/src/components/input-group.tsx +159 -0
  551. package/template/packages/ui/src/components/input-otp.tsx +85 -0
  552. package/template/packages/ui/src/components/input.tsx +20 -0
  553. package/template/packages/ui/src/components/item.tsx +202 -0
  554. package/template/packages/ui/src/components/kbd.tsx +26 -0
  555. package/template/packages/ui/src/components/label.tsx +20 -0
  556. package/template/packages/ui/src/components/menubar.tsx +280 -0
  557. package/template/packages/ui/src/components/native-select.tsx +61 -0
  558. package/template/packages/ui/src/components/navigation-menu.tsx +168 -0
  559. package/template/packages/ui/src/components/pagination.tsx +130 -0
  560. package/template/packages/ui/src/components/popover.tsx +88 -0
  561. package/template/packages/ui/src/components/progress.tsx +83 -0
  562. package/template/packages/ui/src/components/radio-group.tsx +36 -0
  563. package/template/packages/ui/src/components/resizable.tsx +50 -0
  564. package/template/packages/ui/src/components/scroll-area.tsx +53 -0
  565. package/template/packages/ui/src/components/select.tsx +201 -0
  566. package/template/packages/ui/src/components/separator.tsx +23 -0
  567. package/template/packages/ui/src/components/sheet.tsx +138 -0
  568. package/template/packages/ui/src/components/sidebar.tsx +726 -0
  569. package/template/packages/ui/src/components/skeleton.tsx +13 -0
  570. package/template/packages/ui/src/components/slider.tsx +52 -0
  571. package/template/packages/ui/src/components/sonner.tsx +50 -0
  572. package/template/packages/ui/src/components/spinner.tsx +10 -0
  573. package/template/packages/ui/src/components/switch.tsx +30 -0
  574. package/template/packages/ui/src/components/table.tsx +116 -0
  575. package/template/packages/ui/src/components/tabs.tsx +81 -0
  576. package/template/packages/ui/src/components/textarea.tsx +18 -0
  577. package/template/packages/ui/src/components/toggle-group.tsx +87 -0
  578. package/template/packages/ui/src/components/toggle.tsx +46 -0
  579. package/template/packages/ui/src/components/tooltip.tsx +64 -0
  580. package/template/packages/ui/src/hooks/.gitkeep +0 -0
  581. package/template/packages/ui/src/hooks/use-mobile.ts +19 -0
  582. package/template/packages/ui/src/lib/.gitkeep +0 -0
  583. package/template/packages/ui/src/lib/utils.ts +7 -0
  584. package/template/packages/ui/src/styles/globals.css +130 -0
  585. package/template/packages/ui/tsconfig.json +17 -0
  586. package/template/packages/ui/tsconfig.lint.json +14 -0
  587. package/template/tsconfig.json +9 -0
  588. package/template/turbo.json +24 -0
@@ -0,0 +1,199 @@
1
+ import { betterFetch } from "@better-fetch/fetch";
2
+ import type { OAuthProvider, ProviderOptions } from "../oauth2";
3
+ import {
4
+ createAuthorizationURL,
5
+ refreshAccessToken,
6
+ validateAuthorizationCode,
7
+ } from "../oauth2";
8
+
9
+ export interface TwitterProfile {
10
+ data: {
11
+ /**
12
+ * Unique identifier of this user. This is returned as a string in order to avoid complications with languages and tools
13
+ * that cannot handle large integers.
14
+ */
15
+ id: string;
16
+ /** The friendly name of this user, as shown on their profile. */
17
+ name: string;
18
+ /** The email address of this user. */
19
+ email?: string | undefined;
20
+ /** The Twitter handle (screen name) of this user. */
21
+ username: string;
22
+ /**
23
+ * The location specified in the user's profile, if the user provided one.
24
+ * As this is a freeform value, it may not indicate a valid location, but it may be fuzzily evaluated when performing searches with location queries.
25
+ *
26
+ * To return this field, add `user.fields=location` in the authorization request's query parameter.
27
+ */
28
+ location?: string | undefined;
29
+ /**
30
+ * This object and its children fields contain details about text that has a special meaning in the user's description.
31
+ *
32
+ *To return this field, add `user.fields=entities` in the authorization request's query parameter.
33
+ */
34
+ entities?:
35
+ | {
36
+ /** Contains details about the user's profile website. */
37
+ url: {
38
+ /** Contains details about the user's profile website. */
39
+ urls: Array<{
40
+ /** The start position (zero-based) of the recognized user's profile website. All start indices are inclusive. */
41
+ start: number;
42
+ /** The end position (zero-based) of the recognized user's profile website. This end index is exclusive. */
43
+ end: number;
44
+ /** The URL in the format entered by the user. */
45
+ url: string;
46
+ /** The fully resolved URL. */
47
+ expanded_url: string;
48
+ /** The URL as displayed in the user's profile. */
49
+ display_url: string;
50
+ }>;
51
+ };
52
+ /** Contains details about URLs, Hashtags, Cashtags, or mentions located within a user's description. */
53
+ description: {
54
+ hashtags: Array<{
55
+ start: number;
56
+ end: number;
57
+ tag: string;
58
+ }>;
59
+ };
60
+ }
61
+ | undefined;
62
+ /**
63
+ * Indicate if this user is a verified Twitter user.
64
+ *
65
+ * To return this field, add `user.fields=verified` in the authorization request's query parameter.
66
+ */
67
+ verified?: boolean | undefined;
68
+ /**
69
+ * The text of this user's profile description (also known as bio), if the user provided one.
70
+ *
71
+ * To return this field, add `user.fields=description` in the authorization request's query parameter.
72
+ */
73
+ description?: string | undefined;
74
+ /**
75
+ * The URL specified in the user's profile, if present.
76
+ *
77
+ * To return this field, add `user.fields=url` in the authorization request's query parameter.
78
+ */
79
+ url?: string | undefined;
80
+ /** The URL to the profile image for this user, as shown on the user's profile. */
81
+ profile_image_url?: string | undefined;
82
+ protected?: boolean | undefined;
83
+ /**
84
+ * Unique identifier of this user's pinned Tweet.
85
+ *
86
+ * You can obtain the expanded object in `includes.tweets` by adding `expansions=pinned_tweet_id` in the authorization request's query parameter.
87
+ */
88
+ pinned_tweet_id?: string | undefined;
89
+ created_at?: string | undefined;
90
+ };
91
+ includes?:
92
+ | {
93
+ tweets?: Array<{
94
+ id: string;
95
+ text: string;
96
+ }>;
97
+ }
98
+ | undefined;
99
+ [claims: string]: unknown;
100
+ }
101
+
102
+ export interface TwitterOption extends ProviderOptions<TwitterProfile> {
103
+ clientId: string;
104
+ }
105
+
106
+ export const twitter = (options: TwitterOption) => {
107
+ const tokenEndpoint = "https://api.x.com/2/oauth2/token";
108
+ return {
109
+ id: "twitter",
110
+ name: "Twitter",
111
+ createAuthorizationURL(data) {
112
+ const _scopes = options.disableDefaultScope
113
+ ? []
114
+ : ["users.read", "tweet.read", "offline.access", "users.email"];
115
+ if (options.scope) _scopes.push(...options.scope);
116
+ if (data.scopes) _scopes.push(...data.scopes);
117
+ return createAuthorizationURL({
118
+ id: "twitter",
119
+ options,
120
+ authorizationEndpoint: "https://x.com/i/oauth2/authorize",
121
+ scopes: _scopes,
122
+ state: data.state,
123
+ codeVerifier: data.codeVerifier,
124
+ redirectURI: data.redirectURI,
125
+ });
126
+ },
127
+ validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) => {
128
+ return validateAuthorizationCode({
129
+ code,
130
+ codeVerifier,
131
+ authentication: "basic",
132
+ redirectURI,
133
+ options,
134
+ tokenEndpoint,
135
+ });
136
+ },
137
+
138
+ refreshAccessToken: options.refreshAccessToken
139
+ ? options.refreshAccessToken
140
+ : async (refreshToken) => {
141
+ return refreshAccessToken({
142
+ refreshToken,
143
+ options: {
144
+ clientId: options.clientId,
145
+ clientKey: options.clientKey,
146
+ clientSecret: options.clientSecret,
147
+ },
148
+ authentication: "basic",
149
+ tokenEndpoint,
150
+ });
151
+ },
152
+ async getUserInfo(token) {
153
+ if (options.getUserInfo) {
154
+ return options.getUserInfo(token);
155
+ }
156
+ const { data: profile, error: profileError } =
157
+ await betterFetch<TwitterProfile>(
158
+ "https://api.x.com/2/users/me?user.fields=profile_image_url",
159
+ {
160
+ method: "GET",
161
+ headers: {
162
+ Authorization: `Bearer ${token.accessToken}`,
163
+ },
164
+ },
165
+ );
166
+
167
+ if (profileError) {
168
+ return null;
169
+ }
170
+
171
+ const { data: emailData, error: emailError } = await betterFetch<{
172
+ data: { confirmed_email: string };
173
+ }>("https://api.x.com/2/users/me?user.fields=confirmed_email", {
174
+ method: "GET",
175
+ headers: {
176
+ Authorization: `Bearer ${token.accessToken}`,
177
+ },
178
+ });
179
+ let emailVerified = false;
180
+ if (!emailError && emailData?.data?.confirmed_email) {
181
+ profile.data.email = emailData.data.confirmed_email;
182
+ emailVerified = true;
183
+ }
184
+ const userMap = await options.mapProfileToUser?.(profile);
185
+ return {
186
+ user: {
187
+ id: profile.data.id,
188
+ name: profile.data.name,
189
+ email: profile.data.email || profile.data.username || null,
190
+ image: profile.data.profile_image_url,
191
+ emailVerified: emailVerified,
192
+ ...userMap,
193
+ },
194
+ data: profile,
195
+ };
196
+ },
197
+ options,
198
+ } satisfies OAuthProvider<TwitterProfile>;
199
+ };
@@ -0,0 +1,87 @@
1
+ import { betterFetch } from "@better-fetch/fetch";
2
+ import { BetterAuthError } from "../error";
3
+ import type { OAuthProvider, ProviderOptions } from "../oauth2";
4
+ import { createAuthorizationURL, validateAuthorizationCode } from "../oauth2";
5
+
6
+ export interface VercelProfile {
7
+ sub: string;
8
+ name?: string;
9
+ preferred_username?: string;
10
+ email?: string;
11
+ email_verified?: boolean;
12
+ picture?: string;
13
+ }
14
+
15
+ export interface VercelOptions extends ProviderOptions<VercelProfile> {
16
+ clientId: string;
17
+ }
18
+
19
+ export const vercel = (options: VercelOptions) => {
20
+ return {
21
+ id: "vercel",
22
+ name: "Vercel",
23
+ createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }) {
24
+ if (!codeVerifier) {
25
+ throw new BetterAuthError("codeVerifier is required for Vercel");
26
+ }
27
+
28
+ let _scopes: string[] | undefined = undefined;
29
+ if (options.scope !== undefined || scopes !== undefined) {
30
+ _scopes = [];
31
+ if (options.scope) _scopes.push(...options.scope);
32
+ if (scopes) _scopes.push(...scopes);
33
+ }
34
+
35
+ return createAuthorizationURL({
36
+ id: "vercel",
37
+ options,
38
+ authorizationEndpoint: "https://vercel.com/oauth/authorize",
39
+ scopes: _scopes,
40
+ state,
41
+ codeVerifier,
42
+ redirectURI,
43
+ });
44
+ },
45
+ validateAuthorizationCode: async ({ code, codeVerifier, redirectURI }) => {
46
+ return validateAuthorizationCode({
47
+ code,
48
+ codeVerifier,
49
+ redirectURI,
50
+ options,
51
+ tokenEndpoint: "https://api.vercel.com/login/oauth/token",
52
+ });
53
+ },
54
+ async getUserInfo(token) {
55
+ if (options.getUserInfo) {
56
+ return options.getUserInfo(token);
57
+ }
58
+
59
+ const { data: profile, error } = await betterFetch<VercelProfile>(
60
+ "https://api.vercel.com/login/oauth/userinfo",
61
+ {
62
+ headers: {
63
+ Authorization: `Bearer ${token.accessToken}`,
64
+ },
65
+ },
66
+ );
67
+
68
+ if (error || !profile) {
69
+ return null;
70
+ }
71
+
72
+ const userMap = await options.mapProfileToUser?.(profile);
73
+ return {
74
+ user: {
75
+ id: profile.sub,
76
+ name: profile.name ?? profile.preferred_username ?? "",
77
+ email: profile.email,
78
+ image: profile.picture,
79
+ emailVerified: profile.email_verified ?? false,
80
+ ...userMap,
81
+ },
82
+ data: profile,
83
+ };
84
+ },
85
+ options,
86
+ } satisfies OAuthProvider<VercelProfile>;
87
+ };
@@ -0,0 +1,125 @@
1
+ import { betterFetch } from "@better-fetch/fetch";
2
+ import type { OAuthProvider, ProviderOptions } from "../oauth2";
3
+ import {
4
+ createAuthorizationURL,
5
+ refreshAccessToken,
6
+ validateAuthorizationCode,
7
+ } from "../oauth2";
8
+
9
+ export interface VkProfile {
10
+ user: {
11
+ user_id: string;
12
+ first_name: string;
13
+ last_name: string;
14
+ email?: string | undefined;
15
+ phone?: number | undefined;
16
+ avatar?: string | undefined;
17
+ sex?: number | undefined;
18
+ verified?: boolean | undefined;
19
+ birthday: string;
20
+ };
21
+ }
22
+
23
+ export interface VkOption extends ProviderOptions {
24
+ clientId: string;
25
+ scheme?: ("light" | "dark") | undefined;
26
+ }
27
+
28
+ export const vk = (options: VkOption) => {
29
+ const tokenEndpoint = "https://id.vk.com/oauth2/auth";
30
+ return {
31
+ id: "vk",
32
+ name: "VK",
33
+ async createAuthorizationURL({ state, scopes, codeVerifier, redirectURI }) {
34
+ const _scopes = options.disableDefaultScope ? [] : ["email", "phone"];
35
+ if (options.scope) _scopes.push(...options.scope);
36
+ if (scopes) _scopes.push(...scopes);
37
+ const authorizationEndpoint = "https://id.vk.com/authorize";
38
+
39
+ return createAuthorizationURL({
40
+ id: "vk",
41
+ options,
42
+ authorizationEndpoint,
43
+ scopes: _scopes,
44
+ state,
45
+ redirectURI,
46
+ codeVerifier,
47
+ });
48
+ },
49
+ validateAuthorizationCode: async ({
50
+ code,
51
+ codeVerifier,
52
+ redirectURI,
53
+ deviceId,
54
+ }) => {
55
+ return validateAuthorizationCode({
56
+ code,
57
+ codeVerifier,
58
+ redirectURI: options.redirectURI || redirectURI,
59
+ options,
60
+ deviceId,
61
+ tokenEndpoint,
62
+ });
63
+ },
64
+ refreshAccessToken: options.refreshAccessToken
65
+ ? options.refreshAccessToken
66
+ : async (refreshToken) => {
67
+ return refreshAccessToken({
68
+ refreshToken,
69
+ options: {
70
+ clientId: options.clientId,
71
+ clientKey: options.clientKey,
72
+ clientSecret: options.clientSecret,
73
+ },
74
+ tokenEndpoint,
75
+ });
76
+ },
77
+ async getUserInfo(data) {
78
+ if (options.getUserInfo) {
79
+ return options.getUserInfo(data);
80
+ }
81
+ if (!data.accessToken) {
82
+ return null;
83
+ }
84
+ const formBody = new URLSearchParams({
85
+ access_token: data.accessToken,
86
+ client_id: options.clientId,
87
+ }).toString();
88
+ const { data: profile, error } = await betterFetch<VkProfile>(
89
+ "https://id.vk.com/oauth2/user_info",
90
+ {
91
+ method: "POST",
92
+ headers: {
93
+ "Content-Type": "application/x-www-form-urlencoded",
94
+ },
95
+ body: formBody,
96
+ },
97
+ );
98
+ if (error) {
99
+ return null;
100
+ }
101
+
102
+ const userMap = await options.mapProfileToUser?.(profile);
103
+ if (!profile.user.email && !userMap?.email) {
104
+ return null;
105
+ }
106
+
107
+ return {
108
+ user: {
109
+ id: profile.user.user_id,
110
+ first_name: profile.user.first_name,
111
+ last_name: profile.user.last_name,
112
+ email: profile.user.email,
113
+ image: profile.user.avatar,
114
+ emailVerified: false,
115
+ birthday: profile.user.birthday,
116
+ sex: profile.user.sex,
117
+ name: `${profile.user.first_name} ${profile.user.last_name}`,
118
+ ...userMap,
119
+ },
120
+ data: profile,
121
+ };
122
+ },
123
+ options,
124
+ } satisfies OAuthProvider<VkProfile>;
125
+ };
@@ -0,0 +1,213 @@
1
+ import { betterFetch } from "@better-fetch/fetch";
2
+ import type { OAuth2Tokens, OAuthProvider, ProviderOptions } from "../oauth2";
3
+
4
+ /**
5
+ * WeChat user profile information
6
+ * @see https://developers.weixin.qq.com/doc/oplatform/en/Website_App/WeChat_Login/Wechat_Login.html
7
+ */
8
+ export interface WeChatProfile extends Record<string, any> {
9
+ /**
10
+ * User's unique OpenID
11
+ */
12
+ openid: string;
13
+ /**
14
+ * User's nickname
15
+ */
16
+ nickname: string;
17
+ /**
18
+ * User's avatar image URL
19
+ */
20
+ headimgurl: string;
21
+ /**
22
+ * User's privileges
23
+ */
24
+ privilege: string[];
25
+ /**
26
+ * User's UnionID (unique across the developer's various applications)
27
+ */
28
+ unionid?: string;
29
+ /** @note Email is currently unsupported by WeChat */
30
+ email?: string;
31
+ }
32
+
33
+ export interface WeChatOptions extends ProviderOptions<WeChatProfile> {
34
+ /**
35
+ * WeChat App ID
36
+ */
37
+ clientId: string;
38
+ /**
39
+ * WeChat App Secret
40
+ */
41
+ clientSecret: string;
42
+ /**
43
+ * Platform type for WeChat login
44
+ * - Currently only supports "WebsiteApp" for WeChat Website Application (网站应用)
45
+ * @default "WebsiteApp"
46
+ */
47
+ platformType?: "WebsiteApp";
48
+
49
+ /**
50
+ * UI language for the WeChat login page
51
+ * cn for Simplified Chinese, en for English
52
+ * @default "cn" if left undefined
53
+ */
54
+ lang?: "cn" | "en";
55
+ }
56
+
57
+ export const wechat = (options: WeChatOptions) => {
58
+ return {
59
+ id: "wechat",
60
+ name: "WeChat",
61
+ createAuthorizationURL({ state, scopes, redirectURI }) {
62
+ const _scopes = options.disableDefaultScope ? [] : ["snsapi_login"];
63
+ options.scope && _scopes.push(...options.scope);
64
+ scopes && _scopes.push(...scopes);
65
+
66
+ // WeChat uses non-standard OAuth2 parameters (appid instead of client_id)
67
+ // and requires a fragment (#wechat_redirect), so we construct the URL manually.
68
+ const url = new URL("https://open.weixin.qq.com/connect/qrconnect");
69
+ url.searchParams.set("scope", _scopes.join(","));
70
+ url.searchParams.set("response_type", "code");
71
+ url.searchParams.set("appid", options.clientId);
72
+ url.searchParams.set("redirect_uri", options.redirectURI || redirectURI);
73
+ url.searchParams.set("state", state);
74
+ url.searchParams.set("lang", options.lang || "cn");
75
+ url.hash = "wechat_redirect";
76
+
77
+ return url;
78
+ },
79
+
80
+ // WeChat uses non-standard token exchange (appid/secret instead of
81
+ // client_id/client_secret, GET instead of POST), so shared helpers
82
+ // like validateAuthorizationCode/getOAuth2Tokens cannot be used directly.
83
+ validateAuthorizationCode: async ({ code }) => {
84
+ const params = new URLSearchParams({
85
+ appid: options.clientId,
86
+ secret: options.clientSecret,
87
+ code: code,
88
+ grant_type: "authorization_code",
89
+ });
90
+
91
+ const { data: tokenData, error } = await betterFetch<{
92
+ access_token: string;
93
+ expires_in: number;
94
+ refresh_token: string;
95
+ openid: string;
96
+ scope: string;
97
+ unionid?: string;
98
+ errcode?: number;
99
+ errmsg?: string;
100
+ }>(
101
+ "https://api.weixin.qq.com/sns/oauth2/access_token?" +
102
+ params.toString(),
103
+ {
104
+ method: "GET",
105
+ },
106
+ );
107
+
108
+ if (error || !tokenData || tokenData.errcode) {
109
+ throw new Error(
110
+ `Failed to validate authorization code: ${tokenData?.errmsg || error?.message || "Unknown error"}`,
111
+ );
112
+ }
113
+
114
+ return {
115
+ tokenType: "Bearer" as const,
116
+ accessToken: tokenData.access_token,
117
+ refreshToken: tokenData.refresh_token,
118
+ accessTokenExpiresAt: new Date(
119
+ Date.now() + tokenData.expires_in * 1000,
120
+ ),
121
+ scopes: tokenData.scope.split(","),
122
+ // WeChat requires openid for the userinfo endpoint, which is
123
+ // returned alongside the access token.
124
+ openid: tokenData.openid,
125
+ unionid: tokenData.unionid,
126
+ };
127
+ },
128
+
129
+ refreshAccessToken: options.refreshAccessToken
130
+ ? options.refreshAccessToken
131
+ : async (refreshToken) => {
132
+ const params = new URLSearchParams({
133
+ appid: options.clientId,
134
+ grant_type: "refresh_token",
135
+ refresh_token: refreshToken,
136
+ });
137
+
138
+ const { data: tokenData, error } = await betterFetch<{
139
+ access_token: string;
140
+ expires_in: number;
141
+ refresh_token: string;
142
+ openid: string;
143
+ scope: string;
144
+ errcode?: number;
145
+ errmsg?: string;
146
+ }>(
147
+ "https://api.weixin.qq.com/sns/oauth2/refresh_token?" +
148
+ params.toString(),
149
+ {
150
+ method: "GET",
151
+ },
152
+ );
153
+
154
+ if (error || !tokenData || tokenData.errcode) {
155
+ throw new Error(
156
+ `Failed to refresh access token: ${tokenData?.errmsg || error?.message || "Unknown error"}`,
157
+ );
158
+ }
159
+
160
+ return {
161
+ tokenType: "Bearer" as const,
162
+ accessToken: tokenData.access_token,
163
+ refreshToken: tokenData.refresh_token,
164
+ accessTokenExpiresAt: new Date(
165
+ Date.now() + tokenData.expires_in * 1000,
166
+ ),
167
+ scopes: tokenData.scope.split(","),
168
+ };
169
+ },
170
+
171
+ async getUserInfo(token) {
172
+ if (options.getUserInfo) {
173
+ return options.getUserInfo(token);
174
+ }
175
+
176
+ const openid = (token as OAuth2Tokens & { openid?: string }).openid;
177
+
178
+ if (!openid) {
179
+ return null;
180
+ }
181
+
182
+ const params = new URLSearchParams({
183
+ access_token: token.accessToken || "",
184
+ openid: openid,
185
+ lang: "zh_CN",
186
+ });
187
+
188
+ const { data: profile, error } = await betterFetch<
189
+ WeChatProfile & { errcode?: number; errmsg?: string }
190
+ >("https://api.weixin.qq.com/sns/userinfo?" + params.toString(), {
191
+ method: "GET",
192
+ });
193
+
194
+ if (error || !profile || profile.errcode) {
195
+ return null;
196
+ }
197
+
198
+ const userMap = await options.mapProfileToUser?.(profile);
199
+ return {
200
+ user: {
201
+ id: profile.unionid || profile.openid || openid,
202
+ name: profile.nickname,
203
+ email: profile.email || null,
204
+ image: profile.headimgurl,
205
+ emailVerified: false,
206
+ ...userMap,
207
+ },
208
+ data: profile,
209
+ };
210
+ },
211
+ options,
212
+ } satisfies OAuthProvider<WeChatProfile, WeChatOptions>;
213
+ };