@mulverse/mulguard-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (600) hide show
  1. package/README.md +24 -0
  2. package/adapters.d.ts +522 -0
  3. package/adapters.d.ts.map +1 -0
  4. package/adapters.js +170 -0
  5. package/errors.d.ts +429 -0
  6. package/errors.d.ts.map +1 -0
  7. package/errors.js +473 -0
  8. package/index.d.ts +547 -0
  9. package/index.d.ts.map +1 -0
  10. package/index.js +142 -0
  11. package/jwt.d.ts +132 -0
  12. package/jwt.d.ts.map +1 -0
  13. package/jwt.js +123 -0
  14. package/lib/actions/callback/handle-login.d.ts +35 -0
  15. package/lib/actions/callback/handle-login.d.ts.map +1 -0
  16. package/lib/actions/callback/handle-login.js +275 -0
  17. package/lib/actions/callback/index.d.ts +5 -0
  18. package/lib/actions/callback/index.d.ts.map +1 -0
  19. package/lib/actions/callback/index.js +409 -0
  20. package/lib/actions/callback/oauth/callback.d.ts +36 -0
  21. package/lib/actions/callback/oauth/callback.d.ts.map +1 -0
  22. package/lib/actions/callback/oauth/callback.js +248 -0
  23. package/lib/actions/callback/oauth/checks.d.ts +70 -0
  24. package/lib/actions/callback/oauth/checks.d.ts.map +1 -0
  25. package/lib/actions/callback/oauth/checks.js +188 -0
  26. package/lib/actions/callback/oauth/csrf-token.d.ts +33 -0
  27. package/lib/actions/callback/oauth/csrf-token.d.ts.map +1 -0
  28. package/lib/actions/callback/oauth/csrf-token.js +39 -0
  29. package/lib/actions/index.d.ts +6 -0
  30. package/lib/actions/index.d.ts.map +1 -0
  31. package/lib/actions/index.js +5 -0
  32. package/lib/actions/session.d.ts +5 -0
  33. package/lib/actions/session.d.ts.map +1 -0
  34. package/lib/actions/session.js +127 -0
  35. package/lib/actions/signin/authorization-url.d.ts +12 -0
  36. package/lib/actions/signin/authorization-url.d.ts.map +1 -0
  37. package/lib/actions/signin/authorization-url.js +94 -0
  38. package/lib/actions/signin/index.d.ts +4 -0
  39. package/lib/actions/signin/index.d.ts.map +1 -0
  40. package/lib/actions/signin/index.js +22 -0
  41. package/lib/actions/signin/send-token.d.ts +10 -0
  42. package/lib/actions/signin/send-token.d.ts.map +1 -0
  43. package/lib/actions/signin/send-token.js +98 -0
  44. package/lib/actions/signout.d.ts +11 -0
  45. package/lib/actions/signout.d.ts.map +1 -0
  46. package/lib/actions/signout.js +30 -0
  47. package/lib/actions/webauthn-options.d.ts +8 -0
  48. package/lib/actions/webauthn-options.d.ts.map +1 -0
  49. package/lib/actions/webauthn-options.js +60 -0
  50. package/lib/index.d.ts +2 -0
  51. package/lib/index.d.ts.map +1 -0
  52. package/lib/index.js +70 -0
  53. package/lib/init.d.ts +25 -0
  54. package/lib/init.d.ts.map +1 -0
  55. package/lib/init.js +172 -0
  56. package/lib/pages/error.d.ts +17 -0
  57. package/lib/pages/error.d.ts.map +1 -0
  58. package/lib/pages/error.js +40 -0
  59. package/lib/pages/index.d.ts +42 -0
  60. package/lib/pages/index.d.ts.map +1 -0
  61. package/lib/pages/index.js +136 -0
  62. package/lib/pages/signin.d.ts +10 -0
  63. package/lib/pages/signin.d.ts.map +1 -0
  64. package/lib/pages/signin.js +75 -0
  65. package/lib/pages/signout.d.ts +8 -0
  66. package/lib/pages/signout.d.ts.map +1 -0
  67. package/lib/pages/signout.js +17 -0
  68. package/lib/pages/styles.d.ts +3 -0
  69. package/lib/pages/styles.d.ts.map +1 -0
  70. package/lib/pages/styles.js +381 -0
  71. package/lib/pages/verify-request.d.ts +8 -0
  72. package/lib/pages/verify-request.d.ts.map +1 -0
  73. package/lib/pages/verify-request.js +11 -0
  74. package/lib/symbols.d.ts +50 -0
  75. package/lib/symbols.d.ts.map +1 -0
  76. package/lib/symbols.js +57 -0
  77. package/lib/utils/actions.d.ts +3 -0
  78. package/lib/utils/actions.d.ts.map +1 -0
  79. package/lib/utils/actions.js +14 -0
  80. package/lib/utils/assert.d.ts +14 -0
  81. package/lib/utils/assert.d.ts.map +1 -0
  82. package/lib/utils/assert.js +168 -0
  83. package/lib/utils/callback-url.d.ts +17 -0
  84. package/lib/utils/callback-url.d.ts.map +1 -0
  85. package/lib/utils/callback-url.js +27 -0
  86. package/lib/utils/cookie.d.ts +111 -0
  87. package/lib/utils/cookie.d.ts.map +1 -0
  88. package/lib/utils/cookie.js +205 -0
  89. package/lib/utils/date.d.ts +7 -0
  90. package/lib/utils/date.d.ts.map +1 -0
  91. package/lib/utils/date.js +8 -0
  92. package/lib/utils/email.d.ts +20 -0
  93. package/lib/utils/email.d.ts.map +1 -0
  94. package/lib/utils/email.js +57 -0
  95. package/lib/utils/env.d.ts +9 -0
  96. package/lib/utils/env.d.ts.map +1 -0
  97. package/lib/utils/env.js +96 -0
  98. package/lib/utils/logger.d.ts +18 -0
  99. package/lib/utils/logger.d.ts.map +1 -0
  100. package/lib/utils/logger.js +50 -0
  101. package/lib/utils/merge.d.ts +3 -0
  102. package/lib/utils/merge.d.ts.map +1 -0
  103. package/lib/utils/merge.js +23 -0
  104. package/lib/utils/providers.d.ts +19 -0
  105. package/lib/utils/providers.d.ts.map +1 -0
  106. package/lib/utils/providers.js +149 -0
  107. package/lib/utils/session.d.ts +7 -0
  108. package/lib/utils/session.d.ts.map +1 -0
  109. package/lib/utils/session.js +29 -0
  110. package/lib/utils/web.d.ts +10 -0
  111. package/lib/utils/web.d.ts.map +1 -0
  112. package/lib/utils/web.js +109 -0
  113. package/lib/utils/webauthn-client.d.ts +30 -0
  114. package/lib/utils/webauthn-client.d.ts.map +1 -0
  115. package/lib/utils/webauthn-client.js +197 -0
  116. package/lib/utils/webauthn-utils.d.ts +81 -0
  117. package/lib/utils/webauthn-utils.d.ts.map +1 -0
  118. package/lib/utils/webauthn-utils.js +343 -0
  119. package/lib/vendored/cookie.d.ts +120 -0
  120. package/lib/vendored/cookie.d.ts.map +1 -0
  121. package/lib/vendored/cookie.js +237 -0
  122. package/package.json +118 -0
  123. package/providers/42-school.d.ts +240 -0
  124. package/providers/42-school.d.ts.map +1 -0
  125. package/providers/42-school.js +78 -0
  126. package/providers/apple.d.ts +149 -0
  127. package/providers/apple.d.ts.map +1 -0
  128. package/providers/apple.js +104 -0
  129. package/providers/asgardeo.d.ts +102 -0
  130. package/providers/asgardeo.d.ts.map +1 -0
  131. package/providers/asgardeo.js +93 -0
  132. package/providers/atlassian.d.ts +94 -0
  133. package/providers/atlassian.d.ts.map +1 -0
  134. package/providers/atlassian.js +84 -0
  135. package/providers/auth0.d.ts +116 -0
  136. package/providers/auth0.d.ts.map +1 -0
  137. package/providers/auth0.js +49 -0
  138. package/providers/authentik.d.ts +90 -0
  139. package/providers/authentik.d.ts.map +1 -0
  140. package/providers/authentik.js +65 -0
  141. package/providers/azure-ad-b2c.d.ts +104 -0
  142. package/providers/azure-ad-b2c.d.ts.map +1 -0
  143. package/providers/azure-ad-b2c.js +100 -0
  144. package/providers/azure-ad.d.ts +19 -0
  145. package/providers/azure-ad.d.ts.map +1 -0
  146. package/providers/azure-ad.js +23 -0
  147. package/providers/azure-devops.d.ts +128 -0
  148. package/providers/azure-devops.d.ts.map +1 -0
  149. package/providers/azure-devops.js +158 -0
  150. package/providers/bankid-no.d.ts +134 -0
  151. package/providers/bankid-no.d.ts.map +1 -0
  152. package/providers/bankid-no.js +65 -0
  153. package/providers/battlenet.d.ts +85 -0
  154. package/providers/battlenet.d.ts.map +1 -0
  155. package/providers/battlenet.js +81 -0
  156. package/providers/beyondidentity.d.ts +77 -0
  157. package/providers/beyondidentity.d.ts.map +1 -0
  158. package/providers/beyondidentity.js +84 -0
  159. package/providers/bitbucket.d.ts +89 -0
  160. package/providers/bitbucket.d.ts.map +1 -0
  161. package/providers/bitbucket.js +92 -0
  162. package/providers/box.d.ts +63 -0
  163. package/providers/box.d.ts.map +1 -0
  164. package/providers/box.js +73 -0
  165. package/providers/boxyhq-saml.d.ts +121 -0
  166. package/providers/boxyhq-saml.d.ts.map +1 -0
  167. package/providers/boxyhq-saml.js +127 -0
  168. package/providers/bungie.d.ts +167 -0
  169. package/providers/bungie.d.ts.map +1 -0
  170. package/providers/bungie.js +174 -0
  171. package/providers/click-up.d.ts +75 -0
  172. package/providers/click-up.d.ts.map +1 -0
  173. package/providers/click-up.js +89 -0
  174. package/providers/cognito.d.ts +81 -0
  175. package/providers/cognito.d.ts.map +1 -0
  176. package/providers/cognito.js +73 -0
  177. package/providers/coinbase.d.ts +69 -0
  178. package/providers/coinbase.d.ts.map +1 -0
  179. package/providers/coinbase.js +78 -0
  180. package/providers/concept2.d.ts +81 -0
  181. package/providers/concept2.d.ts.map +1 -0
  182. package/providers/concept2.js +86 -0
  183. package/providers/credentials.d.ts +132 -0
  184. package/providers/credentials.d.ts.map +1 -0
  185. package/providers/credentials.js +74 -0
  186. package/providers/descope.d.ts +91 -0
  187. package/providers/descope.d.ts.map +1 -0
  188. package/providers/descope.js +78 -0
  189. package/providers/discord.d.ts +139 -0
  190. package/providers/discord.d.ts.map +1 -0
  191. package/providers/discord.js +86 -0
  192. package/providers/dribbble.d.ts +88 -0
  193. package/providers/dribbble.d.ts.map +1 -0
  194. package/providers/dribbble.js +85 -0
  195. package/providers/dropbox.d.ts +65 -0
  196. package/providers/dropbox.d.ts.map +1 -0
  197. package/providers/dropbox.js +88 -0
  198. package/providers/duende-identity-server6.d.ts +91 -0
  199. package/providers/duende-identity-server6.d.ts.map +1 -0
  200. package/providers/duende-identity-server6.js +80 -0
  201. package/providers/email.d.ts +41 -0
  202. package/providers/email.d.ts.map +1 -0
  203. package/providers/email.js +18 -0
  204. package/providers/eventbrite.d.ts +78 -0
  205. package/providers/eventbrite.d.ts.map +1 -0
  206. package/providers/eventbrite.js +88 -0
  207. package/providers/eveonline.d.ts +94 -0
  208. package/providers/eveonline.d.ts.map +1 -0
  209. package/providers/eveonline.js +92 -0
  210. package/providers/facebook.d.ts +84 -0
  211. package/providers/facebook.d.ts.map +1 -0
  212. package/providers/facebook.js +93 -0
  213. package/providers/faceit.d.ts +64 -0
  214. package/providers/faceit.d.ts.map +1 -0
  215. package/providers/faceit.js +74 -0
  216. package/providers/figma.d.ts +75 -0
  217. package/providers/figma.d.ts.map +1 -0
  218. package/providers/figma.js +81 -0
  219. package/providers/forwardemail.d.ts +4 -0
  220. package/providers/forwardemail.d.ts.map +1 -0
  221. package/providers/forwardemail.js +32 -0
  222. package/providers/foursquare.d.ts +71 -0
  223. package/providers/foursquare.d.ts.map +1 -0
  224. package/providers/foursquare.js +91 -0
  225. package/providers/freshbooks.d.ts +66 -0
  226. package/providers/freshbooks.d.ts.map +1 -0
  227. package/providers/freshbooks.js +76 -0
  228. package/providers/frontegg.d.ts +95 -0
  229. package/providers/frontegg.d.ts.map +1 -0
  230. package/providers/frontegg.js +88 -0
  231. package/providers/fusionauth.d.ts +279 -0
  232. package/providers/fusionauth.d.ts.map +1 -0
  233. package/providers/fusionauth.js +292 -0
  234. package/providers/github.d.ts +127 -0
  235. package/providers/github.d.ts.map +1 -0
  236. package/providers/github.js +115 -0
  237. package/providers/gitlab.d.ts +115 -0
  238. package/providers/gitlab.d.ts.map +1 -0
  239. package/providers/gitlab.js +75 -0
  240. package/providers/google.d.ts +138 -0
  241. package/providers/google.d.ts.map +1 -0
  242. package/providers/google.js +119 -0
  243. package/providers/hubspot.d.ts +76 -0
  244. package/providers/hubspot.d.ts.map +1 -0
  245. package/providers/hubspot.js +93 -0
  246. package/providers/huggingface.d.ts +216 -0
  247. package/providers/huggingface.d.ts.map +1 -0
  248. package/providers/huggingface.js +101 -0
  249. package/providers/identity-server4.d.ts +69 -0
  250. package/providers/identity-server4.d.ts.map +1 -0
  251. package/providers/identity-server4.js +64 -0
  252. package/providers/index.d.ts +61 -0
  253. package/providers/index.d.ts.map +1 -0
  254. package/providers/index.js +3 -0
  255. package/providers/instagram.d.ts +74 -0
  256. package/providers/instagram.d.ts.map +1 -0
  257. package/providers/instagram.js +87 -0
  258. package/providers/kakao.d.ts +148 -0
  259. package/providers/kakao.d.ts.map +1 -0
  260. package/providers/kakao.js +103 -0
  261. package/providers/keycloak.d.ts +100 -0
  262. package/providers/keycloak.d.ts.map +1 -0
  263. package/providers/keycloak.js +73 -0
  264. package/providers/kinde.d.ts +73 -0
  265. package/providers/kinde.d.ts.map +1 -0
  266. package/providers/kinde.js +51 -0
  267. package/providers/line.d.ts +83 -0
  268. package/providers/line.d.ts.map +1 -0
  269. package/providers/line.js +73 -0
  270. package/providers/linkedin.d.ts +77 -0
  271. package/providers/linkedin.d.ts.map +1 -0
  272. package/providers/linkedin.js +65 -0
  273. package/providers/logto.d.ts +98 -0
  274. package/providers/logto.d.ts.map +1 -0
  275. package/providers/logto.js +81 -0
  276. package/providers/loops.d.ts +40 -0
  277. package/providers/loops.d.ts.map +1 -0
  278. package/providers/loops.js +59 -0
  279. package/providers/mailchimp.d.ts +66 -0
  280. package/providers/mailchimp.d.ts.map +1 -0
  281. package/providers/mailchimp.js +76 -0
  282. package/providers/mailgun.d.ts +55 -0
  283. package/providers/mailgun.d.ts.map +1 -0
  284. package/providers/mailgun.js +74 -0
  285. package/providers/mailru.d.ts +63 -0
  286. package/providers/mailru.d.ts.map +1 -0
  287. package/providers/mailru.js +61 -0
  288. package/providers/mastodon.d.ts +90 -0
  289. package/providers/mastodon.d.ts.map +1 -0
  290. package/providers/mastodon.js +75 -0
  291. package/providers/mattermost.d.ts +132 -0
  292. package/providers/mattermost.d.ts.map +1 -0
  293. package/providers/mattermost.js +83 -0
  294. package/providers/medium.d.ts +68 -0
  295. package/providers/medium.d.ts.map +1 -0
  296. package/providers/medium.js +84 -0
  297. package/providers/microsoft-entra-id.d.ts +428 -0
  298. package/providers/microsoft-entra-id.d.ts.map +1 -0
  299. package/providers/microsoft-entra-id.js +156 -0
  300. package/providers/naver.d.ts +80 -0
  301. package/providers/naver.d.ts.map +1 -0
  302. package/providers/naver.js +79 -0
  303. package/providers/netlify.d.ts +66 -0
  304. package/providers/netlify.d.ts.map +1 -0
  305. package/providers/netlify.js +85 -0
  306. package/providers/netsuite.d.ts +189 -0
  307. package/providers/netsuite.d.ts.map +1 -0
  308. package/providers/netsuite.js +170 -0
  309. package/providers/nextcloud.d.ts +150 -0
  310. package/providers/nextcloud.d.ts.map +1 -0
  311. package/providers/nextcloud.js +99 -0
  312. package/providers/nodemailer.d.ts +27 -0
  313. package/providers/nodemailer.d.ts.map +1 -0
  314. package/providers/nodemailer.js +34 -0
  315. package/providers/notion.d.ts +99 -0
  316. package/providers/notion.d.ts.map +1 -0
  317. package/providers/notion.js +110 -0
  318. package/providers/oauth.d.ts +188 -0
  319. package/providers/oauth.d.ts.map +1 -0
  320. package/providers/oauth.js +1 -0
  321. package/providers/okta.d.ts +99 -0
  322. package/providers/okta.d.ts.map +1 -0
  323. package/providers/okta.js +63 -0
  324. package/providers/onelogin.d.ts +65 -0
  325. package/providers/onelogin.d.ts.map +1 -0
  326. package/providers/onelogin.js +61 -0
  327. package/providers/ory-hydra.d.ts +79 -0
  328. package/providers/ory-hydra.d.ts.map +1 -0
  329. package/providers/ory-hydra.js +67 -0
  330. package/providers/osso.d.ts +79 -0
  331. package/providers/osso.d.ts.map +1 -0
  332. package/providers/osso.js +77 -0
  333. package/providers/osu.d.ts +116 -0
  334. package/providers/osu.d.ts.map +1 -0
  335. package/providers/osu.js +75 -0
  336. package/providers/passage.d.ts +88 -0
  337. package/providers/passage.d.ts.map +1 -0
  338. package/providers/passage.js +75 -0
  339. package/providers/passkey.d.ts +65 -0
  340. package/providers/passkey.d.ts.map +1 -0
  341. package/providers/passkey.js +87 -0
  342. package/providers/patreon.d.ts +73 -0
  343. package/providers/patreon.d.ts.map +1 -0
  344. package/providers/patreon.js +77 -0
  345. package/providers/ping-id.d.ts +57 -0
  346. package/providers/ping-id.d.ts.map +1 -0
  347. package/providers/ping-id.js +40 -0
  348. package/providers/pinterest.d.ts +79 -0
  349. package/providers/pinterest.d.ts.map +1 -0
  350. package/providers/pinterest.js +85 -0
  351. package/providers/pipedrive.d.ts +99 -0
  352. package/providers/pipedrive.d.ts.map +1 -0
  353. package/providers/pipedrive.js +71 -0
  354. package/providers/postmark.d.ts +4 -0
  355. package/providers/postmark.d.ts.map +1 -0
  356. package/providers/postmark.js +36 -0
  357. package/providers/provider-types.d.ts +3 -0
  358. package/providers/provider-types.d.ts.map +1 -0
  359. package/providers/provider-types.js +1 -0
  360. package/providers/reddit.d.ts +88 -0
  361. package/providers/reddit.d.ts.map +1 -0
  362. package/providers/reddit.js +90 -0
  363. package/providers/resend.d.ts +4 -0
  364. package/providers/resend.d.ts.map +1 -0
  365. package/providers/resend.js +32 -0
  366. package/providers/roblox.d.ts +67 -0
  367. package/providers/roblox.d.ts.map +1 -0
  368. package/providers/roblox.js +53 -0
  369. package/providers/salesforce.d.ts +59 -0
  370. package/providers/salesforce.d.ts.map +1 -0
  371. package/providers/salesforce.js +52 -0
  372. package/providers/sendgrid.d.ts +4 -0
  373. package/providers/sendgrid.d.ts.map +1 -0
  374. package/providers/sendgrid.js +35 -0
  375. package/providers/simplelogin.d.ts +87 -0
  376. package/providers/simplelogin.d.ts.map +1 -0
  377. package/providers/simplelogin.js +83 -0
  378. package/providers/slack.d.ts +102 -0
  379. package/providers/slack.d.ts.map +1 -0
  380. package/providers/slack.js +69 -0
  381. package/providers/spotify.d.ts +75 -0
  382. package/providers/spotify.d.ts.map +1 -0
  383. package/providers/spotify.js +73 -0
  384. package/providers/strava.d.ts +68 -0
  385. package/providers/strava.d.ts.map +1 -0
  386. package/providers/strava.js +80 -0
  387. package/providers/threads.d.ts +108 -0
  388. package/providers/threads.d.ts.map +1 -0
  389. package/providers/threads.js +89 -0
  390. package/providers/tiktok.d.ts +248 -0
  391. package/providers/tiktok.d.ts.map +1 -0
  392. package/providers/tiktok.js +195 -0
  393. package/providers/todoist.d.ts +76 -0
  394. package/providers/todoist.d.ts.map +1 -0
  395. package/providers/todoist.js +97 -0
  396. package/providers/trakt.d.ts +93 -0
  397. package/providers/trakt.d.ts.map +1 -0
  398. package/providers/trakt.js +91 -0
  399. package/providers/twitch.d.ts +71 -0
  400. package/providers/twitch.d.ts.map +1 -0
  401. package/providers/twitch.js +96 -0
  402. package/providers/twitter.d.ts +183 -0
  403. package/providers/twitter.d.ts.map +1 -0
  404. package/providers/twitter.js +100 -0
  405. package/providers/united-effects.d.ts +80 -0
  406. package/providers/united-effects.d.ts.map +1 -0
  407. package/providers/united-effects.js +72 -0
  408. package/providers/vipps.d.ts +71 -0
  409. package/providers/vipps.d.ts.map +1 -0
  410. package/providers/vipps.js +33 -0
  411. package/providers/vk.d.ts +334 -0
  412. package/providers/vk.d.ts.map +1 -0
  413. package/providers/vk.js +103 -0
  414. package/providers/webauthn.d.ts +148 -0
  415. package/providers/webauthn.d.ts.map +1 -0
  416. package/providers/webauthn.js +128 -0
  417. package/providers/webex.d.ts +78 -0
  418. package/providers/webex.d.ts.map +1 -0
  419. package/providers/webex.js +73 -0
  420. package/providers/wechat.d.ts +78 -0
  421. package/providers/wechat.d.ts.map +1 -0
  422. package/providers/wechat.js +105 -0
  423. package/providers/wikimedia.d.ts +99 -0
  424. package/providers/wikimedia.d.ts.map +1 -0
  425. package/providers/wikimedia.js +90 -0
  426. package/providers/wordpress.d.ts +65 -0
  427. package/providers/wordpress.d.ts.map +1 -0
  428. package/providers/wordpress.js +71 -0
  429. package/providers/workos.d.ts +154 -0
  430. package/providers/workos.d.ts.map +1 -0
  431. package/providers/workos.js +143 -0
  432. package/providers/yandex.d.ts +131 -0
  433. package/providers/yandex.d.ts.map +1 -0
  434. package/providers/yandex.js +80 -0
  435. package/providers/zitadel.d.ts +117 -0
  436. package/providers/zitadel.d.ts.map +1 -0
  437. package/providers/zitadel.js +95 -0
  438. package/providers/zoho.d.ts +63 -0
  439. package/providers/zoho.d.ts.map +1 -0
  440. package/providers/zoho.js +79 -0
  441. package/providers/zoom.d.ts +93 -0
  442. package/providers/zoom.d.ts.map +1 -0
  443. package/providers/zoom.js +82 -0
  444. package/src/adapters/server-actions-helpers.ts +126 -0
  445. package/src/adapters.ts +603 -0
  446. package/src/errors.ts +551 -0
  447. package/src/index.ts +689 -0
  448. package/src/jwt.ts +283 -0
  449. package/src/lib/actions/callback/handle-login.ts +334 -0
  450. package/src/lib/actions/callback/index.ts +554 -0
  451. package/src/lib/actions/callback/oauth/callback.ts +347 -0
  452. package/src/lib/actions/callback/oauth/checks.ts +258 -0
  453. package/src/lib/actions/callback/oauth/csrf-token.ts +60 -0
  454. package/src/lib/actions/index.ts +5 -0
  455. package/src/lib/actions/session.ts +167 -0
  456. package/src/lib/actions/signin/authorization-url.ts +123 -0
  457. package/src/lib/actions/signin/index.ts +37 -0
  458. package/src/lib/actions/signin/send-token.ts +124 -0
  459. package/src/lib/actions/signout.ts +38 -0
  460. package/src/lib/actions/webauthn-options.ts +100 -0
  461. package/src/lib/index.ts +97 -0
  462. package/src/lib/init.ts +236 -0
  463. package/src/lib/pages/error.tsx +106 -0
  464. package/src/lib/pages/index.ts +181 -0
  465. package/src/lib/pages/signin.tsx +255 -0
  466. package/src/lib/pages/signout.tsx +49 -0
  467. package/src/lib/pages/styles.css +377 -0
  468. package/src/lib/pages/styles.ts +381 -0
  469. package/src/lib/pages/verify-request.tsx +36 -0
  470. package/src/lib/symbols.ts +60 -0
  471. package/src/lib/utils/actions.ts +17 -0
  472. package/src/lib/utils/assert.ts +259 -0
  473. package/src/lib/utils/callback-url.ts +42 -0
  474. package/src/lib/utils/cookie.ts +248 -0
  475. package/src/lib/utils/date.ts +8 -0
  476. package/src/lib/utils/email.ts +65 -0
  477. package/src/lib/utils/env.ts +113 -0
  478. package/src/lib/utils/logger.ts +75 -0
  479. package/src/lib/utils/merge.ts +30 -0
  480. package/src/lib/utils/providers.ts +203 -0
  481. package/src/lib/utils/session.ts +41 -0
  482. package/src/lib/utils/web.ts +151 -0
  483. package/src/lib/utils/webauthn-client.js +229 -0
  484. package/src/lib/utils/webauthn-utils.ts +531 -0
  485. package/src/lib/vendored/cookie.ts +383 -0
  486. package/src/providers/42-school.ts +256 -0
  487. package/src/providers/apple.ts +206 -0
  488. package/src/providers/asgardeo.ts +118 -0
  489. package/src/providers/atlassian.ts +120 -0
  490. package/src/providers/auth0.ts +127 -0
  491. package/src/providers/authentik.ts +100 -0
  492. package/src/providers/azure-ad-b2c.ts +124 -0
  493. package/src/providers/azure-ad.ts +30 -0
  494. package/src/providers/azure-devops.ts +184 -0
  495. package/src/providers/bankid-no.ts +161 -0
  496. package/src/providers/battlenet.ts +107 -0
  497. package/src/providers/beyondidentity.ts +102 -0
  498. package/src/providers/bitbucket.ts +122 -0
  499. package/src/providers/box.ts +87 -0
  500. package/src/providers/boxyhq-saml.ts +148 -0
  501. package/src/providers/bungie.ts +192 -0
  502. package/src/providers/click-up.ts +104 -0
  503. package/src/providers/cognito.ts +94 -0
  504. package/src/providers/coinbase.ts +93 -0
  505. package/src/providers/concept2.ts +108 -0
  506. package/src/providers/credentials.ts +157 -0
  507. package/src/providers/descope.ts +105 -0
  508. package/src/providers/discord.ts +176 -0
  509. package/src/providers/dribbble.ts +122 -0
  510. package/src/providers/dropbox.ts +102 -0
  511. package/src/providers/duende-identity-server6.ts +101 -0
  512. package/src/providers/email.ts +60 -0
  513. package/src/providers/eventbrite.ts +105 -0
  514. package/src/providers/eveonline.ts +117 -0
  515. package/src/providers/facebook.ts +119 -0
  516. package/src/providers/faceit.ts +90 -0
  517. package/src/providers/figma.ts +105 -0
  518. package/src/providers/forwardemail.ts +37 -0
  519. package/src/providers/foursquare.ts +105 -0
  520. package/src/providers/freshbooks.ts +90 -0
  521. package/src/providers/frontegg.ts +111 -0
  522. package/src/providers/fusionauth.ts +336 -0
  523. package/src/providers/github.ts +187 -0
  524. package/src/providers/gitlab.ts +140 -0
  525. package/src/providers/google.ts +152 -0
  526. package/src/providers/hubspot.ts +117 -0
  527. package/src/providers/huggingface.ts +234 -0
  528. package/src/providers/identity-server4.ts +78 -0
  529. package/src/providers/index.ts +115 -0
  530. package/src/providers/instagram.ts +103 -0
  531. package/src/providers/kakao.ts +184 -0
  532. package/src/providers/keycloak.ts +111 -0
  533. package/src/providers/kinde.ts +85 -0
  534. package/src/providers/line.ts +99 -0
  535. package/src/providers/linkedin.ts +91 -0
  536. package/src/providers/logto.ts +122 -0
  537. package/src/providers/loops.ts +79 -0
  538. package/src/providers/mailchimp.ts +90 -0
  539. package/src/providers/mailgun.ts +98 -0
  540. package/src/providers/mailru.ts +75 -0
  541. package/src/providers/mastodon.ts +112 -0
  542. package/src/providers/mattermost.ts +154 -0
  543. package/src/providers/medium.ts +89 -0
  544. package/src/providers/microsoft-entra-id.ts +497 -0
  545. package/src/providers/naver.ts +102 -0
  546. package/src/providers/netlify.ts +90 -0
  547. package/src/providers/netsuite.ts +225 -0
  548. package/src/providers/nextcloud.ts +207 -0
  549. package/src/providers/nodemailer.ts +84 -0
  550. package/src/providers/notion.ts +166 -0
  551. package/src/providers/oauth.ts +310 -0
  552. package/src/providers/okta.ts +111 -0
  553. package/src/providers/onelogin.ts +75 -0
  554. package/src/providers/ory-hydra.ts +93 -0
  555. package/src/providers/osso.ts +91 -0
  556. package/src/providers/osu.ts +138 -0
  557. package/src/providers/passage.ts +103 -0
  558. package/src/providers/passkey.ts +94 -0
  559. package/src/providers/patreon.ts +98 -0
  560. package/src/providers/ping-id.ts +68 -0
  561. package/src/providers/pinterest.ts +106 -0
  562. package/src/providers/pipedrive.ts +120 -0
  563. package/src/providers/postmark.ts +38 -0
  564. package/src/providers/provider-types.ts +107 -0
  565. package/src/providers/reddit.ts +104 -0
  566. package/src/providers/resend.ts +35 -0
  567. package/src/providers/roblox.ts +94 -0
  568. package/src/providers/salesforce.ts +73 -0
  569. package/src/providers/sendgrid.ts +36 -0
  570. package/src/providers/simplelogin.ts +107 -0
  571. package/src/providers/slack.ts +115 -0
  572. package/src/providers/spotify.ts +99 -0
  573. package/src/providers/strava.ts +101 -0
  574. package/src/providers/threads.ts +135 -0
  575. package/src/providers/tiktok.ts +319 -0
  576. package/src/providers/todoist.ts +122 -0
  577. package/src/providers/trakt.ts +120 -0
  578. package/src/providers/twitch.ts +121 -0
  579. package/src/providers/twitter.ts +207 -0
  580. package/src/providers/united-effects.ts +89 -0
  581. package/src/providers/vipps.ts +86 -0
  582. package/src/providers/vk.ts +401 -0
  583. package/src/providers/webauthn.ts +296 -0
  584. package/src/providers/webex.ts +102 -0
  585. package/src/providers/wechat.ts +141 -0
  586. package/src/providers/wikimedia.ts +258 -0
  587. package/src/providers/wordpress.ts +86 -0
  588. package/src/providers/workos.ts +180 -0
  589. package/src/providers/yandex.ts +159 -0
  590. package/src/providers/zitadel.ts +128 -0
  591. package/src/providers/zoho.ts +84 -0
  592. package/src/providers/zoom.ts +119 -0
  593. package/src/types.ts +430 -0
  594. package/src/warnings.ts +21 -0
  595. package/types.d.ts +309 -0
  596. package/types.d.ts.map +1 -0
  597. package/types.js +53 -0
  598. package/warnings.d.ts +17 -0
  599. package/warnings.d.ts.map +1 -0
  600. package/warnings.js +1 -0
