mulguard 1.1.7 → 1.1.9

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 (546) hide show
  1. package/LICENSE +3 -3
  2. package/README.md +21 -582
  3. package/adapters.d.ts +2 -0
  4. package/adapters.d.ts.map +1 -0
  5. package/adapters.js +1 -0
  6. package/index.d.ts +329 -0
  7. package/index.d.ts.map +1 -0
  8. package/index.js +145 -0
  9. package/jwt.d.ts +9 -0
  10. package/jwt.d.ts.map +1 -0
  11. package/jwt.js +8 -0
  12. package/lib/actions.d.ts +13 -0
  13. package/lib/actions.d.ts.map +1 -0
  14. package/lib/actions.js +86 -0
  15. package/lib/client.d.ts +104 -0
  16. package/lib/client.d.ts.map +1 -0
  17. package/lib/client.js +95 -0
  18. package/lib/env.d.ts +12 -0
  19. package/lib/env.d.ts.map +1 -0
  20. package/lib/env.js +38 -0
  21. package/lib/index.d.ts +56 -0
  22. package/lib/index.d.ts.map +1 -0
  23. package/lib/index.js +187 -0
  24. package/lib/types.d.ts +24 -0
  25. package/lib/types.d.ts.map +1 -0
  26. package/lib/types.js +1 -0
  27. package/middleware.d.ts +9 -0
  28. package/middleware.d.ts.map +1 -0
  29. package/middleware.js +12 -0
  30. package/next.d.ts +9 -0
  31. package/next.d.ts.map +1 -0
  32. package/next.js +12 -0
  33. package/package.json +93 -102
  34. package/providers/42-school.d.ts +3 -0
  35. package/providers/42-school.d.ts.map +1 -0
  36. package/providers/42-school.js +2 -0
  37. package/providers/apple.d.ts +3 -0
  38. package/providers/apple.d.ts.map +1 -0
  39. package/providers/apple.js +2 -0
  40. package/providers/asgardeo.d.ts +3 -0
  41. package/providers/asgardeo.d.ts.map +1 -0
  42. package/providers/asgardeo.js +2 -0
  43. package/providers/atlassian.d.ts +3 -0
  44. package/providers/atlassian.d.ts.map +1 -0
  45. package/providers/atlassian.js +2 -0
  46. package/providers/auth0.d.ts +3 -0
  47. package/providers/auth0.d.ts.map +1 -0
  48. package/providers/auth0.js +2 -0
  49. package/providers/authentik.d.ts +3 -0
  50. package/providers/authentik.d.ts.map +1 -0
  51. package/providers/authentik.js +2 -0
  52. package/providers/azure-ad-b2c.d.ts +3 -0
  53. package/providers/azure-ad-b2c.d.ts.map +1 -0
  54. package/providers/azure-ad-b2c.js +2 -0
  55. package/providers/azure-ad.d.ts +3 -0
  56. package/providers/azure-ad.d.ts.map +1 -0
  57. package/providers/azure-ad.js +2 -0
  58. package/providers/azure-devops.d.ts +3 -0
  59. package/providers/azure-devops.d.ts.map +1 -0
  60. package/providers/azure-devops.js +2 -0
  61. package/providers/bankid-no.d.ts +3 -0
  62. package/providers/bankid-no.d.ts.map +1 -0
  63. package/providers/bankid-no.js +2 -0
  64. package/providers/battlenet.d.ts +3 -0
  65. package/providers/battlenet.d.ts.map +1 -0
  66. package/providers/battlenet.js +2 -0
  67. package/providers/beyondidentity.d.ts +3 -0
  68. package/providers/beyondidentity.d.ts.map +1 -0
  69. package/providers/beyondidentity.js +2 -0
  70. package/providers/bitbucket.d.ts +3 -0
  71. package/providers/bitbucket.d.ts.map +1 -0
  72. package/providers/bitbucket.js +2 -0
  73. package/providers/box.d.ts +3 -0
  74. package/providers/box.d.ts.map +1 -0
  75. package/providers/box.js +2 -0
  76. package/providers/boxyhq-saml.d.ts +3 -0
  77. package/providers/boxyhq-saml.d.ts.map +1 -0
  78. package/providers/boxyhq-saml.js +2 -0
  79. package/providers/bungie.d.ts +3 -0
  80. package/providers/bungie.d.ts.map +1 -0
  81. package/providers/bungie.js +2 -0
  82. package/providers/click-up.d.ts +3 -0
  83. package/providers/click-up.d.ts.map +1 -0
  84. package/providers/click-up.js +2 -0
  85. package/providers/cognito.d.ts +3 -0
  86. package/providers/cognito.d.ts.map +1 -0
  87. package/providers/cognito.js +2 -0
  88. package/providers/coinbase.d.ts +3 -0
  89. package/providers/coinbase.d.ts.map +1 -0
  90. package/providers/coinbase.js +2 -0
  91. package/providers/concept2.d.ts +3 -0
  92. package/providers/concept2.d.ts.map +1 -0
  93. package/providers/concept2.js +2 -0
  94. package/providers/credentials.d.ts +3 -0
  95. package/providers/credentials.d.ts.map +1 -0
  96. package/providers/credentials.js +2 -0
  97. package/providers/descope.d.ts +3 -0
  98. package/providers/descope.d.ts.map +1 -0
  99. package/providers/descope.js +2 -0
  100. package/providers/discord.d.ts +3 -0
  101. package/providers/discord.d.ts.map +1 -0
  102. package/providers/discord.js +2 -0
  103. package/providers/dribbble.d.ts +3 -0
  104. package/providers/dribbble.d.ts.map +1 -0
  105. package/providers/dribbble.js +2 -0
  106. package/providers/dropbox.d.ts +3 -0
  107. package/providers/dropbox.d.ts.map +1 -0
  108. package/providers/dropbox.js +2 -0
  109. package/providers/duende-identity-server6.d.ts +3 -0
  110. package/providers/duende-identity-server6.d.ts.map +1 -0
  111. package/providers/duende-identity-server6.js +2 -0
  112. package/providers/email.d.ts +3 -0
  113. package/providers/email.d.ts.map +1 -0
  114. package/providers/email.js +2 -0
  115. package/providers/eventbrite.d.ts +3 -0
  116. package/providers/eventbrite.d.ts.map +1 -0
  117. package/providers/eventbrite.js +2 -0
  118. package/providers/eveonline.d.ts +3 -0
  119. package/providers/eveonline.d.ts.map +1 -0
  120. package/providers/eveonline.js +2 -0
  121. package/providers/facebook.d.ts +3 -0
  122. package/providers/facebook.d.ts.map +1 -0
  123. package/providers/facebook.js +2 -0
  124. package/providers/faceit.d.ts +3 -0
  125. package/providers/faceit.d.ts.map +1 -0
  126. package/providers/faceit.js +2 -0
  127. package/providers/figma.d.ts +3 -0
  128. package/providers/figma.d.ts.map +1 -0
  129. package/providers/figma.js +2 -0
  130. package/providers/forwardemail.d.ts +3 -0
  131. package/providers/forwardemail.d.ts.map +1 -0
  132. package/providers/forwardemail.js +2 -0
  133. package/providers/foursquare.d.ts +3 -0
  134. package/providers/foursquare.d.ts.map +1 -0
  135. package/providers/foursquare.js +2 -0
  136. package/providers/freshbooks.d.ts +3 -0
  137. package/providers/freshbooks.d.ts.map +1 -0
  138. package/providers/freshbooks.js +2 -0
  139. package/providers/frontegg.d.ts +3 -0
  140. package/providers/frontegg.d.ts.map +1 -0
  141. package/providers/frontegg.js +2 -0
  142. package/providers/fusionauth.d.ts +3 -0
  143. package/providers/fusionauth.d.ts.map +1 -0
  144. package/providers/fusionauth.js +2 -0
  145. package/providers/github.d.ts +3 -0
  146. package/providers/github.d.ts.map +1 -0
  147. package/providers/github.js +2 -0
  148. package/providers/gitlab.d.ts +3 -0
  149. package/providers/gitlab.d.ts.map +1 -0
  150. package/providers/gitlab.js +2 -0
  151. package/providers/google.d.ts +3 -0
  152. package/providers/google.d.ts.map +1 -0
  153. package/providers/google.js +2 -0
  154. package/providers/hubspot.d.ts +3 -0
  155. package/providers/hubspot.d.ts.map +1 -0
  156. package/providers/hubspot.js +2 -0
  157. package/providers/huggingface.d.ts +3 -0
  158. package/providers/huggingface.d.ts.map +1 -0
  159. package/providers/huggingface.js +2 -0
  160. package/providers/identity-server4.d.ts +3 -0
  161. package/providers/identity-server4.d.ts.map +1 -0
  162. package/providers/identity-server4.js +2 -0
  163. package/providers/index.d.ts +2 -0
  164. package/providers/index.d.ts.map +1 -0
  165. package/providers/index.js +1 -0
  166. package/providers/instagram.d.ts +3 -0
  167. package/providers/instagram.d.ts.map +1 -0
  168. package/providers/instagram.js +2 -0
  169. package/providers/kakao.d.ts +3 -0
  170. package/providers/kakao.d.ts.map +1 -0
  171. package/providers/kakao.js +2 -0
  172. package/providers/keycloak.d.ts +3 -0
  173. package/providers/keycloak.d.ts.map +1 -0
  174. package/providers/keycloak.js +2 -0
  175. package/providers/kinde.d.ts +3 -0
  176. package/providers/kinde.d.ts.map +1 -0
  177. package/providers/kinde.js +2 -0
  178. package/providers/line.d.ts +3 -0
  179. package/providers/line.d.ts.map +1 -0
  180. package/providers/line.js +2 -0
  181. package/providers/linkedin.d.ts +3 -0
  182. package/providers/linkedin.d.ts.map +1 -0
  183. package/providers/linkedin.js +2 -0
  184. package/providers/logto.d.ts +3 -0
  185. package/providers/logto.d.ts.map +1 -0
  186. package/providers/logto.js +2 -0
  187. package/providers/loops.d.ts +3 -0
  188. package/providers/loops.d.ts.map +1 -0
  189. package/providers/loops.js +2 -0
  190. package/providers/mailchimp.d.ts +3 -0
  191. package/providers/mailchimp.d.ts.map +1 -0
  192. package/providers/mailchimp.js +2 -0
  193. package/providers/mailgun.d.ts +3 -0
  194. package/providers/mailgun.d.ts.map +1 -0
  195. package/providers/mailgun.js +2 -0
  196. package/providers/mailru.d.ts +3 -0
  197. package/providers/mailru.d.ts.map +1 -0
  198. package/providers/mailru.js +2 -0
  199. package/providers/mastodon.d.ts +3 -0
  200. package/providers/mastodon.d.ts.map +1 -0
  201. package/providers/mastodon.js +2 -0
  202. package/providers/mattermost.d.ts +3 -0
  203. package/providers/mattermost.d.ts.map +1 -0
  204. package/providers/mattermost.js +2 -0
  205. package/providers/medium.d.ts +3 -0
  206. package/providers/medium.d.ts.map +1 -0
  207. package/providers/medium.js +2 -0
  208. package/providers/microsoft-entra-id.d.ts +3 -0
  209. package/providers/microsoft-entra-id.d.ts.map +1 -0
  210. package/providers/microsoft-entra-id.js +2 -0
  211. package/providers/naver.d.ts +3 -0
  212. package/providers/naver.d.ts.map +1 -0
  213. package/providers/naver.js +2 -0
  214. package/providers/netlify.d.ts +3 -0
  215. package/providers/netlify.d.ts.map +1 -0
  216. package/providers/netlify.js +2 -0
  217. package/providers/netsuite.d.ts +3 -0
  218. package/providers/netsuite.d.ts.map +1 -0
  219. package/providers/netsuite.js +2 -0
  220. package/providers/nextcloud.d.ts +3 -0
  221. package/providers/nextcloud.d.ts.map +1 -0
  222. package/providers/nextcloud.js +2 -0
  223. package/providers/nodemailer.d.ts +3 -0
  224. package/providers/nodemailer.d.ts.map +1 -0
  225. package/providers/nodemailer.js +2 -0
  226. package/providers/notion.d.ts +3 -0
  227. package/providers/notion.d.ts.map +1 -0
  228. package/providers/notion.js +2 -0
  229. package/providers/okta.d.ts +3 -0
  230. package/providers/okta.d.ts.map +1 -0
  231. package/providers/okta.js +2 -0
  232. package/providers/onelogin.d.ts +3 -0
  233. package/providers/onelogin.d.ts.map +1 -0
  234. package/providers/onelogin.js +2 -0
  235. package/providers/ory-hydra.d.ts +3 -0
  236. package/providers/ory-hydra.d.ts.map +1 -0
  237. package/providers/ory-hydra.js +2 -0
  238. package/providers/osso.d.ts +3 -0
  239. package/providers/osso.d.ts.map +1 -0
  240. package/providers/osso.js +2 -0
  241. package/providers/osu.d.ts +3 -0
  242. package/providers/osu.d.ts.map +1 -0
  243. package/providers/osu.js +2 -0
  244. package/providers/passage.d.ts +3 -0
  245. package/providers/passage.d.ts.map +1 -0
  246. package/providers/passage.js +2 -0
  247. package/providers/passkey.d.ts +3 -0
  248. package/providers/passkey.d.ts.map +1 -0
  249. package/providers/passkey.js +2 -0
  250. package/providers/patreon.d.ts +3 -0
  251. package/providers/patreon.d.ts.map +1 -0
  252. package/providers/patreon.js +2 -0
  253. package/providers/ping-id.d.ts +3 -0
  254. package/providers/ping-id.d.ts.map +1 -0
  255. package/providers/ping-id.js +2 -0
  256. package/providers/pinterest.d.ts +3 -0
  257. package/providers/pinterest.d.ts.map +1 -0
  258. package/providers/pinterest.js +2 -0
  259. package/providers/pipedrive.d.ts +3 -0
  260. package/providers/pipedrive.d.ts.map +1 -0
  261. package/providers/pipedrive.js +2 -0
  262. package/providers/postmark.d.ts +3 -0
  263. package/providers/postmark.d.ts.map +1 -0
  264. package/providers/postmark.js +2 -0
  265. package/providers/reddit.d.ts +3 -0
  266. package/providers/reddit.d.ts.map +1 -0
  267. package/providers/reddit.js +2 -0
  268. package/providers/resend.d.ts +3 -0
  269. package/providers/resend.d.ts.map +1 -0
  270. package/providers/resend.js +2 -0
  271. package/providers/roblox.d.ts +3 -0
  272. package/providers/roblox.d.ts.map +1 -0
  273. package/providers/roblox.js +2 -0
  274. package/providers/salesforce.d.ts +3 -0
  275. package/providers/salesforce.d.ts.map +1 -0
  276. package/providers/salesforce.js +2 -0
  277. package/providers/sendgrid.d.ts +3 -0
  278. package/providers/sendgrid.d.ts.map +1 -0
  279. package/providers/sendgrid.js +2 -0
  280. package/providers/simplelogin.d.ts +3 -0
  281. package/providers/simplelogin.d.ts.map +1 -0
  282. package/providers/simplelogin.js +2 -0
  283. package/providers/slack.d.ts +3 -0
  284. package/providers/slack.d.ts.map +1 -0
  285. package/providers/slack.js +2 -0
  286. package/providers/spotify.d.ts +3 -0
  287. package/providers/spotify.d.ts.map +1 -0
  288. package/providers/spotify.js +2 -0
  289. package/providers/strava.d.ts +3 -0
  290. package/providers/strava.d.ts.map +1 -0
  291. package/providers/strava.js +2 -0
  292. package/providers/threads.d.ts +3 -0
  293. package/providers/threads.d.ts.map +1 -0
  294. package/providers/threads.js +2 -0
  295. package/providers/tiktok.d.ts +3 -0
  296. package/providers/tiktok.d.ts.map +1 -0
  297. package/providers/tiktok.js +2 -0
  298. package/providers/todoist.d.ts +3 -0
  299. package/providers/todoist.d.ts.map +1 -0
  300. package/providers/todoist.js +2 -0
  301. package/providers/trakt.d.ts +3 -0
  302. package/providers/trakt.d.ts.map +1 -0
  303. package/providers/trakt.js +2 -0
  304. package/providers/twitch.d.ts +3 -0
  305. package/providers/twitch.d.ts.map +1 -0
  306. package/providers/twitch.js +2 -0
  307. package/providers/twitter.d.ts +3 -0
  308. package/providers/twitter.d.ts.map +1 -0
  309. package/providers/twitter.js +2 -0
  310. package/providers/united-effects.d.ts +3 -0
  311. package/providers/united-effects.d.ts.map +1 -0
  312. package/providers/united-effects.js +2 -0
  313. package/providers/vipps.d.ts +3 -0
  314. package/providers/vipps.d.ts.map +1 -0
  315. package/providers/vipps.js +2 -0
  316. package/providers/vk.d.ts +3 -0
  317. package/providers/vk.d.ts.map +1 -0
  318. package/providers/vk.js +2 -0
  319. package/providers/webauthn.d.ts +3 -0
  320. package/providers/webauthn.d.ts.map +1 -0
  321. package/providers/webauthn.js +2 -0
  322. package/providers/webex.d.ts +3 -0
  323. package/providers/webex.d.ts.map +1 -0
  324. package/providers/webex.js +2 -0
  325. package/providers/wechat.d.ts +3 -0
  326. package/providers/wechat.d.ts.map +1 -0
  327. package/providers/wechat.js +2 -0
  328. package/providers/wikimedia.d.ts +3 -0
  329. package/providers/wikimedia.d.ts.map +1 -0
  330. package/providers/wikimedia.js +2 -0
  331. package/providers/wordpress.d.ts +3 -0
  332. package/providers/wordpress.d.ts.map +1 -0
  333. package/providers/wordpress.js +2 -0
  334. package/providers/workos.d.ts +3 -0
  335. package/providers/workos.d.ts.map +1 -0
  336. package/providers/workos.js +2 -0
  337. package/providers/yandex.d.ts +3 -0
  338. package/providers/yandex.d.ts.map +1 -0
  339. package/providers/yandex.js +2 -0
  340. package/providers/zitadel.d.ts +3 -0
  341. package/providers/zitadel.d.ts.map +1 -0
  342. package/providers/zitadel.js +2 -0
  343. package/providers/zoho.d.ts +3 -0
  344. package/providers/zoho.d.ts.map +1 -0
  345. package/providers/zoho.js +2 -0
  346. package/providers/zoom.d.ts +3 -0
  347. package/providers/zoom.d.ts.map +1 -0
  348. package/providers/zoom.js +2 -0
  349. package/react.d.ts +102 -0
  350. package/react.d.ts.map +1 -0
  351. package/react.js +361 -0
  352. package/src/adapters.ts +1 -0
  353. package/src/index.ts +430 -0
  354. package/src/jwt.ts +9 -0
  355. package/src/lib/actions.ts +144 -0
  356. package/src/lib/client.ts +245 -0
  357. package/src/lib/env.ts +36 -0
  358. package/src/lib/index.ts +313 -0
  359. package/src/lib/types.ts +30 -0
  360. package/src/middleware.ts +16 -0
  361. package/src/next.ts +16 -0
  362. package/src/providers/42-school.ts +2 -0
  363. package/src/providers/apple.ts +2 -0
  364. package/src/providers/asgardeo.ts +2 -0
  365. package/src/providers/atlassian.ts +2 -0
  366. package/src/providers/auth0.ts +2 -0
  367. package/src/providers/authentik.ts +2 -0
  368. package/src/providers/azure-ad-b2c.ts +2 -0
  369. package/src/providers/azure-ad.ts +2 -0
  370. package/src/providers/azure-devops.ts +2 -0
  371. package/src/providers/bankid-no.ts +2 -0
  372. package/src/providers/battlenet.ts +2 -0
  373. package/src/providers/beyondidentity.ts +2 -0
  374. package/src/providers/bitbucket.ts +2 -0
  375. package/src/providers/box.ts +2 -0
  376. package/src/providers/boxyhq-saml.ts +2 -0
  377. package/src/providers/bungie.ts +2 -0
  378. package/src/providers/click-up.ts +2 -0
  379. package/src/providers/cognito.ts +2 -0
  380. package/src/providers/coinbase.ts +2 -0
  381. package/src/providers/concept2.ts +2 -0
  382. package/src/providers/credentials.ts +2 -0
  383. package/src/providers/descope.ts +2 -0
  384. package/src/providers/discord.ts +2 -0
  385. package/src/providers/dribbble.ts +2 -0
  386. package/src/providers/dropbox.ts +2 -0
  387. package/src/providers/duende-identity-server6.ts +2 -0
  388. package/src/providers/email.ts +2 -0
  389. package/src/providers/eventbrite.ts +2 -0
  390. package/src/providers/eveonline.ts +2 -0
  391. package/src/providers/facebook.ts +2 -0
  392. package/src/providers/faceit.ts +2 -0
  393. package/src/providers/figma.ts +2 -0
  394. package/src/providers/forwardemail.ts +2 -0
  395. package/src/providers/foursquare.ts +2 -0
  396. package/src/providers/freshbooks.ts +2 -0
  397. package/src/providers/frontegg.ts +2 -0
  398. package/src/providers/fusionauth.ts +2 -0
  399. package/src/providers/github.ts +2 -0
  400. package/src/providers/gitlab.ts +2 -0
  401. package/src/providers/google.ts +2 -0
  402. package/src/providers/hubspot.ts +2 -0
  403. package/src/providers/huggingface.ts +2 -0
  404. package/src/providers/identity-server4.ts +2 -0
  405. package/src/providers/index.ts +1 -0
  406. package/src/providers/instagram.ts +2 -0
  407. package/src/providers/kakao.ts +2 -0
  408. package/src/providers/keycloak.ts +2 -0
  409. package/src/providers/kinde.ts +2 -0
  410. package/src/providers/line.ts +2 -0
  411. package/src/providers/linkedin.ts +2 -0
  412. package/src/providers/logto.ts +2 -0
  413. package/src/providers/loops.ts +2 -0
  414. package/src/providers/mailchimp.ts +2 -0
  415. package/src/providers/mailgun.ts +2 -0
  416. package/src/providers/mailru.ts +2 -0
  417. package/src/providers/mastodon.ts +2 -0
  418. package/src/providers/mattermost.ts +2 -0
  419. package/src/providers/medium.ts +2 -0
  420. package/src/providers/microsoft-entra-id.ts +2 -0
  421. package/src/providers/naver.ts +2 -0
  422. package/src/providers/netlify.ts +2 -0
  423. package/src/providers/netsuite.ts +2 -0
  424. package/src/providers/nextcloud.ts +2 -0
  425. package/src/providers/nodemailer.ts +2 -0
  426. package/src/providers/notion.ts +2 -0
  427. package/src/providers/okta.ts +2 -0
  428. package/src/providers/onelogin.ts +2 -0
  429. package/src/providers/ory-hydra.ts +2 -0
  430. package/src/providers/osso.ts +2 -0
  431. package/src/providers/osu.ts +2 -0
  432. package/src/providers/passage.ts +2 -0
  433. package/src/providers/passkey.ts +2 -0
  434. package/src/providers/patreon.ts +2 -0
  435. package/src/providers/ping-id.ts +2 -0
  436. package/src/providers/pinterest.ts +2 -0
  437. package/src/providers/pipedrive.ts +2 -0
  438. package/src/providers/postmark.ts +2 -0
  439. package/src/providers/reddit.ts +2 -0
  440. package/src/providers/resend.ts +2 -0
  441. package/src/providers/roblox.ts +2 -0
  442. package/src/providers/salesforce.ts +2 -0
  443. package/src/providers/sendgrid.ts +2 -0
  444. package/src/providers/simplelogin.ts +2 -0
  445. package/src/providers/slack.ts +2 -0
  446. package/src/providers/spotify.ts +2 -0
  447. package/src/providers/strava.ts +2 -0
  448. package/src/providers/threads.ts +2 -0
  449. package/src/providers/tiktok.ts +2 -0
  450. package/src/providers/todoist.ts +2 -0
  451. package/src/providers/trakt.ts +2 -0
  452. package/src/providers/twitch.ts +2 -0
  453. package/src/providers/twitter.ts +2 -0
  454. package/src/providers/united-effects.ts +2 -0
  455. package/src/providers/vipps.ts +2 -0
  456. package/src/providers/vk.ts +2 -0
  457. package/src/providers/webauthn.ts +2 -0
  458. package/src/providers/webex.ts +2 -0
  459. package/src/providers/wechat.ts +2 -0
  460. package/src/providers/wikimedia.ts +2 -0
  461. package/src/providers/wordpress.ts +2 -0
  462. package/src/providers/workos.ts +2 -0
  463. package/src/providers/yandex.ts +2 -0
  464. package/src/providers/zitadel.ts +2 -0
  465. package/src/providers/zoho.ts +2 -0
  466. package/src/providers/zoom.ts +2 -0
  467. package/src/react.tsx +546 -0
  468. package/src/webauthn.ts +152 -0
  469. package/webauthn.d.ts +9 -0
  470. package/webauthn.d.ts.map +1 -0
  471. package/webauthn.js +92 -0
  472. package/dist/actions-CMtg7FGv.js +0 -1
  473. package/dist/actions-CjQUKaXF.mjs +0 -200
  474. package/dist/client/index.js +0 -1
  475. package/dist/client/index.mjs +0 -484
  476. package/dist/components/AccountPicker.d.ts +0 -11
  477. package/dist/components/OAuthButton.d.ts +0 -11
  478. package/dist/components/PassKeyButton.d.ts +0 -11
  479. package/dist/components/PassKeyRegister.d.ts +0 -10
  480. package/dist/components/TwoFactorSetup.d.ts +0 -8
  481. package/dist/components/TwoFactorVerify.d.ts +0 -9
  482. package/dist/core/account-picker/encryption.d.ts +0 -22
  483. package/dist/core/account-picker/index.d.ts +0 -22
  484. package/dist/core/auth/email-password.d.ts +0 -145
  485. package/dist/core/auth/oauth/index.d.ts +0 -14
  486. package/dist/core/auth/oauth/oauth-handler.d.ts +0 -172
  487. package/dist/core/auth/oauth/pkce.d.ts +0 -168
  488. package/dist/core/auth/oauth/providers.d.ts +0 -198
  489. package/dist/core/auth/oauth/state-store-cookie.d.ts +0 -83
  490. package/dist/core/auth/oauth/state-store-redis.d.ts +0 -25
  491. package/dist/core/auth/oauth/state-store.d.ts +0 -48
  492. package/dist/core/auth/otp.d.ts +0 -184
  493. package/dist/core/auth/passkey.d.ts +0 -35
  494. package/dist/core/auth/password.d.ts +0 -22
  495. package/dist/core/auth/signin-unified.d.ts +0 -33
  496. package/dist/core/auth/two-factor.d.ts +0 -28
  497. package/dist/core/client/index.d.ts +0 -132
  498. package/dist/core/client/token-refresh-manager.d.ts +0 -48
  499. package/dist/core/errors/index.d.ts +0 -269
  500. package/dist/core/index.d.ts +0 -9
  501. package/dist/core/logger/index.d.ts +0 -147
  502. package/dist/core/mulguard/auth-handlers.d.ts +0 -100
  503. package/dist/core/mulguard/defaults.d.ts +0 -58
  504. package/dist/core/mulguard/index.d.ts +0 -9
  505. package/dist/core/mulguard/integration.d.ts +0 -104
  506. package/dist/core/mulguard/oauth-handler.d.ts +0 -93
  507. package/dist/core/mulguard/session-manager.d.ts +0 -94
  508. package/dist/core/security/csrf.d.ts +0 -46
  509. package/dist/core/security/headers.d.ts +0 -24
  510. package/dist/core/security/index.d.ts +0 -132
  511. package/dist/core/security/rate-limit.d.ts +0 -39
  512. package/dist/core/security/security-manager.d.ts +0 -236
  513. package/dist/core/security/validation.d.ts +0 -251
  514. package/dist/core/security/xss.d.ts +0 -20
  515. package/dist/core/session/index.d.ts +0 -35
  516. package/dist/core/session/session-manager.d.ts +0 -235
  517. package/dist/core/types/auth.d.ts +0 -290
  518. package/dist/core/types/errors.d.ts +0 -200
  519. package/dist/core/types/index.d.ts +0 -484
  520. package/dist/core/utils/auth-helpers.d.ts +0 -136
  521. package/dist/core/utils/logger.d.ts +0 -121
  522. package/dist/index/index.js +0 -1
  523. package/dist/index/index.mjs +0 -2736
  524. package/dist/index.d.ts +0 -18
  525. package/dist/mulguard.d.ts +0 -373
  526. package/dist/nextjs/client/hooks.d.ts +0 -122
  527. package/dist/nextjs/client/index.d.ts +0 -13
  528. package/dist/nextjs/client/provider.d.ts +0 -69
  529. package/dist/nextjs/client/server-actions-helper.d.ts +0 -22
  530. package/dist/nextjs/handlers/api.d.ts +0 -10
  531. package/dist/nextjs/handlers/index.d.ts +0 -9
  532. package/dist/nextjs/handlers/route.d.ts +0 -76
  533. package/dist/nextjs/index.d.ts +0 -15
  534. package/dist/nextjs/proxy/index.d.ts +0 -149
  535. package/dist/nextjs/proxy/security.d.ts +0 -9
  536. package/dist/nextjs/server/actions.d.ts +0 -30
  537. package/dist/nextjs/server/auth.d.ts +0 -65
  538. package/dist/nextjs/server/cookies.d.ts +0 -41
  539. package/dist/nextjs/server/index.d.ts +0 -18
  540. package/dist/nextjs/server/oauth-state.d.ts +0 -32
  541. package/dist/nextjs/server/session-helpers.d.ts +0 -24
  542. package/dist/nextjs/server/session.d.ts +0 -144
  543. package/dist/oauth-state-Drwz6fES.js +0 -1
  544. package/dist/oauth-state-pdypStuS.mjs +0 -210
  545. package/dist/server/index.js +0 -1
  546. package/dist/server/index.mjs +0 -29
