@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
@@ -0,0 +1,96 @@
1
+ import { setLogger } from "./logger.js";
2
+ /**
3
+ * Set default env variables on the config object
4
+ * @param suppressWarnings intended for framework authors.
5
+ */
6
+ export function setEnvDefaults(envObject, config, suppressBasePathWarning = false) {
7
+ try {
8
+ const url = envObject.AUTH_URL;
9
+ if (url) {
10
+ if (config.basePath) {
11
+ if (!suppressBasePathWarning) {
12
+ const logger = setLogger(config);
13
+ logger.warn("env-url-basepath-redundant");
14
+ }
15
+ }
16
+ else {
17
+ config.basePath = new URL(url).pathname;
18
+ }
19
+ }
20
+ }
21
+ catch {
22
+ // Catching and swallowing potential URL parsing errors, we'll fall
23
+ // back to `/auth` below.
24
+ }
25
+ finally {
26
+ config.basePath ?? (config.basePath = `/auth`);
27
+ }
28
+ if (!config.secret?.length) {
29
+ config.secret = [];
30
+ const secret = envObject.AUTH_SECRET;
31
+ if (secret)
32
+ config.secret.push(secret);
33
+ for (const i of [1, 2, 3]) {
34
+ const secret = envObject[`AUTH_SECRET_${i}`];
35
+ if (secret)
36
+ config.secret.unshift(secret);
37
+ }
38
+ }
39
+ config.redirectProxyUrl ?? (config.redirectProxyUrl = envObject.AUTH_REDIRECT_PROXY_URL);
40
+ config.trustHost ?? (config.trustHost = !!(envObject.AUTH_URL ??
41
+ envObject.AUTH_TRUST_HOST ??
42
+ envObject.VERCEL ??
43
+ envObject.CF_PAGES ??
44
+ envObject.NODE_ENV !== "production"));
45
+ config.providers = config.providers.map((provider) => {
46
+ const { id } = typeof provider === "function" ? provider({}) : provider;
47
+ const ID = id.toUpperCase().replace(/-/g, "_");
48
+ const clientId = envObject[`AUTH_${ID}_ID`];
49
+ const clientSecret = envObject[`AUTH_${ID}_SECRET`];
50
+ const issuer = envObject[`AUTH_${ID}_ISSUER`];
51
+ const apiKey = envObject[`AUTH_${ID}_KEY`];
52
+ const finalProvider = typeof provider === "function"
53
+ ? provider({ clientId, clientSecret, issuer, apiKey })
54
+ : provider;
55
+ if (finalProvider.type === "oauth" || finalProvider.type === "oidc") {
56
+ finalProvider.clientId ?? (finalProvider.clientId = clientId);
57
+ finalProvider.clientSecret ?? (finalProvider.clientSecret = clientSecret);
58
+ finalProvider.issuer ?? (finalProvider.issuer = issuer);
59
+ }
60
+ else if (finalProvider.type === "email") {
61
+ finalProvider.apiKey ?? (finalProvider.apiKey = apiKey);
62
+ }
63
+ return finalProvider;
64
+ });
65
+ }
66
+ export function createActionURL(action, protocol, headers, envObject, config) {
67
+ const basePath = config?.basePath;
68
+ const envUrl = envObject.AUTH_URL ?? envObject.NEXTAUTH_URL;
69
+ let url;
70
+ if (envUrl) {
71
+ url = new URL(envUrl);
72
+ if (basePath && basePath !== "/" && url.pathname !== "/") {
73
+ if (url.pathname !== basePath) {
74
+ const logger = setLogger(config);
75
+ logger.warn("env-url-basepath-mismatch");
76
+ }
77
+ url.pathname = "/";
78
+ }
79
+ }
80
+ else {
81
+ const detectedHost = headers.get("x-forwarded-host") ?? headers.get("host");
82
+ const detectedProtocol = headers.get("x-forwarded-proto") ?? protocol ?? "https";
83
+ const _protocol = detectedProtocol.endsWith(":")
84
+ ? detectedProtocol
85
+ : detectedProtocol + ":";
86
+ url = new URL(`${_protocol}//${detectedHost}`);
87
+ }
88
+ // remove trailing slash
89
+ const sanitizedUrl = url.toString().replace(/\/$/, "");
90
+ if (basePath) {
91
+ // remove leading and trailing slash
92
+ const sanitizedBasePath = basePath?.replace(/(^\/|\/$)/g, "") ?? "";
93
+ return new URL(`${sanitizedUrl}/${sanitizedBasePath}/${action}`);
94
+ }
95
+ return new URL(`${sanitizedUrl}/${action}`);
96
+ }
@@ -0,0 +1,18 @@
1
+ import type { WarningCode } from "../../warnings.js";
2
+ import type { AuthConfig } from "../../index.js";
3
+ /**
4
+ * Override any of the methods, and the rest will use the default logger.
5
+ *
6
+ * [Documentation](https://authjs.dev/reference/core#authconfig#logger)
7
+ */
8
+ export interface LoggerInstance extends Record<string, Function> {
9
+ warn: (code: WarningCode) => void;
10
+ error: (error: Error) => void;
11
+ debug: (message: string, metadata?: unknown) => void;
12
+ }
13
+ /**
14
+ * Override the built-in logger with user's implementation.
15
+ * Any `undefined` level will use the default logger.
16
+ */
17
+ export declare function setLogger(config: Pick<AuthConfig, "logger" | "debug">): LoggerInstance;
18
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/utils/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD;;;;GAIG;AAEH,MAAM,WAAW,cAAe,SAAQ,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC9D,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;IACjC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC7B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CACrD;AAwCD;;;GAGG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,GAC3C,cAAc,CAchB"}
@@ -0,0 +1,50 @@
1
+ import { AuthError } from "../../errors.js";
2
+ const red = "\x1b[31m";
3
+ const yellow = "\x1b[33m";
4
+ const grey = "\x1b[90m";
5
+ const reset = "\x1b[0m";
6
+ const defaultLogger = {
7
+ error(error) {
8
+ const name = error instanceof AuthError ? error.type : error.name;
9
+ console.error(`${red}[auth][error]${reset} ${name}: ${error.message}`);
10
+ if (error.cause &&
11
+ typeof error.cause === "object" &&
12
+ "err" in error.cause &&
13
+ error.cause.err instanceof Error) {
14
+ const { err, ...data } = error.cause;
15
+ console.error(`${red}[auth][cause]${reset}:`, err.stack);
16
+ if (data)
17
+ console.error(`${red}[auth][details]${reset}:`, JSON.stringify(data, null, 2));
18
+ }
19
+ else if (error.stack) {
20
+ console.error(error.stack.replace(/.*/, "").substring(1));
21
+ }
22
+ },
23
+ warn(code) {
24
+ const url = `https://warnings.authjs.dev`;
25
+ console.warn(`${yellow}[auth][warn][${code}]${reset}`, `Read more: ${url}`);
26
+ },
27
+ debug(message, metadata) {
28
+ console.log(`${grey}[auth][debug]:${reset} ${message}`, JSON.stringify(metadata, null, 2));
29
+ },
30
+ };
31
+ /**
32
+ * Override the built-in logger with user's implementation.
33
+ * Any `undefined` level will use the default logger.
34
+ */
35
+ export function setLogger(config) {
36
+ const newLogger = {
37
+ ...defaultLogger,
38
+ };
39
+ // Turn off debug logging if `debug` isn't set to `true`
40
+ if (!config.debug)
41
+ newLogger.debug = () => { };
42
+ if (config.logger?.error)
43
+ newLogger.error = config.logger.error;
44
+ if (config.logger?.warn)
45
+ newLogger.warn = config.logger.warn;
46
+ if (config.logger?.debug)
47
+ newLogger.debug = config.logger.debug;
48
+ config.logger ?? (config.logger = newLogger);
49
+ return newLogger;
50
+ }
@@ -0,0 +1,3 @@
1
+ /** Deep merge two or more objects */
2
+ export declare function merge<T extends Record<string, unknown>>(target: T, ...sources: Array<Record<string, unknown> | undefined>): T & Record<string, unknown>;
3
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/lib/utils/merge.ts"],"names":[],"mappings":"AAIA,qCAAqC;AACrC,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrD,MAAM,EAAE,CAAC,EACT,GAAG,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,GACrD,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqB7B"}
@@ -0,0 +1,23 @@
1
+ function isObject(item) {
2
+ return item !== null && typeof item === "object";
3
+ }
4
+ /** Deep merge two or more objects */
5
+ export function merge(target, ...sources) {
6
+ if (!sources.length)
7
+ return target;
8
+ const source = sources.shift();
9
+ if (isObject(target) && isObject(source)) {
10
+ for (const key in source) {
11
+ if (isObject(source[key])) {
12
+ if (!isObject(target[key]))
13
+ target[key] = Array.isArray(source[key])
14
+ ? []
15
+ : {};
16
+ merge(target[key], source[key]);
17
+ }
18
+ else if (source[key] !== undefined)
19
+ target[key] = source[key];
20
+ }
21
+ }
22
+ return merge(target, ...sources);
23
+ }
@@ -0,0 +1,19 @@
1
+ import type { InternalProvider } from "../../types.js";
2
+ import { type AuthConfig } from "../../index.js";
3
+ /**
4
+ * Adds `signinUrl` and `callbackUrl` to each provider
5
+ * and deep merge user-defined options.
6
+ */
7
+ export default function parseProviders(params: {
8
+ url: URL;
9
+ providerId?: string;
10
+ config: AuthConfig;
11
+ }): {
12
+ providers: InternalProvider[];
13
+ provider?: InternalProvider;
14
+ };
15
+ export declare function isOIDCProvider(provider: InternalProvider<"oidc" | "oauth">): provider is InternalProvider<"oidc">;
16
+ export declare function isOAuth2Provider(provider: InternalProvider<"oidc" | "oauth">): provider is InternalProvider<"oauth">;
17
+ /** Either OAuth 2 or OIDC */
18
+ export declare function isOAuthProvider(provider: InternalProvider<any>): provider is InternalProvider<"oauth" | "oidc">;
19
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/lib/utils/providers.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAW,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGhD;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,MAAM,EAAE;IAC7C,GAAG,EAAE,GAAG,CAAA;IACR,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,UAAU,CAAA;CACnB,GAAG;IACF,SAAS,EAAE,gBAAgB,EAAE,CAAA;IAC7B,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAC5B,CAgDA;AAgHD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,gBAAgB,CAAC,MAAM,GAAG,OAAO,CAAC,GAC3C,QAAQ,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAEtC;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,gBAAgB,CAAC,MAAM,GAAG,OAAO,CAAC,GAC3C,QAAQ,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAEvC;AAED,6BAA6B;AAC7B,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAC9B,QAAQ,IAAI,gBAAgB,CAAC,OAAO,GAAG,MAAM,CAAC,CAEhD"}
@@ -0,0 +1,149 @@
1
+ import { merge } from "./merge.js";
2
+ import { customFetch } from "../symbols.js";
3
+ /**
4
+ * Adds `signinUrl` and `callbackUrl` to each provider
5
+ * and deep merge user-defined options.
6
+ */
7
+ export default function parseProviders(params) {
8
+ const { providerId, config } = params;
9
+ const url = new URL(config.basePath ?? "/auth", params.url.origin);
10
+ const providers = config.providers.map((p) => {
11
+ const provider = typeof p === "function" ? p() : p;
12
+ const { options: userOptions, ...defaults } = provider;
13
+ const id = (userOptions?.id ?? defaults.id);
14
+ // TODO: Support if properties have different types, e.g. authorization: string or object
15
+ const merged = merge(defaults, userOptions, {
16
+ signinUrl: `${url}/signin/${id}`,
17
+ callbackUrl: `${url}/callback/${id}`,
18
+ });
19
+ if (provider.type === "oauth" || provider.type === "oidc") {
20
+ merged.redirectProxyUrl ?? (merged.redirectProxyUrl = userOptions?.redirectProxyUrl ?? config.redirectProxyUrl);
21
+ const normalized = normalizeOAuth(merged);
22
+ // We currently don't support redirect proxies for response_mode=form_post
23
+ if (normalized.authorization?.url.searchParams.get("response_mode") ===
24
+ "form_post") {
25
+ delete normalized.redirectProxyUrl;
26
+ }
27
+ // @ts-expect-error Symbols don't get merged by the `merge` function
28
+ // so we need to do it manually.
29
+ normalized[customFetch] ?? (normalized[customFetch] = userOptions?.[customFetch]);
30
+ return normalized;
31
+ }
32
+ return merged;
33
+ });
34
+ const provider = providers.find(({ id }) => id === providerId);
35
+ if (providerId && !provider) {
36
+ const availableProviders = providers.map((p) => p.id).join(", ");
37
+ throw new Error(`Provider with id "${providerId}" not found. Available providers: [${availableProviders}].`);
38
+ }
39
+ return { providers, provider };
40
+ }
41
+ // TODO: Also add discovery here, if some endpoints/config are missing.
42
+ // We should return both a client and authorization server config.
43
+ function normalizeOAuth(c) {
44
+ if (c.issuer)
45
+ c.wellKnown ?? (c.wellKnown = `${c.issuer}/.well-known/openid-configuration`);
46
+ const authorization = normalizeEndpoint(c.authorization, c.issuer);
47
+ if (authorization && !authorization.url?.searchParams.has("scope")) {
48
+ authorization.url.searchParams.set("scope", "openid profile email");
49
+ }
50
+ const token = normalizeEndpoint(c.token, c.issuer);
51
+ const userinfo = normalizeEndpoint(c.userinfo, c.issuer);
52
+ const checks = c.checks ?? ["pkce"];
53
+ if (c.redirectProxyUrl) {
54
+ if (!checks.includes("state"))
55
+ checks.push("state");
56
+ c.redirectProxyUrl = `${c.redirectProxyUrl}/callback/${c.id}`;
57
+ }
58
+ return {
59
+ ...c,
60
+ authorization,
61
+ token,
62
+ checks,
63
+ userinfo,
64
+ profile: c.profile ?? defaultProfile,
65
+ account: c.account ?? defaultAccount,
66
+ };
67
+ }
68
+ /**
69
+ * Returns basic user profile from the userinfo response/`id_token` claims.
70
+ * The returned `id` will become the `account.providerAccountId`. `user.id`
71
+ * and `account.id` are auto-generated UUID's.
72
+ *
73
+ * The result if this function is used to create the `User` in the database.
74
+ * @see https://authjs.dev/reference/core/adapters#user
75
+ * @see https://openid.net/specs/openid-connect-core-1_0.html#IDToken
76
+ * @see https://openid.net/specs/openid-connect-core-1_0.html#
77
+ */
78
+ const defaultProfile = (profile) => {
79
+ return stripUndefined({
80
+ id: profile.sub ?? profile.id ?? crypto.randomUUID(),
81
+ name: profile.name ?? profile.nickname ?? profile.preferred_username,
82
+ email: profile.email,
83
+ image: profile.picture,
84
+ });
85
+ };
86
+ /**
87
+ * Returns basic OAuth/OIDC values from the token response.
88
+ * @see https://www.ietf.org/rfc/rfc6749.html#section-5.1
89
+ * @see https://openid.net/specs/openid-connect-core-1_0.html#TokenResponse
90
+ * @see https://authjs.dev/reference/core/adapters#account
91
+ */
92
+ const defaultAccount = (account) => {
93
+ return stripUndefined({
94
+ access_token: account.access_token,
95
+ id_token: account.id_token,
96
+ refresh_token: account.refresh_token,
97
+ expires_at: account.expires_at,
98
+ scope: account.scope,
99
+ token_type: account.token_type,
100
+ session_state: account.session_state,
101
+ });
102
+ };
103
+ function stripUndefined(o) {
104
+ const result = {};
105
+ for (const [k, v] of Object.entries(o)) {
106
+ if (v !== undefined)
107
+ result[k] = v;
108
+ }
109
+ return result;
110
+ }
111
+ function normalizeEndpoint(e, issuer) {
112
+ if (!e && issuer)
113
+ return;
114
+ if (typeof e === "string") {
115
+ return { url: new URL(e) };
116
+ }
117
+ // If e.url is undefined, it's because the provider config
118
+ // assumes that we will use the issuer endpoint.
119
+ // The existence of either e.url or provider.issuer is checked in
120
+ // assert.ts. We fallback to "https://authjs.dev" to be able to pass around
121
+ // a valid URL even if the user only provided params.
122
+ // NOTE: This need to be checked when constructing the URL
123
+ // for the authorization, token and userinfo endpoints.
124
+ const url = new URL(e?.url ?? "https://authjs.dev");
125
+ if (e?.params != null) {
126
+ for (let [key, value] of Object.entries(e.params)) {
127
+ if (key === "claims") {
128
+ value = JSON.stringify(value);
129
+ }
130
+ url.searchParams.set(key, String(value));
131
+ }
132
+ }
133
+ return {
134
+ url,
135
+ request: e?.request,
136
+ conform: e?.conform,
137
+ ...(e?.clientPrivateKey ? { clientPrivateKey: e?.clientPrivateKey } : null),
138
+ };
139
+ }
140
+ export function isOIDCProvider(provider) {
141
+ return provider.type === "oidc";
142
+ }
143
+ export function isOAuth2Provider(provider) {
144
+ return provider.type === "oauth";
145
+ }
146
+ /** Either OAuth 2 or OIDC */
147
+ export function isOAuthProvider(provider) {
148
+ return provider.type === "oauth" || provider.type === "oidc";
149
+ }
@@ -0,0 +1,7 @@
1
+ import type { InternalOptions, User } from "../../types.js";
2
+ import type { SessionStore } from "./cookie.js";
3
+ /**
4
+ * Returns the currently logged in user, if any.
5
+ */
6
+ export declare function getLoggedInUser(options: InternalOptions, sessionStore: SessionStore): Promise<User | null>;
7
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/utils/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CA+BtB"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Returns the currently logged in user, if any.
3
+ */
4
+ export async function getLoggedInUser(options, sessionStore) {
5
+ const { adapter, jwt, session: { strategy: sessionStrategy }, } = options;
6
+ const sessionToken = sessionStore.value;
7
+ if (!sessionToken)
8
+ return null;
9
+ // Try to decode JWT
10
+ if (sessionStrategy === "jwt") {
11
+ const salt = options.cookies.sessionToken.name;
12
+ const payload = await jwt.decode({ ...jwt, token: sessionToken, salt });
13
+ if (payload && payload.sub) {
14
+ return {
15
+ id: payload.sub,
16
+ name: payload.name,
17
+ email: payload.email,
18
+ image: payload.picture,
19
+ };
20
+ }
21
+ }
22
+ else {
23
+ const userAndSession = await adapter?.getSessionAndUser(sessionToken);
24
+ if (userAndSession) {
25
+ return userAndSession.user;
26
+ }
27
+ }
28
+ return null;
29
+ }
@@ -0,0 +1,10 @@
1
+ import type { RequestInternal, ResponseInternal } from "../../types.js";
2
+ import type { AuthConfig } from "../../index.js";
3
+ export declare function toInternalRequest(req: Request, config: AuthConfig): Promise<RequestInternal | undefined>;
4
+ export declare function toRequest(request: RequestInternal): Request;
5
+ export declare function toResponse(res: ResponseInternal): Response;
6
+ /** Web compatible method to create a hash, using SHA256 */
7
+ export declare function createHash(message: string): Promise<string>;
8
+ /** Web compatible method to create a random string of a given length */
9
+ export declare function randomString(size: number): string;
10
+ //# sourceMappingURL=web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/lib/utils/web.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,eAAe,EACf,gBAAgB,EACjB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAgBhD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CA+BtC;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAS3D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,gBAAgB,GAAG,QAAQ,CAuB1D;AAED,2DAA2D;AAC3D,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,mBAO/C;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,UAKxC"}
@@ -0,0 +1,109 @@
1
+ import * as cookie from "../vendored/cookie.js";
2
+ import { UnknownAction } from "../../errors.js";
3
+ import { setLogger } from "./logger.js";
4
+ import { isAuthAction } from "./actions.js";
5
+ const { parse: parseCookie, serialize: serializeCookie } = cookie;
6
+ async function getBody(req) {
7
+ if (!("body" in req) || !req.body || req.method !== "POST")
8
+ return;
9
+ const contentType = req.headers.get("content-type");
10
+ if (contentType?.includes("application/json")) {
11
+ return await req.json();
12
+ }
13
+ else if (contentType?.includes("application/x-www-form-urlencoded")) {
14
+ const params = new URLSearchParams(await req.text());
15
+ return Object.fromEntries(params);
16
+ }
17
+ }
18
+ export async function toInternalRequest(req, config) {
19
+ try {
20
+ if (req.method !== "GET" && req.method !== "POST")
21
+ throw new UnknownAction("Only GET and POST requests are supported");
22
+ // Defaults are usually set in the `init` function, but this is needed below
23
+ config.basePath ?? (config.basePath = "/auth");
24
+ const url = new URL(req.url);
25
+ const { action, providerId } = parseActionAndProviderId(url.pathname, config.basePath);
26
+ return {
27
+ url,
28
+ action,
29
+ providerId,
30
+ method: req.method,
31
+ headers: Object.fromEntries(req.headers),
32
+ body: req.body ? await getBody(req) : undefined,
33
+ cookies: parseCookie(req.headers.get("cookie") ?? "") ?? {},
34
+ error: url.searchParams.get("error") ?? undefined,
35
+ query: Object.fromEntries(url.searchParams),
36
+ };
37
+ }
38
+ catch (e) {
39
+ const logger = setLogger(config);
40
+ logger.error(e);
41
+ logger.debug("request", req);
42
+ }
43
+ }
44
+ export function toRequest(request) {
45
+ return new Request(request.url, {
46
+ headers: request.headers,
47
+ method: request.method,
48
+ body: request.method === "POST"
49
+ ? JSON.stringify(request.body ?? {})
50
+ : undefined,
51
+ });
52
+ }
53
+ export function toResponse(res) {
54
+ const headers = new Headers(res.headers);
55
+ res.cookies?.forEach((cookie) => {
56
+ const { name, value, options } = cookie;
57
+ const cookieHeader = serializeCookie(name, value, options);
58
+ if (headers.has("Set-Cookie"))
59
+ headers.append("Set-Cookie", cookieHeader);
60
+ else
61
+ headers.set("Set-Cookie", cookieHeader);
62
+ });
63
+ let body = res.body;
64
+ if (headers.get("content-type") === "application/json")
65
+ body = JSON.stringify(res.body);
66
+ else if (headers.get("content-type") === "application/x-www-form-urlencoded")
67
+ body = new URLSearchParams(res.body).toString();
68
+ const status = res.redirect ? 302 : (res.status ?? 200);
69
+ const response = new Response(body, { headers, status });
70
+ if (res.redirect)
71
+ response.headers.set("Location", res.redirect);
72
+ return response;
73
+ }
74
+ /** Web compatible method to create a hash, using SHA256 */
75
+ export async function createHash(message) {
76
+ const data = new TextEncoder().encode(message);
77
+ const hash = await crypto.subtle.digest("SHA-256", data);
78
+ return Array.from(new Uint8Array(hash))
79
+ .map((b) => b.toString(16).padStart(2, "0"))
80
+ .join("")
81
+ .toString();
82
+ }
83
+ /** Web compatible method to create a random string of a given length */
84
+ export function randomString(size) {
85
+ const i2hex = (i) => ("0" + i.toString(16)).slice(-2);
86
+ const r = (a, i) => a + i2hex(i);
87
+ const bytes = crypto.getRandomValues(new Uint8Array(size));
88
+ return Array.from(bytes).reduce(r, "");
89
+ }
90
+ /** @internal Parse the action and provider id from a URL pathname. */
91
+ export function parseActionAndProviderId(pathname, base) {
92
+ const a = pathname.match(new RegExp(`^${base}(.+)`));
93
+ if (a === null)
94
+ throw new UnknownAction(`Cannot parse action at ${pathname}`);
95
+ const actionAndProviderId = a.at(-1);
96
+ const b = actionAndProviderId.replace(/^\//, "").split("/").filter(Boolean);
97
+ if (b.length !== 1 && b.length !== 2)
98
+ throw new UnknownAction(`Cannot parse action at ${pathname}`);
99
+ const [action, providerId] = b;
100
+ if (!isAuthAction(action))
101
+ throw new UnknownAction(`Cannot parse action at ${pathname}`);
102
+ if (providerId &&
103
+ !["signin", "callback", "webauthn-options"].includes(action))
104
+ throw new UnknownAction(`Cannot parse action at ${pathname}`);
105
+ return {
106
+ action,
107
+ providerId: providerId == "undefined" ? undefined : providerId,
108
+ };
109
+ }
@@ -0,0 +1,30 @@
1
+ /** @typedef {"authenticate"} WebAuthnAuthenticate */
2
+ /** @typedef {"register"} WebAuthnRegister */
3
+ /** @typedef {WebAuthnRegister | WebAuthnAuthenticate} WebAuthnOptionsAction */
4
+ /**
5
+ * @template {WebAuthnOptionsAction} T
6
+ * @typedef {T extends WebAuthnAuthenticate ?
7
+ * { options: import("@simplewebauthn/types").PublicKeyCredentialRequestOptionsJSON; action: "authenticate" } :
8
+ * T extends WebAuthnRegister ?
9
+ * { options: import("@simplewebauthn/types").PublicKeyCredentialCreationOptionsJSON; action: "register" } :
10
+ * never
11
+ * } WebAuthnOptionsReturn
12
+ */
13
+ /**
14
+ * webauthnScript is the client-side script that handles the webauthn form
15
+ *
16
+ * @param {string} authURL is the URL of the auth API
17
+ * @param {string} providerID is the ID of the webauthn provider
18
+ */
19
+ export function webauthnScript(authURL: string, providerID: string): Promise<void>;
20
+ export type WebAuthnAuthenticate = "authenticate";
21
+ export type WebAuthnRegister = "register";
22
+ export type WebAuthnOptionsAction = WebAuthnRegister | WebAuthnAuthenticate;
23
+ export type WebAuthnOptionsReturn<T extends WebAuthnOptionsAction> = T extends WebAuthnAuthenticate ? {
24
+ options: import("@simplewebauthn/types").PublicKeyCredentialRequestOptionsJSON;
25
+ action: "authenticate";
26
+ } : T extends WebAuthnRegister ? {
27
+ options: import("@simplewebauthn/types").PublicKeyCredentialCreationOptionsJSON;
28
+ action: "register";
29
+ } : never;
30
+ //# sourceMappingURL=webauthn-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webauthn-client.d.ts","sourceRoot":"","sources":["../../src/lib/utils/webauthn-client.js"],"names":[],"mappings":"AAIA,qDAAqD;AACrD,6CAA6C;AAC7C,+EAA+E;AAC/E;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,wCAHW,MAAM,cACN,MAAM,iBA+MhB;mCAhOa,cAAc;+BACd,UAAU;oCACV,gBAAgB,GAAG,oBAAoB;qEAGxC,CAAC,SAAS,oBAAoB,GAC1C;IAAK,OAAO,EAAE,OAAO,uBAAuB,EAAE,qCAAqC,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GAC7G,CAAI,SAAS,gBAAgB,GAC7B;IAAK,OAAO,EAAE,OAAO,uBAAuB,EAAE,sCAAsC,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAC1G,KAAO"}