package/lib/init.js ADDED
@@ -0,0 +1,172 @@
1
+ import * as jwt from "../jwt.js";
2
+ import { createCallbackUrl } from "./utils/callback-url.js";
3
+ import * as cookie from "./utils/cookie.js";
4
+ import { createCSRFToken } from "./actions/callback/oauth/csrf-token.js";
5
+ import { AdapterError, EventError } from "../errors.js";
6
+ import parseProviders from "./utils/providers.js";
7
+ import { setLogger } from "./utils/logger.js";
8
+ import { merge } from "./utils/merge.js";
9
+ import { createServerActionsAdapter } from "../adapters/server-actions-helpers.js";
10
+ export const defaultCallbacks = {
11
+ signIn() {
12
+ return true;
13
+ },
14
+ redirect({ url, baseUrl }) {
15
+ if (url.startsWith("/"))
16
+ return `${baseUrl}${url}`;
17
+ else if (new URL(url).origin === baseUrl)
18
+ return url;
19
+ return baseUrl;
20
+ },
21
+ session({ session }) {
22
+ return {
23
+ user: {
24
+ name: session.user?.name,
25
+ email: session.user?.email,
26
+ image: session.user?.image,
27
+ },
28
+ expires: session.expires?.toISOString?.() ?? session.expires,
29
+ };
30
+ },
31
+ jwt({ token }) {
32
+ return token;
33
+ },
34
+ };
35
+ /** Initialize all internal options and cookies. */
36
+ export async function init({ authOptions: config, providerId, action, url, cookies: reqCookies, callbackUrl: reqCallbackUrl, csrfToken: reqCsrfToken, csrfDisabled, isPost, }) {
37
+ const logger = setLogger(config);
38
+ const { providers, provider } = parseProviders({ url, providerId, config });
39
+ const maxAge = 30 * 24 * 60 * 60; // Sessions expire after 30 days of being idle by default
40
+ let isOnRedirectProxy = false;
41
+ if ((provider?.type === "oauth" || provider?.type === "oidc") &&
42
+ provider.redirectProxyUrl) {
43
+ try {
44
+ isOnRedirectProxy =
45
+ new URL(provider.redirectProxyUrl).origin === url.origin;
46
+ }
47
+ catch {
48
+ throw new TypeError(`redirectProxyUrl must be a valid URL. Received: ${provider.redirectProxyUrl}`);
49
+ }
50
+ }
51
+ // User provided options are overridden by other options,
52
+ // except for the options with special handling above
53
+ const options = {
54
+ debug: false,
55
+ pages: {},
56
+ theme: {
57
+ colorScheme: "auto",
58
+ logo: "",
59
+ brandColor: "",
60
+ buttonText: "",
61
+ },
62
+ // Custom options override defaults
63
+ ...config,
64
+ // These computed settings can have values in userOptions but we override them
65
+ // and are request-specific.
66
+ url,
67
+ action,
68
+ // @ts-expect-errors
69
+ provider,
70
+ cookies: merge(cookie.defaultCookies(config.useSecureCookies ?? url.protocol === "https:"), config.cookies),
71
+ providers,
72
+ // Session options
73
+ session: {
74
+ // If no adapter or serverActions specified, force use of JSON Web Tokens (stateless)
75
+ strategy: (config.adapter || config.serverActions) ? "database" : "jwt",
76
+ maxAge,
77
+ updateAge: 24 * 60 * 60,
78
+ generateSessionToken: () => crypto.randomUUID(),
79
+ ...config.session,
80
+ },
81
+ // JWT options
82
+ jwt: {
83
+ secret: config.secret,
84
+ maxAge: config.session?.maxAge ?? maxAge,
85
+ encode: jwt.encode,
86
+ decode: jwt.decode,
87
+ ...config.jwt,
88
+ },
89
+ // Event messages
90
+ events: eventsErrorHandler(config.events ?? {}, logger),
91
+ adapter: adapterErrorHandler(config.adapter || (config.serverActions ? createServerActionsAdapter(config.serverActions) : undefined), logger),
92
+ // Callback functions
93
+ callbacks: { ...defaultCallbacks, ...config.callbacks },
94
+ logger,
95
+ callbackUrl: url.origin,
96
+ isOnRedirectProxy,
97
+ experimental: {
98
+ ...config.experimental,
99
+ },
100
+ };
101
+ // Init cookies
102
+ const cookies = [];
103
+ if (csrfDisabled) {
104
+ options.csrfTokenVerified = true;
105
+ }
106
+ else {
107
+ const { csrfToken, cookie: csrfCookie, csrfTokenVerified, } = await createCSRFToken({
108
+ options,
109
+ cookieValue: reqCookies?.[options.cookies.csrfToken.name],
110
+ isPost,
111
+ bodyValue: reqCsrfToken,
112
+ });
113
+ options.csrfToken = csrfToken;
114
+ options.csrfTokenVerified = csrfTokenVerified;
115
+ if (csrfCookie) {
116
+ cookies.push({
117
+ name: options.cookies.csrfToken.name,
118
+ value: csrfCookie,
119
+ options: options.cookies.csrfToken.options,
120
+ });
121
+ }
122
+ }
123
+ const { callbackUrl, callbackUrlCookie } = await createCallbackUrl({
124
+ options,
125
+ cookieValue: reqCookies?.[options.cookies.callbackUrl.name],
126
+ paramValue: reqCallbackUrl,
127
+ });
128
+ options.callbackUrl = callbackUrl;
129
+ if (callbackUrlCookie) {
130
+ cookies.push({
131
+ name: options.cookies.callbackUrl.name,
132
+ value: callbackUrlCookie,
133
+ options: options.cookies.callbackUrl.options,
134
+ });
135
+ }
136
+ return { options, cookies };
137
+ }
138
+ /** Wraps an object of methods and adds error handling. */
139
+ function eventsErrorHandler(methods, logger) {
140
+ return Object.keys(methods).reduce((acc, name) => {
141
+ acc[name] = async (...args) => {
142
+ try {
143
+ const method = methods[name];
144
+ return await method(...args);
145
+ }
146
+ catch (e) {
147
+ logger.error(new EventError(e));
148
+ }
149
+ };
150
+ return acc;
151
+ }, {});
152
+ }
153
+ /** Handles adapter induced errors. */
154
+ function adapterErrorHandler(adapter, logger) {
155
+ if (!adapter)
156
+ return;
157
+ return Object.keys(adapter).reduce((acc, name) => {
158
+ acc[name] = async (...args) => {
159
+ try {
160
+ logger.debug(`adapter_${name}`, { args });
161
+ const method = adapter[name];
162
+ return await method(...args);
163
+ }
164
+ catch (e) {
165
+ const error = new AdapterError(e);
166
+ logger.error(error);
167
+ throw error;
168
+ }
169
+ };
170
+ return acc;
171
+ }, {});
172
+ }
@@ -0,0 +1,17 @@
1
+ import type { ErrorPageParam, Theme } from "../../types.js";
2
+ /**
3
+ * The following errors are passed as error query parameters to the default or overridden error page.
4
+ *
5
+ * [Documentation](https://authjs.dev/guides/pages/error)
6
+ */
7
+ export interface ErrorProps {
8
+ url?: URL;
9
+ theme?: Theme;
10
+ error?: ErrorPageParam;
11
+ }
12
+ /** Renders an error page. */
13
+ export default function ErrorPage(props: ErrorProps): {
14
+ status: number;
15
+ html: import("preact").JSX.Element;
16
+ };
17
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/lib/pages/error.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3D;;;;GAIG;AAEH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,KAAK,CAAC,EAAE,cAAc,CAAA;CACvB;AASD,6BAA6B;AAC7B,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE,UAAU;;;EAmFlD"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ /** Renders an error page. */
3
+ export default function ErrorPage(props) {
4
+ const { url, error = "default", theme } = props;
5
+ const signinPageUrl = `${url}/signin`;
6
+ const errors = {
7
+ default: {
8
+ status: 200,
9
+ heading: "Error",
10
+ message: (_jsx("p", { children: _jsx("a", { className: "site", href: url?.origin, children: url?.host }) })),
11
+ },
12
+ Configuration: {
13
+ status: 500,
14
+ heading: "Server error",
15
+ message: (_jsxs("div", { children: [_jsx("p", { children: "There is a problem with the server configuration." }), _jsx("p", { children: "Check the server logs for more information." })] })),
16
+ },
17
+ AccessDenied: {
18
+ status: 403,
19
+ heading: "Access Denied",
20
+ message: (_jsxs("div", { children: [_jsx("p", { children: "You do not have permission to sign in." }), _jsx("p", { children: _jsx("a", { className: "button", href: signinPageUrl, children: "Sign in" }) })] })),
21
+ },
22
+ Verification: {
23
+ status: 403,
24
+ heading: "Unable to sign in",
25
+ message: (_jsxs("div", { children: [_jsx("p", { children: "The sign in link is no longer valid." }), _jsx("p", { children: "It may have been used already or it may have expired." })] })),
26
+ signin: (_jsx("a", { className: "button", href: signinPageUrl, children: "Sign in" })),
27
+ },
28
+ };
29
+ const { status, heading, message, signin } = errors[error] ?? errors.default;
30
+ return {
31
+ status,
32
+ html: (_jsxs("div", { className: "error", children: [theme?.brandColor && (_jsx("style", { dangerouslySetInnerHTML: {
33
+ __html: `
34
+ :root {
35
+ --brand-color: ${theme?.brandColor}
36
+ }
37
+ `,
38
+ } })), _jsxs("div", { className: "card", children: [theme?.logo && _jsx("img", { src: theme?.logo, alt: "Logo", className: "logo" }), _jsx("h1", { children: heading }), _jsx("div", { className: "message", children: message }), signin] })] })),
39
+ };
40
+ }
@@ -0,0 +1,42 @@
1
+ import type { InternalOptions, RequestInternal, ResponseInternal, InternalProvider, PublicProvider } from "../../types.js";
2
+ import type { Cookie } from "../utils/cookie.js";
3
+ type RenderPageParams = {
4
+ query?: RequestInternal["query"];
5
+ cookies?: Cookie[];
6
+ } & Partial<Pick<InternalOptions, "url" | "callbackUrl" | "csrfToken" | "providers" | "theme" | "pages">>;
7
+ /**
8
+ * Unless the user defines their [own pages](https://authjs.dev/reference/core#pages),
9
+ * we render a set of default ones, using Preact SSR.
10
+ */
11
+ export default function renderPage(params: RenderPageParams): {
12
+ csrf(skip: boolean, options: InternalOptions, cookies: Cookie[]): {
13
+ headers: {
14
+ "Content-Type": string;
15
+ "Cache-Control": string;
16
+ Expires: string;
17
+ Pragma: string;
18
+ };
19
+ body: {
20
+ csrfToken: string | undefined;
21
+ };
22
+ cookies: Cookie[];
23
+ status?: undefined;
24
+ } | {
25
+ status: number;
26
+ cookies: Cookie[];
27
+ headers?: undefined;
28
+ body?: undefined;
29
+ };
30
+ providers(providers: InternalProvider[]): {
31
+ headers: {
32
+ "Content-Type": string;
33
+ };
34
+ body: Record<string, PublicProvider>;
35
+ };
36
+ signin(providerId?: string, error?: any): ResponseInternal<any>;
37
+ signout(): ResponseInternal<any>;
38
+ verifyRequest(props?: any): ResponseInternal<any>;
39
+ error(error?: string): ResponseInternal<any>;
40
+ };
41
+ export {};
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/pages/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAsBhD,KAAK,gBAAgB,GAAG;IACtB,KAAK,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB,GAAG,OAAO,CACT,IAAI,CACF,eAAe,EACf,KAAK,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,CACtE,CACF,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAM,EAAE,gBAAgB;eAI5C,OAAO,WAAW,eAAe,WAAW,MAAM,EAAE;;;;;;;;;;;;;;;;;;yBAqB1C,gBAAgB,EAAE;;;;;;wBAYnB,MAAM,UAAU,GAAG;;0BA6DjB,GAAG;kBAaX,MAAM;EAkBvB"}
@@ -0,0 +1,136 @@
1
+ import { renderToString } from "preact-render-to-string";
2
+ import ErrorPage from "./error.js";
3
+ import SigninPage from "./signin.js";
4
+ import SignoutPage from "./signout.js";
5
+ import css from "./styles.js";
6
+ import VerifyRequestPage from "./verify-request.js";
7
+ import { UnknownAction } from "../../errors.js";
8
+ function send({ html, title, status, cookies, theme, headTags, }) {
9
+ return {
10
+ cookies,
11
+ status,
12
+ headers: { "Content-Type": "text/html" },
13
+ body: `<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><style>${css}</style><title>${title}</title>${headTags ?? ""}</head><body class="__next-auth-theme-${theme?.colorScheme ?? "auto"}"><div class="page">${renderToString(html)}</div></body></html>`,
14
+ };
15
+ }
16
+ /**
17
+ * Unless the user defines their [own pages](https://authjs.dev/reference/core#pages),
18
+ * we render a set of default ones, using Preact SSR.
19
+ */
20
+ export default function renderPage(params) {
21
+ const { url, theme, query, cookies, pages, providers } = params;
22
+ return {
23
+ csrf(skip, options, cookies) {
24
+ if (!skip) {
25
+ return {
26
+ headers: {
27
+ "Content-Type": "application/json",
28
+ "Cache-Control": "private, no-cache, no-store",
29
+ Expires: "0",
30
+ Pragma: "no-cache",
31
+ },
32
+ body: { csrfToken: options.csrfToken },
33
+ cookies,
34
+ };
35
+ }
36
+ options.logger.warn("csrf-disabled");
37
+ cookies.push({
38
+ name: options.cookies.csrfToken.name,
39
+ value: "",
40
+ options: { ...options.cookies.csrfToken.options, maxAge: 0 },
41
+ });
42
+ return { status: 404, cookies };
43
+ },
44
+ providers(providers) {
45
+ return {
46
+ headers: { "Content-Type": "application/json" },
47
+ body: providers.reduce((acc, { id, name, type, signinUrl, callbackUrl }) => {
48
+ acc[id] = { id, name, type, signinUrl, callbackUrl };
49
+ return acc;
50
+ }, {}),
51
+ };
52
+ },
53
+ signin(providerId, error) {
54
+ if (providerId)
55
+ throw new UnknownAction("Unsupported action");
56
+ if (pages?.signIn) {
57
+ let signinUrl = `${pages.signIn}${pages.signIn.includes("?") ? "&" : "?"}${new URLSearchParams({ callbackUrl: params.callbackUrl ?? "/" })}`;
58
+ if (error)
59
+ signinUrl = `${signinUrl}&${new URLSearchParams({ error })}`;
60
+ return { redirect: signinUrl, cookies };
61
+ }
62
+ // If we have a webauthn provider with conditional UI and
63
+ // a simpleWebAuthnBrowserScript is defined, we need to
64
+ // render the script in the page.
65
+ const webauthnProvider = providers?.find((p) => p.type === "webauthn" &&
66
+ p.enableConditionalUI &&
67
+ !!p.simpleWebAuthnBrowserVersion);
68
+ let simpleWebAuthnBrowserScript = "";
69
+ if (webauthnProvider) {
70
+ const { simpleWebAuthnBrowserVersion } = webauthnProvider;
71
+ simpleWebAuthnBrowserScript = `<script src="https://unpkg.com/@simplewebauthn/browser@${simpleWebAuthnBrowserVersion}/dist/bundle/index.umd.min.js" crossorigin="anonymous"></script>`;
72
+ }
73
+ return send({
74
+ cookies,
75
+ theme,
76
+ html: SigninPage({
77
+ csrfToken: params.csrfToken,
78
+ // We only want to render providers
79
+ providers: params.providers?.filter((provider) =>
80
+ // Always render oauth and email type providers
81
+ ["email", "oauth", "oidc"].includes(provider.type) ||
82
+ // Only render credentials type provider if credentials are defined
83
+ (provider.type === "credentials" && provider.credentials) ||
84
+ // Only render webauthn type provider if formFields are defined
85
+ (provider.type === "webauthn" && provider.formFields) ||
86
+ // Don't render other provider types
87
+ false),
88
+ callbackUrl: params.callbackUrl,
89
+ theme: params.theme,
90
+ error,
91
+ ...query,
92
+ }),
93
+ title: "Sign In",
94
+ headTags: simpleWebAuthnBrowserScript,
95
+ });
96
+ },
97
+ signout() {
98
+ if (pages?.signOut)
99
+ return { redirect: pages.signOut, cookies };
100
+ return send({
101
+ cookies,
102
+ theme,
103
+ html: SignoutPage({ csrfToken: params.csrfToken, url, theme }),
104
+ title: "Sign Out",
105
+ });
106
+ },
107
+ verifyRequest(props) {
108
+ if (pages?.verifyRequest)
109
+ return {
110
+ redirect: `${pages.verifyRequest}${url?.search ?? ""}`,
111
+ cookies,
112
+ };
113
+ return send({
114
+ cookies,
115
+ theme,
116
+ html: VerifyRequestPage({ url, theme, ...props }),
117
+ title: "Verify Request",
118
+ });
119
+ },
120
+ error(error) {
121
+ if (pages?.error) {
122
+ return {
123
+ redirect: `${pages.error}${pages.error.includes("?") ? "&" : "?"}error=${error}`,
124
+ cookies,
125
+ };
126
+ }
127
+ return send({
128
+ cookies,
129
+ theme,
130
+ // @ts-expect-error fix error type
131
+ ...ErrorPage({ url, theme, error }),
132
+ title: "Error",
133
+ });
134
+ },
135
+ };
136
+ }
@@ -0,0 +1,10 @@
1
+ import type { InternalProvider, SignInPageErrorParam, Theme } from "../../types.js";
2
+ export default function SigninPage(props: {
3
+ csrfToken?: string;
4
+ providers?: InternalProvider[];
5
+ callbackUrl?: string;
6
+ email?: string;
7
+ error?: SignInPageErrorParam;
8
+ theme?: Theme;
9
+ }): import("preact").JSX.Element;
10
+ //# sourceMappingURL=signin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signin.d.ts","sourceRoot":"","sources":["../../src/lib/pages/signin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,EACN,MAAM,gBAAgB,CAAA;AAgCvB,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAAK,EAAE;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,oBAAoB,CAAA;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,gCAmNA"}
@@ -0,0 +1,75 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ import { webauthnScript } from "../utils/webauthn-client.js";
3
+ const signinErrors = {
4
+ default: "Unable to sign in.",
5
+ Signin: "Try signing in with a different account.",
6
+ OAuthSignin: "Try signing in with a different account.",
7
+ OAuthCallbackError: "Try signing in with a different account.",
8
+ OAuthCreateAccount: "Try signing in with a different account.",
9
+ EmailCreateAccount: "Try signing in with a different account.",
10
+ Callback: "Try signing in with a different account.",
11
+ OAuthAccountNotLinked: "To confirm your identity, sign in with the same account you used originally.",
12
+ EmailSignin: "The e-mail could not be sent.",
13
+ CredentialsSignin: "Sign in failed. Check the details you provided are correct.",
14
+ SessionRequired: "Please sign in to access this page.",
15
+ };
16
+ function ConditionalUIScript(providerID) {
17
+ const startConditionalUIScript = `
18
+ const currentURL = window.location.href;
19
+ const authURL = currentURL.substring(0, currentURL.lastIndexOf('/'));
20
+ (${webauthnScript})(authURL, "${providerID}");
21
+ `;
22
+ return (_jsx(_Fragment, { children: _jsx("script", { dangerouslySetInnerHTML: { __html: startConditionalUIScript } }) }));
23
+ }
24
+ export default function SigninPage(props) {
25
+ const { csrfToken, providers = [], callbackUrl, theme, email, error: errorType, } = props;
26
+ if (typeof document !== "undefined" && theme?.brandColor) {
27
+ document.documentElement.style.setProperty("--brand-color", theme.brandColor);
28
+ }
29
+ if (typeof document !== "undefined" && theme?.buttonText) {
30
+ document.documentElement.style.setProperty("--button-text-color", theme.buttonText);
31
+ }
32
+ const error = errorType && (signinErrors[errorType] ?? signinErrors.default);
33
+ const providerLogoPath = "https://authjs.dev/img/providers";
34
+ const conditionalUIProviderID = providers.find((provider) => provider.type === "webauthn" && provider.enableConditionalUI)?.id;
35
+ return (_jsxs("div", { className: "signin", children: [theme?.brandColor && (_jsx("style", { dangerouslySetInnerHTML: {
36
+ __html: `:root {--brand-color: ${theme.brandColor}}`,
37
+ } })), theme?.buttonText && (_jsx("style", { dangerouslySetInnerHTML: {
38
+ __html: `
39
+ :root {
40
+ --button-text-color: ${theme.buttonText}
41
+ }
42
+ `,
43
+ } })), _jsxs("div", { className: "card", children: [error && (_jsx("div", { className: "error", children: _jsx("p", { children: error }) })), theme?.logo && _jsx("img", { src: theme.logo, alt: "Logo", className: "logo" }), providers.map((provider, i) => {
44
+ let bg, brandColor, logo;
45
+ if (provider.type === "oauth" || provider.type === "oidc") {
46
+ ;
47
+ ({
48
+ bg = "#fff",
49
+ brandColor,
50
+ logo = `${providerLogoPath}/${provider.id}.svg`,
51
+ } = provider.style ?? {});
52
+ }
53
+ const color = brandColor ?? bg ?? "#fff";
54
+ return (_jsxs("div", { className: "provider", children: [provider.type === "oauth" || provider.type === "oidc" ? (_jsxs("form", { action: provider.signinUrl, method: "POST", children: [_jsx("input", { type: "hidden", name: "csrfToken", value: csrfToken }), callbackUrl && (_jsx("input", { type: "hidden", name: "callbackUrl", value: callbackUrl })), _jsxs("button", { type: "submit", className: "button", style: {
55
+ "--provider-brand-color": color,
56
+ }, tabIndex: 0, children: [_jsxs("span", { style: {
57
+ filter: "invert(1) grayscale(1) brightness(1.3) contrast(9000)",
58
+ "mix-blend-mode": "luminosity",
59
+ opacity: 0.95,
60
+ }, children: ["Sign in with ", provider.name] }), logo && _jsx("img", { loading: "lazy", height: 24, src: logo })] })] })) : null, (provider.type === "email" ||
61
+ provider.type === "credentials" ||
62
+ provider.type === "webauthn") &&
63
+ i > 0 &&
64
+ providers[i - 1].type !== "email" &&
65
+ providers[i - 1].type !== "credentials" &&
66
+ providers[i - 1].type !== "webauthn" && _jsx("hr", {}), provider.type === "email" && (_jsxs("form", { action: provider.signinUrl, method: "POST", children: [_jsx("input", { type: "hidden", name: "csrfToken", value: csrfToken }), _jsx("label", { className: "section-header", htmlFor: `input-email-for-${provider.id}-provider`, children: "Email" }), _jsx("input", { id: `input-email-for-${provider.id}-provider`, autoFocus: true, type: "email", name: "email", value: email, placeholder: "email@example.com", required: true }), _jsxs("button", { id: "submitButton", type: "submit", tabIndex: 0, children: ["Sign in with ", provider.name] })] })), provider.type === "credentials" && (_jsxs("form", { action: provider.callbackUrl, method: "POST", children: [_jsx("input", { type: "hidden", name: "csrfToken", value: csrfToken }), Object.keys(provider.credentials).map((credential) => {
67
+ return (_jsxs("div", { children: [_jsx("label", { className: "section-header", htmlFor: `input-${credential}-for-${provider.id}-provider`, children: provider.credentials[credential].label ?? credential }), _jsx("input", { name: credential, id: `input-${credential}-for-${provider.id}-provider`, type: provider.credentials[credential].type ?? "text", placeholder: provider.credentials[credential].placeholder ?? "", ...provider.credentials[credential] })] }, `input-group-${provider.id}`));
68
+ }), _jsxs("button", { id: "submitButton", type: "submit", tabIndex: 0, children: ["Sign in with ", provider.name] })] })), provider.type === "webauthn" && (_jsxs("form", { action: provider.callbackUrl, method: "POST", id: `${provider.id}-form`, children: [_jsx("input", { type: "hidden", name: "csrfToken", value: csrfToken }), Object.keys(provider.formFields).map((field) => {
69
+ return (_jsxs("div", { children: [_jsx("label", { className: "section-header", htmlFor: `input-${field}-for-${provider.id}-provider`, children: provider.formFields[field].label ?? field }), _jsx("input", { name: field, "data-form-field": true, id: `input-${field}-for-${provider.id}-provider`, type: provider.formFields[field].type ?? "text", placeholder: provider.formFields[field].placeholder ?? "", ...provider.formFields[field] })] }, `input-group-${provider.id}`));
70
+ }), _jsxs("button", { id: `submitButton-${provider.id}`, type: "submit", tabIndex: 0, children: ["Sign in with ", provider.name] })] })), (provider.type === "email" ||
71
+ provider.type === "credentials" ||
72
+ provider.type === "webauthn") &&
73
+ i + 1 < providers.length && _jsx("hr", {})] }, provider.id));
74
+ })] }), conditionalUIProviderID && ConditionalUIScript(conditionalUIProviderID)] }));
75
+ }
@@ -0,0 +1,8 @@
1
+ import type { Theme } from "../../types.js";
2
+ export interface SignoutProps {
3
+ url?: URL;
4
+ csrfToken?: string;
5
+ theme?: Theme;
6
+ }
7
+ export default function SignoutPage(props: SignoutProps): import("preact").JSX.Element;
8
+ //# sourceMappingURL=signout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signout.d.ts","sourceRoot":"","sources":["../../src/lib/pages/signout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3C,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE,YAAY,gCAwCtD"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ export default function SignoutPage(props) {
3
+ const { url, csrfToken, theme } = props;
4
+ return (_jsxs("div", { className: "signout", children: [theme?.brandColor && (_jsx("style", { dangerouslySetInnerHTML: {
5
+ __html: `
6
+ :root {
7
+ --brand-color: ${theme.brandColor}
8
+ }
9
+ `,
10
+ } })), theme?.buttonText && (_jsx("style", { dangerouslySetInnerHTML: {
11
+ __html: `
12
+ :root {
13
+ --button-text-color: ${theme.buttonText}
14
+ }
15
+ `,
16
+ } })), _jsxs("div", { className: "card", children: [theme?.logo && _jsx("img", { src: theme.logo, alt: "Logo", className: "logo" }), _jsx("h1", { children: "Signout" }), _jsx("p", { children: "Are you sure you want to sign out?" }), _jsxs("form", { action: url?.toString(), method: "POST", children: [_jsx("input", { type: "hidden", name: "csrfToken", value: csrfToken }), _jsx("button", { id: "submitButton", type: "submit", children: "Sign out" })] })] })] }));
17
+ }
@@ -0,0 +1,3 @@
1
+ declare const _default: ":root {\n --border-width: 1px;\n --border-radius: 0.5rem;\n --color-error: #c94b4b;\n --color-info: #157efb;\n --color-info-hover: #0f6ddb;\n --color-info-text: #fff;\n}\n\n.__next-auth-theme-auto,\n.__next-auth-theme-light {\n --color-background: #ececec;\n --color-background-hover: rgba(236, 236, 236, 0.8);\n --color-background-card: #fff;\n --color-text: #000;\n --color-primary: #444;\n --color-control-border: #bbb;\n --color-button-active-background: #f9f9f9;\n --color-button-active-border: #aaa;\n --color-separator: #ccc;\n --provider-bg: #fff;\n --provider-bg-hover: color-mix(\n in srgb,\n var(--provider-brand-color) 30%,\n #fff\n );\n}\n\n.__next-auth-theme-dark {\n --color-background: #161b22;\n --color-background-hover: rgba(22, 27, 34, 0.8);\n --color-background-card: #0d1117;\n --color-text: #fff;\n --color-primary: #ccc;\n --color-control-border: #555;\n --color-button-active-background: #060606;\n --color-button-active-border: #666;\n --color-separator: #444;\n --provider-bg: #161b22;\n --provider-bg-hover: color-mix(\n in srgb,\n var(--provider-brand-color) 30%,\n #000\n );\n}\n\n.__next-auth-theme-dark img[src$=\"42-school.svg\"],\n .__next-auth-theme-dark img[src$=\"apple.svg\"],\n .__next-auth-theme-dark img[src$=\"boxyhq-saml.svg\"],\n .__next-auth-theme-dark img[src$=\"eveonline.svg\"],\n .__next-auth-theme-dark img[src$=\"github.svg\"],\n .__next-auth-theme-dark img[src$=\"mailchimp.svg\"],\n .__next-auth-theme-dark img[src$=\"medium.svg\"],\n .__next-auth-theme-dark img[src$=\"okta.svg\"],\n .__next-auth-theme-dark img[src$=\"patreon.svg\"],\n .__next-auth-theme-dark img[src$=\"ping-id.svg\"],\n .__next-auth-theme-dark img[src$=\"roblox.svg\"],\n .__next-auth-theme-dark img[src$=\"threads.svg\"],\n .__next-auth-theme-dark img[src$=\"wikimedia.svg\"] {\n filter: invert(1);\n }\n\n.__next-auth-theme-dark #submitButton {\n background-color: var(--provider-bg, var(--color-info));\n }\n\n@media (prefers-color-scheme: dark) {\n .__next-auth-theme-auto {\n --color-background: #161b22;\n --color-background-hover: rgba(22, 27, 34, 0.8);\n --color-background-card: #0d1117;\n --color-text: #fff;\n --color-primary: #ccc;\n --color-control-border: #555;\n --color-button-active-background: #060606;\n --color-button-active-border: #666;\n --color-separator: #444;\n --provider-bg: #161b22;\n --provider-bg-hover: color-mix(\n in srgb,\n var(--provider-brand-color) 30%,\n #000\n );\n }\n .__next-auth-theme-auto img[src$=\"42-school.svg\"],\n .__next-auth-theme-auto img[src$=\"apple.svg\"],\n .__next-auth-theme-auto img[src$=\"boxyhq-saml.svg\"],\n .__next-auth-theme-auto img[src$=\"eveonline.svg\"],\n .__next-auth-theme-auto img[src$=\"github.svg\"],\n .__next-auth-theme-auto img[src$=\"mailchimp.svg\"],\n .__next-auth-theme-auto img[src$=\"medium.svg\"],\n .__next-auth-theme-auto img[src$=\"okta.svg\"],\n .__next-auth-theme-auto img[src$=\"patreon.svg\"],\n .__next-auth-theme-auto img[src$=\"ping-id.svg\"],\n .__next-auth-theme-auto img[src$=\"roblox.svg\"],\n .__next-auth-theme-auto img[src$=\"threads.svg\"],\n .__next-auth-theme-auto img[src$=\"wikimedia.svg\"] {\n filter: invert(1);\n }\n .__next-auth-theme-auto #submitButton {\n background-color: var(--provider-bg, var(--color-info));\n }\n}\n\nhtml {\n box-sizing: border-box;\n}\n\n*,\n*:before,\n*:after {\n box-sizing: inherit;\n margin: 0;\n padding: 0;\n}\n\nbody {\n background-color: var(--color-background);\n margin: 0;\n padding: 0;\n font-family:\n ui-sans-serif,\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n \"Segoe UI\",\n Roboto,\n \"Helvetica Neue\",\n Arial,\n \"Noto Sans\",\n sans-serif,\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\",\n \"Segoe UI Symbol\",\n \"Noto Color Emoji\";\n}\n\nh1 {\n margin-bottom: 1.5rem;\n padding: 0 1rem;\n font-weight: 400;\n color: var(--color-text);\n}\n\np {\n margin-bottom: 1.5rem;\n padding: 0 1rem;\n color: var(--color-text);\n}\n\nform {\n margin: 0;\n padding: 0;\n}\n\nlabel {\n font-weight: 500;\n text-align: left;\n margin-bottom: 0.25rem;\n display: block;\n color: var(--color-text);\n}\n\ninput[type] {\n box-sizing: border-box;\n display: block;\n width: 100%;\n padding: 0.5rem 1rem;\n border: var(--border-width) solid var(--color-control-border);\n background: var(--color-background-card);\n font-size: 1rem;\n border-radius: var(--border-radius);\n color: var(--color-text);\n}\n\np {\n font-size: 1.1rem;\n line-height: 2rem;\n}\n\na.button {\n text-decoration: none;\n line-height: 1rem;\n}\n\na.button:link,\n a.button:visited {\n background-color: var(--color-background);\n color: var(--color-primary);\n }\n\nbutton,\na.button {\n padding: 0.75rem 1rem;\n color: var(--provider-color, var(--color-primary));\n background-color: var(--provider-bg, var(--color-background));\n border: 1px solid #00000031;\n font-size: 0.9rem;\n height: 50px;\n border-radius: var(--border-radius);\n transition: background-color 250ms ease-in-out;\n font-weight: 300;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n:is(button,a.button):hover {\n background-color: var(--provider-bg-hover, var(--color-background-hover));\n cursor: pointer;\n }\n\n:is(button,a.button):active {\n cursor: pointer;\n }\n\n:is(button,a.button) span {\n color: var(--provider-bg);\n }\n\n#submitButton {\n color: var(--button-text-color, var(--color-info-text));\n background-color: var(--brand-color, var(--color-info));\n width: 100%;\n}\n\n#submitButton:hover {\n background-color: var(\n --button-hover-bg,\n var(--color-info-hover)\n ) !important;\n }\n\na.site {\n color: var(--color-primary);\n text-decoration: none;\n font-size: 1rem;\n line-height: 2rem;\n}\n\na.site:hover {\n text-decoration: underline;\n }\n\n.page {\n position: absolute;\n width: 100%;\n height: 100%;\n display: grid;\n place-items: center;\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\n.page > div {\n text-align: center;\n }\n\n.error a.button {\n padding-left: 2rem;\n padding-right: 2rem;\n margin-top: 0.5rem;\n }\n\n.error .message {\n margin-bottom: 1.5rem;\n }\n\n.signin input[type=\"text\"] {\n margin-left: auto;\n margin-right: auto;\n display: block;\n }\n\n.signin hr {\n display: block;\n border: 0;\n border-top: 1px solid var(--color-separator);\n margin: 2rem auto 1rem auto;\n overflow: visible;\n }\n\n.signin hr::before {\n content: \"or\";\n background: var(--color-background-card);\n color: #888;\n padding: 0 0.4rem;\n position: relative;\n top: -0.7rem;\n }\n\n.signin .error {\n background: #f5f5f5;\n font-weight: 500;\n border-radius: 0.3rem;\n background: var(--color-error);\n }\n\n.signin .error p {\n text-align: left;\n padding: 0.5rem 1rem;\n font-size: 0.9rem;\n line-height: 1.2rem;\n color: var(--color-info-text);\n }\n\n.signin > div,\n .signin form {\n display: block;\n }\n\n.signin > div input[type], .signin form input[type] {\n margin-bottom: 0.5rem;\n }\n\n.signin > div button, .signin form button {\n width: 100%;\n }\n\n.signin .provider + .provider {\n margin-top: 1rem;\n }\n\n.logo {\n display: inline-block;\n max-width: 150px;\n margin: 1.25rem 0;\n max-height: 70px;\n}\n\n.card {\n background-color: var(--color-background-card);\n border-radius: 1rem;\n padding: 1.25rem 2rem;\n}\n\n.card .header {\n color: var(--color-primary);\n }\n\n.card input[type]::-moz-placeholder {\n color: color-mix(\n in srgb,\n var(--color-text) 20%,\n var(--color-button-active-background)\n );\n }\n\n.card input[type]::placeholder {\n color: color-mix(\n in srgb,\n var(--color-text) 20%,\n var(--color-button-active-background)\n );\n }\n\n.card input[type] {\n background: color-mix(in srgb, var(--color-background-card) 95%, black);\n }\n\n.section-header {\n color: var(--color-text);\n}\n\n@media screen and (min-width: 450px) {\n .card {\n margin: 2rem 0;\n width: 368px;\n }\n}\n\n@media screen and (max-width: 450px) {\n .card {\n margin: 1rem 0;\n width: 343px;\n }\n}\n";
2
+ export default _default;
3
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/lib/pages/styles.ts"],"names":[],"mappings":";AACA,wBA2XC"}