package/src/index.ts ADDED
@@ -0,0 +1,430 @@
1
+ /**
2
+ * MulGuard - Authentication for Next.js with Backend-First Architecture
3
+ *
4
+ * ## Installation
5
+ *
6
+ * ```bash npm2yarn
7
+ * npm install mulguard
8
+ * ```
9
+ *
10
+ * ## Environment variable inference
11
+ *
12
+ * `MULGUARD_URL` and `MULGUARD_SECRET` are automatically inferred.
13
+ *
14
+ * MulGuard can also automatically infer environment variables that are prefixed with `AUTH_`.
15
+ *
16
+ * For example `AUTH_GITHUB_ID` and `AUTH_GITHUB_SECRET` will be used as the `clientId` and `clientSecret` options for the GitHub provider.
17
+ *
18
+ * :::tip
19
+ * The environment variable name inferring has the following format for OAuth providers: `AUTH_{PROVIDER}_{ID|SECRET}`.
20
+ *
21
+ * `PROVIDER` is the uppercase snake case version of the provider's id, followed by either `ID` or `SECRET` respectively.
22
+ * :::
23
+ *
24
+ * `AUTH_SECRET` and `AUTH_URL` are also supported for backward compatibility.
25
+ *
26
+ * To add social login to your app, the configuration becomes:
27
+ *
28
+ * ```ts title="auth.ts"
29
+ * import MulGuard from "mulguard"
30
+ * import GitHub from "mulguard/providers/github"
31
+ * export const { handlers, auth } = MulGuard({ providers: [ GitHub ] })
32
+ * ```
33
+ *
34
+ * And the `.env.local` file:
35
+ *
36
+ * ```sh title=".env.local"
37
+ * AUTH_GITHUB_ID=...
38
+ * AUTH_GITHUB_SECRET=...
39
+ * AUTH_SECRET=...
40
+ * ```
41
+ *
42
+ * :::tip
43
+ * In production, `AUTH_SECRET` is a required environment variable - if not set, MulGuard will throw an error. See [MissingSecretError](https://authjs.dev/reference/core/errors#missingsecret) for more details.
44
+ * :::
45
+ *
46
+ * If you need to override the default values for a provider, you can still call it as a function `GitHub({...})` as before.
47
+ *
48
+ * ## Lazy initialization
49
+ * You can also initialize MulGuard lazily, which allows you to access the request context in the configuration in some cases, like Route Handlers, Middleware, API Routes or `getServerSideProps`.
50
+ * The above example becomes:
51
+ *
52
+ * ```ts title="auth.ts"
53
+ * import MulGuard from "mulguard"
54
+ * import GitHub from "mulguard/providers/github"
55
+ * export const { handlers, auth } = MulGuard(req => {
56
+ * if (req) {
57
+ * console.log(req) // do something with the request
58
+ * }
59
+ * return { providers: [ GitHub ] }
60
+ * })
61
+ * ```
62
+ *
63
+ * :::tip
64
+ * This is useful if you want to customize the configuration based on the request, for example, to add a different provider in staging/dev environments.
65
+ * :::
66
+ *
67
+ * @module mulguard
68
+ */
69
+
70
+ import { Auth, customFetch } from "@mulverse/mulguard-core"
71
+ import { reqWithEnvURL, setEnvDefaults } from "./lib/env.js"
72
+ import { initAuth } from "./lib/index.js"
73
+ import { signIn, signOut, update } from "./lib/actions.js"
74
+
75
+ import type { Awaitable, Session } from "@mulverse/mulguard-core/types"
76
+ import type { ProviderId } from "@mulverse/mulguard-core/providers"
77
+ import type {
78
+ GetServerSidePropsContext,
79
+ NextApiRequest,
80
+ NextApiResponse,
81
+ } from "next"
82
+ import type {
83
+ AppRouteHandlerFn,
84
+ AppRouteHandlerFnContext,
85
+ } from "./lib/types.js"
86
+ // @ts-expect-error Next.js does not yet correctly use the `package.json#exports` field
87
+ import type { NextRequest, NextMiddleware } from "next/server"
88
+ import type {
89
+ MulGuardConfig,
90
+ MulGuardRequest,
91
+ MulGuardMiddleware,
92
+ } from "./lib/index.js"
93
+ // Type aliases for backward compatibility (exported and available in scope)
94
+ type NextAuthConfig = MulGuardConfig
95
+ type NextAuthRequest = MulGuardRequest
96
+ type NextAuthMiddleware = MulGuardMiddleware
97
+
98
+ export type { MulGuardConfig, MulGuardRequest, MulGuardMiddleware }
99
+ export type { NextAuthConfig, NextAuthRequest, NextAuthMiddleware } // Backward compatibility
100
+ export { AuthError, CredentialsSignin } from "@mulverse/mulguard-core/errors"
101
+
102
+ export { customFetch }
103
+
104
+ export type {
105
+ Session,
106
+ Account,
107
+ Profile,
108
+ DefaultSession,
109
+ User,
110
+ } from "@mulverse/mulguard-core/types"
111
+ export type { ServerActionsAdapter } from "@mulverse/mulguard-core/adapters"
112
+
113
+ type AppRouteHandlers = Record<
114
+ "GET" | "POST",
115
+ (req: NextRequest) => Promise<Response>
116
+ >
117
+
118
+ /**
119
+ * The result of invoking {@link MulGuard|MulGuard}, initialized with the {@link MulGuardConfig}.
120
+ * It contains methods to set up and interact with MulGuard in your Next.js app.
121
+ */
122
+ export interface MulGuardResult {
123
+ /**
124
+ * The MulGuard [Route Handler](https://beta.nextjs.org/docs/routing/route-handlers) methods. These are used to expose an endpoint for OAuth/Email providers,
125
+ * as well as REST API endpoints (such as `/api/auth/session`) that can be contacted from the client.
126
+ *
127
+ * After initializing MulGuard in `auth.ts`,
128
+ * re-export these methods.
129
+ *
130
+ * In `app/api/auth/[...mulguard]/route.ts`:
131
+ *
132
+ * ```ts title="app/api/auth/[...mulguard]/route.ts"
133
+ * export { GET, POST } from "../../../../auth"
134
+ * export const runtime = "edge" // optional
135
+ * ```
136
+ * Then `auth.ts`:
137
+ * ```ts title="auth.ts"
138
+ * // ...
139
+ * export const { handlers: { GET, POST }, auth } = MulGuard({...})
140
+ * ```
141
+ */
142
+ handlers: AppRouteHandlers
143
+ /**
144
+ * A universal method to interact with MulGuard in your Next.js app.
145
+ * After initializing MulGuard in `auth.ts`, use this method in Middleware, Server Components, Route Handlers (`app/`), and Edge or Node.js API Routes (`pages/`).
146
+ *
147
+ * ##### In Middleware
148
+ *
149
+ * :::info
150
+ * Adding `auth` to your Middleware is optional, but recommended to keep the user session alive.
151
+ * :::
152
+ *
153
+ * Authentication is done by the {@link MulGuardConfig.callbacks|callbacks.authorized} callback.
154
+ * @example
155
+ * ```ts title="middleware.ts"
156
+ * export { auth as middleware } from "./auth"
157
+ * ```
158
+ *
159
+ * Alternatively you can wrap your own middleware with `auth`, where `req` is extended with `auth`:
160
+ * @example
161
+ * ```ts title="middleware.ts"
162
+ * import { auth } from "./auth"
163
+ * export default auth((req) => {
164
+ * // req.auth
165
+ * })
166
+ * ```
167
+ *
168
+ * ```ts
169
+ * // Optionally, don't invoke Middleware on some paths
170
+ * // Read more: https://nextjs.org/docs/app/building-your-application/routing/middleware#matcher
171
+ * export const config = {
172
+ * matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],
173
+ * }
174
+ * ```
175
+ *
176
+ * ##### In Server Components
177
+ *
178
+ * @example
179
+ * ```ts title="app/page.ts"
180
+ * import { auth } from "../auth"
181
+ *
182
+ * export default async function Page() {
183
+ * const { user } = await auth()
184
+ * return <p>Hello {user?.name}</p>
185
+ * }
186
+ * ```
187
+ *
188
+ * ##### In Route Handlers
189
+ * @example
190
+ * ```ts title="app/api/route.ts"
191
+ * import { auth } from "../../auth"
192
+ *
193
+ * export const POST = auth((req) => {
194
+ * // req.auth
195
+ * })
196
+ * ```
197
+ *
198
+ * ##### In Edge API Routes
199
+ *
200
+ * @example
201
+ * ```ts title="pages/api/protected.ts"
202
+ * import { auth } from "../../auth"
203
+ *
204
+ * export default auth((req) => {
205
+ * // req.auth
206
+ * })
207
+ *
208
+ * export const config = { runtime: "edge" }
209
+ * ```
210
+ *
211
+ * ##### In API Routes
212
+ *
213
+ * @example
214
+ * ```ts title="pages/api/protected.ts"
215
+ * import { auth } from "../auth"
216
+ * import type { NextApiRequest, NextApiResponse } from "next"
217
+ *
218
+ * export default async (req: NextApiRequest, res: NextApiResponse) => {
219
+ * const session = await auth(req, res)
220
+ * if (session) {
221
+ * // Do something with the session
222
+ * return res.json("This is protected content.")
223
+ * }
224
+ * res.status(401).json("You must be signed in.")
225
+ * }
226
+ * ```
227
+ *
228
+ * ##### In `getServerSideProps`
229
+ *
230
+ * @example
231
+ * ```ts title="pages/protected-ssr.ts"
232
+ * import { auth } from "../auth"
233
+ *
234
+ * export const getServerSideProps: GetServerSideProps = async (context) => {
235
+ * const session = await auth(context)
236
+ *
237
+ * if (session) {
238
+ * // Do something with the session
239
+ * return { props: { session, content: (await res.json()).content } }
240
+ * }
241
+ *
242
+ * return { props: {} }
243
+ * }
244
+ * ```
245
+ */
246
+ auth: ((
247
+ ...args: [NextApiRequest, NextApiResponse]
248
+ ) => Promise<Session | null>) &
249
+ ((...args: []) => Promise<Session | null>) &
250
+ ((...args: [GetServerSidePropsContext]) => Promise<Session | null>) &
251
+ ((
252
+ ...args: [
253
+ (
254
+ req: NextAuthRequest,
255
+ ctx: AppRouteHandlerFnContext
256
+ ) => ReturnType<AppRouteHandlerFn>,
257
+ ]
258
+ ) => AppRouteHandlerFn) &
259
+ ((...args: [NextAuthMiddleware]) => NextMiddleware)
260
+ /**
261
+ * Sign in with a provider. If no provider is specified, the user will be redirected to the sign in page.
262
+ *
263
+ * By default, the user is redirected to the current page after signing in. You can override this behavior by setting the `redirectTo` option with a relative path.
264
+ *
265
+ * @example
266
+ * ```ts title="app/layout.tsx"
267
+ * import { signIn } from "../auth"
268
+ *
269
+ * export default function Layout() {
270
+ * return (
271
+ * <form action={async () => {
272
+ * "use server"
273
+ * await signIn("github")
274
+ * }}>
275
+ * <button>Sign in with GitHub</button>
276
+ * </form>
277
+ * )
278
+ * ```
279
+ *
280
+ * If an error occurs during signin, an instance of {@link AuthError} will be thrown. You can catch it like this:
281
+ * ```ts title="app/layout.tsx"
282
+ * import { AuthError } from "mulguard"
283
+ * import { signIn } from "../auth"
284
+ *
285
+ * export default function Layout() {
286
+ * return (
287
+ * <form action={async (formData) => {
288
+ * "use server"
289
+ * try {
290
+ * await signIn("credentials", formData)
291
+ * } catch(error) {
292
+ * if (error instanceof AuthError) // Handle auth errors
293
+ * throw error // Rethrow all other errors
294
+ * }
295
+ * }}>
296
+ * <button>Sign in</button>
297
+ * </form>
298
+ * )
299
+ * }
300
+ * ```
301
+ *
302
+ */
303
+ signIn: <P extends ProviderId, R extends boolean = true>(
304
+ /** Provider to sign in to */
305
+ provider?: P, // See: https://github.com/microsoft/TypeScript/issues/29729
306
+ options?:
307
+ | FormData
308
+ | ({
309
+ /** The relative path to redirect to after signing in. By default, the user is redirected to the current page. */
310
+ redirectTo?: string
311
+ /** If set to `false`, the `signIn` method will return the URL to redirect to instead of redirecting automatically. */
312
+ redirect?: R
313
+ } & Record<string, any>),
314
+ authorizationParams?:
315
+ | string[][]
316
+ | Record<string, string>
317
+ | string
318
+ | URLSearchParams
319
+ ) => Promise<R extends false ? any : never>
320
+ /**
321
+ * Sign out the user. If the session was created using a database strategy, the session will be removed from the database and the related cookie is invalidated.
322
+ * If the session was created using a JWT, the cookie is invalidated.
323
+ *
324
+ * By default the user is redirected to the current page after signing out. You can override this behavior by setting the `redirectTo` option with a relative path.
325
+ *
326
+ * @example
327
+ * ```ts title="app/layout.tsx"
328
+ * import { signOut } from "../auth"
329
+ *
330
+ * export default function Layout() {
331
+ * return (
332
+ * <form action={async () => {
333
+ * "use server"
334
+ * await signOut()
335
+ * }}>
336
+ * <button>Sign out</button>
337
+ * </form>
338
+ * )
339
+ * ```
340
+ *
341
+ *
342
+ */
343
+ signOut: <R extends boolean = true>(options?: {
344
+ /** The relative path to redirect to after signing out. By default, the user is redirected to the current page. */
345
+ redirectTo?: string
346
+ /** If set to `false`, the `signOut` method will return the URL to redirect to instead of redirecting automatically. */
347
+ redirect?: R
348
+ }) => Promise<R extends false ? any : never>
349
+ unstable_update: (
350
+ data: Partial<Session | { user: Partial<Session["user"]> }>
351
+ ) => Promise<Session | null>
352
+ }
353
+
354
+ /**
355
+ * Initialize MulGuard.
356
+ *
357
+ * @example
358
+ * ```ts title="auth.ts"
359
+ * import MulGuard from "mulguard"
360
+ * import GitHub from "@mulverse/mulguard-core/providers/github"
361
+ *
362
+ * export const { handlers, auth } = MulGuard({ providers: [GitHub] })
363
+ * ```
364
+ *
365
+ * Lazy initialization:
366
+ *
367
+ * @example
368
+ * ```ts title="auth.ts"
369
+ * import MulGuard from "mulguard"
370
+ * import GitHub from "@mulverse/mulguard-core/providers/github"
371
+ *
372
+ * export const { handlers, auth } = MulGuard(async (req) => {
373
+ * console.log(req) // do something with the request
374
+ * return {
375
+ * providers: [GitHub],
376
+ * },
377
+ * })
378
+ * ```
379
+ */
380
+ export default function MulGuard(
381
+ config:
382
+ | MulGuardConfig
383
+ | ((request: NextRequest | undefined) => Awaitable<MulGuardConfig>)
384
+ ): MulGuardResult {
385
+ if (typeof config === "function") {
386
+ const httpHandler = async (req: NextRequest) => {
387
+ const _config = await config(req)
388
+ setEnvDefaults(_config)
389
+ return Auth(reqWithEnvURL(req), _config)
390
+ }
391
+
392
+ return {
393
+ handlers: { GET: httpHandler, POST: httpHandler } as const,
394
+ // @ts-expect-error
395
+ auth: initAuth(config, (c) => setEnvDefaults(c)),
396
+
397
+ signIn: async (provider, options, authorizationParams) => {
398
+ const _config = await config(undefined)
399
+ setEnvDefaults(_config)
400
+ return signIn(provider, options, authorizationParams, _config)
401
+ },
402
+ signOut: async (options) => {
403
+ const _config = await config(undefined)
404
+ setEnvDefaults(_config)
405
+ return signOut(options, _config)
406
+ },
407
+ unstable_update: async (data) => {
408
+ const _config = await config(undefined)
409
+ setEnvDefaults(_config)
410
+ return update(data, _config)
411
+ },
412
+ }
413
+ }
414
+ setEnvDefaults(config)
415
+ const httpHandler = (req: NextRequest) => Auth(reqWithEnvURL(req), config)
416
+ return {
417
+ handlers: { GET: httpHandler, POST: httpHandler } as const,
418
+ // @ts-expect-error
419
+ auth: initAuth(config),
420
+ signIn: (provider, options, authorizationParams) => {
421
+ return signIn(provider, options, authorizationParams, config)
422
+ },
423
+ signOut: (options) => {
424
+ return signOut(options, config)
425
+ },
426
+ unstable_update: (data) => {
427
+ return update(data, config)
428
+ },
429
+ }
430
+ }
package/src/jwt.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * :::warning Not recommended
3
+ * In NextAuth.js v5 or newer, we recommend other authentication methods server-side. Read more at: https://authjs.dev/getting-started/migrating-to-v5#authenticating-server-side
4
+ * :::
5
+ *
6
+ * @module jwt
7
+ */
8
+
9
+ export * from "@mulverse/mulguard-core/jwt"
@@ -0,0 +1,144 @@
1
+ import { Auth, raw, skipCSRFCheck, createActionURL } from "@mulverse/mulguard-core"
2
+ // @ts-expect-error Next.js does not yet correctly use the `package.json#exports` field
3
+ import { headers as nextHeaders, cookies } from "next/headers"
4
+ // @ts-expect-error Next.js does not yet correctly use the `package.json#exports` field
5
+ import { redirect } from "next/navigation"
6
+
7
+ import type { MulGuardConfig } from "./index.js"
8
+ import type { MulGuardResult, Session } from "../index.js"
9
+ import type { ProviderType } from "@mulverse/mulguard-core/providers"
10
+
11
+ type SignInParams = Parameters<MulGuardResult["signIn"]>
12
+ export async function signIn(
13
+ provider: SignInParams[0],
14
+ options: SignInParams[1] = {},
15
+ authorizationParams: SignInParams[2],
16
+ config: MulGuardConfig
17
+ ) {
18
+ const headers = new Headers(await nextHeaders())
19
+ const {
20
+ redirect: shouldRedirect = true,
21
+ redirectTo,
22
+ ...rest
23
+ } = options instanceof FormData ? Object.fromEntries(options) : options
24
+
25
+ const callbackUrl = redirectTo?.toString() ?? headers.get("Referer") ?? "/"
26
+ const signInURL = createActionURL(
27
+ "signin",
28
+ // @ts-expect-error `x-forwarded-proto` is not nullable, next.js sets it by default
29
+ headers.get("x-forwarded-proto"),
30
+ headers,
31
+ process.env,
32
+ config
33
+ )
34
+
35
+ if (!provider) {
36
+ signInURL.searchParams.append("callbackUrl", callbackUrl)
37
+ if (shouldRedirect) redirect(signInURL.toString())
38
+ return signInURL.toString()
39
+ }
40
+
41
+ let url = `${signInURL}/${provider}?${new URLSearchParams(
42
+ authorizationParams
43
+ )}`
44
+ let foundProvider: { id?: SignInParams[0]; type?: ProviderType } = {}
45
+
46
+ for (const providerConfig of config.providers) {
47
+ const { options, ...defaults } =
48
+ typeof providerConfig === "function" ? providerConfig() : providerConfig
49
+ const id = (options?.id as string | undefined) ?? defaults.id
50
+ if (id === provider) {
51
+ foundProvider = {
52
+ id,
53
+ type: (options?.type as ProviderType | undefined) ?? defaults.type,
54
+ }
55
+ break
56
+ }
57
+ }
58
+
59
+ if (!foundProvider.id) {
60
+ const url = `${signInURL}?${new URLSearchParams({ callbackUrl })}`
61
+ if (shouldRedirect) redirect(url)
62
+ return url
63
+ }
64
+
65
+ if (foundProvider.type === "credentials") {
66
+ url = url.replace("signin", "callback")
67
+ }
68
+
69
+ headers.set("Content-Type", "application/x-www-form-urlencoded")
70
+ const body = new URLSearchParams({ ...rest, callbackUrl })
71
+ const req = new Request(url, { method: "POST", headers, body })
72
+ const res = await Auth(req, { ...config, raw, skipCSRFCheck })
73
+
74
+ const cookieJar = await cookies()
75
+ for (const c of res?.cookies ?? []) cookieJar.set(c.name, c.value, c.options)
76
+
77
+ const responseUrl =
78
+ res instanceof Response ? res.headers.get("Location") : res.redirect
79
+
80
+ // NOTE: if for some unexpected reason the responseUrl is not set,
81
+ // we redirect to the original url
82
+ const redirectUrl = responseUrl ?? url
83
+
84
+ if (shouldRedirect) return redirect(redirectUrl)
85
+
86
+ return redirectUrl as any
87
+ }
88
+
89
+ type SignOutParams = Parameters<MulGuardResult["signOut"]>
90
+ export async function signOut(
91
+ options: SignOutParams[0],
92
+ config: MulGuardConfig
93
+ ) {
94
+ const headers = new Headers(await nextHeaders())
95
+ headers.set("Content-Type", "application/x-www-form-urlencoded")
96
+
97
+ const url = createActionURL(
98
+ "signout",
99
+ // @ts-expect-error `x-forwarded-proto` is not nullable, next.js sets it by default
100
+ headers.get("x-forwarded-proto"),
101
+ headers,
102
+ process.env,
103
+ config
104
+ )
105
+ const callbackUrl = options?.redirectTo ?? headers.get("Referer") ?? "/"
106
+ const body = new URLSearchParams({ callbackUrl })
107
+ const req = new Request(url, { method: "POST", headers, body })
108
+
109
+ const res = await Auth(req, { ...config, raw, skipCSRFCheck })
110
+
111
+ const cookieJar = await cookies()
112
+ for (const c of res?.cookies ?? []) cookieJar.set(c.name, c.value, c.options)
113
+
114
+ if (options?.redirect ?? true) return redirect(res.redirect!)
115
+
116
+ return res as any
117
+ }
118
+
119
+ type UpdateParams = Parameters<MulGuardResult["unstable_update"]>
120
+ export async function update(
121
+ data: UpdateParams[0],
122
+ config: MulGuardConfig
123
+ ): Promise<Session | null> {
124
+ const headers = new Headers(await nextHeaders())
125
+ headers.set("Content-Type", "application/json")
126
+
127
+ const url = createActionURL(
128
+ "session",
129
+ // @ts-expect-error `x-forwarded-proto` is not nullable, next.js sets it by default
130
+ headers.get("x-forwarded-proto"),
131
+ headers,
132
+ process.env,
133
+ config
134
+ )
135
+ const body = JSON.stringify({ data })
136
+ const req = new Request(url, { method: "POST", headers, body })
137
+
138
+ const res: any = await Auth(req, { ...config, raw, skipCSRFCheck })
139
+
140
+ const cookieJar = await cookies()
141
+ for (const c of res?.cookies ?? []) cookieJar.set(c.name, c.value, c.options)
142
+
143
+ return res.body
144
+ }